Forum: Mikrocontroller und Digitale Elektronik Übergabe DIPs an LEDs


von Leon A. (leona)


Angehängte Dateien:

Lesenswert?

Hallo nochmal,



habe mich schon einmal in einem anderen Thread an euch gewendet. Es geht 
darum, das ich zwei uC des Typ 8051 über den P3.0(RxD) und P3.1(TxD) mit 
einander verbinde. Dabei sollen die DIP-Werte von uC1 an den LEDs von 
uC2 ausgegeben werden sollen. Andersherum sollen die DIP-Werte von uC2 
an den LEDs von uC1 ausgegeben werden. Sobald man also den DIP-Wert 
verstellt, sollen sich die LEDs am anderen Board auch verstellen. Dazu 
habe ich nun ein kleineres Programm geschrieben. Leider finde ich meinen 
Fehler nicht, hoffe ihr könnt mir helfen:
1
#include <stdio.h>
2
#include <KISS8051.h>
3
#include <REG52.h>
4
5
char Wert, Wert1;                 //Deklaration                    
6
7
void main ()
8
{
9
10
Wert1 = 1;                                  //Wertzuweiseung
11
12
    while (1)                               //Endlosschleife zum Abfragen
13
    {
14
        if (DIPs != Wert1)                  //Wertüberprüfung
15
        {
16
            Wert1 = DIPs;                   //Wertübergabe der DIPs
17
            printf("%d", &Wert1);           //Senden des DIP-Wertes
18
        }
19
20
        scanf("%d", &Wert);   //schauen ob anderes Board gesendet hat
21
22
        LEDs = Wert;  //Wenn es gesendet hat, den Wert an den LEDs ausgeben
23
    }
24
}


Wäre euch super dankbar

Gruß

Leon A.

: Bearbeitet durch User
von ??? (Gast)


Lesenswert?

Leon Achterusch schrieb:
> Leider finde ich meinen Fehler nicht
Was funktioniert nicht?

von Rolf Magnus (Gast)


Lesenswert?

Leon Achterusch schrieb:
> scanf("%d", &Wert);   //schauen ob anderes Board gesendet hat

Das schaut nich nur, ob, sondern wartet auch, bis das andere gesendet 
hat.
Das erinnert mich an dieses Gesetz, das mal ein Senator in den USA 
beschlossen hat, nach dem ein Zug, wenn er an einem Bahnübergang einem 
anderen Zug auf dem benachbarten Gleis begegnet, nicht weiterfahren 
darf, bis der andere vorbeigefahren ist. Da das für beide gilt, warten 
die dann bis zum Sankt-Nimmerleins-Tag.

von Wilhelm F. (Gast)


Lesenswert?

Was funktioniert denn konkret nicht? Wurden die seriellen Schnittstellen 
initialisiert?

von Leon A. (leona)


Lesenswert?

Rolf Magnus schrieb:
> Leon Achterusch schrieb:
>> scanf("%d", &Wert);   //schauen ob anderes Board gesendet hat
>
> Das schaut nich nur, ob, sondern wartet auch, bis das andere gesendet
> hat.
> Das erinnert mich an dieses Gesetz, das mal ein Senator in den USA
> beschlossen hat, nach dem ein Zug, wenn er an einem Bahnübergang einem
> anderen Zug auf dem benachbarten Gleis begegnet, nicht weiterfahren
> darf, bis der andere vorbeigefahren ist. Da das für beide gilt, warten
> die dann bis zum Sankt-Nimmerleins-Tag.



Achso, der bleibt also bei dem Scanf-befehl sitzen, bis der andere ihm 
wirklich was gesendet hat ?! Dachte er schaut dann einmal an P3.1 nach, 
ob wirklich was gesendet wurde und geht dann weiter.

Und schuldigung, das hätte ich zu schreiben sollen:
Schließe beide Boards an und alle LEDs leuchten. Passiert also nichts 
wenn ich DIPs verstelle :/


Gruß

Leon A.

p.s. Super vielen Dank für die schnellen Antworten. Wirklich richtig 
cool!

: Bearbeitet durch User
von Wilhelm F. (Gast)


Lesenswert?

Leon Achterusch schrieb:

> Und schuldigung, das hätte ich zu schreiben sollen:
> Schließe beide Boards an und alle LEDs leuchten. Passiert also nichts
> wenn ich DIPs verstelle :/

Geh doch schrittweise vor, von Anfang an, und versuche erst mal, auf 
einem Board alleine für sich die LEDs nach den DIP-Schaltern zu 
schalten. Dann, wenn das funktioniert, die serielle Verbindung zum 
zweiten Board, und erst mal nur in eine Richtung.

Gibt es eigentlich ein Startup-File? Was wird denn vor main() 
initialisiert?

von Rolf Magnus (Gast)


Lesenswert?

Leon Achterusch schrieb:
> Achso, der bleibt also bei dem Scanf-befehl sitzen, bis der andere ihm
> wirklich was gesendet hat ?! Dachte er schaut dann einmal an P3.1 nach,
> ob wirklich was gesendet wurde und geht dann weiter.

Wenn sich dein scanf() standardkonform verhält, dann nicht.
Dein Programm wäre aber auch dann nicht korrekt, denn du prüfst ja 
nirgends, ob du was empfangen hast oder nicht.

> Leon Achterusch schrieb:
> LEDs = Wert;  //Wenn es gesendet hat, den Wert an den LEDs
> ausgeben

Wo ist der "Wenn es gesendet hat"-Part? Du gibst einfach immer den Wert 
an die LEDs aus.

Eine andere Sache, auf die du achten mußt:

Leon Achterusch schrieb:
> printf("%d", &Wert1);           //Senden des DIP-Wertes

Ich weiß nicht, ob deine C-Bibliothek einen Sendepuffer hat, aber meist 
ist printf Zeilengepuffert, d.h. es werden nur dann Daten rausgesendet, 
wenn entweder der Puffer voll ist oder eine Zeile abgeschlossen wurde. 
Du solltest hier entweder nach dem Zeichen ein Zeilenende senden oder 
nach dem printf() ein fflush(stdout) machen, damit du auch sicher sein 
kannst, daß der Wert auch gesendet wird.

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.