Forum: PC-Programmierung LED-Lauflicht C


von Lauflichthilfe (Gast)


Lesenswert?

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

von Heiner (Gast)


Lesenswert?

geh woanders trollen

von Lauflichthilfe (Gast)


Lesenswert?

?
Warum trollen?

von Trollator (Gast)


Lesenswert?

Lauflichthilfe schrieb:
> Warum trollen?

Manchen Leuten scheint das Spaß zu machen, dir offensichtlich auch.

von The D. (thedaz)


Lesenswert?

Ich denke nicht, daß die hier jemand helfen kann. Deine Umgebung scheint 
Funktionen zu stellen bzw. zu benutzen die niemand kennt (z.B. 
SYNC_SIM). Ausserdem sprichst du von T4 und T5, die aber nirgends in 
deinem code auftauchen. Hänge doch mal den kompletten code als Datei an, 
dann kann man dir evtl auch helfen.

von Christian (Gast)


Lesenswert?

Prof. Dr. Lothar Thieling lässt grüßen.

von Kathi (Gast)


Lesenswert?

----------------------------------------------------------------
while(1) {

        SYNC_SIM;

        temp = io_in16(IN1);  // Einlesen von Port 1

        temp = temp >> 4; // So oft nach rechts shiften
                            // bis das Bit 4 an der Bitstelle 0 steht.

        T1 = temp & 0x01; // Zur Sicherheit alle Bits,
                            // bis auf Bit0 auf 0 setzen
                            // und das Ergebnis T1 zuweisen.
        /* Das Bit für den Taster T1 ist nun eingelesen und
        die Variablen T1 hat genau den logischen Wert dieses
        Bits, d.h.
        T1 = 0 wenn Bit 4 = 0 , also wenn Taster T1 betätigt.
        T1 = 1 wenn Bit 4 = 1 , also wenn Taster T1 nicht betätigt.

        temp = in(IN1);  // Einlesen von Port 1

----------------------------------------------------------------

In der letzten Zeile beim zweiten einlesen von Port 1 fehlt ein IO vor 
dem in(IN1);
es muss heißen io_in(IN1);

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.