实验三 8255A并行口实验
一、实验目的
1、了解8255A的基本工作方式及特点。
2、学会8255A在计算机系统中的典型应用方法。
二、实验内容
利用8255A的PA端口作为输入口,读取开关状态,并将此状态通过8255A的PB端口再驱动发光二极管显示出来。
三、实验步骤
1、连线:将实验箱上8255A芯片A口的PA0-PA7依次和开关量输入Kl-K8相连,B口的PB0-PB7依次接Ll-L8。
端口地址:A口---FF28H B口---FF29H C口---FF2AH
控制口---FF2BH
2、编辑程序:实验箱上电,打开实验程序,PC机与下位机通信成功,将事先编好的程序编辑输入。
3、调试程序:编译程序,根据提示更正错误;通过后下载程序至实验箱,然后单步运行程序,观察相应寄存器的值的变化,并察看发光二极管的状态与开关状态是否一致,如不一致,分析原因并改正。
4、运行程序:连续运行程序,改变开关状态,观察发光二极管的状态变化,记录结果。
5、实验总结分析:分析实验过程及结果,完成实验报告。
四、编程
CODE SEGMENT
ASSUME CS:CODE
IOCONPT EQU 0FF2BH ;设置控制端口常量
IOBPT EQU 0FF29H ;设置数据端口B地址常量
IOAPT EQU 0FF28H ;设置数据端口A地址常量
ORG 11B0H
START: MOV AL,90H
MOV DX,IOCONPT
OUT DX,AL ;往控制端口写控制字,设置A口工作在方式0输入,B方式0输出
IOLED1: MOV DX,IOAPT
IN AL,DX ;读端口A的数值
MOV DX,IOBPT
OUT DX,AL ;往端口B输出数据
JMP IOLED1
CODE ENDS
END START
五、思考题
1. 利用8255A模拟交通灯系统
2. 利用8255A和实验箱上的8个开关与8个发光二极管设计一个电子抢答器,功能如下:1K1—K7作为抢答输入端,L1—L7为抢答指示器,K8为控制端;2K8闭合为抢答开始信号(此时L8亮);3当正常抢答时,其所对应的发光二极管亮,犯规抢答时(开始信号未发出),其所对应的发光二极管闪烁,无论何种情况,L1—L7中只要有一个发光二极管动作,其他发光二极管均被锁定为熄灭状态;4无论抢答违规与否,只要K8状态变化,L1—L7均复位。
注意:抢答时开关闭合后应紧接着断开(模拟抢答按钮)
第二篇:8255A并行口实验
1. 实验任务
8255的PA、PB端口分别连接8位数码管的段码和位码,程序控制数码管滚动显示一串数字。
2. 电路原理图
C语言源程序
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define PB XBYTE[0x7001]
#define PC XBYTE[0x7002]
#define COM XBYTE[0x7003]
uchar code DSY_CODE_Queue[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e
};
uchar code DSY_Index[]={
0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f8 /
0x01,0x02,0x04,0x08,
0x10,0x20,0x40,0x80};
void DelayMS(uint ms)
{
uchar i;
while(ms--)
for(i=0;i<120;i++);
}
void main()
{
uint i,j,k;
COM=0x80;
while(1)
{
for(j=0;j<40;j++)
{
for(k=0;k<8;k++)
{
PB=DSY_Index[k];
DelayMS(100);
PA=DSY_CODE_Queue[k+1];
DelayMS(1000);
}
}
i=(i+1)%15;
}
}
2. 仿真结果