Okey, stimmt. Habe ich übersehen. Aber wenn ich den ersten Sendebefehl rausnehme geht es auch nicht.
Hier ist nochmal die main.c
und die usart.cCode:#include <avr/io.h> #include <avr/interrupt.h> #include <inttypes.h> #include <avr/delay.h> #include "usart.c" #ifndef F_CPU #define F_CPU 16000000L // Systemtakt in Hz, das L am Ende ist wichtig, NICHT UL verwenden! #endif volatile int32_t t,zahl; int main( void ) { TCCR0 |= (1 << CS00) | (1 << CS01 ) ; // Timer0 initialisierung TCCR0 &= ~(1 <<CS02 ); // Vorteiler ist 64 TIMSK |= (1<<TOIE0); // Interrupt aktivieren init_USART(); sendUSART("test2 \r\n"); _delay_ms(1000); sei(); sendUSART("test3 \r \n"); _delay_ms(1000); while( 1 ) { // Endlosschleife sendUSART("test4 \r \n"); _delay_ms(1000); } return 0; //wird nie erreicht } ISR(TIMER0_OVF_vect) { sendUSART("interrupt"); }
Die UART routinen habe ich aus dem Wiki, und ohne Interrupt ging es bisher immer. Deswegen dachte ich da gibt es kein Problem. Aber mit dem jetzigen code bekomm ich im HyperTerminal nur "test2" fortlaufend angezeigt.Code:/*### Senden per USART - RS232-Kommunikation ###*/ /*Zum senden von Zeichen im Hauptprogramm entweder char irgendwas[] = "meintext"; sendUSART(irgendwas); oder direkt sendUSART("meinText"); verwenden.*/ void init_USART(void) { UCSRB |= (1<<TXEN); //UART TX (Transmit - senden) einschalten UCSRC |= (1<<URSEL)|(3<<UCSZ0); //Modus Asynchron 8N1 (8 Datenbits, No Parity, 1 Stopbit) UBRRH = 0; //Highbyte ist 0 UBRRL = 103; //Lowbyte ist 103 (dezimal) -> (Frequenz_in_Hz / (Baudrate * 16)) - 1 <- Quarfrequenz = 16*1000*1000 Hz!!!! } void sendchar(unsigned char c) { while(!(UCSRA & (1<<UDRE))) //Warten, bis Senden möglich ist { } UDR = c; //schreibt das Zeichen aus 'c' auf die Schnittstelle return 0; } void sendUSART(char *s) //*s funktiniert wie eine Art Array - auch bei einem String werden die Zeichen (char) einzeln ausgelesen - und hier dann auf die Sendeschnittstelle übertragen { while(*s) { sendchar(*s); s++; } }
Gruß
elayne
[/code]







Zitieren

Lesezeichen