微机接口课程设计_第1页
微机接口课程设计_第2页
微机接口课程设计_第3页
微机接口课程设计_第4页
微机接口课程设计_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、微机接口课程设计实验报告微机接口课程设计之双机间的串行通信 一、课程设计目的: 通过本次课程设计实践,熟悉和掌握微机系统的软件、硬件设计方法、设计步骤,提高综合应用所学知识及动手和分析问题、解决问题的能力;同时还应达到以下目的:1. 了解串行通信的一般工作原理和工作过程;2熟悉8259A中断控制器的工作原理和应用编程;3. 熟悉RS232C串行接口标准及和TTL电路的连接方法;4. 熟悉8251A芯片的工作原理,掌握用8251A进行异步串行通信时的编程方法;5. 熟悉8253A计数器/定时器的工作方式及应用编程。二、课程设计任务:设有两台PC机甲机和乙机,利用两台试验箱上的8251A芯片、TT

2、L和RS232C电平转换芯片(MC1488和MC1489)、8254A芯片等,实现甲乙两机之间的全双工近距离异步串行通信;具体要求如下:1. 甲机和乙机通过各自的键盘输入控制键(ESC)和要发送的字符,检查是否按下 ESC键,若按下,则退出程序,返回DOS;否则将输入的字符发送到对方,每输入一个字符发送一次;同时双方又可接收对方发来的字符。2. 发送的字符和接收的字符均在甲机和乙机各自的显示器上显示;双方的发送均采用查询方式,接收均采用中断方式。3. 异步串行通信的字符数据格式为起止式:1位停止位,8位数据位,无校验,波特率因子为16;传输速率,即波特率自定。提示:1. 由于是近距离通信,故双

3、机接口间可采用零MODEM方式的简单连接。2. 由8254A产生方波时钟信号作为8251A的发送和接收时钟,8254A计数通道的CLK输入可采用1MHZ的方波信号。3. 中断采用PC机内部可屏蔽中断控制器(8259A)的IRQ7。8251A的端口地址:数据口210H,命令/状态口211H;8254A的端口地址:计数器0230H, 计数器1231H,计数器2232H,控制口233H;8259A的端口地址:20H和21H。三、所用设备:IBM-PC机两台(串行通信接口8251A两片,串行发送器MC1488和串行接收器MC1489各两片,定时器/计数器8253,终端控制器8259等),串口线一根串行

4、直连电缆用于两台台电脑通过串行口直接相连,电缆两端的插头都是9 针的母插头:四、硬件设计:1.设计思想:计算机传输数据有并行和串行两种模式。在并行数据传输方式中,使用8条或更多的导线来传送数据,虽然并行传送方式的速度很快,但由于信号的衰减或失真等原因,并行传输的距离不能太长,在串行通信方式中,通信接口每次由CPU得到8位的数据,然后串行的通过一条线路,每次发送一位将该数据放送出去。串行通信采用两种方式:同步方式和异步方式。同步传输数据时,一次传送一个字节,而异步传输数据是一次传送一个数据块。串口是计算机上一种非常通用设备串行通信的协议。大多数计算机包含两个基于RS232的串口。串口按位(bit

5、)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配:RS-232(ANSI/EIA-232标准)是IBM-PC及其兼容机上的串行连接标准。可用于许多用途,比如连接鼠标、打印机或者Modem,同时也可以接工业仪器仪表。用于驱动和连线的改进,

