;本程序的功能,通過P1口控制8個(gè)流水燈,從左循環(huán)到右,再從右循環(huán)到左
;其中并不包括中斷按鍵,這個(gè)代碼給你參考參考
;
PORT EQU P1 ORG 0000H ;主程序開始地址0000H AJMP START ;跳轉(zhuǎn)到地址MAIN處執(zhí)行 ORG 0030H ;主程序地址0030H START: CALL LEFT ;設(shè)定左移次數(shù),存放于寄存器R5 CALL RIGHT ;將數(shù)據(jù)FFH賦值給A JMP START ;跳轉(zhuǎn)到START ;以下是左移子程序 LEFT: PUSH PSW ;將PSW壓入堆棧 SETB RS1 ;將RS1置1,同下一條指令一起 ;選定寄存器組2 CLR RS0 ;將RS0置0 MOV R4,#8 ;將數(shù)據(jù)8賦值給R4 MOV A,#0FFH ;將數(shù)據(jù)FFH賦值給A CLR C ;將進(jìn)位位C清0 NEXT1: RLC A ;帶進(jìn)位左移
MOV PORT,A ;將A中數(shù)據(jù)賦給P2 CALL LATER ;調(diào)用延時(shí)程序 DJNZ R4,NEXT1 ;R4=R4-1,R4≠0時(shí),轉(zhuǎn)到NEXT1 POP PSW ;出棧到PSW RET ;子程序結(jié)束,返回主程序 ;以下是右移子程序 RIGHT: PUSH PSW ;PSW壓入堆棧 SETB RS1 ;將RS1置1,同下一條指令一起選定 ;寄存器組2 SETB RS0 ;將RS0置1 MOV R4,#8 ;將數(shù)據(jù)8賦值給R4 MOV A,#0FFH ;將數(shù)據(jù)FFH賦值給A CLR C ;將進(jìn)位為清0 NEXT2: RRC A ;帶進(jìn)位位右移A MOV P1,A ;將A中數(shù)據(jù)賦給P2 CALL LATER ;調(diào)用延時(shí)程序 DJNZ R4,NEXT2 ;R4=R4-1,R4≠0時(shí),轉(zhuǎn)到NEXT2 POP PSW ;出棧到PSW RET ;子程序結(jié)束,返回主程序 ;以下是延時(shí)子程序 LATER: MOV R7,#0FFH ; AD1: MOV R6,#0A0H ; AD2: DJNZ R6,AD2 ; DJNZ R7,AD1 ; RET ; END
|