middfat 发表于 2017-3-1 20:42 我是用的 定时器0 中断函数 实现计时的,50MS一计数,20计数为1秒,我实验了一下,26分钟,慢了87秒。平均慢3.34秒/分钟。 可以通过减少定时器初值,缩短定时器,计数周期的方法,提高走时速度吧?大家遇到这种情况,都 是怎样处理的? 请教了。 |
在晶振的两只脚加上30PF左右的电容,对地。快了则加大电容容量,慢了则减小 |
学习了, |
csz9981 发表于 2017-2-26 21:22 应该是你用了国产的1302,再使用了12pF的晶振的关系。这个情况我碰到两次,都是在晶振引脚对地加一个小电容解决的。一次加了30p的(那时候没有再小得了),另一次加12p的。都能把精度提高到1分钟/月的级别。 |
admin 发表于 2017-2-27 00:27 应该是你用了国产的1302,再使用了12pF的晶振的关系。这个情况我碰到两次,都是在晶振引脚对地加一个小电容解决的。一次加了30p的(那时候没有再小得了),另一次加12p的。都能把精度提高到1分钟/月的级别。 |
admin 发表于 2017-2-27 00:27 #ifndef __LCD_H_ #define __LCD_H_ /********************************** 当使用的是4位数据传输的时候定义, 使用8位取消这个定义 **********************************/ #define LCD1602_4PINS /********************************** 包含头文件 **********************************/ #include<reg51.h> //---重定义关键词---// #ifndef uchar #define uchar unsigned char #endif #ifndef uint #define uint unsigned int #endif /********************************** PIN口定义 **********************************/ #define LCD1602_DATAPINS P0 sbit LCD1602_E=P2^7; sbit LCD1602_RW=P2^5; sbit LCD1602_RS=P2^6; /********************************** 函数声明 **********************************/ /*在51单片机12MHZ时钟下的延时函数*/ void Lcd1602_Delay1ms(uint c); //误差 0us /*LCD1602写入8位命令子函数*/ void LcdWriteCom(uchar com); /*LCD1602写入8位数据子函数*/ void LcdWriteData(uchar dat) ; /*LCD1602初始化子程序*/ void LcdInit(); #endif |
慢了好几分钟,可能是由晶振的误差导致的。你可以在软件中进行补偿。楼主 lcd.h 能帖出来一下吗? |
我把这个 程序 在实验板上运行了4个小时,感觉慢了好几分钟,请大家看看,误差产生在哪里? |