8250能实现数据串并变换,实现全双工异步通信。

支持异步通信协议,数据格式、通信速率由初始化编程设定。

内部有中断机制,CPU可用查询中断方式与之交换信息。

8250内部寄存器:

 发送保持寄存器:保存CPU传送来的并行数据,并转移至发送移位寄存器。

只有在发送保持寄存器空闲时,CPU才能写入写一个数据。

接受缓冲寄存器:

接受移位寄存器,去掉起始位,检验位和停止位,转换成并行数据,转换后的并行数据存入接受缓冲寄存器,等待CPU接受。

只有当一帧数据收完后,CPU才能用IN指令读接受缓冲寄存器

通信线状态寄存器:寄存通信线状态

D0:D0=1表示接收器已接收到一帧完整的数据,并已转换成并行数据,存入接受缓冲寄存器。

D5:  D5=1表示发送保持寄存器空闲,CPU可以写入新数据。

D0位和D5位是串行接口最基本的标志位,它们决定了CPU能不能向8250进行读写操作,只有当D0=1时,CPU才能读数;只有当D5=1时,CPU才能写数据。

D1D2D3D4位如果为1,说明出错。

例:利用主串口查询方式发送一个‘A’

(在此之前,8250通信线寄存器最高位设置为0)

SCANT :MOV DX,3FDH    ;3FDH为通信线状态寄存器

  ;SCANT写在MOV DX,3FDH这个地方

IN   AL,DX         ;读取通信线状态寄存器到AL

TEST  AL,00100000B/20H ;检查发送保持寄存器是否空闲

JZ  SCANT        ;一直等到D5为1时,才继续进行下一步

MOV DX,3F8H    ;发送保持寄存器

MOV  AL,'A'

OUT DX,AL          ;向发送保持寄存器发送一个字符‘A’

例:利用辅串口查询方式接受一个字符

(在此之前,8250通信线寄存器最高位设置为0)

SACNT:MOV DX,3FDH   ;3FDH为通信线状态寄存器

IN   AL,DX        ;读取通信线状态寄存器到AL

TEST AL,01H      ;检查接受缓冲器是否有数据

JZ   SACNT      ;一直等到D0为1时,才继续进行下一步

MOV DX,2F8H

IN     AL,DX       ;从辅串口接受缓冲寄存器读取一个字符到AL

发送保持寄存器和接受缓冲寄存器口地址相同,当使用OUT指令时,默认访问发送保持缓冲器;

当使用IN指令时,默认访问接受缓冲寄存器。

中断允许寄存器:

D7~D4位恒为0,D3~D0位表示8250的4级中断是否被允许。

D0:允许接受到一帧数据后,内部提出接受中断请求

D1:允许接受到一帧数据后,内部提出发送中断请求

D2D3

当8250工作在查询方式,中断允许寄存器全部置0。

中断识别寄存器?没用到

MODEM控制寄存器:

000_ _ 000(只需要考虑D3,D4位)

D3=1:8250用中断方式与CPU交换信息;D3=0:8250用查询方式与CPU交换信息

D4=0:8250工作在正常收发方式;D4=1:8250工作在内部自环方式

除数寄存器(高8位,低8位)

通信线控制寄存器:指定串行异步通信数据格式

D7=1表明后继写入合用端口的数据写入除数寄存器

D7=0表明后继写入何用端口的数据写入非除数寄存器

MOV  DX,3FBH; 3FBH控制线寄存器

MOV   AL,80H   ;   10000000B (访问除数寄存器)

OUT   DX,AL     ;    访问除数寄存器

MOV   DX,3F9H;    除数寄存器高8位

MOV    AL,   N      ;

OUT     DX,AL     ;   N写入除数寄存器高8位

MOV DX,3FBH       ;3FBH控制线寄存器

MOV AL,01111111B(写最高位,后面不管);访问非除数寄存器

OUT DX,AL

MOV DX,3F8H

MOV AL,N

OUT DX,AL              ;N写入发送保持寄存器

8250的初始化编程:

直接对8250端口进行初始化编程

(1)确定波特率:          设置除数寄存器

(2)确定数据格式:      设置通信线路控制寄存器

(3)若使用中断方式:   设置中断允许寄存器的相应位(置“1”)

(4)设置MODEM控制寄存器

例:编写子程序,对PC系列机主串口进行初始化,要求:

(1)通信速率=1200波特,一帧数据包括:8个数据位,1个停止位,无校验

