#include<reg52.h>
unsigned char a, num;
sbit LED1 = P1^0;
void main()
{
num=0;
EA=1;
ET0=1;
//IT0=0;
//设置TMOD的工作模式
TMOD=0x01;
//给定时器装初值,50000,50ms中断20次,就得到1s
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1; // 定时器/计数器启动
while(1)
{
if(20==num)
{
num=0;
LED1=~LED1; //取反,也就是闪烁
}
}
}
//中断服务程序
void ext0() interrupt 1 // 1 表示的是定时器1
{
//重新设置预装数值
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
//循环次数加1
num++;
}
初始化程序完成如下工作:
1、对TMOD赋值,以确定T0和T1的工作方式:
我们使用的是定时器/计数器0,那么高4位是0,低4位中GATE=0,C/T位为0,M1和M2的值是01,我们正常采用的是16位定时/计数器。所以各位的值是00000001,十六进制是0x01。
那么:
TMOD=0x01
2、计算初值,将其写入TH0、TL0或TH1、TL1:
TH0=(65536-50000)/ 256;
TL0=(65536-50000)%256;
这个可以得到50ms。
我们在代码中再使用num进行计数循环20次,就得到1s。
3、使用TR0或者TR1置位,启动定时/计数器定时或者计数。
TR0=1
说明:在TCON中,TR0是运行控制位。TR0置1的时候,启动定时/计数器。
4、中断方式时,则对IE进行赋值,开放中断。
EA=1
ET0=1
两个值打开即可,跟IT0什么的没有关系,只要顺着红线看过去即可。