Hallo,
Ich bin gerade dabei für mein momentanes Projekt die
Fernbedienungs-Empfangsroutine zu schreiben. Dabei bin ich beim Testen
ob das ganze auch so tut wie es soll auf ein seltsames (oder bin ich
einfach nur so doof?) Problem gestoßen. Doch erstmal was ich gemacht
habe:
Das kleine Testprogramm unten bekommt über einen Interrupt ein Phillips
RC5 Datenpaket (noch Manchestercodiert) sowie ein Readyflag. Hier
ersetzt durch die beiden Konstanten.
Die erste If() soll eine LED einschalten, sobald der gewünschte Befehl
gekommen ist und wieder ausschalten sobald was anderes kommt.
Funktioniert auch.
Die dann folgende For Wiederholung soll das in "receive" empfangene
Datenpaket seriell über ein Portpin ausgeben. Funktioniert für sich
selbst auch.
1 |
|
2 | volatile long unsigned int receive;
|
3 | volatile bit ready;
|
4 |
|
5 | void main(void)
|
6 | {
|
7 | ...
|
8 | unsigned char i, i2;
|
9 | long unsigned int buffer, out;
|
10 | static bit bit_test;
|
11 | ...
|
12 | ...
|
13 | ready = 1;
|
14 | receive = 0b10010110101001010110010101;
|
15 | while (1 == 1)
|
16 | {
|
17 | if (ready == 1)
|
18 | {
|
19 | buffer = receive;
|
20 | // ready = 0;
|
21 | if (receive == 0b10010110101001010110010101)
|
22 | LATB5 = 1;
|
23 | else
|
24 | LATB5 = 0;
|
25 | }
|
26 | //wait some time...
|
27 | for (i=0; i<100; i++){}
|
28 |
|
29 | out = buffer;
|
30 | //serial output on portb.2
|
31 | for (i = 0; i < 30; i++)
|
32 | {
|
33 | //increase pulse width
|
34 | for (i2=0; i2<10; i2++){}
|
35 |
|
36 | bit_test = out & 1;
|
37 | if (bit_test == 1)
|
38 | LATB2 = 1;
|
39 | else
|
40 | LATB2 = 0;
|
41 | out = out >> 1;
|
42 |
|
43 | }
|
44 | }//while
|
45 | }//main
|
Problem ist nun, sobald in der for Wiederholung die else Bedingung
ausgeführt wird, werden in LATB alle Ausgangspins gelöscht und LATB2
entsprechend der Zuweisung gelöscht bzw. gesetzt. Hääää??? Warum verhält
sich ein BCF 0xd, 0x2 hier anderes als woanders im Quellcode???
Ich hoffe, ihr habt einigermaßen verstanden, wo mein Problem liegt...
Das ganze Projekt habe ich als Zip angehängt, bitte mich nicht hängen,
ich weiß das es noch etwas chaotisch ist...
Compiler ist der Hi Tech V9.71a Lite und IDE ist MPLAB 8.56
Danke schonmal für eure Hilfe!
Gruß Martin