背靠大树好乘凉 发表于 2023-11-27 10:49:51

求助:modbus例程中为什么定时器0 20000次/秒?(没有更改代码)

本帖最后由 背靠大树好乘凉 于 2023-11-27 16:51 编辑

为什么 MAIN_Fosc/10000 是20000次/秒,而不是10000次/秒?
(stc32附录MODBUS-----------------没有更改代码)
#define MAIN_Fosc 11059200L //定义主时钟
Timer0_Config(0, MAIN_Fosc / 10000); //t=0: reload 值是主时钟周期数, (中断频率, 20000 次/秒)

u8 Timer0_Config(u8 t, u32 reload) //t=0: reload 值是主时钟周期数, t=1: reload 值是时间(单位 us)
{
      TR0 = 0; //停止计数
      if(t != 0) reload = (u32)(((float)MAIN_Fosc * (float)reload)/1000000UL); //重装的是时间(us), 计算所需要的系统时钟数.
      if(reload >= (65536UL * 12)) return 1; //值过大, 返回错误 786,432
      if(reload < 65536UL) AUXR |= 0x80; //1T mode
      else{
                AUXR &= ~0x80; //12T mode
                reload = reload / 12;
                }
      reload = 65536UL - reload;
      TH0 = (u8)(reload >> 8);
      TL0 = (u8)(reload);
      ET0 = 1; //允许中断
      TMOD &=0xf0;
      TMOD |= 0; //工作模式, 0: 16 位自动重装, 1: 16 位定时/计数, 2: 8 位自动重装, 3: 16 位自动重装,不可屏蔽中断
      TR0 = 1; //开始运行
      return 0;
}

计算 :
         MAIN_Fosc / 10000 = 1105    使用1T模式
         reload = 65536UL - (MAIN_Fosc / 10000)
                  = 65536   -MAIN_Fosc*定时时间   
为什么是20000次/秒,而不是10000次/秒?


乘风飞扬 发表于 2023-11-27 18:50:25

注释错误,是10000次/秒。

背靠大树好乘凉 发表于 2023-11-28 10:47:27

乘风飞扬 发表于 2023-11-27 18:50
注释错误,是10000次/秒。

谢谢您,这个地方怎么想都想不明白,感觉这里有问题,却担心水平低遗漏了什么。

JackLaw666 发表于 2023-11-28 15:00:21

向高手学习{:4_196:}

开物 发表于 2024-1-21 19:34:10

手册里面还是有很多注释错误的地方~
页: [1]
查看完整版本: 求助:modbus例程中为什么定时器0 20000次/秒?(没有更改代码)