| 如果误差超过0.5%就是你的程序有问题,把你的程序贴出来,包括定时器设置函数,定时器中断函数,单片机主频。 |
T0m 发表于 2024-5-15 22:17 逻辑分析仪里面通常有个晶振,准确度与该晶振有关。 |
|
直接做软件定时器吧,用逻辑分析仪抓一抓时间,或者改改值. |
|
void Timer0_Isr(void) interrupt 1 { } void Timer0_Init(void) //50毫秒@11.0592MHz { AUXR &= 0x7F; //定时器时钟12T模式 TMOD &= 0xF0; //设置定时器模式 TL0 = 0x00; //设置定时初始值 TH0 = 0x4C; //设置定时初始值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 ET0 = 1; //使能定时器0中断 } 建议用12T模式,50毫秒@11.0592MHz,每秒只进中断20次,频率要设置成11.0592MHz |
|
自动重载初值,不要用手动重载,溢出了会自己装进去,中断里不要赋值TH0,TL0寄存器。 加误差补偿处理且使用外部晶振,1个月误差不到1分钟的都有。 |
这一生只为你 发表于 2024-5-15 08:50 这么大的误差会不会是初始化配置就有问题?可以用示波器看下定时1MS实际测试是多少? |
这一生只为你 发表于 2024-5-15 08:50 单靠程序片段看不出毛病在哪 |
rayin 发表于 2024-5-15 07:28 我不需要特别高的精度,电路很简单,我只需要延时十分钟,可接受误差在一分钟以内就好。 |
hhh402 发表于 2024-5-15 00:19 可不止,十秒的误差都有两三秒了,你说的那些误差都在可接受范围内,我这里的误差根本没法用啊。。。 |
| 而且每次刷机设置的都不太一样,要精确定时还是得外部晶振 |
| 单片机的晶振是相对精确而已, 要提高精度就要用realtime IC: DS12C887 等 ; 要求更高就用天线接GPS的授时信号. |
误差很大,具体是多大?STC单片机主频误差0.5%,所以误差0.5%以内是正常的,1小时误差0.5%=18S,24小时误差=18*24=432秒。只要在这个范围内是正常的。![]() |