微型计算机接口技术实验报告.docx
《微型计算机接口技术实验报告.docx》由会员分享,可在线阅读,更多相关《微型计算机接口技术实验报告.docx(18页珍藏版)》请在冰豆网上搜索。
微型计算机接口技术实验报告
微型计算机接口技术实验报告
实验1:
基本IO口扩展实验
一.实验目的
了解TTL芯片扩展简单I/O口的方法,掌握数据输入输出程序编制的方法。
二.实验内容说明
74LS244是一种三态输出的8总线缓冲驱动器,无锁存功能,当G为低电平时,Ai信号传送到Yi,当为高电平时,Yi处于禁止高阻状态。
74LS273是一种8D触发器,当CLR为高电平且CLK端电平正跳变时,D0——D7端数据被锁存到8D触发器中。
本实验利用74LS244作为输入口,读取开关状态,并将此状态通过74LS273驱动发光二极管显示出来。
三.实验原理图
74LS244与74LS273扩展I/O口原理图
四.实验步骤
1.编写源程序
源程序为:
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
2.编译源程序
3.实验连线(连线图如下)
244的CS——ISA总线接口模块的0000H,Y7—Y0——开关K1—K8。
273的CS——ISA总线接口模块的0020H,Q7—Q0——发光二极管L1—L8。
该模块的WR、RD分别连到ISA总线接口模块的IOWR、IORD。
该模块的数据(AD0~AD7)连到ISA总线接口模块的数据(LD0~LD7)。
扩展I/O口连线图
4.运行源程序
5.拨动开关,观察发光二极管的变化。
五.实验结果
当分别拨动开关KO1~KO8时,开关对应的二极管L1~L8亮
六.实验结果分析
当拨动开关时,程序会检测到开关的拨动,并把信号经74LS244(8总线缓冲驱动器)传递到74LS273(8D触发器)中,当CLR为高电平且CLK端电平正跳变时,D0——D7端据被锁存到8D触发器中,这时通过74LS273可改变发光二级管的装态。
实验二:
可编程定时器/计数器8254实验
一.实验目的
了解计数器的硬件连接方法及时序关系,掌握8254的各种模式的编程及其原理,用示波器观察各信号之间的时序关系。
二.实验原理图
可编程定时器/计数器8254原理图
三.实验内容及说明
将32Hz的晶振频率作为8254的时钟输入,利用定时器8254产生1Hz的方波,发光二极管不停闪烁,用示波器可看到输出的方波。
8254是一种可编程的定时器/计数器芯片,它具有3个独立的16位计数器通道,每个计数器都可以按照二进制或二-十进制计数,每个计数器都有6种工作方式,计数频率可高达24MHz,芯片所有的输入输出都与TTL兼容。
计数器都有6种工作方式:
方式0—计数过程结束时中断;方式1—可编程的单拍脉冲;方式2—频率发生器;方式3—方波发生器;方式4—软件触发;方式5—硬件触发。
6种工作方式主要有5点不同:
一是启动计数器的触发方式和时刻不同;二是计数过程中门控信号GATE对计数操作的影响不同;三是OUT输出的波形不同;四是在计数过程中重新写入计数初值对计数过程的影响不同;五是计数过程结束,减法计数器是否恢复计数初值并自动重复计数过程的不同。
四.实验步骤
1.根据实验要求,编写源程序。
源程序如下:
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,'$'
P8254_T0DW0000H
P8254_T1DW0001H
P8254_T2DW0002H
P8254_MODEDW0003H
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口基址)
ADDP8254_T0,CX;PCI卡IO基址+偏移
ADDP8254_T1,CX
ADDP8254_T2,CX
ADDP8254_MODE,CX
MOVDX,P8254_MODE;写入方式控制字
MOVAL,37H;计数器0,先读写低位,后读写高位,
OUTDX,AL;方式3,BCD码计数
MOVDX,P8254_T0
MOVAL,20H;初值低8位
OUTDX,AL
MOVAL,00H;初值高8位
OUTDX,AL
NEXT:
CALLBREAK
JMPNEXT
MY_PROCENDp
;
;*****************************************************************************
;/*按任意键退出*/
;*****************************************************************************
;
BREAKPROCNEAR;按任意键退出
PUSHF
PUSHAX
PUSHDX
MOVAH,06H
MOVDL,0FFH
INT21H
JERETURN
EXEC_EXIT:
MOVAX,4C00H
INT21H
RETURN:
POPDX
POPAX
POPF
RET
BREAKENDP
;
;*****************************************************************************
;/*找卡子程序*/
;*****************************************************************************
;
;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
2.编译程序
3.实验连线:
(连线图如下图)
信号源模块短路32.0Hz,CLK连到8254模块的CLK0。
8254模块选通线CS连到ISA总线接口模块的0000H。
8254模块GATE0接电源+5V;OUT0接发光二极管L1。
该模块的WR、RD分别连到ISA总线接口模块的IOWR、IORD。
该模块的数据(AD0~AD7)、地址线(A0~A7)分别连到ISA总线接口模块的数据(LD0~LD7)、地址线(LA0~LA7)。
8254定时器/计数器实验
4.运行程序
5.观察发光二极管,用示波器可看到输出的方波。
五.实验结果
发光二级管L1在以某一个频率,有规律的闪烁。
六.实验结果分析
由实验可知,8254工作在方式三——方波发生器中,要求输入的频率为32Hz,输出频率为1Hz,所以计数初值应设置为32。
当写入记数值后开始记数,采用减2记数,当记数到一半记数值时,输出变低,重新装入记数值进行减2记数,当记数到0时,输出变高,装入记数值进行减2记数,循环不止。
最后把输出的1Hz信号接入发光二极管中,发光二级管以1Hz的频率有规律的闪烁。
七.实验总结
本实验为基本IO端口扩展实验和可编程定时器/计数器8254实验,实验过程相对比较顺利。
在编译程序阶段,因为把程序存在桌面上了,编译程序出错,在经过检查后,把程序放到了F盘,再次编译程序,编译成功。
在这次实验中,不仅练了自己动手能力,而且巩固了课本学习的内容,为自己在以后的工作学习中打下基础。