当前位置:文档之家› 北理工微机原理实验三--使用8251A的串行接口应用实验

北理工微机原理实验三--使用8251A的串行接口应用实验

北理工微机原理实验三--使用8251A的串行接口应用实验本科实验报告实验名称:实验三使用8251A的串行接口应用实验课程名称:计算机原理与应用实验实验时间:任课教师:实验地点:实验教师:实验类型:□原理验证■综合设计□自主创新学生姓名:学号/班级:组号:学院:同组搭档:专业:成绩:1. 实验目的1) 掌握串行通信原理及半双工和全双工的编程方法;2) 掌握用8251A接口芯片实现微机间的同步和异步通信;3) 掌握8251A芯片与微机的接口技术和编程方法。

2. 实验原理和内容8251A是一种可编程的同步/异步串行通信接口芯片,具有独立的接收器和发送器,能实现单工、半双工、双工通信。

1) 8251A内部结构8251A通过引脚D0~D7和系统数据总线直接接口,用于和CPU传递命令、数据、状态信息。

读写控制逻辑用来接收CPU的控制信号、控制数据传送方向。

CPU对8251A的读写操作控制表如表3-4所示。

表3-4 CPU对8251A的读写操作控制表2) 8251A的方式控制字和命令控制字方式控制字确定8251A的通信方式(同步/异步)、校验方式(奇校/偶校/不校)、字符长度及波特率等,格式如图3-10所示。

命令控制字使8251A处于规定的状态以准备收发数据,格式如图3-11所示。

方式控制字和命令控制字无独立的端口地址,8251A 根据写入的次序来区分。

CPU对8251A初始化时先写方式控制字,后写命令控制字。

3) 状态寄存器8251状态寄存器用于寄存8251A的状态信息,供CPU查询,定义如图3-12所示。

TXRDY位:当数据缓冲器空时置位,而TXRDY引脚只有当条件( 数据缓冲器空•/CTS•TXE)成立时才置位。

溢出错误:CPU没读走前一个字符,下一个字符又接收到,称为溢出错误。

帧错误:在字符结尾没检测到停止位,称为帧错误。

4) PC机寄存器的端口地址其中:线路控制寄存器第七位:DLAB=0;线路控制寄存器第七位:DLAB=1。

5) 波特率和除数因子对照表实验硬件连接方法:通过计算机点到点三线制串口通信线,掌握接线的方法以及RS-232标准的机械、电气规范。

3. 实验连接方法按图连接好电路,其中8254计数器用于产生8251的发送和接收时钟,TXD和RXD连在一起。

1) 8254/CLK0连接时钟/1MHz;2) 8254/CS连接I/O译码/Y0(280H---287H);3) 8254/OUT0连接8251/TX/RXCLK;4) 8254/GATE0连接+5V;5) 8251/TXD连接8251/RXD;6) 8251/CS连接I/O译码/Y7(2B8H---2BFH。

4. 编程提示8251的控制口地址为2B9H,数据口地址为2B8H。

8254计数器的计数初值=时钟频率/(波特率X 波特率因子),这里的时钟频率接1MHz,波特率若选1200,波特率因子16,则计数器初值52。

1MHz = 1000000Hz基于8251芯片实现异步串行通信一般有两种方式,一种是查询方式,另一种是中断方式,使用哪种方式取决于进行初始化时寄存器的设置。

8254 计数器的计数初值=时钟频率/(波特率×波特率因子),这里的时钟频率接1MHz,波特率若选1200,波特率因子若选16,则计数器初值为52。

本实验采用8251A异步方式发送,利用8086汇编语言实验计算机点到点的串口通信,设置:波特率为1200bps、数据位7位、停止位1位、偶校验方式,利用查询方式或中断方式实现双机通信,能够传输多个字符。

程序具体设计如下:1) 基础型实验:从键盘输入一个文件或打开已有的文件发送出去,再接收回来在屏幕上显示,实现自发自收。

2) 提高型实验:设计发送方和接收方两个程序,要求将某汇编语言传送到接收方,接收方收到后将源程序写入指定磁盘或屏幕显示。

