找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2680|回复: 1
打印 上一主题 下一主题
收起左侧

关于单片机中断函数的地方有些不懂 如果不给定时器重新赋初值的话,定时器还有用吗

[复制链接]
跳转到指定楼层
楼主
ID:170919 发表于 2017-5-18 20:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char

  4. sbit D1=P0^7;

  5. uchar sr;
  6. uchar jf;

  7. uchar code table[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,
  8. 19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,
  9. 37,38,39,40,41,42,43,44,45,46,47,48,49};

  10. void light(uchar num);
  11. void delay(uint z);

  12. void main()
  13. {
  14. //设置计数器
  15. //选取计数方式1
  16. TMOD = 0x11;
  17. //给计数器写初值
  18. TH0 = 0;
  19. TL0 = 0;
  20. ////////////////////
  21. //操作单片机
  22. //开启CPU中断
  23. EA = 1;
  24. ///////////////////
  25. //开启定时器T0位中断
  26. ET0 = 1;
  27. //开启计数器
  28. TR0 = 1;
  29. //操作二极管
  30. P1=0;
  31. while(1)
  32. {
  33.   if(sr<50)
  34.    light(sr);
  35.   else sr=0;
  36. }
  37. }
  38. //子函数
  39. void light(uchar num)
  40. {
  41. uchar tme;
  42. D1 = 0;
  43. tme = table[num];
  44. delay(tme);
  45. D1 = 1;
  46. delay(49-tme);
  47. }
  48. //中断函数
  49. void time () interrupt 1
  50. {
  51. //自变量自加
  52. if (jf<2)
  53.   {
  54.    jf++;
  55.    TH0 =0;
  56.    TL0 = 0;
  57.   }

  58. if (jf==2)
  59.   {
  60. //写初值
  61.    jf=0;
  62.    
  63.    TH0 = 254;
  64.    TL0 = 254;
  65.    sr++;
  66.   }
  67. }
  68. void delay(uint z)
  69. {
  70. uint x,y;
  71. for(x=10;x>0;x--)
  72.   for(y=z;y>0;y--);
  73. }
复制代码
程序中的if (jf<2)
{
jf++;
TH0 =0;
TL0 = 0;
}不是很明白,如果不给定时器重新赋初值的话,定时器还有用吗
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:123289 发表于 2017-5-18 20:53 | 只看该作者
其实不管你赋不赋值,TH0、TL0都会有一个值。
楼主提出这个问题,说明未认真研读T0定时器的工作原理,需要先补课。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表