2

我是使用这个微控制器的新手,并且在设置中断时遇到了麻烦。我将一个泵连接到一个引脚,当泵遇到错误时,泵将关闭并将连接到微控制器的开关接地。我猜我将不得不使用其中一个 PCINT 中断,因为我正在寻找引脚更改,但我不知道如何设置 EICRA 或 PCICR 以使其工作。如果有人有任何信息,那将有很大帮助。

4

1 回答 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 回答