;**************************************************************************************************** ;*******************Lauflicht KnightRider************************************************************ ;**************************************************************************************************** ;**************************************************************************************************** ;********************Hauptprogramm main************************************************************** ;**************************************************************************************************** org 00h ;Speicherbereich initialisieren... jmp main ;...undHauptprogramm 'main' aufrufen org 0100h ;Startspeicherzelle für 'main' festlegen main: mov a,#00h ;Wert 00(hex) in den Akku schreiben mov p0,a ;Inhalt des Akkus an Port 0 ausgeben call delay1s ;Unterprogramm delay1s aufrufen mov a,#01h ;Wert 01(hex) in den Akku schreiben =>00000001 mov p0,a ;Inhalt des Akkus an Port 0 ausgeben call delay1s ;Unterprogramm delay1s aufrufen loop: rl a ;Akkuinhalt um eine Bitstelle nach LINKS rotieren => 00000010 mov p0,a ;Inhalt des Akkus an Port 0 ausgeben call delay1s ;Unterprogramm delay1s aufrufen rl a ;Akkuinhalt um eine Bitstelle nach LINKS rotieren => 00000100 mov p0,a ;Inhalt des Akkus an Port 0 ausgeben call delay1s ;Unterprogramm delay1s aufrufen rl a ;Akkuinhalt um eine Bitstelle nach LINKS rotieren => 00001000 mov p0,a ;Inhalt des Akkus an Port 0 ausgeben call delay1s ;Unterprogramm delay1s aufrufen rl a ;... mov p0,a ;...usw... call delay1s ;... rl a ;... mov p0,a ;... call delay1s ;... rl a ;... mov p0,a ;... call delay1s ;... rl a ;Akkuinhalt um eine Bitstelle nach LINKS rotieren => 10000000 mov p0,a ;... call delay1s ;... rr a ;Akkuinhalt um eine Bitstelle nach RECHTS rotieren => 01000000 mov p0,a ;... call delay1s ;... rr a ;... mov p0,a ;... call delay1s ;... rr a ;... mov p0,a ;... call delay1s ;... rr a ;... mov p0,a ;... call delay1s ;... rr a ;... mov p0,a ;... call delay1s ;... rr a ;... mov p0,a ;... call delay1s ;... rr a ;Akkuinhalt um eine Bitstelle nach RECHTS rotieren => 00000001 mov p0,a ;... call delay1s ;... jmp loop ;Rücksprung zum Marker 'loop' ;************************************************************************************************************** ;*******************Unterprogramm delay1s********************************************************************** ;************************************************************************************************************** org 0300h ;Startspeicherzelle für 'delay1s' festlegen delay1s: mov r1,#0fah ;Register R1 mit FA(hex) laden m1: djnz r1,m2 ;R1 dekrementieren und zu Marker m2 springen, wenn R1 nicht 00(hex) ist ret ;Rücksprung ins Hauptprogramm m2: mov r2,#28h ;Register R2 mit 28(hex) laden m3: djnz r2,m4 ;R2 dekrementieren und zu Marker m4 springen, wenn R2 nicht 00(hex) ist jmp m1 ;Sprung zu Marker m1 m4: mov r3,#64h ;Register R3 mit 64(hex) laden m5: djnz r3,m5 ;R3 dekrementieren und zu Marker m5 springen, wenn R3 nicht 00(hex) ist jmp m3 ;Sprung zu Marker m3 end ;ENDE des Programms