P1口转弯灯实验
一、实验目的
进一步了解P1口的使用,学习汇编语言编程方法及调试技巧。
二、实验目的
P1.0接开关上拨为5V,左转弯灯闪亮,P1.1接开关为5V时右转弯灯闪亮,P1.0,P1.1接开关同时接5V或接地时,转弯灯均不闪亮。
三、实验程序框图
四、实验原理图
五、实验步骤
1、P1.0 接开关K1,P1.1接开关K2,用双头线将P1.4~P1.7分别接到发光二极管L1、L2、L7、L8;
2、连续运行程序HW02.asm,拨动开关K1、K2,应看到转弯灯正确闪亮;
3、再用单步方式调试本程序时需修改延时子程序,(例可把延时程序第一个字节改成返回指令22H),以便观察。
五、实验结果
程序源代码
ORG 0000H
LJMP PX00
ORG 0080H
PX00: MOV P1,#0FFH ;初始化
PX03: MOV A,P1
MOV B,A
ANL A,#03H
CJNE A,#01H,PX01 ;满足只是P1.0为高条件
JB 00H,PX04 ;闪烁标志位
CLR P1.4
CLR P1.5 ;开右灯
SETB P1.6
SETB P1.7 ;关左灯
MOV R2,#20H
LCALL DELY ;延时
SETB 00H ;置标志位
LJMP PX03 ;继续查找状态
PX04: SETB P1.4
SETB P1.5
SETB P1.6
SETB P1.7 ;关灯
MOV R2,#20H
LCALL DELY ;延时
CLR 00H ;清标志位
AJMP PX03 ;继续查找状态
PX01: CJNE A,#02H,PX02 ;满足只是P1.1为高条件吗?
JB 01H,PX05 ;判断标志位
SETB P1.4
SETB P1.5 ;开左灯
CLR P1.6
CLR P1.7 ;关右灯
MOV R2,#20H
LCALL DELY ;延时
SETB 01H ;置标志位
LJMP PX03 ;继续查找
PX05: SETB P1.4
SETB P1.5
SETB P1.6 ;关灯
SETB P1.7
MOV R2,#20H
LCALL DELY ;延时
CLR 01H ;置标志位
LJMP PX03 ;继续查找状态
PX02: SETB P1.4
SETB P1.5
SETB P1.6
SETB P1.7 ;关灯
LJMP PX03 ;继续
DELY: PUSH 02H ;延时
DEL2: PUSH 02H
DEL3: PUSH 02H
DEL4: DJNZ R2,DEL4
POP 02H
DJNZ R2,DEL3
POP 02H
DJNZ R2,DEL2
POP 02H
DJNZ R2,DELY
RET
END
实验现象及截图
实验现象:在未拨动K1与K2开关时,P1各个LED灯不亮;当拨动开关K1,关闭开关K2时,P1左转向灯亮(L1与L2);当关闭开关K1,拨动开关K2时,P1右转向灯亮(L7与L8);当同时拨动开关K1与K2时,P1各个LED灯不亮。
实验截图
未拨动K1与K2开关
拨动开关K1,关闭开关K2
关闭开关K1,拨动开关K2
同时拨动开关K1与K2
更改程序源代码
ORG 0000H
LJMP PX00
ORG 0080H
PX00: MOV P1,#0FFH ;初始化
PX03: MOV A,P1
MOV B,A
ANL A,#03H
CJNE A,#01H,PX01 ;满足只是P1.0为高条件
JB 00H,PX04 ;闪烁标志位
CLR P1.4
CLR P1.5 ;开右灯
SETB P1.6
SETB P1.7 ;关左灯
MOV R2,#80H
LCALL DELY ;延时
SETB 00H ;置标志位
LJMP PX03 ;继续查找状态
PX04: SETB P1.4
SETB P1.5
SETB P1.6
SETB P1.7 ;关灯
MOV R2,#80H
LCALL DELY ;延时
CLR 00H ;清标志位
AJMP PX03 ;继续查找状态
PX01: CJNE A,#02H,PX02 ;满足只是P1.1为高条件吗?
JB 01H,PX05 ;判断标志位
SETB P1.4
SETB P1.5 ;开左灯
CLR P1.6
CLR P1.7 ;关右灯
MOV R2,#80H
LCALL DELY ;延时
SETB 01H ;置标志位
LJMP PX03 ;继续查找
PX05: SETB P1.4
SETB P1.5
SETB P1.6 ;关灯
SETB P1.7
MOV R2,#80H
LCALL DELY ;延时
CLR 01H ;置标志位
LJMP PX03 ;继续查找状态
PX02: SETB P1.4
SETB P1.5
SETB P1.6
SETB P1.7 ;关灯
LJMP PX03 ;继续
DELY: PUSH 02H ;延时
DEL2: PUSH 02H
DEL3: PUSH 02H
DEL4: DJNZ R2,DEL4
POP 02H
DJNZ R2,DEL3
POP 02H
DJNZ R2,DEL2
POP 02H
DJNZ R2,DELY
RET
END
实验现象:更改延时程序,是LED发光二极管闪亮时间改变。
五、实验体会
此时实验较为简单,在按照电路图连线,接着运行代码指令即可,但是修改程序,使得延时增加,LED发光二极管闪亮时间改变,就涉及到DJNZ这条指令。DJNZ RN,REL 是一条件转移指令,先将工作寄存器Rn中的数减“1”,判断结果是否为“0”,不为“0”程序就跳转到行标为REL的地方执行,否则,为“0”就不转移,利用这条指令的功能修改增大R2寄存器变量的值,通过4个嵌套循环中使用DJNZ指令,这样就能使得延时增加,LED发光二极管闪亮时间改变。
发表吐槽
你肿么看?
既然没有吐槽,那就赶紧抢沙发吧!