Forum: Mikrocontroller und Digitale Elektronik probleme mit empfangen


von hubi (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.