zfgege 发表于 2006-11-14 08:18:42

急,请马老师看看?为什么会先中断.我在线的

我用的外部中断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编译

cnshyl 发表于 2008-1-9 21:45:54

估计你 /INT1 口一直为低电平, 程序执行到
.......
EIMSK=0x02;//使能中断1   
EICRA=0x00;//低电平触发   
EIFR=0x00;//清中断1标志   

已能响应中断了!
在执行下面的程序时,

delay2(20);   

响应中断, 执行中断响应程序时,
故先显示数字3, 然后显示2 。

machao 发表于 2008-1-9 22:32:32

EICRA=0x00;//低电平触发      ====>一般情况下,建议不要使用电平中断
EIFR=0x00;//清中断1标志      ====>电平中断是不产生中断标志位的,只要INT1为低电平,就申请中断
delay2(20);   
SREG=0X80;                   ====>这里开中断
while(1)                     ====>这里至少需要执行一句判断指令,那么然后就进入中断了,(只要INT1为低电平)

问题和错误多多,请认真踏实学习,打好基础.

cnshyl 发表于 2008-1-11 19:10:47

谢谢马老师指点
页: [1]
查看完整版本: 急,请马老师看看?为什么会先中断.我在线的