6、 RS-232只限于PC串口和设备间点对点的通信。IBM PC及其兼容机提供了一种有较强的硬件依赖性,但却比较灵活的串行口I/O的方法,即通过INT 14调用ROM BIOS串行通信口的例行程序。该例行程序。该例行程序包括将串行口初始化为指定的字节结构和传输速率,检查控制器的状态,读写字符等功能。14号中断的功能总结如下:串行口服务(Serial Port ServiceINT 14H) 00H 初始化通信口03H 读取通信口状态01H 向通信口输出字符04H 扩充初始化通信口02H 从通信口读入字符(1)、功能00H:初始化通信口入口参数:AH00HDX初始化通信口号(0COM1,1COM2

7、,)AL初始化参数,参数的说明如下: 波特率奇偶位停止位字的位数76543210000 = 110X0 = None0 = 1 bit10 = 7 bits001 = 15001 = Odd1 = 2 bits11 = 8 bits010 = 30011 = Even011 = 600100 = 1200101 = 2400110 = 4800111 = 9600 (2)、功能01H :向通信口输出字符入口参数:AH01HAL字符DX初始化通信口号(0COM1,1COM2,)出口参数:AL的值不变AH的位70操作成功,通信口状态,AH的位60是其状态位(3)、功能02H :从通信口读入字符入口

8、参数:AH02HDX初始化通信口号(0COM1,1COM2,)出口参数:AL接受的字符AH的位70操作成功,通信口状态,AH的位60是其状态位(4)、功能03H 功能描述:读取通信口状态入口参数:AH03HDX初始化通信口号(0COM1,1COM2,)出口参数:AH通信口状态,ALModem状态,参见功能号00H中的说明(5)、功能04H 功能描述:扩充初始化通信口,仅在PS/2中有效本设计正是利用14号配置串口,实现双机的双工通信及单机的自发自收通信。并画出了比较完整的原理图与写出了比较详细的程序2. 原理框图:CPU总线定时器82538251148814899针串口资料:1)、8251A相

9、关资料介绍:1、8251A的基本性能:8251A是可编程的串行通信接口芯片,基本性能有:(1)两种工作方式:同步方式,异步方式。同步方式下,波特率为064K,异步方式下,波特率为019.2K。(2)同步方式下的格式每个字符可以用5、6、7或8位来表示,并且内部能自动检测同步字符,从而实现同步。除此之外,8251A也允许同步方式下增加奇/偶校验位进行校验。(3)异步方式下的格式每个字符也可以用5、6、7或8位来表示,时钟频率为传输波特率的1、16或64倍,用1位作为奇/偶校验。1个启动位。并能根据编程为每个数据增加1个、15个或2个停止位。可以检查假启动位,自动检测和处理终止字符。(4)全双工的

10、工作方式(5)提供出错检测2、8251A的内部结构:发送器由发送缓冲器和发送控制电路两部分组成。接收器由接收缓冲器和接收控制电路两部分组成。数据总线缓冲器,读/写控制电路,调制解调控制电路。8251A内部结构图3、8251外部引脚图8251的外部引脚下图所示,共28个引脚,每个引脚信号的输入输出方式如图中的箭头方向所示。 8251外部引脚图4、8251A的编程编程的内容包括两大方面:一是由CPU发出的控制字,即方式选择控制字和操作命令控制字;二是由8251A向CPU送出的状态字。(1)、方式选择控制字(模式字)方式选择控制字的格式如图所示。(2)、操作命令控制字(控制字)操作命令控制字的格式如

