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

news2024/11/28 8:51:03

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为通信线状态寄存器

                 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

除数寄存器0060H        (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,60H

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/26858.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通过sls采集k8s集群上的服务日志

1. 概述 日志服务SLS是阿里云提供云原生观测与分析平台,供数据采集、加工、查询与分析、可视化、告警、消费与投递等功能。 sls采集K8S集群的日志,通过安装logtail dameonset,结合sls 控制台方式采集容器文本日志、控制台日志,通…

长链点击化学PEG试剂m-PEG12-DBCO用于生物标记

m-PEG12-DBCO物理参数: CAS号:N/A | 英文名:m-PEG12-DBCO | 中文名:甲基-十二聚乙二醇-二苯并环辛炔 分子式:C44H66N2O14 分子量:847 纯度标准:95%(HPLC) 外形颜色:淡黄色油状&…

MacBookPro 安装cx_Oracle,并配置环境

一、安装cx_Oracle 本机系统:macOS Monterey 版本 12.5 Anaconda版本:Anaconda3-2022.10-MacOSX-x86_64.pkg python版本:3.9.13 mac下安装cx_Oracle比较简单,直接打开终端 pip install cx_Oracle 二、安装Oracle客户端 直…

[ Linux ] 进程间通信介绍 管道

目录 0.进程间通信介绍 0.1通信背景 0.2进程间通信目的 1.管道 1.1 管道是什么 1.2 匿名管道 1.2.1管道通信的特点 1.2.2 匿名管道编码 父进程控制子进程的行为 进程池 -- 池化概念 1.3管道的特征总结 1.4命名管道 1.4.1创建一个命名管道 1.4.2 命名管道编码 0.进…

dump文件类型与dump文件生成方法详解

目录 1、概述 2、dump文件的分类 2.1、dump按大小分类 2.2、查看dump文件中函数调用堆栈中变量的值 3、调用SetUnhandledExceptionFilter设置异常处理回调函数,然后调用MiniDumpWriteDump生成dump文件 4、使用Google开源库CrashRpt捕获异常,并自动…

内网域环境搭建教程

搭建环境 win2012(DC):10.10.10.161 win2008 : 10.10.10.160 win7 : 10.10.10.157 环境配置 WIN2012域控机配置 将域控机配置成静态IP 更改计算机名 方便之后识别 安装域控制器和DNS服务 重启——安装 升级配置为域控制器 配置根域名为…

TOUGH2系列建模方法及在CO2地质封存、水文地球化学、地热、地下水污染等领域中的实践技术应用

TOUGH2系列软件是由美国劳伦斯伯克利实验室开发的,旨在解决非饱和带中地下水、热运移的通用模拟软件。和传统地下水模拟软件Feflow和Modflow不同,TOUGH2系列软件采用模块化设计和有限积分差网格剖分方法,通过配合不同EOS模块,软件…

[Geek Challenge 2022] crypto部分

这个比赛是一个网友让我看看的,这个比赛很有意思,crypto题全是百度网盘,pwn题全是谷歌网盘,这样我这pwn题就基本over了。还好这些crypto都不怎么难,都答出来了。最后成绩到10名了。 w_or_m? 第1个50分的题&#xff…

股票level2接口-API程序化文档说明

股票level2接口-API程序化文档说明,新手在API程序化上跟随老手进行。这是一种新的模式,适合那些想要而不知道如何投资正确项目的人。 股票level2接口TickRecord 逐笔说明(部分) 现在网络发展,使用组也很常见&#xff…

Html代替<iframe>标签的三种方法<object>, <embed>和<video>

背景 某平台对iframe标签做了些许限制但是前端代码有bug导致提交不了代码, 最开始想着是不是能够在本地替换js文件从而绕过bug 简单搜索后找到了 chrome浏览器F12调式,修改替换js文件这篇博客, 简单试了下虽然能替换成功但是效果不理想, 改不了平台就只能适应平台了…

mysql日志持久化机制

文章目录前言binlog的持久化机制redo log 的持久化机制组提交MySQL的io瓶颈性能优化总结前言 之前的文章介绍过,mysql 的日志是保证数据恢复的关键。那么日志肯定是要持久化到磁盘的,不然也会出现断电或者重启丢失的问题。那么接下来,我们将…

哈佛大学:三个简单的方式,患癌风险降低60%以上

癌症是全球主要的公共卫生问题,近年来,由于饮食、环境、人口的老龄化等因素,全球癌症发病率不断增长,癌症作为主要死因的情况日益突出。根据国际癌症研究机构(IARC)发布的2020年全球最新癌症数据&#xff0…

求斐波那契数(递归,非递归)

目录 一、斐波那契数? 二、递归实现求第n个斐波那契数 2.1代码与运行结果 2.1.1图解递归过程 三、非递归求法 3.1为什么不用递归求法 3.2非递归 一、斐波那契数? 它指的是这样的数列:1,1,2,3&#xff0…

【附源码】计算机毕业设计JAVA智能社区管理系统

项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis Maven Vue 等等组成,B/…

安泰测试-信号发生器常见的故障与解决方法

信号发生器是一种能提供各种频率、波形和输出电平电信号的设备。在测量各种电信系统或电信设备的振幅特性、频率特性、传输特性及其它电参数时,以及测量元器件的特性与参数时,用作测试的信号源或激励源,经常和示波器是老搭档,也是…

三菱FX3U——ST编程流水灯

当D0的默认值为0时,赋值1; TON_1每隔1秒触发输出M1,M1触发D0左移一位,D0的值相当于每1秒乘以2; 在通过M1复位定时TON_1; 每一秒使一个输出得电,当D0的值不在选项内的值,将D0赋值为0&#xff1…

无序和混乱终结者,极狐GitLab Workflow 到底有什么魔力?

效率和质量是软件产品追求的两个核心关键点,软件产品研发是一个覆盖多阶段、涉及多团队的过程,业界也已经总结出了一些很好的实践,在保证研发效率的同时还能保证代码质量。比如代码提交规范、Code Review、代码准入、CI/CD。 但是由于缺乏行之…

冒死开源。阿里新产Spring Boot+Spring Cloud微服务开发实战笔记

昨天跟粉丝聊到了一个问题,他说现在很多招聘要求需要有微服务经验,本人目前生产上没有微服务经验,该如何弥补? 小编在这儿就分享一份学习资料,这份资料既是初学者学习微服务开发的技术宝典,又是中级开发人…

不同版本的谷歌浏览器跨域怎么设置?

由于项目前端使用8001端口,后端使用的8080端口,因此前端调用后端接口时需要跨域,在浏览器中需要设置跨域,否则会由于跨域安全性导致请求失败。 一. 浏览器版本大于49 1.在chrome中,需要新建一个chrome浏览器的快捷方…

HiveSQL分位数函数percentile()使用详解+实例代码

前言 作为数据分析师每个SQL数据库的函数以及使用技能操作都得点满,尤其是关于统计函数的使用方法。关于统计出数据的中位数,众数和分位数的方法必须掌握几种,一般在实际业务上大部分都是以写SQL查询为主,因为如果想用Python的Pa…