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