(2)查询方式,完成内环自检

查表:除数寄存器0060H

一帧数据结构命令字:00000011B(3FBH,第一位为0是因为之后用不到除数寄存器)

中断允许命令字:0

MODEM控制字00010000B=10H

注意D3在右面,D4在左面

I8250 PROC

MOV  DX,3FBH

MOV AL,80H

OUT  DX,AL     ;这三行固定,表示访问除数寄存器

MOV  DX,3F9H

MOV  AL,0      ;00H写入除数寄存器高8位

OUT  DX,AL    ;

MOV DX,3F8H

MOV  AL,60H

OUT  DX,AL    ;60H写入除数寄存器低9位

MOV  DX,3FBH

MOV  AL,03H

OUT   DX,AL    ;定义一帧数据格式

MOV AL,0

OUT  DX,AL

MOV DX,3FCH  ;置MODEM控制器

MOV AL,10H

OUT DX,AL

RET

I8250 ENDP

例:要求以9600bps进行异步串行通信,每个字符7位,2个停止位,奇校验,允许所有中断。

假设端口地址的高位0011,1111,1A2A1A0

除数寄存器000CH        (3FBH)

数据格式:00001110B (3FBH)

允许所有中断:中断允许寄存器0FH

MODEM控制器:000010(11)?(考试不考)

MOV DX,3FBH

MOV AL,80H

OUT DX,AL ;访问除数寄存器

MOV DX,3F9H

MOV AL,0

OUT DX,AL;除数寄存器高8位

MOV DX,3F8H

MOV AL,0CH

OUT DX,AL;除数寄存器低8位

MOV DX,3FBH

MOV AL,00001110B

OUT DX,AL;设置数据帧格式

MOV DX,3F9H

MOV AL,0FH

OUT DX,AL;设置中断允许寄存器

MOV DX,3FCH

MOV AL,0BH

OUT DX,AL   ;置MODEM控制器

例:A、B两机利用主串口,查询方式,进行单工通信,A机发送电文“hello”至B机。试为A机编写发送程序。要求:波特率为2400,奇校验,停止位1位,数据位7位,采用查询方式。

除数寄存器:0030H

A机:

DATA SEGMENT USE16

BUF DB 'HELLO'

LEN EQU  $-BUF

DATA ENDS

CODE SEGMENT USE16

ASSUME CS:CODE,DS:DATA

BEG:  MOV AX,DATA

MOV DS,AX

CALL I8250 ;完成8250初始化编程

;在完成8250的初始化编程后默认访问的是非除数寄存器

LEA  BX,BUF

MOV CX,LENS

SCAN:  MOV DX,3FDH

 IN   AL,DX   ;忘记写

TEST AL,20H;检测D5是否为1,如果为1说明可以发送数据

JZ SCAN

MOV DX,3F8H

MOV AL,[BX];使用LOOP循环遍历字符串

OUT DX,AL

INC BX

LOOP SCAN

NEXT:  MOV AH,4CH

INT 21H

I8250 PROC

MOV DX,3FBH

MOV AL,80H

OUT DX,AL       ;访问除数寄存器

MOV DX,3F9H

MOV AL,0

OUT DX,AL       ;除数寄存器高8位00H

MOV DX,3F8H

MOV AL,30H

OUT DX,AL       ;除数寄存器低9位30H

MOV DX,3FBH

MOV AL,00001010B

OUT DX,AL       ;设置一帧数据格式

MOV  DX,3FCH

MOV AL, 0

OUT DX,AL

RET

I8250 ENDP

CODE ENDS

END BEG

B机:

CODE SEGMENT USE16

ASSUME CS:CODE,DS:DATA

BEG: CALL I8250 ;同上(和A一样)

MOV CX,5

SCAN:MOV DX,3FDH

IN AL,DX

TEST AL ,01H  ;D0位是1说明可以接受数据

       JZ  SCAN

           IN AL,3F8H ;出错

         正确写法 

         MOV DX,3F8H

          IN AL,DX ;使用AL接受读取缓冲区的数据

LOOP SCAN

MOV AH,4CH

INT 21H

