E agora vamos ao código fonte :
//************************************************************************ // usando interrupção externa // Version : 1.0 // microcontrolador : AVR ATMega328P // Autor : Aguivone // descrição : usando interrupção externa int8 pra usar as outras interrupções é do mesmo modo // pino C0(int8) // data : 10/07/2012. // //************************************************************************ #define F_CPU 16000000UL // 1 MHz deve vir antes das interrupçoes #include <avr/io.h> #include <avr/interrupt.h> /* ISR(PCINT0_vect) //interrupçoes e 0 a 7 { PORTB = ~PORTB; }*/ ISR(PCINT1_vect) //interrupçoes e 8 a 14 { PORTB = ~PORTB;//neste exemplo vamos usar a interrupção no pino C0(int8) } /* ISR(PCINT2_vect) //interrupçoes e 16 a 23 { PORTB = ~PORTB; }*/ /////////////////////////////////////////////////Funções usadas///////////////////////////////////////////// void inicializa_interrupcoes(void) { // PCICR = 0X01;//habilita interrupções de 0 a 7 PCICR = 0X02;//habilita interrupções de 8 a 14 //no exemplo vou usar a interrup~ção 8 // PCICR = 0X04;//habilita interrupções de 16 a 23 ,depende do modelo do microcontrolador // pode ainda fazer conbinaçõe pra usar todas as interrupçoes simultâneas //PCMSK0 = 0X00//aqui coloca qual pino vai gerar a interrupçoes,pode se usar mais de um. PCMSK1 = 0X01;//selecionei somente o pino de interrupção 8 (PC0) //PCMSK2 = 0X00//aqui coloca qual pino vai gerar a interrupçoes,pode se usar mais de um. sei(); //habilita interrupções } //////////////////////////////////////////////função principal/////////////////////////////////////////// int main(void) { DDRC = 0xFE; //inicializa portd PORTC = 0; DDRB = 0xFF; //inicializa portd PORTB = 0; inicializa_interrupcoes(); for(;;) { //faz nada! } } /////////////////////////////////////////////////////////////////////////////////////////////////////////
contribua com o blog postando seus exemplos aqui também
Prezado, muito bom o artigo. Teria como disponibilizar este codigo para o arduino. Preciso utilizar 3 interrupções apenas do Atmega 328p. Só para acordar e executar o programa e voltar a dormir.Obrigado
ResponderExcluirPrezado, muito bom o artigo. Teria como disponibilizar este codigo para o arduino. Preciso utilizar 3 interrupções apenas do Atmega 328p. Só para acordar e executar o programa e voltar a dormir.Obrigado
ResponderExcluirOlá Ney, não utilizo o Arduino somente o "AVR STUDIO" ele é gratuito vc pode baixar e compilar o código e então fazer as alterações que precisar, não uso o Arduino pois com ele vc grava apenas um tipo especifico de microcontrolador e o código não pode ser protegido contra leitura do chip.
ResponderExcluir