8051輸出控制8個LED循環(huán)LED從LED1到LED8再到LED1,每次LED發(fā)光并循環(huán),一個開關(guān)控制引起中斷,電平觸發(fā),中斷后8個LED一起閃5下,然后恢復(fù)到前面的循環(huán),畫出鏈接示意圖,寫出程序(軟件延時循環(huán)5*126*200次控制)
-------
求各位大大幫忙下 小弟剛學(xué)單片機 做不來
;本程序的功能,通過P1口控制8個流水燈,從左循環(huán)到右,再從右循環(huán)到左
;其中并不包括中斷按鍵,這個代碼給你參考參考
;
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 ;將進位位C清0
NEXT1: RLC A ;帶進位左移
MOV PORT,A ;將A中數(shù)據(jù)賦給P2
CALL LATER ;調(diào)用延時程序
DJNZ R4,NEXT1 ;R4=R4-1,R4≠0時,轉(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 ;將進位為清0
NEXT2: RRC A ;帶進位位右移A
MOV P1,A ;將A中數(shù)據(jù)賦給P2
CALL LATER ;調(diào)用延時程序
DJNZ R4,NEXT2 ;R4=R4-1,R4≠0時,轉(zhuǎn)到NEXT2
POP PSW ;出棧到PSW
RET ;子程序結(jié)束,返回主程序
;以下是延時子程序
LATER: MOV R7,#0FFH ;
AD1: MOV R6,#0A0H ;
AD2: DJNZ R6,AD2 ;
DJNZ R7,AD1 ;
RET ;
END
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |