Gast
#178268
Hallo,
hab das unten aufgeführte Programm gschrieben.
Leider kann ich die Pin-changed Interruptrotine nicht disablen.
Müsste doch mit cli(); funktionieren.
Leider durchläuft er bei einem Interrupt die Rotine desöfteren.
Die Tasten sind nicht entprellt, möchte ich hinzufügen, was jedoch egal
sein müsste, da man ja beim ersten Durchlauf der ISR der Interrupt
disabled wird.
Bin über jeden Tip dankbar.
Im Voraus Danke!
Grüsse Tom
#include <avr\io.h>
#include <avr\signal.h>
#include <avr\interrupt.h>
#include <stdlib.h>
#include "init.h"
#include "display_4bit.h"
char nummer = 0;
BYTE nummer_buffer[2]={'0','0'};
INTERRUPT(SIG_PIN_CHANGE1)
{
cli( );
nummer++;
}
void Byte2Ascii(BYTE array[2],BYTE zahl)
{
array[0]= (zahl%10)|0x30; // |0x30 für Ascii-Umwandlung
array[1]= (zahl/10)|0x30; // |0x30 für Ascii-Umwandlung
}
void main (void)
{
DDRC=0x00;
lcd_init();
lcd_command_out(lcd_on);// Display ein
sbi(PCICR, PCIE1); // PIN-CHASNGE-Interrupt aktivieren
PCMSK1=0xFF; // alle Eingängedes PortC für ISR aktivieren
sei(); // Interrupts zulassen
for (;;) // Endlosschleife
{
lcd_string_out("Interuptnr. ",1);
lcd_position_set(1,14);
Byte2Ascii(nummer_buffer,nummer);
lcd_data_out(nummer_buffer[1]); //Anzahl Durchläufe derISR
lcd_data_out(nummer_buffer[0]); //Anzahl Durchläufe derISR
}
}