我是使用这款微控制器的新手,我在设置中断时遇到了麻烦。我将要一个泵连接到一个引脚,当泵遇到错误时,泵将关闭并将连接到微控制器的开关接地。我猜我将不得不使用其中一个PCINT中断,因为我正在寻找引脚更改,但我不知道如何设置EICRA或PCICR以使其工作。如果有人有任何信息,那将会有很大帮助。
答案 0 :(得分:3)
*更新了答案,硬件是Atmega88。
#include <avr/io.h>
#include <avr/interrupt.h>
ISR (PCINT0_vect){
/* This is where you get when an interrupt is happening */
}
int main(void)
{
/*Assumes that you are using PCINT0.
*It is also known as PB0
*/
DDRB &= ~(1<<PB0); /* Set PB0 as input */
PORTB |= (1<<PB0); /* Activate PULL UP resistor */
PCMSK0 |= (1 << PCINT0); /* Enable PCINT0 */
PCICR |= (1 << PCIE0); /* Activate interrupt on enabled PCINT7-0 */
sei (); /* Enables interrupt */
/* cli (); is used to disable interrupts. */
for(;;){
}
return 0;
}
以上示例使用PB0作为输入并激活内部上拉电阻。 这将导致PINB为1,直到它接地为止。当连接到地时,PINB将为0。
PCINT0是激活的引脚,在PCMSK中设置。并且PCICR设置为将启用的PCINT7上的引脚更改捕获为0。
您可以在数据表中找到所有这些信息,这是很多信息,但如果您想知道如何使用AVR则必不可少。 Datasheet
您可以在以下位置找到有关ISR(),sei(),cli()的更多信息 nongnu.org还有一个完整的列表,其中包含ISR()使用的向量。
AVR Freaks有一篇免费下载的文章,它将帮助您了解它是如何工作的,文章称为“基本中断和I / O”
我希望这能让你开始。