红绿灯实验报告
微机原理与接口技术实
验报告
综合实验 红绿灯仿真及实现
专业:电气工程及其自动化 班级: 电气1311
学号: [1**********]6 姓名: 龚玉辛
预习报告成绩: 实验成绩:
实验日期及时间:(1) 2016年5月20日
(2) 2016年5月26日 (3)
机位号:
一 实验一: 在Proteus 仿真实现交通信号灯系统。
(1) 交通信号灯系统设计描述(实现内容)
a) 在DATAS 数据段内可以任意初始化红灯,绿灯,黄灯所要显示的秒数,实现通用化。。
b) 紧急情况下按下按钮,所有红灯亮,数显管全部显示0 c) 紧急情况解除后,恢复正常,用另一个按钮(8259中断)
(2) P roteus 中实现原理图
所用元件:7SEG-BCD 、74LS138、74LS373、8086、8253A 、8255A 、
8259、BUTTON 、LED-GREEN 、LED-YELLOW 、LED-RED.
(3) 源程序清单
DATAS SEGMENT
hong DB 55
lv dW 52
huang db 2h,1h,0h
z=$-huang
zt1 db ?
zt2 db ?
ZT3 DB ?
DATAS ENDS
STACK SEGMENT 'STACK'
SUR1 DB 1000 DUP (? )
STACK ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START :
MOV AX,DATAS
MOV DS,AX
CLI
PUSH DS
mov al,80h
mov dx,8006H
OUT DX,AL
MOV DX,0A006H
MOV AL,00110001B
OUT DX,AL
MOV DX,0A000H
MOV AL,00
OUT DX,AL
MOV AL,10
OUT DX,AL
MOV AX,0
MOV DS,AX
MOV DI,4*60H
MOV AX,OFFSET NEXT2
MOV [DI],AX
MOV AX,SEG NEXT2
MOV [DI+2],AX
mov ax,0
mov ds,ax
MOV DI,4*61H
MOV AX,OFFSET NEXT1
MOV [DI],AX
MOV AX,SEG NEXT1
MOV [DI+2],AX
MOV DS,AX
MOV DI,4*62H
MOV AX,OFFSET NEXT
MOV [DI],AX
MOV AX,SEG NEXT
MOV [DI+2],AX
POP DS
MOV DX,9000H ;icw1
MOV AL,13H
OUT DX,AL
MOV AL,60H
MOV DX,9002H ;icw2
OUT DX,AL
MOV AL,00010001B ;icw4
OUT DX,AL
MOV AL,00000000B
OUT DX,AL ; ocw 8259
STI
again:
mov dx,8000h
mov al,00100001b
mov zt1,al
out dx,al
MOV CL,HONG
MOV BP,LV
AGAIN2:
MOV AL,CL
MOV AH,0
MOV DL,10
DIV DL
MOV CH,AH
MOV DH,16
MUL DH
ADD AL,CH
mov dx,8002h
out dx,al
初始化 默认
SUB AL,3
MOV AH,0
MOV DL,10
DIV DL
MOV CH,AH
MOV DH,16
MUL DH
ADD AL,CH
MOV DX,8004H
OUT DX,AL
DEC CL
MOV ZT3,0
MOV DX,0A006H
MOV AL,00110001B
OUT DX,AL
MOV DX,0A000H
MOV AL,00
OUT DX,AL
MOV AL,10
OUT DX,AL
again3:
NOP
CMP ZT3,0
JZ AGAIN3 ;yan 1s
DEC BP
jnz AGAIN2
mov dx,8000h
mov al,00010001b
mov zt1,al
out dx,al
MOV SI,OFFSET HUANG
MOV BH,Z
AGAIN4:
MOV AL,[SI]
mov dx,8002h
out dx,al
MOV DX,8004H
OUT DX,AL
MOV DX,0A006H
MOV AL,00110001B
OUT DX,AL
MOV DX,0A000H ; 计数初值
MOV AL,00
OUT DX,AL
MOV AL,10
OUT DX,AL
mov ZT3,0
again5:
NOP
CMP ZT3,0
JZ AGAIN5
INC SI
DEC BH
JNZ AGAIN4
mov dx,8000h
mov al,00001100b
mov zt1,al
out dx,al
MOV CL,HONG
MOV BP,LV
AGAIN6:
MOV AL,CL
MOV AH,0
MOV DL,10
DIV DL
MOV CH,AH
MOV DH,16
MUL DH
ADD AL,CH
mov dx,8004h
out dx,al
MOV AL,CL
SUB AL,3
MOV AH,0
MOV DL,10
DIV DL
MOV CH,AH
MOV DH,16
MUL DH
ADD AL,CH
MOV DX,8002H
OUT DX,AL
DEC CL
MOV DX,0A006H
MOV AL,00110001B
OUT DX,AL
MOV DX,0A000H ; 计数初值
MOV AL,00
OUT DX,AL
MOV AL,10
OUT DX,AL
mov ZT3,0
again7:
NOP
CMP ZT3,0
JZ AGAIN7 ;yan 1s
DEC BP
jnz AGAIN6
mov dx,8000h
mov al,00001010b
mov zt1,al
out dx,al
MOV SI,OFFSET HUANG
MOV BH,Z
AGAIN8:
MOV AL,[SI]
mov dx,8002h
out dx,al
MOV DX,8004H
OUT DX,AL
MOV DX,0A006H
MOV AL,00110001B
OUT DX,AL
MOV DX,0A000H ; 计数初值
MOV AL,00
OUT DX,AL
MOV AL,10
OUT DX,AL
mov ZT3,0
again9:
NOP
CMP ZT3,0
JZ AGAIN9
INC SI
DEC BH
JNZ AGAIN8
jmp again
NEXT PROC FAR
PUSH CX
PUSH DS
push AX
push dx
push bp
push bx
PUSH SI
PUSH DI
PUSHF
MOV DX,8000H
MOV AL,00001001B
OUT DX,AL
MOV AL,0
MOV DX,8002H
OUT DX,AL
MOV DX,8004h
OUT DX,AX
STI
mov zt2,0
aa1:
cmp zt2,0
JE AA1
MOV AL,20H
MOV DX,9000H
OUT DX,AL
CLI
popf
POP DI
POP SI
pop BX
pop BP
pop DX
pop AX
POP DS
POP CX
mov dx,8000h
mov al,zt1
out dx,al
IRET
NEXT ENDP
NEXT1 PROC FAR
PUSH DS
PUSHF
inc zt2
MOV AL,20H
MOV DX,9000H
OUT DX,AL
popf
POP DS
IRET
NEXT1 ENDP
inc zt3
MOV AL,20H
MOV DX,9000H
OUT DX,AL
popf
POP DS
STI
IRET
NEXT2 ENDP
ENDLESS:
JMP ENDLESS
CODES ENDS
END START
NEXT2 PROC FAR
PUSH DS
PUSHF
inc zt3
MOV AL,20H
MOV DX,9000H
OUT DX,AL
popf
POP DS
STI
IRET
NEXT2 ENDP
ENDLESS:
JMP ENDLESS
CODES ENDS
END START
(4) 实验结果及描述:
1) 开始仿真前,改动源程序初始化数据段中hong,lv,huang, 的
数字,便可以设定计时的时间(所记录数字即为设定时间)。按照本人程序设定红灯55s ,绿灯52s ,黄灯3s ,红绿黄灯不断循环计数
2) 按动IR2,所有红灯亮起,数显管全部为0,按动IR1返回至
之前按动IR2中断前的状态。
(5) 仿真遇到的问题及解决方法:
1) 进出堆栈段遵从先进后出,后进先出的原则,否则一定混乱。
2) 为防止中断错误,将计时8253产生的每秒中断至于IR0,优
先级IR0>IR1>IR2
3) 程序数显的通用化,为操作方便,采用了BCD 数显管,并加
以循环计数,利用10进制到16进制的转化,实现了轻松设置数据段3个数字,即可控制红绿黄灯计时秒数。
二 实验二:在实验室实验箱上仿真实现交通信号灯系统。
(1) 交通信号灯系统设计描述(实验内容)
用发光二极管模拟交通信号灯,尽量完成仿真中实现的功能。
(2) 实验接线图
(3) 实验程序清单
DA TAS SEGMENT
A8253 EQU 06c0H; 0#计数器的端口地址
B8253 EQU 06c2H
C8253 EQU 06C4H
J8253 EQU 06C6H; 控制寄存器端口地址
A8255 EQU 0640H; 8255端口A 地址
B8255 EQU 0642H
C8255 EQU 0644H
K8255 EQU 0646H; 控制端口地址
DA TAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
; 中断向量表初始化
PUSH DS
MOV AX,0000H
MOV DS,AX
MOV AX,OFFSET BREAK
MOV SI,003CH
MOV [SI],AX
MOV AX,SEG BREAK
MOV SI,003EH
MOV [SI],AX
CLI
POP DS
; 初始化8259
MOV AL,19H
OUT 20H,AL
MOV AL,08H
OUT 21H,AL
MOV AL,04H
OUT 21H,AL
MOV AL,01H
OUT 21H,AL
MOV AL,7FH
OUT 21H,AL
STI
; 初始化8253
MOV DX,J8253;写计数器0号方式字
MOV AL,00110001B;使用计数器0 ,方式0 ,BCD计数
OUT DX,AL
MOV DX,J8253
MOV AL,01110111B
OUT DX,AL
MOV DX,B8253
MOV AX,1000H
OUT DX,AL
MOV AL,AH
OUT DX,AL
; 初始化8259
MOV DX, K8255
MOV AL, 10001001B; 方式0,A 输出,C 输入
OUT DX, AL
AGAIN:
MOV DX,A8255
MOV AL,00100001B;南北绿灯东西红灯30s
OUT DX,AL
MOV DX,A8253;给计数器0赋初值
MOV AX,3000H;
OUT DX,AL
MOV AL,AH
OUT DX,AL
AGAIN1:
MOV AL,0
MOV DX,C8255
IN AL,DX
AND AL,00000001B
CMP AL,1B
JNZ AGAIN1
MOV DX,A8255
MOV AL,00010001B;南北黄灯东西红灯5s
OUT DX,AL
MOV DX,A8253;给计数器0号赋初值
MOV AX,500H;
OUT DX,AL
MOV AL,AH
OUT DX,AL
AGAIN2:
MOV AL,0
MOV DX,C8255
IN AL,DX
AND AL,00000001B
CMP AL,1H
JNZ AGAIN2
附件2
DA TAS SEGMENT
A8253 EQU 06c0H; 0#计数器的端口地址
B8253 EQU 06c2H
C8253 EQU 06C4H
J8253 EQU 06C6H; 控制寄存器端口地址
A8255 EQU 0640H; 8255端口A 地址
B8255 EQU 0642H
C8255 EQU 0644H
K8255 EQU 0646H; 控制端口地址
DA TAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
; 中断向量表初始化
PUSH DS
MOV AX,0000H
MOV DS,AX
MOV AX,OFFSET BREAK
MOV SI,003CH
MOV [SI],AX
MOV AX,SEG BREAK
MOV SI,003EH
MOV [SI],AX
CLI
POP DS
; 初始化8259
MOV AL,19H
OUT 20H,AL
MOV AL,08H
OUT 21H,AL
MOV AL,04H
OUT 21H,AL
MOV AL,01H
OUT 21H,AL
MOV AL,7FH
OUT 21H,AL
STI
; 初始化8253
MOV DX,J8253;写计数器0号方式字
MOV AL,00110001B;使用计数器0 ,方式0 ,BCD计数
OUT DX,AL
MOV DX,J8253
MOV AL,01110111B
OUT DX,AL
MOV DX,B8253
MOV AX,1000H
OUT DX,AL
MOV AL,AH
OUT DX,AL
; 初始化8259
MOV DX, K8255
MOV AL, 10001001B; 方式0,A 输出,C 输入
OUT DX, AL
AGAIN:
MOV DX,A8255
MOV AL,00100001B;南北绿灯东西红灯30s
OUT DX,AL
MOV DX,A8253;给计数器0赋初值
MOV AX,3000H;
OUT DX,AL
MOV AL,AH
OUT DX,AL
AGAIN1:
MOV AL,0
MOV DX,C8255
IN AL,DX
AND AL,00000001B
CMP AL,1B
JNZ AGAIN1
MOV DX,A8255
MOV AL,00010001B;南北黄灯东西红灯5s
OUT DX,AL
MOV DX,A8253;给计数器0号赋初值
MOV AX,500H;
OUT DX,AL
MOV AL,AH
OUT DX,AL
AGAIN2:
MOV DX,C8255
IN AL,DX
AND AL,00000001B
MOV DX,A8255
MOV AL,00001100B;南北红灯东西绿灯30s
OUT DX,AL
MOV DX,A8253;给计数器0赋初值
MOV AX,3000H;
OUT DX,AL
MOV AL,AH
OUT DX,AL
AGAIN3:
MOV AL,0
MOV DX,C8255
IN AL,DX
AND AL,00000001B
CMP AL,1B
JNZ AGAIN3
MOV DX,A8255
MOV AL,00001010B;南北红灯东西黄灯5s
OUT DX,AL
MOV DX,A8253;给计数器0赋初值
MOV AX,500H;
OUT DX,AL
MOV AL,AH
OUT DX,AL
AGAIN4:
MOV DX,C8255
IN AL,DX
AND AL,00000001B
CMP AL,1H
JNZ AGAIN4
JMP AGAIN
; 中断服务程序
BREAK:
PUSH DX
PUSH AX
MOV DX,A8255
MOV AL,00001001B
OUT DX,AL
MOV AL,20H
OUT 20H,AL
POP AX
POP DX
STI
IRET
CODES ENDS
END START
(4) 实验操作及实验结果描述
a) 由于没有BCD 灯管,无法完成数字显示功能,在原有程
序的基础上,改动8253,8255,8259的初始化地址为实现箱的默认地址,按照仿真中的元件,以及之前做实验的经
验连线即可。
b) 由于只有两个中断单元,固也无法完成全部功能,只能实现每秒中断正常显示,以及中断后全部显示红灯亮起的功能,无法中断返回,因为只有两个中断按钮,MIR6和MIR7 c) 由于没有黄灯,且初始编码时未考虑顺序因素,固灯的颜色显示也不正确
d) 实际结果为正常时,按照时间“红”、“绿”、“黄”灯按次序显示,按下MIR7,则亮两个“红”灯。
(5) 遇到的问题几解决方法
a) 由于编程之前并未考虑更换地址,所以并没有设置静态变量,导致更换变量复杂,最后,仍先设置静态变量,照源程序改动完毕后,再改动地址。
b) 实验设备不足,没有办法实现所有功能。
三 对课程及教学方法的建议
建议老师上课的时候多进行提问互动,进行分小组讨论学习,尽量让每个同学都知道自己学习的什么,不会感到不知所措。