### 实验2 8255输入输出实验
#### 实验背景
本次实验的主要目的是让学生了解8255可编程并行口芯片的基本结构及其编程方法,并通过具体的实验任务掌握如何利用8255实现输入/输出功能。实验中使用的8255芯片具有三个八位的并行I/O口,可以通过不同的配置实现多种工作模式。
#### 实验目标
1. **理解8255芯片的工作原理**:熟悉8255芯片的内部结构、引脚功能以及三种工作方式。
2. **掌握8255编程方法**:学习如何通过编写程序来配置8255的工作方式,并进行输入输出操作。
3. **实际应用实践**:
- 使用8255的一个端口接收外部开关的状态,并将该状态通过另一个端口输出到LED灯上。
- 实现一个循环灯的功能,并能通过外部开关控制循环灯的启动和停止。
#### 实验准备
1. **实验设备**:
- PC机(基于Windows系统)
- 伟福Lab6000型开放式通用实验仿真实验仪
2. **实验电路连接**:
- 8255的CS/接地址译码/CS0,因此命令字地址为8003H,PA口地址为8000H,PB口地址为8001H,PC口地址为8002H。
- PA0-PA7(PA口)接LED0-LED7(LED),PB0-PB7(PB口)接K0-K7(开关量)。
- 数据线、读/写控制、地址线、复位信号已在实验板上预先连接好。
#### 实验步骤与程序设计
##### 任务1:开关状态读取与LED灯输出
1. **硬件连接**:
- PB口接开关(K0-K7)。
- PA口接LED灯(LED0-LED7)。
2. **程序设计**:
- 初始化8255,设置PB口为输入,PA口为输出。
- 无限循环中,读取PB口的开关状态,并将其输出到PA口的LED灯上。
```assembly
Paequ8000h ; PA口地址
Pbequ8001h ; PB口地址
Pcequ8002h ; PC口地址
Pcontrolequ8003h ; 控制字地址
Codesegment
Assumecs:code
Start:
moval,10000010b ; 设置PB为输入,PA为输出
Movdx,Pcontrol
Outdx,al
c:
movdx,Pb
inal,dx ; 读取PB口的开关状态
movdx,Pa
outdx,al ; 将状态输出到PA口
jmpc
codeends
endstart
```
##### 任务2:循环灯的实现及控制
1. **硬件连接**:
- PB0(K0)用于控制循环灯的启动和停止。
- PA口连接LED灯。
2. **程序设计**:
- 初始化8255,设置PA口为输出,PB口为输入。
- 通过读取PB口的状态判断是否启动循环灯功能。
- 如果启动,则让PA口上的LED灯依次循环点亮。
```assembly
Paequ8000h
Pbequ8001h
Pcequ8002h
Pcontrolequ8003h
Codesegment
Assumecs:code
Start:
Movbl,1
Moval,82h
Movdx,Pcontrol
Outdx,al
B:
movdx,Pb
Inal,dx
Testal,01h ; 检查K0是否为高电平
Jec ; 如果K0为高电平,则继续执行
Movcx,5000 ; 延时时间
Rolbl,1 ; 循环左移
d:
movdx,Pa
moval,bl
loopd
outdx,al
c:
jmpb
codeends
endstart
```
#### 调试体会及遇到的问题
在实验过程中可能会遇到一些问题,例如:
- **初始化设置**:确保正确设置了8255的工作方式,特别是PB口和PA口的输入输出配置。
- **延时处理**:在循环灯的任务中,如果没有适当的延时,可能观察不到LED灯的循环变化。因此,在循环中加入了延时指令以确保能够清晰地看到LED灯的变化过程。
- **开关检测**:对于开关状态的读取,需要注意输入端口的稳定性,避免因噪声或抖动导致误判。
通过此次实验,不仅可以加深对8255芯片的理解,还能提高解决实际问题的能力。