设置中断以监视引脚更改

时间:2013-08-05 17:53:55

标签: c interrupt avr atmel

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

1 个答案:

答案 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”

我希望这能让你开始。