当前位置:文档之家› 接口技术实验3报告

接口技术实验3报告

上海大学计算机学院
《计算机接口技术》实验3
专业:计算机科学与技术
班级:周一1~3节
姓名:
学号:
计算机工程与科学学院
报告日期 2012 年 10 月 27 日
实验名称: 可编程并行接口8255 实验
一、…
二、实验目的
了解可编程并行接口芯片8255 的内部结构、工作方式、初始化编程及应用。

(1) 流水灯实验:利用8255 的A 口、B 口循环点亮发光二极管。

(2) 交通灯实验:利用8255 的A 口模拟交通信号灯。

(3) I/O 输入输出实验:利用8255 的A 口读取开关状态,8255 的B 口把状态送发光二极管显示。

三、实验原理
1、8255A 的内部结构:
(1)数据总线缓冲器:这是一个双向三态的8 位数据缓冲器,它是8255A 与微机系统数据总线的接口。

输入输的数据、CPU 输出的控制字以及CPU 输入的状态信息都是通过这个缓冲器传送的。

(2)三个端口A,B 和C:A 端口包含一个8 位数据输出锁存器和缓冲器,一个8 位数据输入锁存器。

B 端口包含一个8 位数据输入/输出锁存器和缓冲器,一个8 位数据输入缓冲器。

C 端口包含一个8 位数据输出锁存器及缓冲器,一个8 位数据输入缓冲器(输入没有锁存器)。

>
(3)A 组和B 组控制电路:根据CPU 输出的控制字来控制8255 工作方式的电路,它们共用一个端口地址相同的控制字寄存器,接收CPU 输出的一字节方式控制字或对C口按位复位命令字。

方式控制字的高5 位决定A 组工作方式,低3 位决定B 组的工作方式。

对C 口按位复位命令字可对C 口的每一位实现置位或复位。

A 组控制电路控制A 口和C 口上半部,B 组控制电路控制B 口和C 口下半部。

(4)读写控制逻辑:用来控制把CPU 输出的控制字或数据送至相应端口,也由它来控制把状态信息或输入数据通过相应的端口送到CPU。

2、8255A 的工作方式:
方式0—基本输入输出方式;
方式1—选通输入输出方式;
方式2—双向选通输入输出方式。

三、实验步骤

1、流水灯实验:
(1) 实验连线
该模块的WR、RD 分别连到总线接口模块的IOWR、IORD。

该模块的数据( AD0 ~AD7)、地址线(A0~A7)分别连到总线接口模块的数据(LAD0~QD7)、地址线(LA0~LA7)。

8255 模块选通线CE 连到总线接口模块的28H。

(系统已接好以上线路。

)
请将8255 的PB0~PB7 连到发光二极管的L1~L8。

(2) 查找实验使用的源程序:ShiftLed文件夹;
(3) 编译链接运行可执行程序,观察记录发光二极管情况;
(4) 寻找并修改参数,改变流水灯的点亮频率,记录相关语句。

2、交通灯实验:
(1) 实验连线:
系统已接好数据、地址及控制线路。

请连线8255 的PA0-L1(黄灯)、PA1-L2(绿灯)、PA2-L3(红灯)、PA3-L7(黄灯)、PA4-L8(绿灯)、PA5-L9(红灯)。


(2) 查找实验使用的源程序:Traxffic文件夹;
(3) 编译链接运行可执行程序,观察发光二极变化情况,记录红绿灯的变化时间;
(4) 寻找并修改参数,改变黄灯的闪烁次数为8次及加快闪烁速度,记录相关语句及所在位置。

(5)修改程序,改变交通灯状态跟现实一样。

(东西方向:绿灯闪,变黄灯,再变红灯;南北方向:东西方向黄灯时,红黄灯亮,再变绿灯。

)
3、I/O PA控制PB实验:
(1) 实验连线
系统已接好数据、地址及控制线路。

请连接8255 的PA0~PA7 接开关K0~K7,8255 的PB0~PB7 接发光二极管L1~L8。

(2) 打开源程序建立工程,在Kaiguan文件夹;
(3) 编译并生成可执行程序,运行程序,拨动开关,观察发光二极管与开关的关系;
*
(4) 查看源程序,尝试改变开关控制方式,记录相关语句。

四、分析与体会
1、实验结果分析
实验一:修改如下:数字越大越慢,频率为1/900 Hz。

实验二:修改的部分的代码如下
\"
#ifdef _DEBUG
#
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define P8255A 0x28
#define P8255B 0x29
#define P8255C 0x2a
#define P8255MODE 0x2b
#define P8255CntW 0x90
"
CWinThread *Thread_Comd; ." menu item to system menu.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
(IDS_ABOUTBOX);
if (!())

{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
The framework does this automatically
For MFC applications using the document/view model,
void CKaiguanDlg::OnPaint()
{
)
if (IsIconic())
{
CPaintDC dc(this); HCURSOR CKaiguanDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CKaiguanDlg::OnOK()
{
// TODO: Add extra validation here
if (!ISSTART) {
$
ISSTART=true;
Thread_Comd=AfxBeginThread(Comd,NULL,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPEN DED); //创建KEYDOWN线程
Thread_Comd->ResumeThread();
}
else
{
ISSTART=false;
}
// CDialog::OnOK();
}
[
void CKaiguanDlg::OnCancel()
{
// TODO: Add extra cleanup here
// ISSTART=false;
// Sleep(100);
// if(hDevice)
// CloseHandle(hDevice);
CDialog::OnCancel();
}
不成功
2、问题思考
1、交通灯模拟实验中初始状态是怎样的
初始东西方向,南北方向均亮红灯,然后南北方向转为点亮绿灯,然后南北方向转为黄灯,黄灯闪烁5次,,然后东西方向转为绿灯,南北方向转为红灯,,东西方向转为黄灯,黄灯闪烁5次后,东西方向转为红灯,南北方向转为绿灯,重复以上循环。

2、以上三个实验中8255A的数据端口和控制端口地址是什么
都是0x28,0x2b
3、三个实验中8255A的控制方式字分别是什么
0X80H,OX80H,0X90H
3、体会
这次实验还是出了点小状况。

第一个实验很快就做好,第二个实验不算成功。

虽然程序修改正确,但是连续坏了三个灯,连续接了两次线,还是不行。

下次试验我打算和同桌合作。

相关主题