打印

请教大伙51单片机定时错误

[复制链接]
1666|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Wayner|  楼主 | 2013-9-1 11:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Wayner 于 2013-9-1 11:24 编辑

请教各位DX:
      用89C2051单片机实现精确的延时,用T0定时器中断来实现,发现有时会刚好写TH0/TL0时已发生溢出,造成有时会误差255us,该怎么办?有好的思路吗?
定时时间在240us到1050us之间。
下面是中断程序
//单片机晶振用12MHz
void Timer0ISR(void) interrupt 1 using 2
{
TH0 = cTH_val;
TL0 += cTL_val;    //TF0标志进入定时器中断后,硬件自动清零
cSTATE ++;
bSET_OK = 0;
}

谢谢!

相关帖子

沙发
crazy2012| | 2013-9-1 11:21 | 只看该作者
TL0 += cTL_val

使用特权

评论回复
板凳
gx_huang| | 2013-9-1 13:23 | 只看该作者
TL0可能有进位,有进位,则TH0要减1吧。
比如TH0/TL0溢出,变成0X0000,进入中断,需要一些时间,TL0可能是2或者5之类的,
如果cTL_val值接近255,则会溢出。

使用特权

评论回复
地板
ZG11211| | 2013-9-1 16:24 | 只看该作者
中断里面还会溢出?

使用特权

评论回复
5
gx_huang| | 2013-9-1 19:12 | 只看该作者
ZG11211 发表于 2013-9-1 16:24
中断里面还会溢出?

老弟,看仔细一点,是加法运算溢出(有进位)。

使用特权

评论回复
6
Wayner|  楼主 | 2013-9-1 19:58 | 只看该作者
是的,可能是“是加法运算溢出(有进位)”造成的。如我预定的时间是1036us,实际是1292us,比预定的多了256us。但有时很好。
请问你们是怎么处理的?
谢谢回复

使用特权

评论回复
7
gx_huang| | 2013-9-2 08:17 | 只看该作者
1036=0x040c,不太可能出现进位溢出的。
难道你这个定时器不是最高优先级的,进了这个定时器,被其它中断打断很长时间?

处理进位的方法很多,纯粹数学的问题。

使用特权

评论回复
8
libaiwei| | 2013-9-2 11:12 | 只看该作者
:(

使用特权

评论回复
9
ayb_ice| | 2013-9-2 11:47 | 只看该作者
停止计时,关中断,调整重装载值

或用自动重装载功能,多次计时

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

848

帖子

1

粉丝