1.晶振频率的误差
假设你用的是这种常用的无源晶振
它的误差±20PPM可以理解为百万分之20,12Mh晶振的标称的误差±240hz,频率范围在11.9976Mhz--12.00024Mhz范围。软件给出的频率是11.956Mhz,差了44Khz,晶振不背锅。
况且你说时钟在变化,那检查一下时钟电路呢?
时钟电路的起振电容有没有给对?
时钟电路设计有没有不合规范?
初值的计算当然按照实际频率计算咯。
2定时器模式
8位重装定时器
定时器的溢出导致TH0 内容载入 TL0,这个是硬件自动处理的,管你在中断干什么操作,也不会干扰到定时器的循环定时的,【中断里有一条指令,耗时1微秒,也就是说每经过250微秒,损失1微秒,放大转换一下,也就是说每经过250秒,损失1秒】说法不成立。
16位定时器手动重装会影响到定时器的精度,但是可以将重装导致的时间差计入定时器初值,避免导致累计误差。
循环定时情况下自动重装比手动重少操心,准一点
中断系统并不会影响到重装的计时模式。
3赞同
4赞同
5.手动重装初值会受到优先级影响,导致时间损失。但自动重装不会影响到。中断定时器中断会在外部中断返回后在执行,重装初值已经在触发中断时做了。影响到的无非时中断响应时间罢了,但是外部中断内容消耗时间太长就另议了。
6.打开顺序
打开中断开关的时差导致不触发中断的情况。
定时器初始化TL0 TH0 TMOD TCON IE相关寄存器操作时间差不多10us左右,小于定时时间,不会导致不触发中断。