5. 实验代码发送端代码:STACK SEGMENT PARA STACKD B 256 DUP(0)STACK ENDSCODE SEGMENTA SSUME CS:CODE,SS:STACKSTART:M OV DX,3FBH 线路控制寄存器M OV AX,80H 10000000B,DLAB=1,数据位,停止位,校验位,波特率因子O UT DX,ALM OV DX,3F8H 波特率寄存器(低)M OV AX,60H 查表O UT DX,ALM OV DX,3F9H 波特率寄存器(高)M OV AX,0 查表O UT DX,ALM OV DX,3FBH 线路控制寄存器M OV AX,0AH 00001010B,DLAB=0O UT DX,ALM OV DX,3FCH; 调制解调器控制寄存器M OV AX,03H 00000011B,OUT1,2均输出1,请求发送,数据已就绪O UT DX,ALM OV DX,3F9H 中断允许寄存器M OV AX,0 各种中断全部禁止O UT DX,ALFOREVER:用死循环不断检测8251状态M OV DX,3FDH ;从线路状态寄存器读状态I N AL,DXT EST AL,1EH 死记J NZ ERROR ;传输线状态寄存器全部都是0T EST AL,01H 00000001B,检测接收缓存寄存器是否有数据J NZ RECEIVE 可以收了T EST AL,20H 00100000B,检测发送保持寄存器是否为空J NZ SEND 可以发了J MP FOREVERSEND:MOV AH,1I NT 16HJ Z FOREVER 可以发但是未接收到键盘字符收到了M OV AH,0I NT 16H 输入读入ALM OV DX,3F8H 扔进(对于发送端是)发送保持寄存器,发出O UT DX,ALC MP AL,03HJ E DONEM OV DL,ALM OV AH,02HI NT 21H 显示发送的字符C MP AL,0DH 00001101BJ NZ FOREVERM OV DL,0AHM OV AH,02H I NT 21HJ MP FOREVERRECEIVE:M OV DX,3F8H I N AL,DXA ND AL,7FHC MP AL,03H; J Z DONEM OV DL,ALM OV AH,02H I NT 21HC MP AL,0DHJ NZ FOREVER M OV DL,0AH M OV AH,02H I NT 21HJ MP FOREVER ERROR:M OV DX,3F8HI N AL,DXM OV DL,0AHM OV AH,02HI NT 21HJ MP FOREVERDONE:M OV AH,4CHI NT 21HCODE ENDSEND STAR接收端代码:DATA SEGMENTIO8254A EQU 280HIO8251A EQU 2B8HIO8251B EQU 2B9HDATA ENDSSTACK SEGMENT PARA STACKD B 256 DUP(0)STACK ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:M OV AX,DATAM OV DS,AXM OV DX,IO8254A+3M OV AL,00010110B ;设置8254计数器0工作方式O UT DX,ALM OV DX,IO8254AM OV AL,52 ;给8254计数器0送初值O UT DX,ALM OV DX,IO8251B ;对8251进行初始化M OV AX,0M OV CX,3reset8251:O UT DX,ALP USH CXM OV CX,40H ;向8251控制端口送40H,使其复位L OOP $P OP CXL OOP reset8251M OV AL,40HO UT DX,ALM OV CX,40HL OOP $M OV AL,5AHO UT DX,ALM OV AL,27HO UT DX,ALFOREVER:M OV DX,IO8251B ;从线路状态寄存器读状态I N AL,DXT EST AL,38H ;检测是否为00111000J NZ ERROR ;传输线状态寄存器全部都是0T EST AL,02H ;检测接受数据是否准备好了J NZ RECEIVE ;等于0则表示数据没有准备好T EST AL,01H ;数据没有准备好J NZ send ;没有,则跳转等待J MP FOREVERsend:M OV AH,1 ;检测键盘按下I NT 16HJ Z FOREVER ;有键盘按下M OV AH,0 ;读键盘I NT 16HM OV DX,IO8251A ;将键盘的数据输出发送到缓冲器O UT DX,ALC MP AL,03HJ Z DONEM OV AH,02HI NT 21HC MP AL,0DHJ NZ FOREVERM OV DL,0AHM OV AH,02HI NT 21HJ MP FOREVERRECEIVE:M OV DX,IO8251A ;接收数据I N AL,DXA ND AL,7FH ;最高位为停止位C MP AL,03H;J Z DONEM OV DL,ALM OV AH,02HI NT 21HC MP AL,0DHJ NZ FOREVERM OV DL,0AHI NT 21HJ MP FOREVERC MP AL,0DHJ NZ FOREVER ERROR:M OV DX,IO8251A I N AL,DXM OV DL,'?'M OV AH,02HI NT 21HJ MP FOREVER DONE:M OV AH,4CHI NT 21HCODE ENDS END START。

相关主题