您的位置: proteus仿真社区 >> 论坛 >> 单片机仿真 >> 查看帖子
字体: 小 中 大 | 打印 发表于: 2008-7-16 23:19 作者: tssing 来源: proteus仿真社区
QUOTE:
原帖由 tssing 于 2008-7-16 23:19 发表 TH0 = (65535-50000)/256; TL0 = (65535-50000)%256; 这样是50ms运行一次 TH0 = (65535-30000)/256; TL0 = (65535-30000)%256; 这样呢,,,怎么理解,,,奇怪也,,
原帖由 tssing 于 2008-7-16 23:51 发表 0x10000 - 10000为什么会变成10ms
最新回复
budhy (2008-7-16 23:30:42)
QUOTE:
应该不是65535 而是65536 =(0x10000), 现在可以理解了吧?tssing (2008-7-16 23:43:27)
还是不理解,,
还是不理解,,
tssing (2008-7-16 23:51:01)
budhy (2008-7-17 00:46:51)
QUOTE:
tssing (2008-7-17 01:16:57)
ybzjllj (2008-7-17 08:26:07)
TL0 = (65535-50000)%256;
严格地说这不叫50ms中断一次
这叫50000个机器周期定时器0溢出一次.如果开启了T0中断,就是50000个机器周期中断一次.
只不过12M的晶振,刚好一个机器周期1us,所以才有了50ms的说法.如果时钟是24M,那就是25ms了.
TH与TL连接成一个16位计数器,定时方式时每个机器周期计数器加1,达到0x10000(也就是65536)时溢出中断.
如果从0开始计数就要65536us,为了便于计算,通常给一个"初值",假设初值是15536,那么,还差50000个机器周期就溢出.15536=(65536-50000),就有了这个减法算式,但定时器是两个8位(TH,TL)组成的,所以要把15536分解成高8位和低8位.于是:
TH0=15536/0x100;//取高8位(即TH0=(65536-50000)/256)
TL0-15536%0x100;//取低8位(即TL0=(65536-50000)%256)
ybzjllj (2008-7-17 08:38:12)
如果已经有了35536的水,那么还差30000的水:35536+30000=65536 就满到溢出.
反过来,如果希望装20000的水就溢出,那么水缸里得先装上多少水呢? 即:65536-20000=45536;
这个值就是定时器的初值.
还要根据时钟频率换算才能得到真正的时间: 初值*12/f
小魏 (2008-7-26 21:14:16)
好东西 好动西
好东西 好动西
好东西 好动西
好东西 好动西
小魏 (2008-7-26 21:16:05)
好东西 好动西
好东西 好动西
好东西 好动西
好东西 好动西