求助: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次/秒?
注释错误,是10000次/秒。 乘风飞扬 发表于 2023-11-27 18:50
注释错误,是10000次/秒。
谢谢您,这个地方怎么想都想不明白,感觉这里有问题,却担心水平低遗漏了什么。 向高手学习{:4_196:} 手册里面还是有很多注释错误的地方~
页:
[1]