void init()
{
PORTB|=BIT(2);//将PB2口设置为输入并且置1
DDRB&=~BIT(2);
PCICR=0X01;
PCMSK0=0X40;
PCIFR=0X01;
SREG|=BIT(7);
}
#pragma vector=PCINT0_vect
__interrupt void pcint0_isr(void)
{
}
请问这样的初始化有什么问题么?程序一直进不了中断
PCMSK0=0X40;
对应的是PCINT6,你要设置 PCMSK0=0X04;才是对应PB2/PCINT2吧。
这里就体现出程序风格的重要性了。直接对寄存器赋值常数,是51单片机里常用的做法。在AVRGCC中,常用移位的方式进行设置。比如:
#define mPIN1 PB2
PORTB |= (1<
DDRB &= ~(1<
PCMSK0 |= (1<
这样需要换成PORTB的其他IO时,只要改前面的define就可以了,不用后面程序中的数字,也就不容易出错了。
对的,改过来了还是不能进入中断。我用软件模拟的办法,初始化里面先给PB2口一个高电平,然后给一个低电平。在中断里面写入EEPROM,但是进步了不知道为什么