标题: 不明白书上这个定时器的例子,这个初值是怎么算的?怎么就定时了500us呢? [打印本页]

作者: 小糊涂    时间: 2013-6-13 22:55
标题: 不明白书上这个定时器的例子,这个初值是怎么算的?怎么就定时了500us呢?
  1. #include<reg51.h>
  2. sbit p3 = P3^0;
  3. void main(){
  4. TMOD = 0x06; //T0计数器,方式2
  5. TH0 = -250;
  6. TL0 = 255;
  7. TR0 = 1;
  8. while(1){
  9. while(!TF0);
  10. TF0 = 0;
  11. TMOD = 0x02;
  12. p3 = 0;
  13. while(!TF0);
  14. TF0 = 0;
  15. p3 = 1;
  16. TMOD = 0x06;
  17. TL0 = 255;
  18. }
  19. }
复制代码

QQ图片20130613225309.jpg (112.31 KB, 下载次数: 165)

电路图

电路图

QQ图片20130613225329.jpg (56.04 KB, 下载次数: 141)

QQ图片20130613225329.jpg

作者: 小糊涂    时间: 2013-6-13 22:59
题目是这样的的,设计一个波形展宽程序,设P3.4输入低频的窄脉冲信号,要求在p3.4输入发生负条变时,P3.4口输入一个500us的同步脉冲、晶振频率为6MHZ


不明白为什么初值-250是怎么计算出来的?TL0是255,加1次就溢出了,然后TH0装入,从-250加到256,
加上开始TL0加的那一次,一共加了507次,怎么就是能定时500us呢?
纠结好久了。。。。。。
作者: ahshmj    时间: 2013-6-24 21:22
本帖最后由 ahshmj 于 2013-6-25 13:44 编辑

这个中断间隔是0x0500(500h)10进制的1280机器周期。

如下:
举例(12M晶振):
一般写成(汇编):“         MOV   TH0, #(65536-500)/256       ;
                                            MOV   TL0, #(65536-500) MOD 256      ;“


或c语言:                            TH0=(65536-500)/256       ;
                                            TL0=65536-500) %256      ;
比较直观,不用再计算。

作者: livingliving    时间: 2015-4-7 19:00
不懂,但是还是要顶,安抚楼主受伤心灵,每一个新手都是痛苦的开始,快乐的结局




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1