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

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

双机串行通信的设计与实现一、设计要求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=8bits10= 30011 = Even11= 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 适配卡,上述过程并不能看到,不过在,原理图的 分析中会做详尽的解释第 4 页定时器8253148882511489CPU总线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 号针接公共地。

发送RXD2←→3TXD接收接收TXD3←→2RXD发送信号地GND5←→5GND信号地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 AHJNZII1MOV 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 个数据INCSIMOV 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;并保存一个数据INCDICMP SI,OFFSET SBUF+10 ;判断是否处理完了全部数据?JB M01 ;未完,再处理下一个HLT ;完了,执行停机动作CODE ENDSEND START下面是一段基于本设计的连接图的通过8251 实现串行通信的程序。

相关主题