- 打卡等级:以坛为家II
- 打卡总天数:445
- 最近打卡:2025-04-30 07:32:43
金牌会员
- 积分
- 1654
|
发表于 2024-6-13 09:41:17
|
显示全部楼层
楼主,你这个是定时10ms(0.01S)进一次中断程序,每累计100次*10ms达到1S定时。
根据手册上定时周期的计算公式,定时周期=((65536-[TH0,TL0])*12)/SYSclk,TM0PS=0,进行公式变换后,得到[TH0,TL0]=65536-((定时周期*SYSclk)/12)。
将定时周期0.01S代入公式,得到[TH0,TL0]=56320,换成十六进制为0xDC00。
按照楼主计算公式:
#define Timer0_Reload (65536UL -(MAIN_Fosc / 1105))
Timer0_Reload =65536-(11059200/1105) = 65536-10008 = 55528,换成十六进制为0xD8E8
定时不准确的原因还是在于楼主计算自动重载值 [TH0,TL0] 计算方式错误导致时间有误差。
改成:#define Timer0_Reload 65536-((0.01*SYSclk)/12) 就可以了。
如果对于手册上定时器的内容不是特别掌握,建议直接去ISP工具的定时器计算器输入时间可以直接得到代码。
|
-
手册计算公式
-
自己做个表格也可以得到重载值
|