51单片机中断疑问
时间:10-02
整理:3721RD
点击:
郭天祥的书中51单片机中断为什么要二次装初值,不理解?
代码:
实测在main主函数不装初值也是一样的呀?
代码:
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit led1=P1^0;
- uchar num;
- void main(){
- TMOD=0x01;
- TH0=(65536-45872)/256;//装初值
- TL0=(65536-45872)%256;
- EA=1;//打开中断总开关
- ET0=1;//开定时器0中断
- TR0=1;//启动定时器0
- while(1);//程序停止在这里等待中断发生
- }
- void T0_time() interrupt 1{
- TH0=(65536-45872)/256;重装初值11.0592M晶振定时50ms数为45872
- TL0=(65536-45872)%256;
- num++;
- if(num==20){//如果到了20次,说明1秒时间到
- num=0;//然后把num清零,重新再计20次
- led1=~led1;//让发光管状态取反
- }
- }
实测在main主函数不装初值也是一样的呀?
你需要看定时器相关的资料,在使用定时器8位自动重装方式时,是有单片机自动装载初始值的,16位方式就需要在程序里装载。因为每个应用所需要的定时值是不一样的,并不是固定的。
在主程序不装载初始值的话,那么第一次中断的时间就会不是所需要的时间,而从第二次开始,因为在中断里重装了初始值,所以定时时间就会和需要的时间一样,就会看不出主程序不装载初始值时有什么不同