求汇编语言程序:8个开关p0.0——p0.7分别控制8个灯p1.0——p1.7,

一个开关控制一个灯,比如p0.0只控制p1.0,摁一下灯亮,在摁一下灯灭,不摁则灯一直亮。我新手求每步的注释,谢谢!急求!!

你的问题有些矛盾,给你做一个按一下灯亮,再按一下灯灭的程序吧。
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV P1,#0FFH ;灯初始全灭
MOV P0,#0FFH ;按键初始都没有按下
LOOP:
JB P0.0,LOOP1 ;第一个键没按转下一个
JNB P0.0,$ ;第一键按下则等抬起
CPL P1.0 ;第一个灯如果开始灭则点亮,开始亮则灭
LOOP1: ;以下与此类似,不做注释。
JB P0.1,LOOP2
JNB P0.1,$
CPL P1.1
LOOP2:
JB P0.2,LOOP3
JNB P0.2,$
CPL P1.2
LOOP3:
JB P0.3,LOOP4
JNB P0.3,$
CPL P1.3
LOOP4:
JB P0.4,LOOP5
JNB P0.4,$
CPL P1.4
LOOP5:
JB P0.5,LOOP6
JNB P0.5,$
CPL P1.5
LOOP6:
JB P0.6,LOOP7
JNB P0.6,$
CPL P1.6
LOOP7:
JB P0.7,LOOP8
JNB P0.7,$
CPL P1.7
LOOP8:LJMP LOOP
END追问

JNB P0.0,$这是啥意思啊?

追答

这是等待按键抬起,如果键按下去而没有抬起就一直在这里死等,直到抬起为止。

追问

这8个小程序是分别独立的吗?他们之间互相有影响不?

追答

不是独立的,第一段检测第一个键,如果没有按下转到下一个程序段检测第二按键,依次类推
如果检测到键按下,则等待该键抬起,再处理LED灯。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-25
;P2 外接八个按键,P1 外接八个 LED
;按一下键,对应的 LED 亮灭转换一次
;不按则保持状态,常亮或常灭

;程序如下:

ORG 0000H
LJMP START
ORG 000BH
MOV TH0, #HIGH(65536 - 10000) ;10ms@12MHz
MOV TL0, #LOW(65536 - 10000)
MOV A, P2
CPL A
MOV B, A
XRL A, 21H
ANL A, 21H
MOV 22H, A
MOV 21H, B
XRL 20H, A
MOV P1, 20H
RETI
;---------------------------------
START:
MOV TMOD, #01H
MOV TH0, #HIGH(65536 - 10000) ;10ms@12MHz
MOV TL0, #LOW(65536 - 10000)
SETB TR0
MOV IE, #82H

LOP:SJMP LOP

END
相似回答