;############################################## ; Projekt: ; Programm: ; Autor: ; Datum: ;############################################## $include (reg517aw.inc) name blink_haupt ;Hauptprogramm zur ansteuerung der LEDs H_Pr_Seg segment code ;??? ?Stack segment idata ;??? cseg at 0000h ;absolutes Programmsegment bei 0000h ljmp start_hp ;Sprung von 0000h zum Hauptprogramm cseg at 001Bh ljmp timer1 rseg ?stack ;stack öffnen ??? DS 32 ;32Bytes für Stack reservieren rseg H_Pr_Seg ;Programmsegment öffnen LED EQU P6 ;??? hilf EQU 30h ;??? hilftime EQU 31h ;??? intervall1 EQU 32h ;??? intervall2 EQU 33h ;??? ;############################################# start_hp: mov hilf,#00h ;hilf auf 0 setzen ??? (wozu gibt es hilf) mov hilftime,#00h ;timeroverflowzähler auf 0 setzen ??? (wozu gibt es hilftime?) mov intervall1,#10d ;schaltintervall einstellen (0,5s) mov intervall2,#40d ;schaltintervall einstellen (2s) ;############################################# ;Stackpointer auf 'sicheren' Speicherbereich legen mov SP,#5fh ;stackbeginn bei 60H, oberhalb des bitspeicherbereich im unteren internen RAM ;############################################# ;Timer einrichten clr TR1 ;timer stoppen clr TF1 ;interuptanforderung löschen anl TMOD,#00001111B ;timer0 deaktivieren, timer1 aktivieren orl TMOD,#00010000B ;timer1 auf 16bit einstellen orl TMOD,#00100000B ;timer1 auf 8 bit einstellen mov TH1,#03CH ;zählregister setzen mov TL1,#0AFH ;zählregister setzen setb ET1 ;interupt aktivieren setb EAL ;interupt aktivieren ;############################################# ;Timer starten setb TR1 ;############################################# main: mov A,hilf ;hilf in akku schreiben CJNE A,#00H,schritt2 ;??? mov LED,#000H ;LED feld '1' ??? schritt2: CJNE A,#01H,weiter ;??? mov LED,#0FFH ;LED feld '0' ??? weiter: LJMP main ;############################################## timer1: ;sichern aller daten Push ACC ;??? Push PSW ;??? Push DLP ;??? Push DPH ;??? inc hilftime ;zählen der timer overflow mov A,hilf ;hilf in akku laden CJNE A,#00H,weil ;springe wenn LEDs an zum intervall2 mov A,intervall1 ;intervall1 in akku laden CJNE A,hilftime,wei1 ;springe wenn ungleich zum intervall2 LJMP wei2 ;springe zu wie2 wei1: mov A,hilf ;hilf in den akku laden CJNE A,hilftime,hilf2 ;springe wenn ungleich zum ende wei2: mov A,hilf ;hilf in den akku laden CJNE A,#00H,hilf1 ;??? mov hilf,#01H ;hilf neu einstellen mov hilftime,#00H ;timeroverflow zurücksetzen hilf1: CJNE A,#01H,hilf2 ;??? mov hilf,#00H ;hilf neu einstellen mov hilftime,#00H ;timeroverflow zurücksetzen hilf2: ;timer neu einrichten clr TR1 ;timer stoppen clr TF1 ;interuptanforderung löschen mov TH1,#03CH ;zählregister setzen mov TL1,#0AFH ;zählregister setzen SETB TR1 ;timer starten ;wiederherstellen der gesicherten werte pop ACC ;??? pop PSW ;??? pop DPL ;??? pop DPH ;???