- 打卡等级:以坛为家II
- 打卡总天数:497
- 最近打卡:2025-04-30 20:48:13
已绑定手机
金牌会员
- 积分
- 1196
|
本帖最后由 380091044 于 2023-11-28 11:27 编辑
modbus通信超时检测由定时器T0改成定时器T3,通信速度变很慢?
定时器T0初始化如下:
//===============T0初始化函数====================
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; //值过大, 返回错误
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位自动重装,
TR0 = 1; //开始运行
return 0;
}
定时器T3初始化如下:、
//===============T3初始化函数====================
u8 Timer3_Config(u8 t, u32 reload) //
{
//T3为固定16位自动重装;
T4T3M &= 0xf2;//停止计数, 清除控制位
if(t != 0) reload = (u32)(((float)MAIN_Fosc * (float)reload)/1000000UL); //重装的是时间(us), 计算所需要的系统时钟数.
if(reload >= (65536UL * 12)) return 1; //值过大, 返回错误
if(reload < 65536UL) T4T3M |= 0x02;//1T mode
else//reload >= 65536UL)
{
T4T3M &= 0xFD;//12T mode;第一位清零是12T模式,其他保持不变;
reload = reload / 12;
}
reload = 65536UL - reload;
TH0 = (u8)(reload >> 8);
TL0 = (u8)(reload);
T4T3M &= 0xf2;//
T4T3M |= 0x08;//开始运行
IE2 |= 0x20;//允许中断
return 0;
}
定时器计算公式影响的?
|
|