Hallo, kann mir jemand helfen und sagen weshalb ich so nicht zum gewünschten erfolg komme. Der obere teil des Codes wird von CodeVision selbst erzeugt. Sollte einen Speicher die Daten von der Seriellen Schnittstelle in einen Buffer schreiben den ich bei Überlauf auslese und auf ein LCD geben will. #define RXB8 1 #define TXB8 0 #define OVR 3 #define FE 4 #define UDRE 5 #define RXC 7 #define FRAMING_ERROR (1<<FE) #define DATA_OVERRUN (1<<OVR) #define DATA_REGISTER_EMPTY (1<<UDRE) #define RX_COMPLETE (1<<RXC) // UART Receiver buffer #define RX_BUFFER_SIZE 8 char rx_buffer[RX_BUFFER_SIZE]; unsigned char rx_wr_index,rx_rd_index,rx_counter; // This flag is set on UART Receiver buffer overflow bit rx_buffer_overflow; // UART Receiver interrupt service routine #pragma savereg- interrupt [UART_RXC] void uart_rx_isr(void) { char status,data; #asm push r26 push r27 push r30 push r31 in r26,sreg push r26 #endasm status=UCSRA; data=UDR; if ((status & (FRAMING_ERROR | DATA_OVERRUN))==0) { rx_buffer[rx_wr_index]=data; if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0; if (++rx_counter == RX_BUFFER_SIZE) { rx_counter=RX_BUFFER_SIZE; rx_buffer_overflow=1; }; }; #asm pop r26 out sreg,r26 pop r31 pop r30 pop r27 pop r26 #endasm } #pragma savereg+ #ifndef DEBUG_TERMINAL_IO // Get a character from the UART Receiver buffer #define ALTERNATE_GETCHAR #pragma used+ char getchar(void) { char data; while (rx_counter==0); data=rx_buffer[rx_rd_index]; if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0; #asm("cli") --rx_counter; #asm("sei") return data; } #pragma used- #endif while (1) { char seriell[11]; char i=11; if (rx_buffer_overflow==1) { seriell[8] = getchar(); i=25; } lcd_puts(lcd_buffer); sprintf(lcd_buffer,"alles IO ?%2d%8s",i,seriell); lcd_clear(); lcd_puts(lcd_buffer); delay_ms(1000); }; Ist etwas viel Code aber da ich keine ahnung habe wo der fehler liegt, habe ich sicherheitshalber mehr als nötig genommen. Vielen Dank für eure Hilfe Rolf
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.