哈工大单片机实验报告 下载本文

MOV P1, #0FFH ZA: SETB P1.7 ACALL DELAY CLR P1.7 ACALL DELAY JNB P3.2, ZA SETB EX0 RETI END

实验七 8255控制交通灯

一、实验目的

了解8255芯片的结构及编程方法,学习模拟交通灯控制的实现方法。

二、实验内容

用8255做输出口,控制十二个发光二极管燃灭,模拟交通灯管理。

三、程序框图

四、实验电路

-36-

五、实验过程

假设一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1东西绿灯通车,南北红灯。过一段时间转状态2,东西绿灯灭,黄灯闪烁几次,南北仍然红灯。再转状态3,南北绿灯通车,东西红灯。过一段时间转状态 4,南北绿灯灭,闪几次黄灯,延时几秒,东西仍然红灯。最后循环至状态1。

实验中调用延时子程序实现交通灯点亮持续一段时间再转变。通过对输出口写入特定数值,实现灯亮灭的控制。延时程序可通过对R2寄存器的压栈和出栈操作实现。在程序实现的过程中,需要对现场进行保护和恢复。交通灯闪烁由调用较短延时实现。

六、实验结果及分析

在连续运行方式下,初始态为四个路口的红灯全亮之后,东西路口的绿灯亮南北路口的红灯亮,东西路口方向通车。延时一段时间后东西路口的绿灯熄灭,黄灯开始闪耀。闪耀若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北路口方向开始通车,延时一段时间后,南北路口的绿灯熄灭,黄灯开始闪耀。闪耀若干次后,再切换到东西路口方向。之后重复以上过程。

问题回答:东西方向的红灯是L6和L12。

七、实验源程序

ORG 0BB0H

;制定一个空间

;设置堆栈首地址 ;写控制字的地址FFDB

D0: MOV SP, #60H MOV DPTR, #0FFDBH

MOV A, #80H

;控制字A口输出工作在方式0 ,C口高4位输出,C口低4位输出工作在方式0,B口输出 MOVX @DPTR, A MOV DPTR, #0FFD8H

MOV A, #0B6H MOVX @DPTR, A INC DPTR

MOV A, #0DH MOVX @DPTR, A MOV R2, #25H LCALL DELY D1: MOV DPTR, #0FFD8H MOV A, #75H

MOVX @DPTR, A INC DPTR

MOV A, #0DH

;00001101点亮3号灯 ;01110101点亮5 9 11 ;00001101点亮3号灯 ;点亮4个红灯 ;设定一个延时时间 ;延时

;101100110点亮6 9 12号灯 ;设置控制字

-37-

MOVX @DPTR, A MOV R2, #55H LCALL DELY MOV R7, #05H D2: MOV DPTR, #0FFD8H

MOV A, #0F3H ;东西绿灯亮,南北红灯亮 ;设定一个延时时间 ;延时

;设定闪烁次数

;11110011 点亮9 10

MOVX @DPTR, A INC DPTR

MOV A, #0CH MOVX @DPTR, A MOV R2, #20H LCALL DELY MOV DPTR, #0FFD8H

MOV A, #0F7H MOVX @DPTR, A INC DPTR

MOV A, #0DH MOVX @DPTR, A MOV R2, #20H

LCALL DELY DJNZ R7,D2 MOV DPTR, #0FFD8H MOV A, #0AEH

MOVX @DPTR, A INC DPTR

MOV A, #0BH MOVX @DPTR, A MOV R2, #55H

LCALL DELY MOV R7, #05H D4: MOV DPTR, #0FFD8H

MOV A, #9EH ;1100点亮3 4

;东西黄灯亮,南北红灯亮 ;设定一个延时时间 ;延时

;11110111点亮9号灯

;00001101点亮3号灯 ;南北红灯亮

;延时

;闪烁次数未到继续

;10101110点亮6 8 12

;1011点亮2号

;东西红灯亮,南北绿灯亮

;延时 ;闪烁次数

;10011110点亮6 7 12

-38-

MOVX @DPTR, A INC DPTR

MOV A, #07H MOVX @DPTR, A MOV R2, #20H

LCALL DELY MOV DPTR, #0FFD8H

MOV A, #0BEH MOVX @DPTR, A INC DPTR

MOV A, #0FH MOVX @DPTR, A MOV R2, #20H

LCALL DELY DJNZ R7,D4 LJMP D1 ;--------------------------------------------- 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

;延时

;延时

;闪烁次数未到继续 ;循环

;把1号黄灯灭了 ;东西红灯亮

;10111110点亮6 12——把7号黄灯灭了 ;延时

;0111点亮1号

;东西红灯亮,南北黄灯亮

实验十九 小直流电机调速试验

-39-