11、下:(3)、状态字状态字的格式如下:2)、8253A相关资料介绍:(1)可编程定时/计数器模块8253本电路模块可用于产生定时中断,实现实时时钟实验等,本电路端口地址为CS。8253由以下几个部分组成:(1 数据总线缓冲器(8位、三态、双向); (2 读/写控制逻辑; CS:片选信号,低电平有效; RD:读信号,低电平有效; WR:写信号,低电平有效 A1A0:端口选择信号 (3 三个通道( 0 2); (4 一个控制寄存器;8253内部可分为6个模块,每个模块的功能如下: 1. 数据总线缓冲器及数据总线D0D72. 读/写控制逻辑及控制引脚CS* A1 A0I/O地址读操作RD*写操作WR*

12、0 0 00 0 10 1 00 1 140H41H42H43H读计数器0读计数器1读计数器2无操作写计数器0写计数器1写计数器2写控制字3. 控制字寄存器在初始化编程时,CPU写入方式控制字到控制字寄存器中,用以选择计数通道及其相应的工作方式。8253的控制字:8253的工作方式也是有控制字来决定,其控制字意义如下4. 计数通道0、计数通道1、计数通道23个计数通道内部结构完全相同。每个计数通道都由一个16位计数初值寄存器、一个16位减法计数器和一个16位计数值锁存器组成计数初值存于预置寄存器,在计数过程中,减法计数器的值不断递减,而预置寄存器中的预置不变。输出锁存器用于写入锁存命令时,锁定

13、当前计数值。计数器的3个引脚说明:(1)CLK时钟输入信号在计数过程中,此引脚上每输入一个时钟信号(下降沿),计数器的计数值减1(2) GATE门控输入信号控制计数器工作,可分成电平控制和上升沿控制两种类型(3) OUT计数器输出信号当一次计数过程结束(计数值减为0),OUT引脚上将产生一个输出信号8253有6种工作方式,由方式控制字确定区分这6种工作方式的主要标志由3点:一是输出波形不同;二是启动计数器的触发方式不同;三是计数过程中门控信号GATE对计数器操作的控制不同。1.方式0-低电平输出(GATE信号上升沿继续计数)2方式1-低电平输出(GATE信号上升沿重新计数)3方式2-周期性脉冲

14、输出4方式3-周期性方波输出OUT输出低电平,装入计数值n后,OUT立即跳变为高电平。如果当前GATE为高电平,则立即开始减“1”计数,OUT保持为高电平,若n为偶数,则当计数值减到n/2时,OUT跳变为低电平,一直保持到计数值为“0”,系统才重新置入计数值n,实现循环计数。这时OUT端输出周期为n×CLK周期,占空比为1:1的方波序列:若n为奇数,则OUT端输出周期为n×CLK周期,占空比(n+1)/2 : (n-1)/2的近似方波序列。5方式4-单次负脉冲输出(软件触发)6方式5-单次负脉冲输出(硬件触发)每种工作方式的设置过程类似: 设定工作方式 设定计数初值 硬件启

15、动 计数初值进入减1计数器 每输入一个时钟计数器减1的计数过程 计数过程结束3)、74LS138相关资料介绍:译码器74LS138:74LS138 为3 线8 线译码器,共有 54/74S138和 54/74LS138 两种线路结构型式。 其工作原理如下: 当一个选通端(E3)为高电平,另两个选通端(E1)和/(E2))为低电平时,可将地址端(A0、A1、A2)的二进制编码在Y0至Y7对应的输出端以低电平译出。比如:A0A1A2=011时,则Y6输出端输出低电平信号。 利用 E1、E2和E3可级联扩展成 24 线译码器;若外接一个反相器还可级联扩展成 32 线译码器。 4)、RS232C电平转

16、换芯片(MC1488和MC1489)相关资料介绍:由于制定串行接口标准早在制定TTL逻辑系列之前,因此输入输出电平不与TTL兼容。因为这个原因,连接RS232到微机系统必须经过电平转换。图9.11中使用了MC1488从TTL 转换到RS232电平,用MC1489从RS232转换到TTL电平。MC1488和MC1489集成电路芯片通常称为线路驱动器和线路接收器。最简单的RS-232C数据通信连接RS-232C接口电平转换:RS-232C是早期为促进公用电话网络进行数据通信而制定的标准,其逻辑电平对地是对称的,完全与TTL、CMOS逻辑电平不同。RS-232C采用负逻辑,即:逻辑:-5V-15V。

17、 逻辑:+5V+15V。由于MCS-51采用TTL电平,若用RS-232C标准接口通信必须进行电平转换。目前RS-232C与TTL电平转换最常用的集成电路芯片是传输线驱动器MC1488传输线接收器MC1489。其内部结构和引脚如下图所示。MC1488可完成TTL电平到RS-232C的电平转换,输入为TTL电平,输出为RS-232C电平。其内部有个与非门和个反相器。采用±12V或±15V电源供电。MC1489可完成由RS-232C到TTL电平转换,输入为RS-232C电平,输出为TTL电平。其内部有4个反相器,采用+5V电源供电。MC1489中每个反相器都有一个控制端,高电平

18、有效,可作为RS-232C操作的控制端。RS-232C电平转换芯片MC1488和MC14895)、ISA总线相关资料介绍:  ISA总线是IBM PCAT机(CPU是80286)所用的系统总线:PCAT总线经过标准化之后的名称,IEEE将ISA总线作为IEEE P996推荐标准,这是一个16位兼8位的总线标准。如果忽略标准化细节,则可认为16位ISA总线就是PCAT总线。由于IBM PCAT与IBM PC、IBM PCXT机(CPU都是8088)所用的Pc总线兼容,所以可认为8位ISA总线(16位ISA总的低8位部分)就是P

