我在ATMega16上写的 外部中断 移植了ucos-II外部中断PD2(INT0)接在一个key上
这样写是有效的
#pragma interrupt_handler ISR_for_int0:iv_INT0
void ISR_for_int0(void)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
OS_ENTER_CRITICAL();
wei_lock = ~wei_lock; ★
OS_ENTER_CRITICAL();
}
其实就带★的一行是有用的 其他的都是系统自带的
我改了一下就不行了 代码如下
void ISR_for_int0(void)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
OS_ENTER_CRITICAL();
if (!(PIND&0x04)) //key按下去了
{
OSTimeDly(OS_TICKS_PER_SEC/200); //延时5ms
if (!(PIND&0x04)) //key真的按下去了 防止抖动
{
wei_lock = ~wei_lock;
while(PIND&0x04); //key抬起来了
}
OSTimeDly(OS_TICKS_PER_SEC/200); //延时5ms
while(PIND&0x04); //真的抬起来了
}
OS_ENTER_CRITICAL();
}
我试了一下,貌似!(PIND&0x04)这个就走不进去,key按下去不就是线与为0么 为什么不行呢?
|