我是使用这个微控制器的新手,并且在设置中断时遇到了麻烦。我将一个泵连接到一个引脚,当泵遇到错误时,泵将关闭并将连接到微控制器的开关接地。我猜我将不得不使用其中一个 PCINT 中断,因为我正在寻找引脚更改,但我不知道如何设置 EICRA 或 PCICR 以使其工作。如果有人有任何信息,那将有很大帮助。
问问题
6243 次
1 回答
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,则必不可少。数据表
您可以在nongnu.org上找到有关 ISR()、sei ()、cli () 的更多信息,还有 ISR () 使用的向量的完整列表。
AVR Freaks有一篇文章可以免费下载,它会帮助你理解它是如何工作的,这篇文章叫做“Basic interrupts and I/O”
我希望这能让你开始。
于 2013-08-05T19:59:59.837 回答