Forum: Mikrocontroller und Digitale Elektronik ATmega + Pollingbetrieb mit 16C554


von Jürgen (Gast)


Lesenswert?

Hallo,

ich versuche einen TL16C554 im Pollingmodus zu betreiben.
Es sollen nur Daten gelesen werden 8bit,noparity,1stopbit.
Leider werden nur einige Zeichen eingelsen und dann merkwürdigerweise 
das line control register gelöscht.
Kennt sich jemand aus?

Hyperterminalauszug:

Vor dem Reset:

 Receiver buffer: 00010101 IER: 00000000 IIR: 00000001 LCR: 00000000 
MCR: 00000000 LSR: 11100001 MSR: 11110000 SP: 00000000
A0/A1/A2:111 IOW/IOR:10 RESET/RXRDY/TXRDY:000 CSA/CSB/CSC/CSD:0111

Nach dem Reset und der Initialisierung:

LSB: 00011000 MSB: 00000000
Receiver buffer: 00000000 IER: 00000000 IIR: 11000001 LCR: 00000011 MCR: 
00000000 LSR: 01100011 MSR: 11110000 SP: 00000000
A0/A1/A2:111 IOW/IOR:10 RESET/RXRDY/TXRDY:000 CSA/CSB/CSC/CSD:0111

Ausgabe im günstigsten Fall mit Abbruch, da line control register 
merkwürdigerweise gelöscht:

GGPRMC,153335,V$______

Receiver buffer: 00001001 IER: 00000000 IIR: 00000001 LCR: 00000000 MCR: 
00000000 LSR: 11100001 MSR: 11110000 SP: 00000000
A0/A1/A2:111 IOW/IOR:10 RESET/RXRDY/TXRDY:000 CSA/CSB/CSC/CSD:0111

Codeauszug:

DDRA  = 0x00;                  // 0000 0000 -> D7D6D5D4D3D2D1D0 eingänge
PORTA = 0xff;                  // 1111 1111 -> D7D6D5D4D3D2D1D0 mit 
pullups
PORTC &= ~( 1 << PC4 );        // xxx0 xxxx -> IOR = 0  ->> lesen vom 
tl16c554

i=0;
j=0;
while(1) {
  PORTB = 0x05;     //line status register

  if (PINA & 1) {      // prüfe auf LSR bit0 (dataready)

  PORTB = 0x00;     // 0000 0000 A2A1A0=000 Receiver Buffer
  puffer2[i]=PINA;
  i=i+1;
  }
j=j+1;
if (i>80) break;
if (j>150) break;
}
uart_puts(puffer2);

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.