|
本帖最后由 sjztjk 于 2013-8-17 15:20 编辑
最近做了个小程序试验,结果不成功,求高手指点,谢谢!不成功现象为:按下S1时D1与D2同时亮,按下S2时D1与D2同时灭!
程序如下:
ORG 0 ;程序从0地址开始
START: MOV P2,#0FFH ;将P2口设计为输入功能,即P2口全部为11111111高电平
;按键检测程序=============================================================
LOOP: JNB P2.0,ON ;检测P2.0口,若P2.0为低电平(S1按下),则跳至ON处执行
JNB P2.1,OFF ;检测P2.1口,若P2.1为低电平(S2按下),则跳至OFF处执行
JNB P2.2,OFF2 ;检测P2.2口,若P2.2为低电平(S3按下),则跳至OFF2处执行
JMP LOOP ;跳至LOOP处形成一个循环
;开灯子程序===============================================================
ON: CLR P0.0 ;使P0.0清零,D1亮
CALL DELAY ;调用延时子程序
CLR P0.1 ;使P0.1清零,D2亮
ON1: JB P2.0,LOOP ;检测P2.0口,若P2.0为高电平(S1放开),则跳至LOOP处执行
JMP ON1 ;否则跳至ON1形成一个小循环
;关灯子程序===============================================================
OFF: SETB P0.0 ;使P0.0置位,即设定为1,D1灭
CALL DELAY ;调用延时子程序
SETB P0.1 ;使P0.1置位,即设定为1,D2灭
CLR P0.2 ;使P0.2清零,D3亮
OFF1: JB P2.1,LOOP ;检测P2.1口,若P2.1为高电平(S2放开),则跳至LOOP处执行
JMP OFF1 ;否则跳至OFF1形成一个循环
OFF2: SETB P0.2 ;使P0.2置位,即设定为1,D3灭
END ;程序结束
;1秒延时子程序(12MHz晶振)
DELAY: MOV R1,#50
DEL0: MOV R2,#91
DEL1: MOV R3,#100
DJNZ R3,$
DJNZ R2,DEL1
DJNZ R1,DEL0
RET
END
|
|