微型计算机原理与接口技术杨力实验讲义.doc
【精品文档】如有侵权,请联系网站删除,仅供学习与交流微型计算机原理与接口技术杨力实验讲义.精品文档.微机原理与接口技术实验讲义主编 卫迎辉2013年9月5日目录前言1预备实验 PCI设备查询和配置空间的读取实验3实验一 I/O地址译码实验6实验二 中断控制器实验8实验三 可编程定时器计数器(8253)实验12实验四 可编程并行接口(8255)实验14实验五 可编程串行接口(8251)实验16实验六 综合设计实验18附录一 IO方式读PCI配置空间的参考程序22附录二 中断方式读PCI配置空间的参考程序25前言一、实验系统的组成TPC-2003A通用32位微机接口实验系统的硬件件部分主要由一块PCI总线接口卡、实验台(箱)两部分组成,两者之间通过50线扁平电缆相连。PCI总线接口卡可以插入PC系列微机中任意一个PCI扩展插槽,该卡的主要功能是使用PLX9054和CPLD把PCI总线时序转换成50芯ISA总线时序,并将与实验有关的总线信号加以驱动后引到实验台上提供给实验台使用,同时引出信号还有与“中断”和“DMA”实验操作有关的信号及+5V、+12V、-12V电源。二、实验台的实验电路结构实验台上设有I/O地址译码电路、总线插孔、接口实验常用集成电路、外围电路及通用IC插座等部分组成。外围电路包括逻辑电平开关电路、LED显示电路、时钟电路、单脉冲电路、逻辑笔、复位电路、七段数码管显示电路、基本门电路、继电器及步进电机、小直流电机的驱动电路。下面是我们做实验涉及到的且在实验中不再说明的电路:1、总线插孔采用“自锁紧”插座在标有“总线”区引出数据总线D7D0;地址总线A9A0;读、写信号IOR、IOW;中断请求信号IRQ;DMA请求信号DRQ1;DMA响应信号、DACK1;及AEN信号,供学生搭试各种接口实验电路使用。2、时钟电路可以输出1MHZ、2MHZ两种信号,供A/D转换器、定时器/计数器、串行接口实验使用。3、逻辑电平开关电路如图-5所示,实验台右下方设有8个开关K7K0,开关拨到“1”位置时开关断开,输出高电平,向下打到“0”位置时开关接通输出低电平,电路中串接了保护电阻,使接口电路不直接同+5V、GND相连,可有效地防止学生因误操作、误编程损坏集成电路现象。4、LED显示电路实验台上设有8个发光二极管及相关驱动电路(输入端L7L0),当输入信号为“1”时发光,为“0”时灭。5、单脉冲电路采用RS触发器产生,实验者每按一次开关即可以从两个插座上分别输出一个正脉冲及负脉冲,供“中断”、“DMA”、“定时器/计数器”等实验使用。6、接口集成电路实验台上有微机原理硬件实验最常用接口电路芯片,包括:可编程定时器/计数器(8253)、可编程并行接口(8255)、数/模转换器(DAC0832)、模/数转换器(ADC0809),这里芯片与CPU相连的引线除片选信号CS外都已连好,与外界连接的关键引脚在芯片周围用“自锁紧”插座引出,供学生实验时使用。其中数/模转换器附有双极性输出,模/数转换器附有双极性输入插座。具体电路可见相应实验中的说明。7、通用集成电路插座实验台上设有4个通用数字集成电路插座,其中插座A、B为20P,插座D为40P,插座D可以插入一个2440脚的集成电路芯片或者2个820脚的集成电路芯片。每个插座引脚附近都有相应的“自锁紧”插座,部分实验(如串行通讯)电路是利用这些插座搭试的。自锁紧插座插入导线时,应稍加力并延顺时针方向旋转一下,才能保证接触良好,拔出时,应先逆时针方向旋转待插头完全松开后,再向上拔出。8、七段数码管显示电路实验台上设有两个共阴极七段数码管及驱动电路,段码为同相驱动器,输入端加高电平选中的数码管亮,位码加反相驱动器,位码输入端高电平选中,从段码与位码的驱动器输入端(段码输入端:a、b、c、d、e、f、g、dp,位码输入端:s1、s2)输入不同的代码即可显示不同数字或符号。七段数码管的字型代码表如下表:9、数字电路实验区实验台上有一块数字电路实验区,设有三种基本门电路(与、或、非)及D触发器,供学生在接口实验或数字电路实验时直接使用。*在此约定:在实验电路图连线在图中均用虚线表示,实线为已连好电路。三、实验用的软件系统在实验中所有的程序用汇编语言编写。为了能够汇编386以上的代码,我们使用的汇编软件是Borland公司的TASM4.1,其他的软件和和操作与学习汇编语言时一样,请同学们事先复习一下汇编语言的相关知识。具体操作在实验时由指导老师告知。四、实验预习要求在每次实验前要尽最大努力预习实验,有参考程序的一定要理解透,没有参考程序的一定要事先编写好,如出现来实验室不知做什么的情况,要扣除相应的实验成绩,由此产生的一切后果,由实验者自负!五、实验报告要求在实验报告中要求有实验目的、实验内容、实验环境、实验步骤、实验结果、实验结论,在实验步骤中应重点体现出在实验过程中自己所做的工作(用文字或图表表示出来),实验结论要回答每次实验的思考题,及自己收获的东西。实验报告要字迹工整,让别人看了赏心阅目。预备实验 PCI设备查询和配置空间的读取实验一、实验目的1、学会使用IO 端口查找TPC 板卡或所有PCI 板卡的硬件资源。2、学会使用中断调用查找TPC 板卡或所有PCI 板卡的硬件资源。二、实验内容1、根据配置空间原理使用IO方式编写一个读PCI配置空间的程序,该程序能够获得本机上TPC板卡或所有PCI板卡的硬件资源(IO,内存,中断占用情况)。2、根据配置空间原理使用中断方式编写一个读PCI配置空间的程序,该程序能够获得本机上TPC板卡或所有PCI板卡的硬件资源(IO,内存,中断占用情况)。三、实验环境PC计算机一台;TPC-2003A实验箱一套;四、实验背景知识因为在所有的实验中,TPC-2003A实验箱是通过一块插在PC机内PCI总线上的TPC卡实现与PC机的信息传递,而PCI总线结构支持P&P 即插即用功能,每台微机分配给PCI扩展板的资源(即IO空间、MEM空间、中断和DMA)是动态浮动的,不像ISA总线是固定死的,因此分配给设备的I/O基地址、内存空间基地址、中断号会因为不同的微机而变化,本次实验就是让学生学习如何在DOS下确定当前微机中PCI卡的资源。所谓即插即用,其原理就是在每块支持 PNP 的板卡上都有一组称为配置空间的寄存器,在这些寄存器中保存有自己对系统资源的需求参数。当 Windows 启动时,其 BIOS引导程序首先读出这些参数,然后综合每块板卡对资源的需求,统一对整个系统的资源进行分配, 从而避免用户干预。 为了BIOS引导程序能够正确的对板卡所需的资源进行动态分配,其配置空间寄存器中存储的是物理空间大小的相对信息,而不是绝对的物理地址。PCI 配置空间是长度为 256 个字节的一段内存空间,其前 64 个字节包含PCI接口的信息,我们可以通过它来访问 PCI 接口。PCI 配置空间是长度为 256 个字节的一段内存空间,其前 64 个字节包含PCI接口的信息如下表所示,我们可以通过它来访问 PCI 接口。配置空间地址字节3字节2字节1字节000H设备 ID,Device ID 供应商 ID,Vendor ID04H状态,Status 命令,Command08H类代码Class Code版本 IDRevison ID0CH自测BIST首部类型Header Type延迟定时器Latency TimerCache行容量Cache Line Size10H 基址寄存器 0,Base Address Register#014H 基址寄存器 1,Base Address Register#118H基址寄存器 2,Base Address Register#21CH基址寄存器 3,Base Address Register#320H基址寄存器 4,Base Address Register#424H基址寄存器 5,Base Address Register#528H CardBus 卡信息结构指针,CardBus CIS Pointer2CH 子系统 IDSubsystem ID子系统供应商 IDSubsystem Vendor ID30H 扩展 ROM 基址,Expansion ROM Base Address34H保留,Reserved功能指针CapabilitiesPointer38H 保留,Reserved3CH 优先级请求MAX_Lat时间片请求MIN_Gnt中断引脚Interrupt Pin中断线Interrupt Line这 64个字节中,第一个 32 位的双字包含了 DeviceID 和 VendorID。DeviceID是一个 16位的数,如果这个单元没有安装,在启动时,计算机就会显示 FFFFH;如果安装了,在 0000H和 FFFFH 之间就会有一个确定的数代表它。Base Address,即基址寄存器,是32 位寄存器, 可以是 IO Base Address和 Mem BaseAddress. 这是由第 0位决定的,第 0位由硬件强制置 0或 1。加电后,引导程序通过向基址寄存器中写入全 1,并且读返回值以获得设备所需的地址空间大小,然后操作系统统一给它分配一块 I/O 或内存空间,并把基地址写回到基址寄存器。这样驱动程序可以通过读这个基址寄存器就可以取得基地址,再加上设备寄存器偏址就可以访问这个寄存器了。Interrupt Line,中断线寄存器,它是一个 8位寄存器,用来报告中断的连接情况,它是一个可读可写的寄存器,并且凡是使用中断引脚的设备必须实现它,系统引导程序在进行初始化和配置时要将中断连线的信息写入该寄存器。这个寄存器的值表示设备的中断引脚与系统中断控制器的哪个输入端相连。设备驱动程序和操作系统可以利用这个信息来确定中断优先级和向量。 该寄存器的值要受系统体系的支配。对于 X86 体系结构,该寄存器的值和标准 8259 配置中的 IRQ 编号(015)相对应。255 表示没有连到任何中断控制器。15255 之间的值为保留值。Interrupt Pin,中断引脚寄存器。该寄存器是一个只读寄存器,用来表示设备使用了那一根中断线。其值的1,2,3,4分别对应INTA#,INTB#,INTC#,INTD#。0表示没有使用任何中断。PCI 配置机构采用两个 32位 IO端口,位于地址 0xCF8 和 0xCFC。这两个端口是:(1)32 位配置地址端口,占用 IO 地址的0xCF8 到0xCFB(2)32 位配置数据端口,占用 IO 地址的0xCFC 到0xCFF访问配置寄存器的步骤为:1将目标总线编号,设备编号,功能编号和双字编号写配置地址端口,并设置使能位为 1。2读或写配置数据寄存器,北桥将指定的目标总线与 PCI总线范围做比较,如果目标总线在此范围内,则启动PCI 配置读或写操作。配置地址口的格式为:在不同的操作系统下,对配置空间有不同的存取方法,在DOS下我们只需要使用简单的汇编指令 IN 或 OUT 就可了。幸运的是 Win9x 下其保护机制没有限制这两个端口的读写, 固也可以使用这样的办法。 WinNT下提供 READ_PORT_ULONG以及WRITE_PORT_ULONG函数来对其读写。读写配置数据寄存器还可以调用 PCI BIOS 函数的中断 INT1AH来实现。中断调用参数如下表所示:入口参数 返回值功能描述AX=0B101HEDX='PCI' ASCII 字符AH=执行状态代码AL=硬件机器BX=主从版本号CL=系统中最大总线号CF=完成状态,1=错误,0=成功检 查 PCIBIOS 是否存在,版本号为多少AX=0B102HCX=设备 ID号(0-65535)Device IDDX=厂商 ID号(0-65534)Vendor IDSI=索引号(0-N)AH=执行状态代码BH=总线号(0-255)BL=设备号(高 5位), 功能号(低3 位)CF=完成状态,1=错误,0=成功查找指定厂商和设备号的 PCI 板卡的位置AX=0B103HECX=类代码,在低三位SI=索引号(0-N)AH=执行状态代码BH=总线号(0-255)BL=设备号(高 5位), 功能号(低3 位)CF=完成状态,1=错误,0=成功查找指定类代码和索引的 PCI 设备的位置AX=0B108H/0B109H/0B10AHBH=总线号(0-255)BL=设备号(高 5 位),功能号(低 3位)DI=寄存器号AH=执行状态代码CL/CX/ECX= 读到的字节/字/双字CF=完成状态,1=错误,0=成功字节/字/双字方式读取配置空间数据AX=0B10BH/0B10CH/0B10DHBH=总线号(0-255)BL=设备号(高 5 位),功能号(低 3位)DI=寄存器号CL/CX/ECX=待写入的字节/字/双字AH=执行状态代码CF=完成状态,1=错误,0=成功字节/字/双字方式写配置空间数据返回值AH= 00H 成功;81H 不支持的函数;83H 错误的厂商 ID值;86H 设备未发现;87H 错误的寄存器号;88H 设置失败;89H 缓冲区太小本次实验的源程序见实验讲义附录。五、实验步骤1、了解并熟悉PCI 即插即用配置空间原理。2、了解并熟悉IO 方式或中断方式获取配置空间的方法。3、编写端口读写方式或中断方式获得TPC 板卡或所有PCI 板卡的硬件资源的程序。4、运行程序并记录结果。六、思考题(用于写实验报告的实验结论):1、在DOS下访问PCI即插即用配置空间的方法有哪些?2、在WINDOWXP下不用编程怎么可以得到PCI设备的配置信息?实验一 I/O地址译码实验实验目的掌握I/O地址译码电路的工作原理。实验内容在完成硬件连接的基础上,编写程序控制I/O地址译码的输出,以控制实验箱上的D触发器输出高、低电平信号,从而控制LED灯的亮灭。实验环境PC计算机一台;TPC-2003A实验箱一套;实验背景知识实验电路如图1.1所示,图中虚线需实验者自己连线。其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。译码输出端Y0Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:280H287H;Y1:288H28FH; Y2:290H297H;Y3:298H29FH;Y4:2A0H2A7H;Y5:2A8H2AFH;Y6:2B0H2B7H;Y7:2B8H2BFH, 当CPU执行I/ O指令且地址在280H2BFH范围内,译码器选中,必有一根译码线输出负脉冲。例如:执行下面两条指令MOV DX,查找出的PCI卡的I/O基址+ 0HOUT DX,AL(或IN AL,DX)Y0输出一个负脉冲,执行下面两条指令MOV DX,查找出的PCI卡的I/O基址+ 8HOUT DX,AL(或IN AL,DX)Y1输出一个负脉冲。(注意:在图1.1中连接的是Y4,请同学分析指令该怎么改?)注意:命令中的端口地址要根据PCI卡的I/O基址再加上偏移量计算出来的,不同的微机器PCI卡的I/O基址可能不同,需要执行预备实验一的程序事先查找出来。计算公式为:计算出的地址= 查找出的PCI卡的I/O基址+ 偏移量;(其中:偏移量= 288H - 280H=8H)图1.1 I/O地址译码输出控制D触发器电路图实验电路中D触发器CLK端输入脉冲时,上升沿使Q端输出高电平L7发光,CD端加低电平L7灭。也就是利用Y4和Y5输出的脉冲信号控制L7闪烁发光(亮、灭、亮、灭、),时间间隔通过软件延时实现。参考程序(YMQ.ASM)如下:ioport equ 预备实验查找出的PCI卡的I/O基址-0280houtport1 equ ioport+2a0houtport2 equ ioport+2a8hcode segmentassume cs:codestart:mov dx,outport1out dx,alcall delay ;调延时子程序mov dx,outport2out dx,alcall delay ;调延时子程序mov ah,1int 16hje startmov ah,4chint 21hdelay proc near ;延时子程序mov bx,2000lll: mov cx,0ll: loop lldec bxjne lllretdelay endpcode endsend start*一定要读懂这个程序,以后的实验如就以这个程序为模板编!实验步骤1、按原理图认真完成硬件的连线。(实验报告中画出原理图)2、编写控制程序。(实验报告中写出源程序)3、编译并运行程序,观察所连接的LED灯是否按程序的要求亮灭。*在实验报告中要写清自己在每一步所做的工作内容。思考题(用于写实验报告的实验结论):1、D触发器的D输入端为什么要接在+5V上?2、在程序中产生控制脉冲是不是只能用OUT指令实现,说明理由?3、其他收获?实验二 中断控制器实验实验目的、掌握PC机中断处理系统的基本原理。、学会编写中断服务程序。实验内容直接用实验箱上的手动产生单脉冲作为中断请求信号,每按一次开关产生一次中断。编写中断服务程序,要求在每次中断时,在屏幕上显示一次“TPC pci card Interrupt”,中断10次后程序退出。实验环境PC计算机一台;TPC-2003A实验箱一套;实验背景知识PC机用户可使用的硬件中断只有可屏蔽中断,由8259中断控制器管理。中断控制器用于接收外部的中断请求信号,经过优先级判别等处理后向CPU发出可屏蔽中断请求。IBMPC、PC/XT机内有一片8259中断控制器对外可以提供8个中断源:中断源中断类型号中断功能IRQ0 08H 时钟IRQ1 09H 键盘IRQ2 0AH 保留IRQ3 OBH 串行口2IRQ4 0CH 串行口1IRQ5 0DH 硬盘IRQ6 0EH 软盘IRQ7 0FH 并行打印机8个中断源的中断请求信号线IRQ0IRQ7在主机的62线ISA总线插座中可以引出,系统已设定中断请求信号为“边沿触发”,普通结束方式。对于PC/AT及286以上微机内又扩展了一片8259中断控制,IRQ2用于两片8259之间级连,对外可以提供16个中断源:中断源中断类型号中断功能IRQ8 070H 实时时钟IRQ9 071H 用户中断IRQ10 072H 保留IRQ11 O73H 保留IRQ12 074H 保留IRQ13 075H 协处理器IRQ14 076H 硬盘IRQ15 077H 保留PCI总线中的中断线只有四根,INTA#、INTB#、INTC#、INTD#,它们需要通过P&P的设置来和某一根中断请求信号线相连接才能进行中断申请。由于TPC卡使用PCI总线,所以分配的中断号每台微机可能都不同,编程时需要了解当前的微机使用那个中断号并进行设置,需要执行预备实验一的程序事先查找出来。由于TPC卡使用9054芯片连接微机,所以在编程使用微机中断前需要使能9054的中断功能,代码如下:mov dx,ioport_cent+68h ;设置tpc 卡中9054芯片io口,使能中断in ax,dxor ax,0900hout dx,ax其中IOPORT_CENT是9054芯片寄存器组的I/O起始地址,每台微机可能都不同,编程时需要了解当前的微机使用哪段并进行设置,需要执行预备实验一的程序事先查找出来。+68H的偏移是关于中断使能的寄存器地址,设置含义如下:设置INTCSR(68H)寄存器,中断模式设置:BITS功能8 1:能够产生PCI中断0:禁止产生PCI中断11 1:能够LOCAL端输入的中断送到PCI端0:禁止LOCAL端输入的中断送到PCI端其它位为零即可,更多内容参看9054芯片数据手册程序退出前还要关闭9054的中断,代码如下:mov dx,ioport_cent+68h ;设置tpc 卡中9054芯片io口,关闭中断in ax,dxand ax,0f7ffhout dx,axPC机中断控制器8259 的地址为20H、21H,编程时要根据中断类型号设置中断矢量,8259中断屏蔽寄存器IMR对应位要清零(允许中断),中断服务结束返回前要使用中断结束命令:MOV AL,20HOUT 20H,AL中断结束返回DOS时应将IMR对应位置1,以关闭中断。参考程序程序名:INT.ASM 在程序中假设使用的中断号是IRQ9。;386以上微机适用;纯dos下才能使用;tasm4.1或以上编译data segmentint_vect EQU 071H ;中断0-7的向量为:08h-0fh,中断8-15的向量为:70h-77hirq_mask_2_7 equ 011111011b ;中断掩码,中断0-7时从低至高相应位为零,中断8-15时第2位为零irq_mask_9_15 equ 011111101b ;中断0-7时全一,中断8-15时从低至高相应位为零ioport_cent equ 0d800h ;tpc 卡中9054芯片的io地址,要根据实际改csreg dw ?ipreg dw ? ;旧中断向量保存空间irq_times dw 00h ;中断计数msg1 db 0dh,0ah,'TPC pci card Interrupt',0dh,0ah,'$'msg2 db 0dh,0ah,'Press any key to exit!',0dh,0ah,'$'msg3 db 0dh,0ah,'Press DMC to interrupt 10 times andexit!',0dh,0ah,'$'data endsstacks segmentdb 100 dup (?)stacks endscode segmentassume cs:code,ds:data,ss:stacks,es:datastart:;Enable Local Interrupt Input.386climov ax,datamov ds,axmov es,axmov ax,stacksmov ss,axmov dx,ioport_cent+68h ;设置tpc 卡中9054芯片io口,使能中断in ax,dxor ax,0900hout dx,axmov al,int_vect ;保存原中断向量mov ah,35hint 21hmov ax,esmov csreg,axmov ipreg,bxmov ax,cs ;设置新中断向量mov ds,axmov dx,offset int_procmov al,int_vectmov ah,25hint 21hin al, 21h ;设置中断掩码and al, irq_mask_2_7out 21h, alin al, 0a1hand al, irq_mask_9_15out 0a1h, almov ax,datamov ds,axmov dx,offset msg2mov ah,09hint 21hmov dx,offset msg3mov ah,09hint 21hmov irq_times,0ahstiloop1:cmp irq_times,0 ;等待中断并判断中断10次后退出jz exitmov ah,1int 16hjnz exit ;按任意键退出jmp loop1exit: climov bl, irq_mask_2_7 ;恢复中断掩码not blin al, 21hor al, blout 21h, almov bl, irq_mask_9_15not blin al, 0a1hor al, blout 0a1h, almov dx,ipreg ;恢复原中断向量mov ax,csregmov ds,axmov ah,25hmov al,int_vectint 21hmov dx,ioport_cent+68h ;设置tpc 卡中9054芯片io口,关闭中断in ax,dxand ax,0f7ffhout dx,axmov ax,4c00hint 21hint_proc proc far ;中断处理程序clipush axpush dxpush dsdec irq_timesmov ax,data ;Interrupt to domov ds,axmov dx,offset msg1mov ah,09hint 21hmov al,20h ;Send EOIout 0a0h,alout 20h,alpop dspop dxpop axstiiretint_proc endpcode endsend start实验步骤1、认真完成硬件的连线。在本实验中只须用一根导线将手动单脉冲输出与实验箱上方的IRQ插孔连接即可。2、编写程序。(实验报告中写出源程序)3、编译并运行程序,观察并记录程序的运行结果,并说明是否正常。*在实验报告中要写清自己在每一步所做的工作内容。思考题(用于写实验报告的实验结论):1、为什么在实验中不进行对8259初始化的编程操作?2、在程序中,进行中断屏蔽的操作是通过哪几条指令实现的,为什么要这么做?3、其他收获?实验三 可编程定时器计数器(8253)实验实验目的掌握8253的基本工作原理和编程方法。实验内容1、编程验证8253计数器方式0的工作特点。2、利用8253产生一个频率1HZ的方波信号,编写相应的控制程序,并用LED显示信号。实验环境PC计算机一台;TPC-2003A实验箱一套;实验背景知识1、实验内容1的实现提示如采用8253的计数器1实现,可按图3.1中的虚线连接电路,在程序中将计数器0设置为方式0,计数器初值为N(N可以小一点),用手动逐个输入单脉冲,把一个LED灯与OUT0相连,可以观察到当输入N+1个脉冲后LED会变亮表明OUT0变为高电平。图3.1 8253实验电路图12、实验内容2的实现提示要产生1HZ的方波信号,就需要8253的计数器对实验箱上的连续脉冲信号,进行方式3的分频计数操作,为了使计数初值不至于很大,我们可以采用实验箱上的1MHZ脉冲信号,另外由于一个计数通道的最大计数值为65536,因此需要两个计数通道级连工作,硬件连线如图3。2所示,在程序中需将计数器0、计数器1分别设置为方式3,计数初值设为1000(十进制),用LED观察OUT1输出电平的变化(频率1HZ)。学生只须进行虚线部分和OUT1与LED的连线。图3.2 8253实验电路图2实验内容2的参考程序(E8253_2.ASM)如下:ioportequ预备实验查找出的PCI卡的I/O基址-0280hio8253aequ ioport+280hio8253bequ ioport+281hio8253cequ ioport+283hcode segmentassume cs:codestart:mov dx,io8253c ;向8253写控制字mov al,36h ;使0通道为工作方式3out dx,almov ax,1000 ;写入循环计数初值1000mov dx,io8253aout dx,al ;先写入低字节mov al,ahout dx,al ;后写入高字节mov dx,io8253cmov al,76h ;设8253通道1工作方式3out dx,almov ax,1000 ;写入循环计数初值1000mov dx,io8253bout dx,al ;先写低字节mov al,ahout dx,al ;后写高字节mov ah,4ch ;程序退出int 21hcode endsend start五、实验步骤1、认真完成硬件的连线。2、编写程序。(实验报告中写出源程序)3、编译并运行程序,观察并记录程序的运行结果,并说明是否正常。注意:由于这次实验要进行两个较独立内容的实验,每一个都需写出上面3步的内容。六、思考题(用于写实验报告的实验结论):1、在你做实验的过程中8253的4个端口的地址分别是什么?2、其他收获?实验四 可编程并行接口(8255)实验实验目的掌握8255方式0的工作原理及使用方法。实验内容编程控制8255从C口接收逻辑电平开关输入二进制数据,再从A口输出到LED上,实现开关对LED亮灭的控制。.要求程序运行后,按PC机键盘的任意键退出。实验环境PC计算机一台;TPC-2003A实验箱一套;实验背景知识1、实验电路如图4.1所示,8255的C口接逻辑电平开关K0K7,A口接LED显示电路L0L7,图中虚线需实验者自己连线。图4.1 8255实验电路图2、由于在本次实验中8255控制的是简单的外设,所以工作在方式0下就可以完成任务。3、参考程序(E8255.Asm)如下:ioportequ预备实验查找出的PCI卡的I/O基址-0280hio8255aequ ioport+288hio8255bequ ioport+28bhio8255cequ ioport+28ahcode segment assume cs:codestart: mov dx,io8255b ;设8255为C口输入,A口输出 mov al,8bh out dx,alinout: mov dx,io8255c ;从C口输入一数据 in al,dx mov dx,io8255a ;从A口输出刚才自C口 out dx,al ;所输入的数据 mov dl,0ffh ;判断是否有按键 mov ah,06h int 21h jz inout ;若无,则继续自C口输入,A口输出 mov ah,4ch ;否则返回 int 21hcode ends end start实验步骤1、认真完成硬件的连线。2、编写程序。(实验报告中写出源程序)3、编译并运行程序,观察并记录程序的运行结果,并说明是否正常。思考题(用于写实验报告的实验结论):1、在你做实验的过程中8255的4个端口的地址分别是什么?2、要在这个实验中采用8255的方式1或方式2实现有什么困难?3、其他收获?实验五 可编程串行接口(8251)实验实验目的1、了解串行通讯的基本原理。2、掌握串行接口芯片8251的工作原理和编程方法。实验内容编程控制8251,实现把从PC机键盘上输入字符的ASCII码加 1 后发送出去,再接收回来,并在屏幕上显示接收到的字符,实现8251的自发自收。.实验环境PC计算机一台;TPC-2003A实验箱一套;实验背景知识1、实验电路如图5.1所示,由于实验箱中没有8251,需要在通用插座中插入8251芯片, 8253计数器用于产生8251的发送和接收时钟。由于是自收发,所以TXD和RXD要连在一起。图5.1 8251实验电路图2、图示电路8251的控制口地址为2B9H,数据口地址为2B8H。3、8253计数器的计数初值=时钟频率 /(波特率×波特率因子),这里的时钟频率接1MHz,波特率若选1200,波特率因子若选16,则计数器初值为52。4、收发可采用查询方式。5、参考程序:E8251.ASMdata segmentioport equ预备实验查找出的PCI卡的I/O基址-0280hio8253a equ ioport+280hio8253b equ ioport+283hio8251a equ ioport+2b8hio8251b equ ioport+2b9hmes1 db 'you can play a key on the keybord!',0dh,0ah,24hmes2 dd mes1data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8253b ;设置8253计数器0工作方式mov al,16hout dx,almov dx,io8253amov al,52 ;给8253计数器0送初值out dx,almov dx,io8251b ;初始化8251xor al,almov cx,03 ;向8251控制端口送3个0delay: call out1loop delaymov al,40h ;向8251控制端口送40H,使其复位call out1mov al,4eh ;设置为1个停止位,8个数据位,波特率因子为16call out1mov al,27h ;向8251送控制字允许其发送和接收call out1lds dx,mes2 ;显示提示信息mov ah,09int 21hwaiti: mov dx,io8251bin al,dxtest al,01 ;发送是否准备好jz waitimov ah,01 ;是,从键盘上读一字符int 21hcmp al,27 ;若为ESC,结束jz exit