Variable beschreiben RCREG1 (PIC18)

OP #2756221
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.