惠州学院-单片机实验2-P1口转弯灯实验

版权声明:本文为博主原创文章,未经博主允许不得转载 QQ255615。 https://blog.csdn.net/Admin_Chin/article/details/72083133

   计算机科学系实验报告(首页)

课程名称

单片机原理及应用

班级

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发光二极管闪亮时间改变。

猜你喜欢

转载自blog.csdn.net/Admin_Chin/article/details/72083133
今日推荐