【微机接口】可编程串行异步通信芯片8250相关推荐

  1. 51单片机串行口程序c语言编程,单片机C语言编程串行口通讯.ppt

    单片机C语言编程串行口通讯 第7章 MCS-51单片机串行口 第7章 MCS-51单片机串行口 目 录 7.1 串行通信基本知识 7.2 串行口结构及控制 7.3 串行口工作方式 7.4 串行口应用举 ...

  2. 基于AT89C51单片机实现串行总线芯片测试实验平台的设计

    应用串行接口芯片扩展系统时,在初步选择了串行接口的芯片后,为了对芯片的资源更好地了解,开发者一般在系统设计前搭建一个简单的硬件电路并编制相应的软件对其测试,待性能验证后再确定最终的设计方案。本文根据这 ...

  3. 关于STM32的串行异步通信

    [串行异步通信] STM32F4 的串口资源相当丰富的,功能也相当强劲. STM32F407ZGT6 最多可提供 6 路串口,有分数波特率发生器.支持同步单线通信和 半双工单线通讯.支持 LIN.支持 ...

  4. 新手学习FPGA----如何将软硬件程序固化进串行Flash芯片EPCS

    如何将软硬件程序固化进串行Flash芯片EPCS 在FPGA芯片的使用中,软硬件程序可通过JTAG口下载进FPGA芯片中,程序可立即执行,并且在掉电后程序丢失.为了避免这种情况的出现,可使用串行FLa ...

  5. FPGA之实现UART串行异步通信-一字节数据接收

    文章目录 前言 一.UART关键参数 二.数据接收子功能介绍 1.子功能函数 2.仿真测试模块 总结 前言 使用FPGA自带USB转串口实现指定波特率的单个数据的发送. 一.UART关键参数 1.波特 ...

  6. 串行异步通信_单片机串行口介绍

    串行口是单片机与外界进行信息交换的工具,8051单片机的通信方式有两种: 并行通信:数据的各位同时发送或接收. 串行通信:数据一位一位次序发送或接收. 串行通信的方式 异步通信 用一个起始位0表示字符 ...

  7. Intel8251可编程串行扩展

    随着集成电路技术的发展,电子设计自动化(EDA)逐渐成为重要的设计手段,已经广泛应用于模拟与数字电路系统等许多领域.电子设计自动化是一种实现电子系统或电子产品自动化设计的技术,它与电子技术,微电子技术 ...

  8. 64Mbit SOIC8封装SPI接口的国产串行SRAM EMI7064

    现在的电子系统应用,对SRAM要求越来越高,单片机或ARM内部的RAM越来越不够用.国产EMI公司的64Mbit SPI接口的SRAM芯片EMI7064.这样的IC用途一般是:数据采集或信号处理过程的 ...

  9. 串行异步通信_什么是并行传输、串行传输、异步传输?

    串行通讯 一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯.串行通讯的特点是:数据位传送,传按位顺序进行,最少只需一根传输线即可完成,成本低但送速度慢.串行通讯的距离可以从几米到几千米. 根据 ...

最新文章

  1. 进行三万多次地震训练后,他们发现了快速预测震动强度的新方法
  2. Python实现控制台清屏
  3. 公司技术部门内部的发展变化过程。
  4. 奉献给你:《Visual C# 2005程序开发与界面设计秘诀》
  5. 本地同时修改2个版本
  6. git 命令git 地址_这是我上周使用的所有Git命令及其作用。
  7. Transactional Replication2:在Subscriber中,主键列是只读的
  8. woocommerce分类页面模板_Word排版之道1:学会创建模板,事半功倍
  9. 通达OA - 数据备份与恢复指南
  10. android 疯狂猜成语 源码,安卓版疯狂猜成语答案图文全解
  11. 低代码平台上的出入库管理
  12. 数据结构 —— 静态链表
  13. mkv文件用什么软件打开_什么是MKV文件,以及如何播放它们?
  14. js打印html内容字体设置
  15. 微信小程序实现海报功能经历
  16. YYC松鼠视频短信对接教程
  17. 等效焦距和视场角计算
  18. b站课堂模式密码破解经历
  19. matlab读mp4截图或转gif
  20. 英国只能设置A记录且无法更改的免费二级域名

热门文章

  1. 云服务器系统安装设置方法,云服务器系统怎么安装
  2. gcc安装教程(windows版本)
  3. 服务器装什么操作系统好?
  4. 使用Fiddler抓取微信小程序二维码请求地址
  5. MonoRail学习笔记六:Filter功能使用
  6. 【GG-21 5A 100V逆功率继电器】
  7. Fire And Motion(英文原版) [转]
  8. 计算机网络的基本概念和因特网的基本知识
  9. Appium报错解决
  10. 如何做到数据分析报告(五)