Hallo,
ich möchte gerne mit meinem Programm bei einer fallenden Flanke an Port D.2 ein Interrupt Routine auslösen, die mir dann einen bestimmten Wert auf die Serielle Schnittstelle schickt. Es passiert aber oft, dass die Interrupt Routine 2 bzw 3 mal ausgelöst wird und daher bei einer fallenden Flanke mehrere Werte auf die Serielle Schnittstelle geschickt werden. Mit einem delay hätte ich auch auf Prellen geprüft....
Mein Programmcode:
danke im vorausCode:#include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <avr/delay.h> #include <stdio.h> #ifndef F_CPU #define F_CPU 3686400 #endif #define BAUDRATE 9600 int usart_putch(char x); int usart_getch(void); SIGNAL(SIG_INTERRUPT0) { _delay_ms(50); if(!(PIND & (1<<PD2))) { printf("1"); } } int main(void) { // USART-Init UBRRH=((F_CPU/(16L*BAUDRATE)-1)>>8); UBRRL=F_CPU/(16L*BAUDRATE)-1; UCSRB = (1<<RXEN)|(1<<TXEN); //RX & TX aktivieren UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8N1 //Interrup-Init GICR |= 0b11000000; MCUCR &= 0b11111010; MCUCR |= (1<<ISC01); PORTD=0xFF; fdevopen(usart_putch, usart_getch, 0); sei(); while(1) { } } int usart_putch(char x) { while(!(UCSRA & (1<<UDRE))); UDR = x; return(0); } int usart_getch(void) { while(!(UCSRA & (1<<RXC))); return(UDR); }
jetzi







Zitieren

Lesezeichen