我的单片机LED灯的端口为P20-P27
1 点亮LED
;MOV A,#0FEH ;1111 1110
;MOV P2,A
;CLR P2.0 ;把P2.0清零,相当于输出低电平
;CLR P2.6
ORG 0000H ; 程序开始的起始位置
MOV P2,#0AAH
JMP $ ;跳到当前位置
END
ORG 0000H
MAIN:
MOV P2,#0AAH
RET
JMP MAIN
END
2 LED灯闪烁
ORG 0000H
MAIN:
MOV P2,#0AAH
CALL DALAY
MOV P2,#0FFH
CALL DALAY
JMP MAIN
;DALAY是延迟函数,会延迟一定的时间
DALAY: MOV R5,#25
D1: MOV R6,#100
D2: MOV R7,#100
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END
3 流水灯
ORG 0000H
MAIN:
MOV R0,#8
MOV A,#0FEH
LOOP:
MOV P2,A
CALL DALAY
RL A
DJNZ R0,LOOP
JMP MAIN
DALAY: MOV R5,#25
D1: MOV R6,#100
D2: MOV R7,#100
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END
初始A = 1111 1110
执行 RL A 后,A = 1111 1101
RL指令
RL = Rotate Left(循环左移)
移动方式:最高位→最低位,其他位向左移动一位
4 流水灯2
流水灯执行后,所有LED闪烁两次
ORG 0000H
MAIN:
MOV R0,#8
MOV A,#0FEH
LOOP:
MOV P2,A
CALL DALAY
RL A
DJNZ R0,LOOP
MOV R1,#3
MOV A,#00H
LOOP1:
MOV P2,A
CALL DALAY
CPL A
DJNZ R1,LOOP1
JMP MAIN
DALAY: MOV R5,#25
D1: MOV R6,#100
D2: MOV R7,#100
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END
CPL指令
CPL A 的作用是:对累加器A按位取反(逻辑非)
指令名称:Complement Accumulator
操作:A ← NOT A(A的每一位取反)
二进制效果:0→1,1→0