当前位置:文档之家› 双机串行通信的设计与实现

双机串行通信的设计与实现

双机串行通信的设计与实现一、设计要求1.单机自发自收串行通信。

接收键入字符,从8251A的发送端发送,与同一个8251A的接收端接收,然后在屏幕上显示出来。

2.双机串行通信,在一台PC机键入字符,从8251A的发送端发送给另一台PC机,另一台PC机的8251A的接收端接收,然后在屏幕上显示出来。

二、所用设备IBM-PC机两台(串行通信接口8251A两片,串行发送器MC1488和串行接收器MC1489各两片,定时器/计数器8253,终端控制器8259等),串口线一根串行直连电缆用于两台台电脑通过串行口直接相连,电缆两端的插头都是9 针的母插头:三、硬件方案1.设计思想计算机传输数据有并行和串行两种模式。

在并行数据传输方式中,使用8条或更多的导线来传送数据,虽然并行传送方式的速度很快,但由于信号的衰减或失真等原因,并行传输的距离不能太长,在串行通信方式中,通信接口每次由CPU得到8位的数据,然后串行的通过一条线路,每次发送一位将该数据放送出去。

串行通信采用两种方式:同步方式和异步方式。

同步传输数据时,一次传送一个字节,而异步传输数据是一次传送一个数据块。

串口是计算机上一种非常通用设备串行通信的协议。

大多数计算机包含两个基于RS232的串口。

串口按位(bit)发送和接收字节。

尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。

典型地,串口用于ASCII码字符的传输。

通信使用3根线完成:(1)地线,(2)发送,(3)接收。

由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。

其他线用于握手,但是不是必须的。

串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。

对于两个进行通行的端口,这些参数必须匹配:RS-232(ANSI/EIA-232标准)是IBM-PC及其兼容机上的串行连接标准。

可用于许多用途,比如连接鼠标、打印机或者Modem,同时也可以接工业仪器仪表。

用于驱动和连线的改进,RS-232只限于PC串口和设备间点对点的通信。

IBM PC及其兼容机提供了一种有较强的硬件依赖性,但却比较灵活的串行口I/O的方法,即通过INT 14调用ROM BIOS串行通信口的例行程序。

该例行程序。

该例行程序包括将串行口初始化为指定的字节结构和传输速率,检查控制器的状态,读写字符等功能。

14号中断的功能总结如下:串行口服务(Serial Port Service——INT 14H)00H —初始化通信口03H —读取通信口状态01H —向通信口输出字符04H —扩充初始化通信口02H —从通信口读入字符(1)、功能00H:初始化通信口入口参数:AH=00HDX=初始化通信口号(0=COM1,1=COM2,……)AL=初始化参数,参数的说明如下:波特率奇偶位停止位字的位数76543210000 = 110X0 = None0 = 1 bit10 = 7 bits001 = 15001 = Odd1 = 2 bits11 = 8 bits010 = 30011 = Even011 = 600100 = 1200101 = 2400110 = 4800111 = 9600(2)、功能01H :向通信口输出字符入口参数:AH=01HAL=字符DX=初始化通信口号(0=COM1,1=COM2,……)出口参数:AL的值不变AH的位7=0——操作成功,通信口状态,AH的位6~0是其状态位(3)、功能02H :从通信口读入字符入口参数:AH=02HDX=初始化通信口号(0=COM1,1=COM2,……)出口参数:AL=接受的字符AH的位7=0——操作成功,通信口状态,AH的位6~0是其状态位(4)、功能03H功能描述:读取通信口状态入口参数:AH=03HDX=初始化通信口号(0=COM1,1=COM2,……)出口参数:AH=通信口状态,AL=Modem状态,参见功能号00H中的说明(5)、功能04H功能描述:扩充初始化通信口,仅在PS/2中有效本设计正是利用14号配置串口,实现双机的双工通信及单机的自发自收通信。

并画出了比较完整的原理图与写出了比较详细的程序 2.原理框图3.工作原理IBM PC 及其兼容机间经过RS -232-C 口串行通信是在实际系统中用的最广泛的。

上述框图只是串口通信的的一个内部的原理图,由于,本次设计是直接配置的PC 机中的RS232适配卡,上述过程并不能看到,不过在,原理图的分析中会做详尽的解释本次实验的外部来看实际的电路图CPU总线定时器8253825114881489 9针串口PC机上的串行口是9 针公插座,引脚定义为:Pin Name Dir Description1CD Carrier Detect2RXD Receive Data3TXD Transmit Data4DTR Data Terminal Ready5GND System Ground6DSR Data Set Ready7RTS Request to Send8CTS Clear to Send9RI Ring Indicator所以本设计所采用的串口为双端母插头。

串口为交叉线,2,3号针脚交叉相连,5号针接公共地。

