微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机中断疑问

51单片机中断疑问

时间:10-02 整理:3721RD 点击:
郭天祥的书中51单片机中断为什么要二次装初值,不理解?
代码:

  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit led1=P1^0;
  5. uchar num;

  6. void main(){

  7. TMOD=0x01;
  8. TH0=(65536-45872)/256;//装初值
  9. TL0=(65536-45872)%256;
  10. EA=1;//打开中断总开关
  11. ET0=1;//开定时器0中断
  12. TR0=1;//启动定时器0
  13. while(1);//程序停止在这里等待中断发生
  14. }

  15. void T0_time() interrupt 1{
  16. TH0=(65536-45872)/256;重装初值11.0592M晶振定时50ms数为45872
  17. TL0=(65536-45872)%256;
  18. num++;
  19. if(num==20){//如果到了20次,说明1秒时间到
  20. num=0;//然后把num清零,重新再计20次
  21. led1=~led1;//让发光管状态取反
  22. }
  23. }

复制代码


实测在main主函数不装初值也是一样的呀?

你需要看定时器相关的资料,在使用定时器8位自动重装方式时,是有单片机自动装载初始值的,16位方式就需要在程序里装载。因为每个应用所需要的定时值是不一样的,并不是固定的。
在主程序不装载初始值的话,那么第一次中断的时间就会不是所需要的时间,而从第二次开始,因为在中断里重装了初始值,所以定时时间就会和需要的时间一样,就会看不出主程序不装载初始值时有什么不同

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top