#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次,就得到1sTH0=(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;//循环次数加1num++;
}
初始化程序完成如下工作:
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什么的没有关系,只要顺着红线看过去即可。