19、C总线。引脚信号 图91所示为16位ISA总线板卡(又称IO扩展板或接口板)及插槽外形示意图,元件面和焊接面共有31+18个引脚(A1A31、B1B31、C1C18和D1D18),其中A1A31、BlB31是低8位部分即8位ISA总线所用的信号。8位ISA总线板卡及插槽与该图的区别在于没有36个引脚(C1一C18和D1D18)那部分。显然,8位ISA总线板卡可以插在16位的插槽中。表9.1给出了16位ISA总线前62个引脚(亦是8位ISA总线的全部引脚)信号定义,表92给出了16位ISA总线的后36个引脚信号定义。下面对引脚信号做一些简要说明,首先是62线部分(8位ISA总线)。D7DO:8位

20、数据线,双向,三态。对于16位ISA总线,它们是数据线 的低8位。A19A0:20位地址线,输出。SMEMR(上划线)、SMEMW(上划线):存储器读、写命令,输出,低电平有效。IOR(上划线)、IOW(上划线):IO读、写命令,输出,低电平有效AEN:地址允许信号,输出,高电平有效。该信号由DMAC发出,为高表示DMAC正在控制系统总线进行DMA传送,所以它可用于指示DMA总线周期。BALE:总线地址锁存允许,输出。该信号在CPU总线周期的Tl期间有效,可作为CPU总线周期的指示。IO CH RAY:IO通道准备好,输入,高电平有效。该引脚信号与8086的READY功能相同,用于插入等待时钟

21、周期。IOCHCK(上划线):I0通道校验,输入,低电平有效。它有效表示板卡上出现奇偶校验错。IRQ7IRQ2:6个中断请求信号,输入,分别接到中断控制逻辑的主8259A的中断请求输入端IR7IR2(参看第五章的图523)。这些信号由低到高的跳变表示中断请求,但应一直保持高电平,直到CPU响应中断为止。它们的优先级别与所连接的IR线相同,即IRQ2在这6个请求信号中级别最高,IRQ7的级别最低。DRQ3DRQl:3个DMA请求信号,输入,高电平有效。它们分别接到DMA控制器8237A的DMA请求输入端DREQ3DREQl。因此,优先级别与它们相对应(DRQ1的级别最高,DRQ 3的级别最低)。

22、DACK3(上划线)DACKl(上划线):3个DMA响应信号,输出,低电平有效。TC:计数结束信号,输出,高电平有效。它由DMAC发出,用于表示进行DMA传送的通道编程时规定传送字节数已经传送完。但它没有说明是哪个通道,这要结合DMA响应信号DACK(上划线)来判断。OSC:振荡器的输出脉冲。CLK:系统时钟信号,输出。系统时钟的频率通常在477 MHz一8 MHz内选择,最高频率为83 MHz。CLK是由()SC的输出3分频产生的,也就是说()SC的频率应是CLK的3倍。RESET:系统复位信号,输出,高电平有效。该信号有效时表示系统正处于复位状态,可利用该信号复位总线板卡上的有关电路。NO

