|
本帖最后由 sjztjk 于 2013-8-17 15:20 編輯
最近做了個小程序試驗,結(jié)果不成功,求高手指點,謝謝!不成功現(xiàn)象為:按下S1時D1與D2同時亮,按下S2時D1與D2同時滅!
程序如下:
ORG 0 ;程序從0地址開始
START: MOV P2,#0FFH ;將P2口設(shè)計為輸入功能,即P2口全部為11111111高電平
;按鍵檢測程序=============================================================
LOOP: JNB P2.0,ON ;檢測P2.0口,若P2.0為低電平(S1按下),則跳至ON處執(zhí)行
JNB P2.1,OFF ;檢測P2.1口,若P2.1為低電平(S2按下),則跳至OFF處執(zhí)行
JNB P2.2,OFF2 ;檢測P2.2口,若P2.2為低電平(S3按下),則跳至OFF2處執(zhí)行
JMP LOOP ;跳至LOOP處形成一個循環(huán)
;開燈子程序===============================================================
ON: CLR P0.0 ;使P0.0清零,D1亮
CALL DELAY ;調(diào)用延時子程序
CLR P0.1 ;使P0.1清零,D2亮
ON1: JB P2.0,LOOP ;檢測P2.0口,若P2.0為高電平(S1放開),則跳至LOOP處執(zhí)行
JMP ON1 ;否則跳至ON1形成一個小循環(huán)
;關(guān)燈子程序===============================================================
OFF: SETB P0.0 ;使P0.0置位,即設(shè)定為1,D1滅
CALL DELAY ;調(diào)用延時子程序
SETB P0.1 ;使P0.1置位,即設(shè)定為1,D2滅
CLR P0.2 ;使P0.2清零,D3亮
OFF1: JB P2.1,LOOP ;檢測P2.1口,若P2.1為高電平(S2放開),則跳至LOOP處執(zhí)行
JMP OFF1 ;否則跳至OFF1形成一個循環(huán)
OFF2: SETB P0.2 ;使P0.2置位,即設(shè)定為1,D3滅
END ;程序結(jié)束
;1秒延時子程序(12MHz晶振)
DELAY: MOV R1,#50
DEL0: MOV R2,#91
DEL1: MOV R3,#100
DJNZ R3,$
DJNZ R2,DEL1
DJNZ R1,DEL0
RET
END
|
|