定时器计算困惑,,请帮忙


TH0 = (65535-50000)/256;
TL0 = (65535-50000)%256;

这样是50ms运行一次

TH0 = (65535-30000)/256;
TL0 = (65535-30000)%256;

这样呢,,,怎么理解,,,奇怪也,,

我也来说两句 查看全部回复

最新回复

  • budhy (2008-7-16 23:30:42)

    QUOTE:

    原帖由 tssing 于 2008-7-16 23:19 发表
    TH0 = (65535-50000)/256;
    TL0 = (65535-50000)%256;

    这样是50ms运行一次

    TH0 = (65535-30000)/256;
    TL0 = (65535-30000)%256;

    这样呢,,,怎么理解,,,奇怪也,,
    应该不是65535 而是65536 =(0x10000), 现在可以理解了吧?
  • tssing (2008-7-16 23:43:27)

    还是不理解,,
    还是不理解,,
    还是不理解,,
  • tssing (2008-7-16 23:51:01)

    0x10000 - 10000为什么会变成10ms
  • budhy (2008-7-17 00:46:51)

    QUOTE:

    原帖由 tssing 于 2008-7-16 23:51 发表
    0x10000 - 10000为什么会变成10ms
    • MCS51 的定时器是个 Count Up Counter (不知中文怎么写?),要是它的初始值是 -10,10 微妙 (uS)后 TF(Timer Flag)变为 ‘1’。要是它的初始值是 -10000,10000 微妙 (uS)否则 10 毫秒 (mS)后 TF(Timer Flag)变为 ‘1’。(比方说 MCS51 的工作频率是 12 MHz)
    • MCS51 的定时器是两个字节长,0x0000 到 0xFFFF,过了 0xFFFF 就是0x10000。
    • 那么用 C 语言怎样表明 -10000 的二字节数据呢?===〉0x10000 - 10000
  • tssing (2008-7-17 01:16:57)

    全部收获,,,,谢谢,,非常明白,,这些可能我看书很难看懂,,,
  • ybzjllj (2008-7-17 08:26:07)

    TH0 = (65535-50000)/256;
    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)

    定时器就像一个水缸,如果水缸里没有水,要装65536的水就溢出了,但如果水缸里已经有了些水,就要不了那么多了.

    如果已经有了35536的水,那么还差30000的水:35536+30000=65536 就满到溢出.

    反过来,如果希望装20000的水就溢出,那么水缸里得先装上多少水呢?    即:65536-20000=45536;
    这个值就是定时器的初值.

    还要根据时钟频率换算才能得到真正的时间:       初值*12/f
  • 小魏 (2008-7-26 21:14:16)

    好东西 好动西        
    好东西 好动西        
    好东西 好动西        
    好东西 好动西        
    好东西 好动西        
  • 小魏 (2008-7-26 21:16:05)

    好东西 好动西        
    好东西 好动西        
    好东西 好动西        
    好东西 好动西        
    好东西 好动西