定时器问题求教

2019-07-15 18:52发布

DI6MZU]}MOVQ)I(JDOX7C1G.jpg
哪位大神教我一下, 这个定时器采用模式1,16位计数模式,在TH0。TL0的设置中, 怎么初值设置是ox0005,程序得到的TH0和TL0感觉不对呀,

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
zy2014
1楼-- · 2019-07-15 21:54
程序应该在EA=1之后,给TH0、TH1赋初值,如果晶振是12Mhz的话,你的LED灯亮灭一次的周期大约是65ms的时间。肉眼好像观察不出亮灭吧。
beth
2楼-- · 2019-07-16 01:13
 精彩回答 2  元偷偷看……
zy2014
3楼-- · 2019-07-16 02:55
你写的程序,请问你的定时周期是多少呢?

TH0 TL0的大小还跟晶振有关系的。。。。。。
beth
4楼-- · 2019-07-16 04:22
本帖最后由 beth 于 2014-8-7 17:02 编辑
zy2014 发表于 2014-8-7 16:32
你写的程序,请问你的定时周期是多少呢?

TH0 TL0的大小还跟晶振有关系的。。。。。。 ...

我现在用的是12MHZ晶振, 定时周期如果为65ms那么我算出的TH0=0x02
     TL0=0x17,为什么在实验显示上面,对于设置这个TH0、TL0,闪烁频率变化不是很明显呢
zy2014
5楼-- · 2019-07-16 10:11
  1. #include<reg52.h>
  2. int num;
  3. void main()
  4. {
  5.   TMOD=0x01;
  6.   TH0=(65536-50000)/256; //12M晶振  周期50ms
  7.   TL0=(65536-50000)%256;
  8.   EA=1; //开总中断
  9.   ET0=1;
  10.   TR0=1;
  11.   while(1);
  12. }
  13. void timer0() interrupt 1
  14. {
  15.   TH0=(65536-50000)/256;
  16.   TL0=(65536-50000)%256;
  17.   num++;//进入中断计数器家1
  18.   if(num==20) //20*50ms=1s 1s后led灯反转
  19.   {
  20.     num=0;
  21.     P1^0=~P1^0;
  22.   }
  23. }
复制代码

记事本中写的,没有编译过,看看能不能理解
beth
6楼-- · 2019-07-16 13:23
zy2014 发表于 2014-8-7 17:09
记事本中写的,没有编译过,看看能不能理解

嗯!能理解了,有了 num++;//进入中断计数器家1  if(num==20) //20*50ms=1s 1s后led灯反转
  {
    num=0;
    P10=~P1^0;
  },灯闪烁的就能很明显观察到了,
谢谢!那是不是所有灯闪烁的时候都要加延时呢?偏于观察

一周热门 更多>