23、WS:零等待状态,输入,低电平有效。用于缩短按照缺省设置应等待的时钟数,当它有效时,不再插入等待时钟。REFRESH(上划线):刷新信号,双向,低电平有效,由总线主控器的刷新逻辑产生。该信号有效表示存储器正处于刷新周期,以下是对36线部分16位ISA总线的高8位)的简要说明: SDl5SD8:数据总线的高8位,双向,三态。SBHE:总线高字节传送允许,三态信号。该信号用来表示SDl5SD8上正进行数据传送。LA23LAl7:非锁存的地址线,在BALE为高电平时有效。将它们锁存起来,并和已锁存的低位地址线(A19A0)组合在一起,可形成24位地址线,因而使系统的寻址能力扩大到16 MB。_MEM

24、R(上划线),MEMW(上划线):存储器读、写信号,低电平有效。这两个信号在所有的存储器读或写周期有效。相比之下,前面所介绍的SMEMR(上划线)和SMEMW(上划线)仅当访问存储器的低1 MB时才有效。+MEMCSl6(上划线):存储器片选16,输入,低电平有效。该信号用来表示当前的数据传输是具有一个等待时钟的16位存储器总线周期。1 IOCCSl6(上划线):IO片选16,输入,低电平有效。该信号为集电极开路,为低表示当前的数据传输是具有一个等待时钟的16位IO总线周期。2 MASTER(上划线):总线主控信号,输入,在ISA总线的主控器初始化总线周期时产生,低电平有效。该信号与IO通道上

25、的I0处理器的DRQ线一起用于获取对系统总线的控制权。3 IRQl5IRQ10:6个中断请求信号,输入,接到中断控制逻辑的从8259A。4 DRQ7DRQ5、DACK7(上划线)DACK5(上划线)、DACK0(上划线):通道75的DMA请求和相应的DMA响应信号(另有一个通道0的响应信号)。这3个通道可进行16位DMA传送。ISA总线时序 ISA总线的时序和80868088的时序基本相同,但也有一些区别。有了80868088时序基础,对ISA总线时序的理解主要在于以下几点: 地址和数据已不再分时复用信号线,因此在整个总线周期内有效。 和80868088的最大模式一样,存储器读写和IO读写的控

26、制信号已分开,进行一种操作只需一个控制信号。 一个典型的存储器读写周期还是由T1、T2、T3和T4组成,而IO读写周期和DMA周期都自动插入了一个等待时钟周期。IO CH RAY相当于80868088时序中的:READY信号,当总线板卡上的存储器或I0电路较慢时,可利用该信号迫使CPU插入等待时钟周期,但等待时钟周期不得超过10个。8位ISA总线在存储器读写周期可用到20位地址,而16位|SA总线在存储器读写周期中可使用24位地址。但由于受IO指令的限制,8位和16位ISA总线的I0读写周期都只能使用低16位地址。 BALE在CPU总线周期的T1期间有效,它的基本作用是进行地址锁存,但也可以作

27、为一个新的CPU总线周期已开始的标志。 AEN有效表示DMAC正在控制系统总线,所以它可以作为系统处于DMA总线周期的标志。3.工作原理:IBM PC及其兼容机间经过RS232C口串行通信是在实际系统中用的最广泛的。上述框图只是串口通信的的一个内部的原理图,由于,本次设计是直接配置的PC机中的RS232适配卡,上述过程并不能看到,不过在,原理图的分析中会做详尽的解释 本次实验的外部来看实际的电路图PC机上的串行口是 9 针公插座,引脚定义为: PinNameDirDescription1CDCarrier Detect2RXDReceive Data3TXDTransmit Data4DTRD

28、ata Terminal Ready5GNDSystem Ground6DSRData Set Ready7RTSRequest to Send8CTSClear to Send9RIRing Indicator所以本设计所采用的串口为双端母插头。串口为交叉线,2,3号针脚交叉相连,5号针接公共地。EIA RS-232-C接口(9针)插头连线方法:发送RXD23TXD接收接收TXD32RXD发送信号地GND55GND信号地4.电路原理图:4.1顶层的模块图,top.pri此原理图的主要参考资料是protel 99 se中Z80 Microprocessor的例子。整个串行通信系统包括六大部分:

