Forum: Mikrocontroller und Digitale Elektronik RCREG1 löschen (PIC18)


von David M. (mic_dave)


Lesenswert?

Hallo zusammen,
wie kann ich das RCREG1 löschen? Ich möchte, dass man 8 Zahlen eingeben 
kann und diese dann in ein Array geschrieben werden. Bei mir ist jetzt 
aber das Problem, dass wenn ich einen Wert eingebe, er diesen in alle 
Felder schreibt. Hier der QT:

Das auslesen der USART- Schnittstelle:
1
char getcUSART(){
2
  if(RCSTA1bits.FERR == 1){
3
    return 0;
4
  }
5
  if(RCSTA1bits.OERR == 1){
6
    RCSTA1bits.CREN = 0;
7
    RCSTA1bits.CREN = 1;
8
    return 0;
9
  }
10
  return RCREG1;
11
}

Das schreiben der Arrays:
1
  for(unsigned int i = 0; i < 8; i++){
2
    while(received != '0' && received != '1'){
3
      received = getcUSART();
4
    }
5
6
    if(received == '0'){
7
      code[i] = 0;
8
    }
9
    else{
10
      code[i] = 1;
11
    }
12
13
    received = 0;
14
    RCREG1 = 0;
15
  }

Ich bedanke mich shconmal für die Hilfe.

David

von Christian K. (Firma: Atelier Klippel) (mamalala)


Lesenswert?

Du liest das Empfangsregister aus ohne vorher zu prüfen ob überhaupt 
etwas neues empfangen wurde. Das geht so natürlich nicht.

Grüße,

Chris

von Jens (Gast)


Lesenswert?

Das RCREG lässt sich nur durch auslesen des Registers löschen. Ein BCF 
RCREG ist quasi sinnlos. Steht noch ein Byte im Empfangsregister geht 
das Statusbit automatisch wieder auf 1. Im übrigen ist der RX-Buffer 
zwei Byte tief.

von David M. (mic_dave)


Lesenswert?

Ok, danke euch beiden. Meine Lösung sieht nun so aus:
1
  for(unsigned int i = 0; i < 8; i++){
2
    while(!PIR1bits.RC1IF){}
3
    received = getcUSART();
4
5
    if(received == '0'){
6
      code[i] = 0;
7
    }
8
    else{
9
      code[i] = 1;
10
    }
11
12
    received = 0;
13
    RCREG1;
14
    PIR1bits.RC1IF = 1;
15
  }

von hmmmm (Gast)


Lesenswert?

muss das RC1IF nicht wieder auf Null gesetzt werden


also PIR1bits.RC1IF = 0; <----  ???

von Erich (Gast)


Lesenswert?

unsigned char uartread()
{
        while(!PIR1bits.RC1IF);
        PIR1bits.RC1IF = 0;
        return RCREG1;
}

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.