定时器问题求教
时间:10-02
整理:3721RD
点击:
![](../imgqa/ele/mcu/mcu-3721rd.com-37276okpbf3lqcxk.jpg)
哪位大神教我一下, 这个定时器采用模式1,16位计数模式,在TH0。TL0的设置中, 怎么初值设置是ox0005,程序得到的TH0和TL0感觉不对呀,
程序应该在EA=1之后,给TH0、TH1赋初值,如果晶振是12Mhz的话,你的LED灯亮灭一次的周期大约是65ms的时间。肉眼好像观察不出亮灭吧。
我想问的是,如果定时周期是65ms。那么TH0=(65535-65000)/256,TL0=(65535-65000)%256, 算的跟程序里面不一样吧。
你写的程序,请问你的定时周期是多少呢?
TH0 TL0的大小还跟晶振有关系的。
我现在用的是12MHZ晶振, 定时周期如果为65ms那么我算出的TH0=0x02
TL0=0x17,为什么在实验显示上面,对于设置这个TH0、TL0,闪烁频率变化不是很明显呢
- #include<reg52.h>
- int num;
- void main()
- {
- TMOD=0x01;
- TH0=(65536-50000)/256; //12M晶振 周期50ms
- TL0=(65536-50000)%256;
- EA=1; //开总中断
- ET0=1;
- TR0=1;
- while(1);
- }
- void timer0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- num++;//进入中断计数器家1
- if(num==20) //20*50ms=1s 1s后led灯反转
- {
- num=0;
- P1^0=~P1^0;
- }
- }
记事本中写的,没有编译过,看看能不能理解
嗯!能理解了,有了 num++;//进入中断计数器家1 if(num==20) //20*50ms=1s 1s后led灯反转
{
num=0;
P10=~P1^0;
},灯闪烁的就能很明显观察到了,
谢谢!那是不是所有灯闪烁的时候都要加延时呢?偏于观察
感谢分享!加油!
因为你的中断时间太短了,没怎么看得出led的变化。
定时时间太短了,TH0 TL0这是16位计时器高低八位最大为2的16次方,如果晶振为12的话最大延时65536UM,你这里设置的是5个UM
ou,明白啦,谢谢