29、CPU部分、复位和时钟电路部分、电源部分、存储器部分、串口通信接口部分和外设部分。下就各部分座简要介绍。4.2 CPU部分。CPU.schCPU部分本来是用8086来做的,但考虑到,8086的寻址比较复杂,数据线分高八位和低八位,所以就改成了8088。IO/M,RD,WR几个控制引脚的译码通过简单的组合逻辑电路来实现。对RAM存储器、ROM存储器、各IO芯片的寻址译码,是通过一片3-8译码器74LS138来实现的。地址线的低13位代码,在芯片选择的时候,不起作用,只有A13A15三位地址线负责译码。为了便于记忆,可把芯片选择时的低13位地址线设为零,来代表它的片选地址。如本设计中,RAM地址位

30、0x00000来表示,而ROM的地址为0x20000,相应地,55,53,51的地址分别为:0x30000,0x40000,0x50000。低13位地址线只在选择存储器中的某一存储单元时使用。4.3复位和时钟电路。CPU_Clock.sch微机电路在工作中受到干扰后,容易出现CPU程序“跑飞”而盲目运行甚至出现死机现象。此时复位信号有效,使微机系统重新恢复正常运行。本设计采用的是比较简单的一种手动的复位电路。它是通用的吧,是直接从protel的一个例子中拷过来的。关于处理器的时钟电路确实有研究头8284除了提供频率恒定的时钟信号外,还对准备好(ready)信号,和复位(reset)信号进行同步

31、。外界的准备好信号输入到8284的RDY,同步的准备好信号READY从8284输出。同样,外界的复位信号输入到8284的RES,同步的复位信号RESET从8284输出。这样,从外部来说,可以在任何时候发出这两个信号,但是,8284的内部逻辑电路设计成在时钟下降沿处使READY和RESET有效。根据不同的振荡器,8284和振荡器之间,用两种不同的连接方式。通过F/C来实现:此电路图是按同步通信的方式画的,READY信号在以后的设计中,也没有用到,便把它的连接去掉了4.4电源部分。Power Supply.sch4.5存储器部分。serial_memory.sch2764只可读,6264可读可写,

32、由于处理器用的是8088,便无需考虑A0的问题了,这种便利也体现在,后面的设计中,IO芯片的端口地址的设置上。4.6 串口通信接口部分。serial51.sch8253为8251提供波特率,8253只用它的第0个计数器,工作在方式3。下面是一段基于本设计的连接图的通过8251实现自发自收串行通信的程序,内包含了8253,8251的初始化。STACKSEGMENTPARA STACK 'STACK'DB128 DUP(?)STACKENDSCODESEGMENTPARA PUBLIC 'CODE'ASSUMECS:CODE,SS:STACK,DS:CODESTAR

33、T:JMPMAINSBUFDB1,2,3,4,5,6,7,8,9,10;定义保存“发送信息”RBUFDB10 DUP(?);和“接收信息”的存储器区域OCOMMPROC ;将(AL)写入8251的命令口PUSHCX ;保存所用寄存器PUSHDXMOVDX,209H;执行端口写入操作OUTDX,ALMOVCX,400H ;延时LOOP$POPDX ;恢复所用寄存器POPCXRET ;返回主调程序OCOMMENDPINITPROC ;初始化子程序MOV DX,0x40003H;设置8253的1#通道为方式3、只读写低8位数据和2进制计数方式MOVAL,56HOUTDX,ALMOVDX, 0x400

34、01H;设置计数值,通讯速率为1M÷52÷161200 bpsMOVAL,52OUTDX,ALMOVAX,300H;向8251的命令端口写入3个0II1:CALLOCOMMDECAHJNZII1MOVAL,40H;复位8251CALLOCOMMMOVAL,4EH;设置1个停止位、8个数据位和16的波特率因子CALLOCOMMMOVAL,37H;允许8251发送和接收CALLOCOMMRET ;返回主调程序INITENDPMAIN:MOVAX,CS;初始化数据段寄存器MOVDS,AXLEASI,SBUF;和发送LEADI,RBUF;与接收指针call initM01:MOVD

