计算机科学系实验报告(首页)
课程名称 |
单片机原理及应用 |
班级 |
14计2班 |
|||||
实验名称 |
P1口转弯灯实验 |
教导教师 |
王明安 |
|||||
姓名 |
张钦颖 |
学号 |
1414080901218 |
组号 |
17 |
日期 |
2016/10/20 |
|
一、实验目的
进一步了解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
CJNEA,#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: CJNEA,#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
LJMPPX00
ORG0080H
PX00: MOVP1,#0FFH ;初始化
PX03: MOV A,P1
MOVB,A
ANLA,#03H
CJNEA,#01H,PX01 ;满足只是P1.0为高条件
JB00H,PX04 ;闪烁标志位
CLRP1.4
CLRP1.5 ;开右灯
SETBP1.6
SETBP1.7 ;关左灯
MOVR2,#80H
LCALLDELY ;延时
SETB00H ;置标志位
LJMPPX03 ;继续查找状态
PX04: SETBP1.4
SETBP1.5
SETBP1.6
SETBP1.7 ;关灯
MOV R2,#80H
LCALLDELY ;延时
CLR00H ;清标志位
AJMPPX03 ;继续查找状态
PX01: CJNEA,#02H,PX02 ;满足只是P1.1为高条件吗?
JB01H,PX05 ;判断标志位
SETBP1.4
SETBP1.5 ;开左灯
CLRP1.6
CLRP1.7 ;关右灯
MOV R2,#80H
LCALLDELY ;延时
SETB01H ;置标志位
LJMPPX03 ;继续查找
PX05: SETBP1.4
SETBP1.5
SETBP1.6 ;关灯
SETBP1.7
MOV R2,#80H
LCALLDELY ;延时
CLR01H ;置标志位
LJMPPX03 ;继续查找状态
PX02: SETBP1.4
SETBP1.5
SETBP1.6
SETBP1.7 ;关灯
LJMPPX03 ;继续
DELY: PUSH02H ;延时
DEL2: PUSH02H
DEL3: PUSH02H
DEL4: DJNZR2,DEL4
POP02H
DJNZR2,DEL3
POP02H
DJNZR2,DEL2
POP02H
DJNZR2,DELY
RET
END
实验现象:更改延时程序,是LED发光二极管闪亮时间改变。
五、实验体会
此时实验较为简单,在按照电路图连线,接着运行代码指令即可,但是修改程序,使得延时增加,LED发光二极管闪亮时间改变,就涉及到DJNZ这条令。DJNZ RN,REL 是一条件转移指令,先将工作寄存器Rn中的数减“1”,判断结果是否为“0”,不为“0”程序就跳转到行标为REL的地方执行,否则,为“0”就不转移,利用这条指令的功能修改增大R2寄存器变量的值,通过4个嵌套循环中使用DJNZ指令,这样就能使得延时增加,LED发光二极管闪亮时间改变。