为啥我的int0中断每次时间都不一样啊?
#include <iom16v.h>#include <macros.h>
#pragma interrupt_handler int0:3
unsigned char counter=0,key0=0,key1=0;
void read_key1(void);
void int0()
{CLI();
GICR|=0x00;
PORTB=0X04;
SEI();
}
void main(void)
{CLI ();
DDRB=0xFE;
PORTB=0x01;
GIFR|=0x40;
MCUCR=0x03;
GICR|=0x00;
SEI ();
while(1)
{
read_key1 ();
}
}
void read_key1(void)
{ switch (key1)
{
case 0: // 按键初始态
if ((PINB&0x01)==0)
key1=1;// 键被按下,状态转换到键确认态
break;
case 1: // 按键确认态
if ((PINB&0x01)==0)
{ key1=2; // 状态转换到键释放态
}
else
key1=0;// 按键已抬起,转换到按键初始态
break;
case 2:
if ((PINB&0x01)==1)
{ key1=0;//按键已释放,转换到按键初始态
GICR|=0x40;
}
break;
}
return;
}
我想问一下 我在INT0外部接了一个方波 int0检测上升沿 我用一个开关来使能INT0正常应该我按完开关后 等到检测到上升沿 PB3就是给出高电平 但是每次PB3给出的高电平时间不固定 能帮忙分析一下原因吗 还是买本我写的书吧,我想值的你仔细读的。 我什么时候开中断什么时候就直接跳到中断程序那了 但是我在开完中断之后把INT0标志清零之后为啥还是不可以呢 位置加错了 应该加在开中断的前边 void int0()
{CLI(); <=====画蛇添足
GICR|=0x00;
PORTB=0X04;
SEI(); 《======画蛇添足
} 还有马老师 #pragma interrupt_handler int0:3
在编译的时候 编译器说明上写的应该是这样编#pragma interrupt_handler int0:2
但是编译不过去因为什么啊 void int0()
{CLI();
GICR|=0x00; 《==这句好像没作用吧?????
PORTB=0X04;
SEI();
} 我家这句是想把中断给关掉 这样关不了,有这句跟没这句是一样的!你或上一“0”还是原来的数啊
页:
[1]