Grüß Gott,
wir haben gerade in der Uni mit C angefangen und müssen ein kleines
Lauflicht programmieren.
Wir benutzen Qt Creator mit einem vom Prof. bereitgestellten
Userinterface.
Die Aufgabe:
temp = (1 << 5) | (1 << 4); // temp mit dem Bitmuster 0x0030
// initialisieren bei dem nur Bit 5
// und Bit 4 gesetzt (1) sind
temp = ~temp; // Alle Bits von temp negieren
// temp enthält nun das
// Bitmuster 0xFFCF
io_out16 (DIR1, ( io_in16(DIR1) & temp) ); // Nur Bit 5 und 4 den
// Wert 0 ( Lesen ) geben
und
// alle anderen Bits
unverändert
// lassen.
temp = (1 << 12 | 1 << 11 | 1 << 10) | (1 << 9);
io_out16 (DIR1, ( io_in16(DIR1) | temp) ); // Nur Bit 10 und 9
// auf 1 (Schreiben) setzen.
Alle
// anderen Bits unverändert
// lassen.
1 | while(1) {
|
2 |
|
3 | SYNC_SIM;
|
4 |
|
5 | temp = io_in16(IN1); // Einlesen von Port 1
|
6 |
|
7 | temp = temp >> 4; // So oft nach rechts shiften
|
8 | // bis das Bit 4 an der Bitstelle 0 steht.
|
9 |
|
10 | T1 = temp & 0x01; // Zur Sicherheit alle Bits,
|
11 | // bis auf Bit0 auf 0 setzen
|
12 | // und das Ergebnis T1 zuweisen.
|
13 | /* Das Bit für den Taster T1 ist nun eingelesen und
|
14 | die Variablen T1 hat genau den logischen Wert dieses
|
15 | Bits, d.h.
|
16 | T1 = 0 wenn Bit 4 = 0 , also wenn Taster T1 betätigt.
|
17 | T1 = 1 wenn Bit 4 = 1 , also wenn Taster T1 nicht betätigt.
|
18 |
|
19 | temp = in(IN1); // Einlesen von Port 1
|
20 |
|
21 | temp = temp >> 5; // So oft nach rechts shiften
|
22 | // bis das Bit 5 an der Bitstelle 0 steht.
|
23 |
|
24 | T2 = temp & 0x01; // Alle Bits, bis auf Bit0 auf 0 setzen
|
25 | // und das Ergebnis T2 zuweisen.
|
26 |
|
27 | if(T1 == 1) {
|
28 | /*temp = 1 << 9; // Berechnung des Bitmusters 0x0200
|
29 | // bei dem nur das Bit 9 gesetzt ist.
|
30 |
|
31 | // Bit 9 an Port 1 auf '1' setzen.
|
32 | help = io_in16(OUT1); // Aktuellen Ausgabewert einlesen ...
|
33 | help = help | temp; // ... mit temp "verodern"...
|
34 | io_out16(OUT1, ( help | temp) ); // ... und wieder ausgeben.
|
35 |
|
36 |
|
37 | help = io_in16(OUT1);
|
38 | if(help == 0x200){
|
39 | temp = 1 << 12;
|
40 | io_out16 (OUT1, temp );
|
41 | }else if(help == 0x400){
|
42 | temp = 1 << 9;
|
43 | io_out16 (OUT1, temp );
|
44 | }
|
45 | else if(help == 0x800){
|
46 | temp = 1 << 10;
|
47 | io_out16 (OUT1, temp );
|
48 | }
|
49 | else{
|
50 | temp = 1 << 11;
|
51 | io_out16 (OUT1, temp );
|
52 | }
|
53 | }
|
54 |
|
55 |
|
56 |
|
57 | if(T2 == 1) {
|
58 | /*temp = 1 << 10;
|
59 | io_out16 (OUT1, ( io_in16(OUT1) | temp) );
|
60 | */
|
61 | help = io_in16(OUT1);
|
62 | if(help == 0x200){
|
63 | temp = 1 << 10;
|
64 | io_out16 (OUT1, temp );
|
65 | }else if(help == 0x400){
|
66 | temp = 1 << 11;
|
67 | io_out16 (OUT1, temp );
|
68 | }
|
69 | else if(help == 0x800){
|
70 | temp = 1 << 12;
|
71 | io_out16 (OUT1, temp );
|
72 | }
|
73 | else{
|
74 | temp = 1 << 9;
|
75 | io_out16 (OUT1, temp );
|
76 | }
|
77 | }
|
78 |
|
79 | }
|
Wenn T4 auf 1 und T5 auf 0 läuft es genau wie andersum.
Wenn ich aber T4 und T5 auf 1 setzte habe ich einen Zappler zwischen 11
und 12 bzw 0x400 und 0x800.
Kann jemand den Fehler sehen bzw ist es verständlich was ich meine?
Viele Grüße