-
一、实验目的
1.熟悉基于proteus的8086仿真过程,熟悉8086、74273、74154、8255A等芯片的功能。
2.熟练掌握附件中8086+8255+LED灯电路的工作原理,硬件连接及程序流程。
-
二、实验任务
任务A:定制硬件连接。设你本人学号最后一位数字为N,则8255A的片选信号(CS)需连接到74154的译码输出IO_N上,例如,学号20229999的同学,应将8255A的片选信号(CS)连接到74154的IO9上,以此类推(学号尾数为2的同学不需做此任务)。
任务B:编写程序控制8个LED灯(D7-D0)的周期闪烁。一个闪烁周期中包含的闪烁状态数量由学号长度确定(8个),而闪烁模式本人学号数值确定,每个状态(阶段)保持一段时间。例如本人学号为20229999(8位),则一个闪烁周期包含八个阶段:
学号 | 闪烁模式 | D7-D0亮灯模式 | 备注 |
2 | 阶段1 | D2灯亮,其余灯灭 | |
0 | 阶段2 | D0灯亮,其余灯灭 | |
2 | 阶段3 | D2灯亮,其余灯灭 | |
2 | 阶段4 | D2灯亮,其余灯灭 | |
9 | 阶段5 | D0-D7全亮 | 当该位置的学号大于7时,8个灯全亮 |
9 | 阶段6 | D0-D7全亮 | |
9 | 阶段7 | D0-D7全亮 | |
9 | 阶段8 | D0-D7全亮 |
编写代码,并实验验证。
-
三、实验过程
- 任务A中的8255的地址是多少?8086是如何实现寻址的?
地址:
A端口:300
B端口:302
C端口:304
D端口:306
寻址过程:
由于8086地址线存在总线复用的情况,在选址时,将地址送入74273锁存器,为后面的数据传输做准备。然后将地址送入74154中实现4-16译码,ABCD生成16个片选信号,E1接8086M/IO信号,E2接A12-A15或门,当A12-A15全为0且8086选中访问存储器M时74154工作。
2、8255的各输出口的工作模式和连接关系?
首先设定方式字,在命令口输入10010000B,即A口输入,B口和C口均为输出。
PB口作为输出口,连接8个发光二极管,其有四种工作模式:
- 开关K0打开、K1打开,即PA0、PA1为11时, 8086向端口B送入11111111B,表现为D0到D7全亮。
2、开关K0闭合、K1打开,即PA0、PA1为01时, 8086向端口B送入01010101B,表现为D0到D7中偶数序号灯全亮。
3、开关K0打开、K1闭合,即PA0、PA1为10时,从代码可知,程序进入到JISHU分支结构,8086向端口B送入10101010B,表现为D0到D7中奇数序号灯全亮。
3、开关K0闭合、K1闭合,即PA0、PA1为00时,从代码可知,程序进入到QUANLIANG分支结构,8086向端口B送入11111111B,表现为D0到D7全亮。
- 、在没有8254定时器的情况下,闪烁各阶段的延时如何实现?
在向B口输出一个状态的信号的时候,利用循环指令LOOP来将该闪烁状态延时,其中CX的值表示需要延时的相对时间,每次循环都会使得CX值减1。
MOV DX,302H
MOV AL,00000100B
MOV CX,9FFFH
L0: OUT DX,AL ;保持‘2’的输出一段时长
LOOP L0
-
四、实验结果
任务A:
按下开关,正常运行
任务B:
输出20231167:
五、代码附录
CODE SEGMENT PUBLIC 'CODE'
ASSUME CS:CODE
START:
MOV AL,10010000B ;控制字
MOV DX,706H ;8255A的控制口地址
OUT DX,AL
AGAIN:
MOV DX,700H ;8255A的A口地址
IN AL,DX
TEST AL,00000011B ;
JZ QUANLIANG ;K1,K0全闭,LED全亮
TEST AL,00000010B ;
JZ JISHU ;K1闭,K0开,奇数号LED亮
TEST AL,00000001B ;
JZ OUSHU ;K1开,K0闭,偶数号LED亮
QUANMIE:
MOV DX,702H
MOV AL,00000100B
OUT DX,AL
CALL DELAY10
MOV DX,702H
MOV AL,00000000B
OUT DX,AL
CALL DELAY10
MOV DX,702H
MOV AL,00000100B
OUT DX,AL
CALL DELAY10
MOV DX,702H
MOV AL,00001000B
OUT DX,AL
CALL DELAY10
MOV DX,702H
MOV AL,00000001B
OUT DX,AL
CALL DELAY10
MOV DX,702H
MOV AL,00000001B
OUT DX,AL
CALL DELAY10
MOV DX,702H
MOV AL,01000000B
OUT DX,AL
CALL DELAY10
MOV DX,702H
MOV AL,10000000B
OUT DX,AL
CALL DELAY10
JMP AGAIN
JISHU:
MOV DX,702H
MOV AL,10101010B
OUT DX,AL
JMP AGAIN
OUSHU:
MOV DX,702H
MOV AL,01010101B
OUT DX,AL
JMP AGAIN
QUANLIANG:
MOV DX,702H
MOV AL,11111111B
OUT DX,AL
JMP AGAIN
delay10 proc
mov cx,882
loop $
ret
delay10 endp
CODE ENDS