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
Alex S. schrieb: > Ich habe schon ein Programm geschrieben, bloß mit wenig Erfolg.. ich > hoffe ihr könnt mir weiterhelfen.. Was funktioniert denn nicht?
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..
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
Ich sagte doch, dass ich von Miktocontrollern keinen blassen Schimmer habe :( Aber jetzt weiß ich ja, dass ich R1 hochzählen muss..
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.