西安交通大学 接口实验报告.docx
《西安交通大学 接口实验报告.docx》由会员分享,可在线阅读,更多相关《西安交通大学 接口实验报告.docx(37页珍藏版)》请在冰豆网上搜索。
西安交通大学接口实验报告
计算机接口技术
——课内实验报告
物联网31班
2130509005田雨桥
2015年12月11日
实验一:
基本I/O扩展实验
1、实验目的
了解TTL芯片扩展简单I/O口的方法,掌握数据输入输出程序编制的方法。
2、实验内容
预备知识:
74LS244是一种三态输出的8总线缓冲驱动器,无锁存功能,当G为低电平时,
Ai信号传送到Yi,当为高电平时,Yi处于禁止高阻状态。
74LS273是一种8D触发器,当CLR为高电平且CLK端电平正跳变时,D0——
D7端数据被锁存到8D触发器中。
实验原理图:
三、实验说明
利用74LS244作为输入口,读取开关状态,并将此状态通过74LS273再驱动发光二极管显示出来,连续运行程序,发光二极管显示开关状态。
4、实验连线
(1)244的cs连到cpu地址A15,Y7~Y0连到开关K1~K8;
(2)273的cs连到cpu地址A14,Q7~Q0连到发光二极管L1~L8;
(3)该模块的WR.RD连到cpu的WR.RD,数据线AD7~AD0、地址线A7~A0分别与cpu的数据线AD7~AD0、地址线A7~A0相连;
五、实验现象
按照实验流程图完成接线且调试成功后,通过对开关K01到K08可以对应依次控制
LED灯的L1到L8。
即当将开关i上拨时,对应的LED灯i被点亮,开关i下拨时,对应
的LED灯i被熄灭。
开关拨到55H时,将会产生右移LED灯的花样显示。
开关拨到AAH时,将会产生左移LED灯的花样显示。
六、心得体会
通过实验,我学会了如何编写汇编程序来控制端口,更加了解了课内学过的知识,又通过实际操作进而实现基本的输入输出,对自己的汇编编程能力也有了一定的提高。
此外,培养自己排除障碍的能力,通过自己分析和动手来检查障碍。
并且通过观察实验结果了解了输入输出在实际应用上的作用
实验二——A/D转换实验
一、实验题目
基本IO口扩展实验。
二、实验目的
1,熟悉PLX9054操作环境,掌握简单的程序运行方法
2.掌握0809A/D转换芯片的硬件电路和软件编程
三、实验原理
1.实验内容说明
ADC0809的主要性能:
(1)8位逐次逼近型A/D转换器,所有引脚的逻辑电平与TTL电平兼容。
(2)带有锁存功能的8路模拟量转换开关,可对8路0~5V模拟量进行分时切换。
(3)输出具有三态锁存功能。
(4)分辨率:
8位,转换时间:
100μs。
(5)不可调误差:
±1LBS,功耗:
15mW。
(6)工作电压:
+5V,参考电压标准值+5V。
(7)片内无时钟,一般需外加640KHz以下且不低于100KHz的时钟信号。
ADC0809的内部结构:
ADC0809是CMOS的8位模/数转换器,采用逐次逼近原理进行A/D转换,芯片内有模
拟多路转换开关和A/D转换两大部分,可对8路0~5V的输入模拟电压信号分时进行转换。
模拟多路开关由8路模拟开关和3位地址锁存译码器组成,可选通8路模拟输入中的任何
一路,地址锁存信号ALE将3位地址信号ADDA、ADDB、ADDC进行锁存,然后由译码电路
选通其中的一路,被选中的通道进行A/D转换。
A/D转换部分包括比较器、逐次逼近寄存
器(SAR)、256R电阻网络、树状电子开关、控制与时序电路等。
另外ADC0809输出具有
TTL三态锁存缓冲器,可直接连到CPU数据总线上。
ADC0809的多路转换:
在实时控制与实时检测系统中,被控制与被测量的电路往往是几路或几十路,对这些
电路的参数进行模/数、数/模转换时,常采用公共的模数、数模转换电路。
因此,对各路
进行转换是分时进行的。
此时,必须轮流切换各被测电路与模数、数模转换电路之间的通
道,以达到分时切换的功能。
ADC0809转换时序:
首先输入地址选择信号,在ALE信号作用下,地址信号被锁存,产生译码信号,选中
一路模拟量输入。
然后输入启动转换控制信号START(不小于100ns),启动A/D转换。
转换结束,数据送三态门锁存,同时发出EOC信号,在允许输出信号控制下,再将转换结果输出到外部数据总线。
本实验利用实验板上的ADC0809做A/D转换实验,将模拟信号转换成数字信号并在屏幕上显示,调节电位器观察屏幕上显示的变化
2、实验原理图
3、实验步骤
(1)实验连线:
信号源模块短路262.14KHz,CLK0连到AD0809模块的时钟输入端ADCLK。
AD0809模块的ADWR、ADRD连到分别连到ISA总线接口模块的IOWR、IORD。
AD0809模块的数据(AD0~AD7)、地址线(A0~A7)分别连到ISA总线接口模块的数据(LD0~LD7)、地址线(LA0~LA7)。
AD0809模块选通线ADCS连到ISA总线接口模块的0020H。
AD0809模块IN0接到电位器的DCOUT。
(2)运行程序:
0809.ASM,调节电位器观察屏幕的变化。
四、实验结果
完成连线成功运行调试程序后,发现当电位器旋钮旋转时,电脑中AD转换的数值也会发生相应的改变。
五、心得体会
通过这次实验我掌握了a/d转换,同时也练习了编程和软件的使用,有一次巩固了我编程的能力,并且学到了很多知识,也促进了我对接口这门课程的理解,也让课堂的知识没有那么抽象了,变成了实际可操作的过程。
实验三:
可编程定时计数器8254实验
1、实验目的
了解可编程定时器/计数器8254实验了解计数器的硬件连接方法及时序关系;
掌握8254的各种模式的编程及其原理,用示波器观察各信号之间的时序关系。
二、实验内容
将32Hz的晶振频率作为8254的时钟输入,利用定时器8254产生1Hz的方波,发光二极管不停闪烁,用示波器可看到输出的方波。
8254是一种可编程的定时器/计数器芯片,它具有3个独立的16位计数器通道,每个计数器都可以按照二进制或二-十进制计数,每个计数器都有6种工作方式,计数频率可高达24MHz,芯片所有的输入输出都与TTL兼容。
计数器都有6种工作方式:
方式0—计数过程结束时中断;方式1—可编程的单拍脉冲;方式2—频率发生器;方式3—方波发生器;方式4—软件触发;方式5—硬件触发。
6种工作方式主要有5点不同:
一是启动计数器的触发方式和时刻不同;二是计数过程中门控信号GATE对计数操作的影响不同;三是OUT输出的波形不同;四是在计数过程中重新写入计数初值对计数过程的影响不同;五是计数过程结束,减法计数器是否恢复计数初值并自动重复计数过程的不同。
3、实验原理
8254是Intel公司生产的可编程间隔定时器。
是8253的改进型,比8253具有更优
良的性能。
8254具有以下基本功能:
(1)有3个独立的16位计数器。
(2)每个计数器可按二进制或十进制(BCD)计数。
(3)每个计数器可编程工作于6种不同工作方式。
(4)8254每个计数器允许的最高计数频率为10MHz(8253为2MHz)。
(5)8254有读回命令(8253没有),除了可以读出当前计数单元的内容外,还可以
读出状态寄存器的内容。
(6)计数脉冲可以是有规律的时钟信号,也可以是随机信号。
计数初值公式为:
n=fCLKi÷fOUTi、其中fCLKi是输入时钟脉冲的频率,fOUTi是输出波形的频率。
下图是8254的内部结构框图和引脚图,它是由与CPU的接口、内部控制电路和三个
计数器组成。
8254的工作方式如下述:
(1)方式0:
计数到0结束输出正跃变信号方式。
(2)方式1:
硬件可重触发单稳方式。
(3)方式2:
频率发生器方式。
(4)方式3:
方波发生器。
(5)方式4:
软件触发选通方式。
(6)方式5:
硬件触发选通方式。
8254的控制字有两个:
一个用来设置计数器的工作方式,称为方式控制字;另一个用来设
置读回命令,称为读回控制字。
这两个控制字共用一个地址,由标识位来区分。
8254控制字:
8254的方式控制字格式:
D7
D6
D5
D4
D3
D2
D1
D0
计数器选择
读/写格式选择
000-方式0
计数码制选择
00-计数器0
01-计数器1
10-计数器2
11-输出控制字标志
00-锁存计数器
01-读/写低8位
10-读/写高8位
11-先读/写低8位再读/写低8位
001-方式1
0-二进制
1-十进制
010-方式2
011-方式3
100-方式4
101-方式5
8254读出控制字格式
D7
D6
D5
D4
D3
D2
D1
D0
1
1
0-锁存计数值
0-锁存状态信息
计数器选择(同方法控制字)
0
状态字格式
D7
D6
D5
D4
D3
D2
D1
D0
OUT引脚现行状态0-高电平1-低电平
计数初值是否装入1-无效计数0-计数有效
计数器方式(同方式控制字)
实验流程图:
4、实验现象
按照实验流程图完成接线且调试成功后,可以观察到二极管1L每秒一次有规律地亮灭交替地闪烁。
当改变信号源模块的频率或者修改计数器的计数初值时,二极管1L闪烁的频率也随之改变。
通过改变频率,可以观测到定时器在该实验中起到的定时中断的作用。
5、心得体会
通过这次实验我对于8254芯片的功能有了更加深刻的认识。
动手能力有了更加进一步的提升。
实验四可编程并行接口8255实验(交通灯)
一、实验目的
了解可编程并行接口芯片8255的内部结构、工作方式、初始化编程及应用。
二、实验说明
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而言,共用一个端口地址相同的控制字寄存器,接收CPU输出的一字节方式控制字或对C口按位复位字命令。
方式控制字的高5位决定A组工作方式,低3位决定B组的工作方式。
对C口按位复位命令字可对C口的每一位实现置位或复位。
A组控制电路控制A口和C口上半部,B组控制电路控制B口和C口下半部。
(4)读写控制逻辑:
用来控制把CPU输出的控制字或数据送至相应端口,也由它来控制把状态信息或输入数据通过相应的端口送到CPU。
2、8255A的工作方式
方式0—基本输入输出方式;方式1—选通输入输出方式;方式2—双向选通输入输出方式。
3、8255A的状态字
4、8255A的控制字
三、实验原理图
四、实验步骤
(1)实验连线:
该模块的WR、RD分别连到ISA总线接口模块的IOWR、IORD。
该模块的数据(AD0~AD7)、地址线(A0~A7)分别连到ISA总线接口模块的数据(LD0~LD7)、地址线(LA0~LA7)。
8255模块选通线CE连到ISA总线接口模块的0000H。
8255的PA0-L7、PA1-L6、PA2-L5、PA3-L3、PA4-L2、PA5-L1。
(2)运行程序:
Tracffic.ASM,观察发光二极管。
五、实验现象
共有两组灯,每组各有红黄绿色灯各一个,当第一组灯显示红色时,第二组先显
示黄色然后绿灯闪烁5下。
紧接着,第二组显示红灯,第一组显示黄灯,然后,第二组显示绿灯,并闪烁5下。
照此规律循环显示下去。
六、心得体会
通过这次实验我对8255芯片的功能有了更加深刻的了解与认识。
同时自己的编程动手能力有了更加进一步的提升,也可以用计算机控制实现很多实际的功能。
附页:
程序源代码
实验一:
基本I/O扩展实验
MY_STACKSEGMENTPARA'STACK'
DB100DUP(?
)
MY_STACKENDS
MY_DATASEGMENTPARA'DATA'
IO_9054base_addressDB4DUP(0);PCI卡9054芯片I/O基地址暂存空间
IO_base_addressDB4DUP(0);PCI卡I/O基地址暂存空间
pcicardnotfindDB0DH,0AH,'pcicardnotfindoraddress/interrupterror!
!
!
',0DH,0AH,'$'
GOODDB0DH,0AH,'TheProgramisExecuting!
',0DH,0AH,'$'
LS244DW00000H
LS273DW00020H
RADB?
LBDB?
DELAY_SETEQU0FFFH;延时常数
MY_DATAENDs
MY_CODESEGMENTPARA'CODE'
MY_PROCPROCFAR
ASSUMECS:
MY_CODE,DS:
MY_DATA,SS:
MY_STACK
MAIN:
.386;386模式编译
MOVAX,MY_DATA
MOVDS,AX
MOVES,AX
MOVAX,MY_STACK
MOVSS,AX
CALLFINDPCI;自动查找PCI卡资源及IO口基址
MOVCX,wordptrIO_base_address
;MOVCX,0E800H;直接加入(E800:
本机PCI卡IO口基址)
ADDLS244,CX;PCI卡IO基址+偏移
ADDLS273,CX
MOVRA,7FH
MOVLB,0FEH
READ1:
MOVDX,LS244;读取开关状态
INAL,DX
CMPAL,55H;如果是55右移
JEREAD2
CMPAL,0AAH;如果是AA左移
JEREAD3
NOTAL;取反
JMPREAD4
READ2:
CALLRIGHT
JMPREAD4
READ3:
CALLLEFT
READ4:
MOVDX,LS273
OUTDX,AL;送LED显示
CALLDELAY
CALLBREAK
JMPREAD1
MY_PROCENDp
;
RIGHTPROCNEAR
MOVAL,RA
RORAL,1
MOVRA,AL
RET
RIGHTENDP
LEFTPROCNEAR
MOVAL,LB
ROLAL,1
MOVLB,AL
RET
LEFTENDP
;
;*****************************************************************************
;/*按任意键退出*/
;*****************************************************************************
;
BREAKPROCNEAR;按任意键退出
PUSHF
PUSHAX
PUSHDX
MOVAH,06H
MOVDL,0FFH
INT21H
JERETURN
MOVAX,4C00H
INT21H
RETURN:
POPDX
POPAX
POPF
RET
BREAKENDP
;
;*****************************************************************************
;/*延时程序*/
;*****************************************************************************
;
DELAYPROCNEAR;延时程序
PUSHF
PUSHDX
PUSHCX
MOVDX,DELAY_SET
D1:
MOVCX,-1
D2:
DECCX
JNZD2
DECDX
JNZD1
POPCX
POPDX
POPF
RET
DELAYENDp
;
;*****************************************************************************
;/*找卡子程序*/
;*****************************************************************************
;
;FUNCTIONCODE
IO_port_addreEQU0CF8H;32位配置地址端口
IO_port_dataEQU0CFCH;32位配置数据端口
IO_PLX_IDEQU200810B5H;PCI卡设备及厂商ID
BADR0=10H;基地址寄存器0
BADR1=14H;基地址寄存器1
BADR2=18H;基地址寄存器2
BADR3=1CH;基地址寄存器3
FINDPCIPROCNEAR;查找PCI卡资源并显示
PUSHAD
PUSHFD
MOVEBX,080000000H
FINDPCI_next:
ADDEBX,100H
CMPEBX,081000000H
JNZfindpci_continue
MOVDX,offsetpcicardnotfind;显示未找到PCI卡提示信息
MOVAH,09H
INT21H
MOVAH,4CH
INT21H;退出
findpci_continue:
MOVDX,IO_port_addre
MOVEAX,EBX
OUTDX,EAX;写地址口
MOVDX,IO_port_data
INEAX,DX;读数据口
CMPEAX,IO_PLX_ID
JNZfindpci_next;检查是否发现PCI卡
MOVDX,IO_port_addre
MOVEAX,EBX
ADDEAX,BADR1
OUTDX,EAX;写地址口
MOVDX,IO_port_data
INEAX,DX;读数据口
MOVdwordptrIO_9054base_address,EAX
ANDEAX,1
JZfindPCI_next;检查是否为i/o基址信息
MOVEAX,dwordptrIO_9054base_address
ANDEAX,0fffffffeh
MOVdwordptrIO_9054base_address,EAX;去除i/o指示位并保存
MOVDX,IO_port_addre
MOVEAX,EBX
ADDEAX,BADR2
OUTDX,EAX;写地址口
MOVDX,IO_port_data
INEAX,DX;读数据口
MOVdwordptrIO_base_address,EAX
ANDEAX,1
JZfindPCI_next;检查是否为i/o基址信息
MOVEAX,dwordptrIO_base_address
ANDEAX,0fffffffeh
MOVdwordptrIO_base_address,EAX;去除i/o指示位并保存
MOVDX,offsetgood;显示开始执行程序信息
MOVAH,09H
INT21H
POPfd
POPad
RET
findPCIENDP
MY_CODEENDS
ENDMAIN
实验二——A/D转换实验
MY_STACKSEGMENTPARA'STACK'
DB100DUP(?
)
MY_STACKENDS
MY_DATASEGMENTPARA'DATA'
IO_9054base_addressDB4DUP(0);PCI卡9054芯片I/O基地址暂存空间
IO_base_addressDB4DUP(0);PCI卡I/O基地址暂存空间
pcicardnotfindDB0DH,0AH,'pcicardnotfindoraddress/interrupterror!
!
!
',0DH,0AH,'$'
GOODDB0DH,0AH,'TheProgramisExecuting!
',0DH,0AH,'$'
MESSDB0DH,0AH,'TheADresultis',0DH,0AH,'$'
AD0809DW0020H
DELAY_SETEQU0FFH;延时常数
DIDATADB?
;要显示的数据
MY_DATAENDs
MY_CODESEGMEN