EIA RS-232-C接口(9针)插头连线方法:发送RXD 2 ←→ 3 TXD 接收接收TXD 3 ←→ 2 RXD 发送信号地GND 5 ←→ 5 GND 信号地4.电路原理图4.1顶层的模块图,top.pri此原理图的主要参考资料是protel 99 se中Z80 Microprocessor的例子。

整个串行通信系统包括六大部分:CPU部分、复位和时钟电路部分、电源部分、存储器部分、串口通信接口部分和外设部分。

下就各部分座简要介绍。

4.2 CPU部分。

CPU.schCPU部分本来是用8086来做的,但考虑到,8086的寻址比较复杂,数据线分高八位和低八位,所以就改成了8088。

IO/M,RD,WR几个控制引脚的译码通过简单的组合逻辑电路来实现。

对RAM存储器、ROM存储器、各IO芯片的寻址译码,是通过一片3-8译码器74LS138来实现的。

地址线的低13位代码,在芯片选择的时候,不起作用,只有A13~A15三位地址线负责译码。

为了便于记忆,可把芯片选择时的低13位地址线设为零,来代表它的片选地址。

如本设计中,RAM地址位0x00000来表示,而ROM的地址为0x20000,相应地,55,53,51的地址分别为:0x30000,0x40000,0x50000。

低13位地址线只在选择存储器中的某一存储单元时使用。

4.3复位和时钟电路。

CPU_Clock.sch微机电路在工作中受到干扰后,容易出现CPU程序“跑飞”而盲目运行甚至出现死机现象。

此时复位信号有效,使微机系统重新恢复正常运行。

本设计采用的是比较简单的一种手动的复位电路。

它是通用的吧,是直接从protel 的一个例子中拷过来的。

关于处理器的时钟电路确实有研究头8284除了提供频率恒定的时钟信号外,还对准备好(ready)信号,和复位(reset)信号进行同步。

外界的准备好信号输入到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可读可写,由于处理器用的是8088,便无需考虑A0的问题了,这种便利也体现在,后面的设计中,IO芯片的端口地址的设置上。

4.6 串口通信接口部分。

serial51.sch8253为8251提供波特率,8253只用它的第0个计数器,工作在方式3。

下面是一段基于本设计的连接图的通过8251实现自发自收串行通信的程序,内包含了8253,8251的初始化。

STACK SEGMENT PARA STACK 'STACK'DB 128 DUP(?)STACK ENDSCODE SEGMENT PARA PUBLIC 'CODE'ASSUME CS:CODE,SS:STACK,DS:CODESTART: JMP MAINSBUF DB 1,2,3,4,5,6,7,8,9,10 ;定义保存“发送信息”RBUF DB 10 DUP(?) ;和“接收信息”的存储器区域OCOMM PROC ;将(AL)写入8251的命令口PUSH CX ;保存所用寄存器PUSH DXMOV DX,209H ;执行端口写入操作OUT DX,ALMOV CX,400H ;延时LOOP $POP DX ;恢复所用寄存器POP CXRET ;返回主调程序OCOMM ENDPINIT PROC ;初始化子程序MOV DX,0x40003H ;设置8253的1#通道为方式3、只读写低8位数据和2进制计数方式MOV AL,56HOUT DX,ALMOV DX, 0x40001H ;设置计数值,此时的通讯速率为1M÷52÷16≈1200 bpsMOV AL,52OUT DX,ALMOV AX,300H ;向8251的命令端口写入3个0II1: CALL OCOMMDEC AHJNZ I I1MOV AL,40H ;复位8251CALL OCOMMMOV AL,4EH ;设置1个停止位、8个数据位和16的波特率因子CALL OCOMMMOV AL,37H ;允许8251发送和接收CALL OCOMMRET ;返回主调程序INIT ENDPMAIN:MOV AX,CS ;初始化数据段寄存器MOV DS,AXLEA SI,SBUF ;和发送LEA DI,RBUF ;与接收指针call initM01:MOV DX,0x50002H ;等待8251处于允许发送状态M02:IN AL,DXTEST AL,1JZ M02MOV AL,[SI] ;发送1个数据INC S IMOV DX,0x50001HOUT DX,ALMOV CX,40H ;延时LOOP $MOV DX,0x50002H ;等待8251处于允许接收状态M03:IN AL,DXTEST AL,2JZ M03MOV DX,0x50001H ;接收IN AL,DXMOV [DI],AL ;并保存一个数据INC D ICMP SI,OFFSET SBUF+10 ;判断是否处理完了全部数据?JB M01 ;未完,再处理下一个HLT ;完了,执行停机动作CODE ENDSEND START下面是一段基于本设计的连接图的通过8251实现串行通信的程序。

相关主题