Forum: Mikrocontroller und Digitale Elektronik Variable beschreiben RCREG1 (PIC18)


von David M. (mic_dave)


Lesenswert?

Hallo zusammen,
ich muss nochmal ein bisschen nerven. Ich sitze heute schon den ganzen 
Tag am folgenden Problem. Und zwar lese ich Werte über die Tastatur ein, 
welche dann an den PIC gesendet werden sollen. Um die empfangenen Bits 
zu speichern, verwende ich eine long- Variable, die ich dann bitweise 
beschreibe. Zum besseren Verständnis hier erstmal der QT:

Initialisieren der USART- Schnittstelle:
1
void initUSART(unsigned int spbrg){
2
  char tmp = 0;
3
4
  BAUDCON1 = 0x48;
5
6
  // Baudrate konfigurieren
7
  SPBRG1 = spbrg;
8
  SPBRGH1 = spbrg >> 8;
9
10
  // TRIS- Ports definieren
11
  ANSELC = 0;
12
  TRISC6 = 0; // Output, da hier der Transmit- Port angeschlossen ist
13
  TRISC7 = 1; // Input , da hier der Receive - Port angeschlossen ist
14
15
  TXSTA1 = 0x04;
16
  RCSTA1 = 0x90;
17
18
  PIE1bits.RC1IE = 0;
19
  PIE1bits.TX1IE = 0;
20
21
  TXSTA1bits.TXEN = 1;
22
  RCSTA1bits.SPEN = 1;
23
24
  char tmp = RCREG1;
25
}

Einlesen der Daten:
1
  for(unsigned int i = 0; i < sizeof(unsigned long)*8; i++){
2
    while(!PIR1bits.RC1IF){}
3
    received = getcUSART();
4
    
5
    if(received == '1'){
6
      code |= (1 << i);
7
    }
8
    else if(received == '2'){
9
      break;
10
    }
11
    char tmp = RCREG1;
12
  }

Das Problem ist nun folgendes. Die long- Variable wird nur bis zum 16- 
Bit beschrieben, dannach finden sich nur noch 0-en im Register. Verwende 
ich eine Intergervariable, um die Werte zu speichern, dann Schreibt er 
die vollen 16 Bit voll. Nur bei der longvariablen kann er die letzten 
16- Bit nicht beschreiben. Hat da vielleicht jemand eine Idee, woran das 
liegen könnte?
Übrigends: code ist meine unsigned long Variable.

P.S.: Gibt es irgendwie eine möglichkeit, mir selber Bytes im Speicher 
zu reservieren? Also sagen wir mal, ich bräuchte 6 Byte. Wie kann ich 
mir sie reservieren und dann auch beschreiben bzw. lesen ohne von den 
elementaren Datentypen abhängig zu sein.

Ich bedanke mich vielmals für die Hilfe.

Mit freundlichen Grüßen
David

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.