(仅供参考)微机原理实验三

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三使用8251A的串行接口应用实验

一、实验目的

1) 掌握串行通信原理及半双工和全双工的编程方法。

2) 掌握用8251A 接口芯片实现微机间的同步和异步通信。

3) 掌握8251A 芯片与微机的接口技术和编程方法。

二、实验原理和内容

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

1)8251A 内部结构

8251A 通过引脚D0~D7 和系统数据总线直接接口,用于和CPU 传递命令、数据、状态信息。读写控制逻辑用来接收CPU 的控制信号、控制数据传送方向。CPU 对8251A 的读写操作控制表如表3-4 所示。

方式控制字确定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)波特率和除数因子对照表

232标准的机械、电气规范。

6)实验连接方法

按图连接好电路,其中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。

7)编程提示

8251 的控制口地址为2B9H,数据口地址为2B8H。

8254 计数器的计数初值=时钟频率/(波特率X 波特率因子),这里的时钟频率接

1MHz,波特率若选1200,波特率因子16,则计数器初值52。

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

8254 计数器的计数初值=时钟频率/(波特率×波特率因子),这里的时钟频率接

1MHz,波特率若选1200,波特率因子若选16,则计数器初值为52。

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

三、实验流程图

四、实验代码

(1)收发字符

data segment

io8254a equ 280h

io8254b equ 283h

io8251a equ 2b8h

io8251b equ 2b9h

mes1 db 'you can play a key on the keybord!',0dh,0ah,24h

mes2 dd mes1

data ends

code segment

assume cs:code,ds:data

start: mov ax,data

mov ds,ax

mov dx,io8254b ;设置8254计数器0工作方式

mov al,16h

out dx,al

mov dx,io8254a

mov al,52 ;给8254计数器0送初值

out dx,al

mov dx,io8251b ;初始化8251

xor al,al

mov cx,03 ;向8251控制端口送3个0

delay: call out1

loop delay

mov al,40h ;向8251控制端口送40H,使其复位

call out1

mov al,4eh ; 1个停止位,8个数据位,波特率因子为16

call out1

mov al,27h ;向8251送控制字允许其发送和接收

call out1

lds dx,mes2 ;显示提示信息

mov ah,09

int 21h

waiti: mov dx,io8251b

in al,dx

test al,01 ;发送是否准备好

jz waiti

mov ah,01 ;是,从键盘上读一字符

int 21h

cmp al,27 ;若为ESC,结束

jz exit

mov dx,io8251a

out dx,al ;发送

mov cx,40h

s51: loop s51 ;延时

next: mov dx,io8251b

in al,dx

test al,02 ;检查接收是否准备好

jz next ;没有,等待

mov dx,io8251a

in al,dx ;准备好,接收

mov dl,al

mov ah,02 ;将接收到的字符显示在屏幕上

int 21h

jmp waiti

exit: mov ah,4ch ;退出

int 21h

out1 proc near ;向外发送一字节的子程序

out dx,al

push cx

mov cx,40h

gg: loop gg ;延时

pop cx

ret

out1 endp

code ends

end start

(2)收发文件

DATA SEGMENT

FILE1 DB 'C:\1.txt',0

FCODE1 DW 0

BUF1 DB 2000H DUP(0)

FILE2 DB 'C:\2.txt',0

FCODE2 DW 0

BUF2 DB 2000H DUP(0)

IO8254A EQU280H

IO8254B EQU 283H

IO8251A EQU 2b8H

IO8251B EQU 2b9H

DATA ENDS

STACK SEGMENT PARA STACK

DB 256 DUP(0)

相关文档
最新文档