Gast
#2395661
Hallo, ich arbeite mich gerade in das Thema MC ein und wollte hier nun ein erstmal ein paar LED´s zum Blinken bringen. In meiner Quelltext-C-Version funktioniert das ganze auch, nur scheine ich einen Fehler in meinem Assemblercode zu machen. Das Problem scheint zu sein, das das Flag TF0 nie gesetzt wird, deshalb hängt er unten in der schleife "JNB TF0, loop1" fest. Kann mir jemand weiterhelfen, warum das Flag trotz Überlauf nicht gesetzt wird? hier mal der ganze Code: $NOMOD51 ;vordefinierten Registersatz deaktivieren $include(at89c51xd2.inc) ;Registerdefinitionen für 80c51ed2 USING 0 ;Registerbank 0 nutzen ORG 0000h ;bei Reset Sprung zu Hauptprogramm MOV SP,#0A0h ;Stack festlegen LJMP main ORG 0100h ;Hauptprogramm ab 100h ;---------Hauptprogramm----------------------------------------- main: MOV TMOD,#01h SETB EA SETB ET0 ;Flag Überlauf Timer 0 ein MOV P1,#00h ;LED an CALL delay ;Unterprogramm delay starten MOV P1,#0ffh ;LED aus CALL delay ;Unterprogramm delay starten SJMP main ;Endlosschleife main ;--Unterprogramm delay---------------- delay: CLR TR0 MOV TH0,#03Ch ;höherwertiges Timerbyte MOV TL0,#0B0h ;niederwertiges Timerbyte MOV R1,#03h SETB TR0 SJMP loop loop: loop1: JNB TF0, loop1 CLR TF0 DJNZ R1,delay CLR TR0 RET ;---------ENDE---------------------------------------------- END Vielen Dank schonmal vorweg für eure Hilfe!