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

定时计数器

时间:10-02 整理:3721RD 点击:
一个12MHZ的晶振,工作于方式1(16位),要定时1毫秒,那计数初值怎么算,我知道此时的机器周期为12/fosc=1微秒,根据公式设初值为X,(2的16次方-X)*1微秒=1000微秒,那X=64536,化为16进制FC18,则TH=OXFC;TL=OX18,但好像不对人家怎么是TH=-1000/256;TL=-1000%256?

th是高位。tl是低位     在单片机中4个二进制是一个16进制数

"TH=-1000/256;TL=-1000%256?"这个的出处在那里?你的那种算法没有问题的额,比如我要是定时一个50ms的程序那么初值TH0=(65536-50000)%256,TL0=(65536-50000)/256,其实和你的那个数案发是一样的。你说的那个在那里看到的。我去看看?你看1000前边还有一个“-”不知道是你没写好还是他是那样的,肯定不对啦。

定时一微妙的话你可一用“_nop_()”这个函数就是一个机器周期。不就是你的一微妙么。

哦 忘记给你说了记得带上#include<intrins.h>头文件。在内部主函数中直接用_nop_();就可以了

有没有误差控制在1ms内的计时器啊

定时 1ms 用TH0=-1000/256; TL0=-1000%256;这个写法等同于三楼的TH0=(65536-1000)/256;TL0=(65536-1000)%256;这两种写法是完全等效的再C51编程中。后者更好理解,要定时1000个机器周期,,,16位可以表示65536个状态,相减就是初值。前者是一样的。写习惯了 一般会用前者。

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

网站地图

Top