|
发表于 2014-5-15 09:44:46
|
显示全部楼层
本帖最后由 machao 于 2014-5-15 09:48 编辑
你中断触发方式选择错误,通常应该使用边沿触发方式,而电平触发方式通常只是应用于掉电唤醒的应用(处理程序需要特殊设计的)。
说实话,对于没有基础或者基础比较薄弱的讲,通过自学的方式来掌握MCU的应用,是非常艰难和痛苦的过程。表面的东西看似非常容易掌握,设计的东西也能动作,但是要达到真正的工程产品需求水平,碰到实际的问题能真正找到原因以及方法去解决的话,是必须要踏踏实实的从基础的学习的。因为MCU应用技术是“阳春白雪”和“下里巴人”的结合体。
下面给点参考资料:
1. 器件手册的说明提示(英文原文的,注意最后一句话)
External Interrupts
The External Interrupts are triggered by the INT0, INT1, and INT2 pins. Observe that, if enabled, the interrupts will trigger even if the INT0..2 pins are configured as outputs. This feature provides a way of generating a software interrupt. The external interrupts can be triggered by a falling or rising edge or a low level (INT2 is only an edge triggered interrupt). This is set up as indicated in the specification for the MCU Control Register MCUCR – and MCU Control and Status Register – MCUCSR.
When the external interrupt is enabled and is configured as level triggered (only INT0/INT1), the interrupt will trigger as long as the pin is held low。
2/我出版教程中的一段相关说明(《AVR单片机嵌入式系统原理与应用实践》第二版 P211页 --普通高等教育“十一五”国家级规划教材)
在AVR中(其它MCU也类似),还有个别的中断不带(不设置)中断标志,如配置为低电平触发的外部中断即为此类型的中断。这类中断只要中断条件满足(外部输入低电平),便会一直向MCU发出中断申请。这种外部低电平中断有其特殊性,它不产生中断标志,因此不能悬挂记忆。如果由于等待时间过长而得不到响应,可能会因中断条件结束(低电平取消)而失去一次服务机会。另一方面,如果这个低电平维持时间过长,则会使中断服务完成返回后再次响应,使MCU重复响应同一中断的请求,进行重复服务。因此,在这在类中断的服务程序中,应该有破坏中断条件产生的操作,例如,在低电平中断的服务程序中,使用相应的操作以释放外部器件加在INT引脚上低电平。
低电平中断的重要应用是唤醒处于休眠工作模式的MCU。因为当MCU休眠时,其系统时钟往往处于停止工作状态,使用低电平中断可以将MCU唤醒。而这一功能边沿中断是不能代替的,因为边沿信号的检测需要系统时钟。
|
|