51单片机定时时间如何校正?
想写个准确的 定时程序,可是走走走时间会有误差.请教高手指点.
全部回复(9)
正序查看
倒序查看
现在还没有回复呢,说说你的想法
@水石头草
多谢,我就是不清楚:“响应定时中断,重写定时数前,要读出定时器中的数”这句话的意思,请大师解释详细点.
51系列的定时器作为16位使用时,定时数据不会自动写入,要编段程序来写.
有段时间没干这个了,印象中是加一计数,就是一直加到0000H发出中断信号.
比如假设你每次定时的数据是20000,重写入的数就是65536-20000,这就是你每次响应定时器中断要重写入定时器的数.因为只能两个八位分别写入,这45536要转换成16进制的高低两个字节.
定时器发出中断后还继续在加一,也许到你响应中断时已经加到了000CH,那么你就读出这个0CH加到45536的低字节上(对于你的20000来说就是减),再写入定时器.当然这要保证你响应中断不会太迟,如果有可能太迟定时器计数可能进位到高字节,这样就要把高低字节都读出加到45536上.
有段时间没干这个了,印象中是加一计数,就是一直加到0000H发出中断信号.
比如假设你每次定时的数据是20000,重写入的数就是65536-20000,这就是你每次响应定时器中断要重写入定时器的数.因为只能两个八位分别写入,这45536要转换成16进制的高低两个字节.
定时器发出中断后还继续在加一,也许到你响应中断时已经加到了000CH,那么你就读出这个0CH加到45536的低字节上(对于你的20000来说就是减),再写入定时器.当然这要保证你响应中断不会太迟,如果有可能太迟定时器计数可能进位到高字节,这样就要把高低字节都读出加到45536上.
0
回复
提示
@njyd
51系列的定时器作为16位使用时,定时数据不会自动写入,要编段程序来写.有段时间没干这个了,印象中是加一计数,就是一直加到0000H发出中断信号.比如假设你每次定时的数据是20000,重写入的数就是65536-20000,这就是你每次响应定时器中断要重写入定时器的数.因为只能两个八位分别写入,这45536要转换成16进制的高低两个字节. 定时器发出中断后还继续在加一,也许到你响应中断时已经加到了000CH,那么你就读出这个0CH加到45536的低字节上(对于你的20000来说就是减),再写入定时器.当然这要保证你响应中断不会太迟,如果有可能太迟定时器计数可能进位到高字节,这样就要把高低字节都读出加到45536上.
老大能不能举个例,写个小程序说明一下呢?
0
回复
提示
@水石头草
老大能不能举个例,写个小程序说明一下呢?
XX: PUSH PSW ;计时中断
MOV PSW,#8 ;设置工作寄存器1区
PUSH ACC
CLR TR0 ;停止定时器计数,以防止操作过程中定时器低位向高位进位.
MOV A,#DSL ;读出定时数据低八位
ADD A,TL0 ;加上定时器中低八位数据
MOV TL0,A ;写入定时器低八位
MOV A,#DSH ;读出定时数据高八位
ADDC A,TH0 ;加上定时器中低八位数据,带低八位相加后的进位
MOV TH0,A ;重置定时数高八位
SETB TR0 ;重启定时器计数
……
……
RETI
因这这段操作也要占用时间,但只要把定时器中断定为最高级,这段时间是固定的,只要调整一下计算所得的定时数据就行了.
用51的定时器计时精度还是有限的,取决于晶振频率,频率越低精度越差,但用此方法可以在此限制下最大限度地提高计时精度.
MOV PSW,#8 ;设置工作寄存器1区
PUSH ACC
CLR TR0 ;停止定时器计数,以防止操作过程中定时器低位向高位进位.
MOV A,#DSL ;读出定时数据低八位
ADD A,TL0 ;加上定时器中低八位数据
MOV TL0,A ;写入定时器低八位
MOV A,#DSH ;读出定时数据高八位
ADDC A,TH0 ;加上定时器中低八位数据,带低八位相加后的进位
MOV TH0,A ;重置定时数高八位
SETB TR0 ;重启定时器计数
……
……
RETI
因这这段操作也要占用时间,但只要把定时器中断定为最高级,这段时间是固定的,只要调整一下计算所得的定时数据就行了.
用51的定时器计时精度还是有限的,取决于晶振频率,频率越低精度越差,但用此方法可以在此限制下最大限度地提高计时精度.
0
回复
提示
@njyd
XX: PUSHPSW ;计时中断 MOVPSW,#8 ;设置工作寄存器1区 PUSHACC CLRTR0 ;停止定时器计数,以防止操作过程中定时器低位向高位进位. MOVA,#DSL ;读出定时数据低八位 ADDA,TL0 ;加上定时器中低八位数据 MOVTL0,A ;写入定时器低八位 MOVA,#DSH ;读出定时数据高八位 ADDCA,TH0 ;加上定时器中低八位数据,带低八位相加后的进位 MOVTH0,A ;重置定时数高八位 SETBTR0 ;重启定时器计数 …… …… RETI 因这这段操作也要占用时间,但只要把定时器中断定为最高级,这段时间是固定的,只要调整一下计算所得的定时数据就行了. 用51的定时器计时精度还是有限的,取决于晶振频率,频率越低精度越差,但用此方法可以在此限制下最大限度地提高计时精度.
顶,终于能吃透,多谢大虾们.多谢.
0
回复
提示