35、X,0x50002H;等待8251处于允许发送状态M02:INAL,DXTESTAL,1JZM02MOVAL,SI;发送1个数据INCSIMOVDX,0x50001HOUTDX,ALMOVCX,40H;延时LOOP$MOVDX,0x50002H;等待8251处于允许接收状态M03:INAL,DXTESTAL,2JZM03MOVDX,0x50001H;接收INAL,DXMOVDI,AL;并保存一个数据INCDICMPSI,OFFSET SBUF+10;判断是否处理完了全部数据?JBM01;未完,再处理下一个HLT;完了,执行停机动作CODEENDSENDSTART下面是一段基于本设计的连接图的通

36、过8251实现串行通信的程序。stack segment stackstack endsdata segmentdata endscode segmentassume cs:code,ds:data,ss:stackstart: push cspop ds mov dx,0x0003h;设置8253计数1工作方式3mov al,56hout dx,almov al,52 mov dx,0x0001h给8253计数器1送初值out dx,almov dx,0x50001h ;初始化8251xor al,almov cx,03;向8251控制端口送3个0delay:call out1loop de

37、laymov al,40h;向8251控制端口送40H,使其复位call out1mov al,4eh;设置为1个停止位,8个数据位,波特率因子为16call out1mov al,27h;向8251送控制字允许其发送和接收call out1next: mov dx,0x50001h in al,dx test al,02;检查接收是否准备好 jz next;没有,等待 mov dx,0x50000h in al,dx;准备好,接收 push ax mov cx,40hs51: loop s51;延时waiti: mov dx,0x50001hin al,dxtest al,01;发送是否准备

38、好jz waitimov dx,0x50000hpop axout dx,al jmp nextout1 proc near;向外发送一字节的子程序out dx,alpush cxmov cx,400hgg:loop gg;延时pop cxretout1endpcode ends end start4.7 外设部分。key_led.sch其实在PC机中应该是用8279来实现的。五、软件设计:1.程序流程图:程序流程图NYY退出N开 始显示提示信息配置串口0为4800波特,无校验,1位停止位,一帧8位检查键盘状态是否有键按下?读取此键是否是ESC?把此字符送到COM端口读取COM0的状态到AH发

39、送获取状态位是否有字符?从COM0读出显示到DOS端口N2.程序清单:nameserialcommunicationdatasegmentmessagedb'Serial Communication',0ah,0dh,db'Any key press is sent to other PC',0ah,0dhdb'press any key to exit','$'dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovah,09 ;显示字符串movdx,

40、offset messageint21h;初始化串口 movah,0movdx,0 ;初始化COM0moval,0c3h;11000011,4800,n,1,8int14h;调用BIOS 14号中断again:movah,01;获取键盘状态int16h;检查键盘是否按下jznext;如果没有则转入到接收模式movah,0;如过有按键按下,读取出来int16h;调用16号BIOS中断cmpal,1bh;比较一下是否是ESC键jeexit;如果是,直接退出通信movah,1;如果不是,把按下的字符发送到COMmovdx,0 ;选择COM0int14h;调用BIOS中断;以下这部分代码,检查COM0

41、端口,看看是否有字符接收,如果有,接收,并且把它在终端上显示出来next:movah,3;把COM口的状态读到AHmovdx,0 ;选择COM0int 14h;解释同上andah,1;屏蔽除D0位的其它位cmpah,1;检查D0看是否有一个字符等待接收jneagain;没有,则转入到监视键盘模块movah,2;有的话,从COM0读出movdx,0int14hmovdl,al;dl中存放要显示的字符movah,2;21号中断2号调用,显示字符int21h;调用DOS 21号中断jmpagain;跳回到监视键盘模块exit:movah,4ch;退出DOSint21hcodeendsend start以上是全双工双机通信的程序代码,自发自收也可以用同样的代码,只需改变连线,把9针插座的2,3引脚用导线交叉互联即可。六、方案论证:按设计题目实现双机通信可有三种方法:第一种

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论