[AVR单片机] ATMEGA88PA两定时器相互影响

[复制链接]
3678|7
 楼主| liuyanlbg 发表于 2012-10-10 14:31 | 显示全部楼层 |阅读模式
用ATMEGA88PA,用T0定时32us中断,用T2定时64us中断,当两定时器同时工作时,T0的定时中断时间变为40多us了,关掉T2后T0定时正常。可能原因是当在处理T2的定时中断程序时,来了T0中断,需处理完T2的中断程序后才能去处理T0的中断程序,所以导致T0的定时中断出现延迟。T0和T2的中断程序代码已无法缩减了,T0的时序要求很严格,有没有什么办法能够在同时开启T0和T2后确保T0的定时中断时间为32us?ATMEGA88PA几个定时器能否设置中断优先级呢?求救各位大虾!
xdy1927 发表于 2012-10-10 23:09 | 显示全部楼层
T2的优先级优先T0,所以你T0会受到影响,你可以反过来,32US用T2来定。这样就可以保障32US的不受影响。看你的用法是定32US和64US,如果可以的话,你可以用一个定时器来做,软件做一个2分频就可以满足64US了哦。呵呵

评分

参与人数 1威望 +1 收起 理由
okyouwin + 1

查看全部评分

NE5532 发表于 2012-10-11 08:14 | 显示全部楼层
是哈,刚好是倍数的话,直接32uS就解决问题了。
 楼主| liuyanlbg 发表于 2012-10-11 19:38 | 显示全部楼层
二楼,T2和T0反过来也是一样的哦,没有优先级。因为中断程序代码比较多,两个中断代码加起来会超过32us,所以不能放在一个中断里面。
 楼主| liuyanlbg 发表于 2012-10-11 19:38 | 显示全部楼层
二楼,T2和T0反过来也是一样的哦,没有优先级。因为中断程序代码比较多,两个中断代码加起来会超过32us,所以不能放在一个中断里面。
 楼主| liuyanlbg 发表于 2012-10-11 19:40 | 显示全部楼层
T2和T0反过来也是一样的哦,没有优先级。因为中断程序代码比较多,两个中断代码加起来会超过32us,所以不能放在一个中断里面。
dqyubsh 发表于 2012-10-13 00:19 | 显示全部楼层
一个中断塞不下,用两个也不能保证塞得下。这样弄单片机基本累死了,应该重新评估设计方案,至少要改进一下算法。

单片机不是神器,它应该大多数时间都是空闲的,而不是一直忙的要死。
hyhmh 发表于 2012-10-15 14:27 | 显示全部楼层
这是 LZ 编程方法 错误——“中断程序代码比较多”
详细分析, 中断程序 执行时间 必须尽量短。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

59

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部