- 打卡等级:常住居民II
- 打卡总天数:88
- 最近打卡:2025-01-10 10:05:14
注册会员
- 积分
- 110
|
本帖最后由 背靠大树好乘凉 于 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次/秒?
|
|