微机接口与汇编技术实验十三:串行通讯

这是微机接口与汇编技术的实验札记。

一、实验目的

1、了解串行通讯的基本原理。
2、掌握串行接口芯片8251的工作原理和编程方法。

二、实验内容

1、按图13-1连接好电路,(8251插通用插座)其中8253计数器用于产生8251的发送和接收时钟,TXD和RXD连在一起。
2、编程: 从键盘输入一个字符,将其ASCII码加 1 后发送出去,再接收回来在屏幕上显示,实现自发自收。

三、实验提示

1、图示电路8251的控制口地址为2B9H,数据口地址为2B8H。
2、8253计数器的计数初值=时钟频率/(波特率×波特率因子),这里的时钟频率接1MHz,波特率若选1200,波特率因子若选16,则计数器初值为52。
3、收发采用查询方式。

实验19_串行通信实验8251.lct

实验流程图

实验19_串行通信实验8251.ylt

实验原理图

汇编代码如下:


;************************************************************************************************;
;*                                   8251串行通讯(自发自收)                                      *;
;*280H--8253CS  GATE0--+5V  CLK0--1MHZ  TXCLK--OUT0  RXCLK--OUT0  8251CS--298H  RXD8251--TXD8251 *;
;*************************************************************************************************;
data segment
 io8253a    equ 280h
 io8253b    equ 283h
 io8251a    equ 298h
 io8251b    equ 299h 
 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,io8253b       ;设置8253计数器0工作方式
      mov al,16h
      out dx,al
      mov dx,io8253a
      mov al,52         ;给8253计数器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,4dh        ;设置为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
   ;  inc al
     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

这就是本次实验。