|
我在外中断0中,使能GICR|=0x80;//外部中断1使能
是不是不能这样做,或者要注意什么被遗漏了
程序思路:当外部信号0下降沿到来后触发外部中断0。中断0服务程序中,使能3ms超时定时器(监控外部信号1是否超时),同时使能外部中断1当外部信号1上升沿到来后触发。实际信号:外部信号0下降沿到来后,大概过1.8ms,出现外部信号1的上升沿,这个时间很稳定。
调试程序时通过标志位观察当外部信号0刚到来延时几6us,标志位就翻转了,按理说应该在中断1中经过至少1.8ms才翻转!
中断0,和中断1都单独测试过没有问题
#pragma vector=INT0_vect //外部中断0 下降沿中断 接外部信号0
__interrupt void INT0_fun(void)
{
GICR &=0xbf;//关闭外部中断0使能
TCNT0=256-94;//3ms 定时
TIMSK |=0x01;//使能定时器0中断
TCCR0=0x04;//定时器0时钟 clksys/256 (clksys=8M) 同时启动定时器0
GICR|=0x80;//外部中断1使能
}
#pragma vector=INT1_vect //外部中断1上升沿中断 接外部信号1
__interrupt void INT1_fun(void)
{
if(!ovr_3ms)
{
NEG_BIT(PORTB,0);//调试观察
TCCR0=0x00;//关闭定时器0
GICR &=0x7f;//关闭外部中断1
}
else
{
TCCR0=0x00;//关闭定时器0
GICR &=0x7f;//关闭外部中断1
}
}
主程序:
SREG &=0x7f;//关全局中断使能
MCUCR |=0x02;//设置INT0下降沿中断 LCD com笔段
MCUCR |=0x0c;//设置INT1上升沿中断 LCD s5笔段
SREG |=0x80;//打开全局中断使能
。。。
。。。
GICR|=0x40;//外部中断0使能 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|