Forum: Mikrocontroller und Digitale Elektronik Ampelsteuerung


von Alex S. (broetchen)


Lesenswert?

Hallöchen,

ich habe ein kleines Problem :( und zwar bin ich in dem Fach 
Mikrocontroller eine ziemliche Niete..

Ich soll eine Ampelsteuerung programmieren, da es meinem Lehrer mit 
Timer und Interrupt Service Routine nicht recht war, habe ich mich dazu 
entschlossen es mit Unterprogramm und Datenpointer zu programmieren.

Wir nutzen in der Schule den Atmel AT89C51RC2.

Zudem soll es in etwa so ablaufen:

-Druck Taster P3.3
-Unterprogramm mit Wartezeit von 3 Sekunden wird augerufen
-Ampel wird umgeschalten, P2
-Unterprogramm mit Wartezeit von 3 Sekunden wird augerufen
-Ampel wird wieder zurückgeschalten, P2
-Endlosschleife, warten bis wieder P3.3 gedrückt wurde

Ich habe schon ein Programm geschrieben, bloß mit wenig Erfolg.. ich 
hoffe ihr könnt mir weiterhelfen..

MOV P2,#10001b         //Fußgänger rot, Autos grün
MOV P0,#000000b       //zur Visialisierung

endlos:
JB P3.3, endlos        //Taste gedrückt
endlos1:
JNB P3.3, endlos1     //Taste losgelassen

ACALL warte             //Warte 3 Sekunden

MOV A,R1
MOV DPTR,#tabelle1
MOVC A,@A+DPTR
MOV P2,A

ACALL warte            //Warte 3 Sekunden

MOV A,R1
MOV DPTR,#tabelle2   //Umschalten
MOVC A,@A+DPTR
MOV P2,A

LJMP endlos           //Endlosschleife

warte:              //Unterprogramm Warteschleife 3 Sekunden
MOV R2,#0
eins:
MOV R3,#0
zwei:
MOV R4,#22
drei:
NOP
NOP
NOP
NOP
NOP
DJNZ R4,drei
DJNZ R3,zwei
DJNZ R2,eins
NOP
RET                          //Ende des Unterprogramms

tabelle1:                    //Schalte von Rot auf Grün
db 10010b,10100b,01100b
tabelle2:                    //Schalte von Grün auf Rot
db 10100b,10110b,10001b

END

von STK500/-Besitzer (Gast)


Lesenswert?

Alex S. schrieb:
> Ich habe schon ein Programm geschrieben, bloß mit wenig Erfolg.. ich
> hoffe ihr könnt mir weiterhelfen..

Was funktioniert denn nicht?

von Alex S. (broetchen)


Lesenswert?

Wenn ich das Programm starte, also den Taster drücke, dann schaltet P2 
zwar durch von
dem anfänglichen 10001
erst zu 10010
und 10100, bleibt dort aber stehen anstatt auf 01100 zu springen..

von Peter D. (peda)


Lesenswert?

Alex S. schrieb:
> und 10100, bleibt dort aber stehen anstatt auf 01100 zu springen.

Warum soll er springen, Du sagst es ihm nirgends.
Eine Tabelle macht erst Sinn, wenn man auch mal die nächsten Elemente 
ausgibt. Also fehlen einige INC DPTR.


Peter

von Alter Hase (Gast)


Lesenswert?

Wann wird R1 verändert oder das erste mal gesetzt?

von Alex S. (broetchen)


Lesenswert?

Ich sagte doch, dass ich von Miktocontrollern keinen blassen Schimmer 
habe :(

Aber jetzt weiß ich ja, dass ich R1 hochzählen muss..

von Alex S. (broetchen)


Lesenswert?

Bloß bekomm ich es jetzt nicht hin..
wann muss ich R1 als Index für den DPTR denn erhöhen?

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.