我想配置两个AVR蝶板,PORT D是第一个输出端口,PORT D的两个引脚连接到第二个端口B的B.4和B.5引脚AVR蝴蝶板。我还想在这些端口B引脚上启用上拉电阻。这种配置对于第二个AVR是否正确?有什么东西我不见了吗?
//Init port pins
DDRB = 0x00;
PORTB |= 0X30;
//Enable pin change interrupt on PORTB
PCMSK1 = 0X30;
EIFR = 0XC0;
EIMSK = 0XC0;
SIGNAL(SIG_PIN_CHANGE1) - PIN B.4的引脚更改中断 {..} SIGNAL(SIG_PIN_CHANGE2) - PIN B.5的引脚更改中断 {.....}
答案 0 :(得分:1)
您已正确设置了PORT B,但稍微提高编码惯例并没有什么坏处。
DDRB&= ~(1<<PB0)|(1<<PB1);
PORTB|= (1<<PB0)|(1<<PB1);
除非我错过了解你想要完成的事情,否则我认为你的中断配置不正确。
PB4 和 PB5 分别对应 PCINT12 和 PCINT13 。
由于两者都对应于引脚更改中断使能1,因此您只希望启用该引脚。
EIMSK = (1<<PCIE1);
除非您尝试手动触发中断,否则实际上不需要设置 EIFR 。每当引脚发生变化时,该寄存器都会自动标记。
在 PCMSK1 中,您要设置 PCINT13 和 PCINT12
PCMSK1 |= (1<<PCINT12)|(1<<PCINT13);
这将启用相应引脚上的中断。
SIGNAL也是折旧的。 #include avr/interrupt.h并使用ISR。
ISR(PCINT1_vect){}
这两个Pin更改都将由此向量处理。
希望这可以解决一些问题。