急,请马老师看看?为什么会先中断.我在线的
我用的外部中断1,程序如下:#include<avr/io.h>
#include<avr/signal.h>
#include<avr/interrupt.h>
#define uchar unsigned char
#define uint unsigned int
void port_init(void)
{
DDRD=_BV(PD3);
PORTD=0xFF;
}
SIGNAL(SIG_INTERRUPT1)
{
显示数字3 ;//我自己的函数,没有问题
delay2(9000);
}
int main(void)
{
port_init();
MCUCR=0X00;
EIMSK=0x02;//使能中断1
EICRA=0x00;//低电平触发
EIFR=0x00;//清中断1标志
delay2(20);
SREG=0X80;
while(1)
{
显示数字2;//我自己的函数,没有问题
delay2(2000);
}
}
开机后先显示数字3,然后显示2.我用的是GCC编译 估计你 /INT1 口一直为低电平, 程序执行到
.......
EIMSK=0x02;//使能中断1
EICRA=0x00;//低电平触发
EIFR=0x00;//清中断1标志
已能响应中断了!
在执行下面的程序时,
delay2(20);
响应中断, 执行中断响应程序时,
故先显示数字3, 然后显示2 。 EICRA=0x00;//低电平触发 ====>一般情况下,建议不要使用电平中断
EIFR=0x00;//清中断1标志 ====>电平中断是不产生中断标志位的,只要INT1为低电平,就申请中断
delay2(20);
SREG=0X80; ====>这里开中断
while(1) ====>这里至少需要执行一句判断指令,那么然后就进入中断了,(只要INT1为低电平)
问题和错误多多,请认真踏实学习,打好基础. 谢谢马老师指点
页:
[1]