8031单片微机串行口的应用

发布者:Qingfang最新更新时间:2018-03-05 来源: eefocus关键字:单片微机  串行口 手机看文章 扫描二维码
随时随地手机看文章

  8031单片微机因具有体积小,资源丰富,性能价格比优等特点,近十年来在我国获得了极其广泛的应用。它内部的可编程全双工串行通讯口具有软件编程方便,使用可靠的特点。

  在数据传送和数据通讯中受到用户的亲睐。本文就8031串行口的应用作一介绍。

  一、利用8031串行口控制键盘和显示器

  8031串行口的方式0(移位寄存器输入/输出方式)可用于键盘和显示器控制,其硬件结构如图1所示。

 

  图中外接8片8位串入/并出移位寄存器74LS164作为8位LED显示器的静态控制端口。由于显示器工作是静态的,因而主程序可不必扫描显示器,从而使CPU有更多的时间处理其它事务。这类应用常见于小型测量仪表的显示中。

  下面给出更新显示器显示的子程序和键盘扫描子程序的清单及其简单说明。

  显示子程序:

  DIR:  SETB P3.3    l开放显示器传送控制

  MOV R7,# 08H

  MOV RO.#5FH  ;5FH~58H为显示缓冲器

  DLO: MOVA,@RO    ;取出要显示的数据

  ADD A,#ODH    ;加上偏移量

  MOVC A,@A+PC  ;取出字形

  MOV SBUF,A    ;送出显示

  DLI:    JNB TI,DL1    ;输出完否?

  CLR TI    ;完,清中断标志

  DEC RO    ;再取下一个数

  DJNZ R7,DLO    ;8位显示数据输出完否?

  CLR P3.3    ;输出完,关闭显示器传送

  RET    ;返回

  SEGTAB;co“O”    ;字形代码表

  F9 “1"

  A4“2”

  BD “3”

  99“4”

  92“5”

  82 “6”

  F8 “7”

  80 “8”

  90 “9”

  88 “A”

  83 “B”

  C6“C”

  Al“D”

  86 “E”

  8F “F”

  BF“一”

  8C “P”

  9l “Y”

  键盘扫描子程序

  KEY:    MOV A.#OOH  ;向164输出OOH,对键盘扫描

  MOV SBUF,A

  KLO:JNB T1,KLO    ;输出完否?

  CLRTI    ;清0中断标志

  KL1:  JNB P3.4,PK1    ;第一捧键中有键闭合否?

  JB P3.5,KLI    ;第二排键中有键闭合否?

  PKl:  ACALLDI0    ;有键按下

  JNB P3.4,PK2    ;是否抖动引起

  JB P3.5.KL1    ;不是抖动引起

  PK2:  MOV R7,#08H  ;判断那一个健被按下

  MOV R6,# OFEH

  MOV R3,# ODH

  KL5:  MOV A,R6

  MOV SBUF,A    ;对列线逐个扫描

  KL2:    JNB TI,KL2

  CLR TI

  LNB P3.4.PKONE  ;是第一捧某键杏?

  JB P3.5,NEXT    ;是第二排某键否?

  MOV R4,#08H    ;是第二排中有键被接下

  AJMP PK3

  PKONE:  MOV R4,#OOH    ;是第一排中有键被按下

  PK3:  MOV A,#OOH  ;等待键释放

  MOV SUBF,A

  KL3:    JNB TI,KL3

  CLR TI

  KL4:  JNBP3.4,KL4JNBP3.5,KL4

  MOV A,R4    ;键释放,取出键码

  ADD A,R3

  RET    ;返回

  NEXT:  MOV A,R6    ;判下一列是否按下

  RLA

  MOV R6,A

  INC R3

  DJNZ R7,KL5    ;八列键都检查完否?

  AJMP KEY    ;完了,开始下一个扫描周期

  Dl0:  MOV R7,#OAH  ;延时10ms子程序

  DL:  MOV R6,# OFFH

  DL6: DJNZ R6,DL6

  DJNZ R7,DL

  RET

  二、利用8031串行口实现主从机通讯

  8031串行口工作方式3(或方式2)可用于实现单片机

  间的主从机通讯,具体电路结构如图2。方式2和方式3都是

  被定义为9位异步通讯接口,只是波特率选取有所不同。

  利用串行口方式3实现多机通讯的软件“协议”如下:

  1.主机

  设置为串行口工作方式3,允许接收,第一次发送时设置

  TB8=1,以后发送时设置TB8=0。TB8=1(圭机发送的第九

  位数据)表示这组数是地址,TB8-o表示这组数是数据。

  2.从机

  设置为串行口工作方式3,允许接收。第一次接收设置

  SM2-1,只有当接收到的第九位数据RB8=1时才产生接收

  中断,这时接收到的这组数是地址。在程序中置位PSW. 1=1

  表示接收的是地址,PSW. 1=0表示接收的是数据。

  下面给出主从机之间通信的程序和说明。主机要发送的

  数据或控制命令放在片内RAM中,数据块首址为31H, 30H

  中的内容为数据块长度。

  ORG OOOOH

  LJMP MAIN

  ORG 0023H    ;串行口中断程序入口

  SJMP SERVE

  ORG 0040H    ;发送子程序人口

  TRANSFER:  MOV TMOD,#20H    ;设置T1为定时方式2

  MOV TH1,#0F3H    ;Tl置初值,产生1200波特率

  MOV TLl,# 0F3H

  MOV SCON,#OD8H    ;设置串行日工作方式3允许接收,TB8=1

  SETB TR1    ;启动Tl

  'SET EA    ;开中断

  CLR ES    ;禁止串行口中断

  START:    MOV SBUF,#OOH    .发0#从机地址

  WAIT1:  JNB TI,WAITI    ;等待发送完毕

  CIR TI    ;完毕清发送中断标志T1

  WAIT2':    JNB R1,WAlTZ    ;等待0#从机应答

  CLRRl

  MOV A,SBUF    ;判断是否为O#从机的应答信号

  JNZ START

  CIR TB8    ;是应答信号,清TB8表示以后是效据

  SETB ES    ;允许串行口中断

  MOV 2FH,# 31H

  MOV SBUF,30H    .发送数据块长度

  RET    ;子程序返回

  SERVE:  CLR TI    ;清发迭中断标志T1

  PUSH A    ;现场保护

  MOV A,RO

  PUSH A

  DJNZ 30H.TRAN;    ;数据发送完否?

  CLR ES    ;完毕,关串行口中断

  CLR TR1    ;关T1

  SJMP RETUNE

  TRAN:  MOV RO,2FH    ;取数据地址

  MOV SBUF.@RO    ;发送数据

  INC 2FH    ;数据地址加1

  RETUNE:POP A    ;恢复现场

  MOV RO,A

  POP A

  RETI    ;中断返回

  MAIN,  NOP    注程序(未给出)

  0#从机首先接收主机发来的数据块长度,并将它存入片

  内RAM30H单元中,然后接收数据或控制命令,并将它们存

  放到片内RAM中,起始地址为30H。0#从机接收程序清单如

  下;

  ORG 0023H    ;串行口中断程序入口

  SJMP SERVE.

  ORG 0040H    ;初始化程序入日

  RECEIVE:MOV TMOD.#20H    ;设置T1为定时方式2

  MOV TH1,# OF3H    ;T1置初值,产生1200波特率

  MOV SCON,#OFOH    ;设置串行口工作方式3,允许接收且SM2=1

  SETB TR1    ;启动T1

  SETB EA    ;开中断

  SETB ES    ;允许串行口中断

  SETB PSW.1    ;PSW.1=1是地址

  LJMP MAIN    ;转主程序(未给出)等待串行口中断

  SERVE:  CLR RI    ;清串行口发送标志Rl

  PUSH A    ;现场保护

  MOV A,RO

  PUSH A

  HOV A,R0

  PUSHA

  JBPSW.1,HELLO    ;是地址否?

  DATA:  MOV R0,2FH    ;是数据,建立数据地址指针

  MOV A,SBUF    ;取接收到的数据

  MOV @RO,A    ;转存到存贮器中

  INC 2FH    ;数据地址加1

  DJNZ 30H,RETUNE  ;躺数据接收完否?

  SETB PSW.1    ;置位PSW.1,表示接收

  SJMP RETUNE    ;数据完毕

  HELLO:  MOV A,SBUF    ;是地址,判断与本机地址是否相等

  JNZ RETUNE    ;不相等返回

  MOV SBUF,# OOH    .相符,发本机地址作为应答

  CLR PSW.1    ;清PSW.1表示以后为数据  ’

  CLR SM2    ;清SM2准备接收数据.

  MOV 2FH,#30H

  WAIT: JNBTI,WAIT    ;等待应答信号发送完毕

  CLR T1

  RETUNE, POP A    ;恢复现场

  MOV RO,A

  POP A

  RETI    ;中断返回

  三、8031串行口与IBM-PC机组成二级通讯系统 IBM-PC机的串行通讯适配器是采用可编程通讯用异步收发器UART8250芯片。我们可以使用宏汇编语言设计程序直接操作UART各寄存器,以中断方式与8031串行口进行通讯。

  1.硬件结构

  IBM-PC机的串行通讯适配器与8031的串行口组成的两级系统如图3所示。由于串行输出芯片1488无高阻态,必须经二极管隔离后再并联。

  2.通讯协议

  a.数据代码程和功能代码

  数据代码是通讯过程必须传送的目的代码,功能代码是通讯过程中的应答信号,以及表征数据特征和数量的代码。

  每组数据的结构见表l,协议规定数据的数量和特征代码放在数据代码的前端,代码和字节提供给对方检验通讯过程是否有误码。

  b.具体规定;

  我们规定通讯过程为PC机发出“向8031发数”的发数令牌(该令牌中包含某- 8031的地址)。收到应答码后开始发送过程,并由8031机回送“是否误码”的代码。PC机发出“允许8031机发效的收数令牌(该令牌包含某- 8031的地址),收数令牌按机号顺序定时发出,使每台8031有平等的发数机会。令牌中的地址和机号相同的8031机取得通讯权。为使发数比收数有更高的优先权,只在无数据发送时才发“收数令牌”。

  3.软件设计

  a.对lBM-PC通讯程序的要求

  为使IBM-PC机和多台8031机的通讯有条不紊的进行,IBM-PC机应有完善的调度能力,我们可以编制一段调度程序,它的功能是;①处理数据输入和输出缓冲区;②进行串行口资源调度,确定是收数还是发数;③能使串行中断服务程序执行发数任务和收数任务。发数任务和收数任务分别由各自的中断服务程序来完成;④调度程序以令牌方式分配通讯权。只有取得通讯权的某台8031才能接收和发送数据(程序从略)。

  b.8031机通讯程序

  8031机系统主程序完成串行口初始化,准备输出数据和处理输入数据等与通讯有关的工作。它定义串行口为工作方式3,允许串行中断,允许接收,置位多机通讯位及设置与PC机UART(异步通讯收发器)相同的波特率等。

  8031机与PC机的数据通讯串行中断服务程序框图见图d。该中断服务程序由“令牌激活”,在一次中断服务过程中完成整组数据的接收或发送。关中断是防止高级中断干扰而丢失数据,这样数据的收发用查询R1或TL状态的方法连续地进行。复位多机通讯位是为了能收到除“令牌”外第九位是“0”的各类数据或代码(第九位是“1”为令牌地址信号)。向PC发送过程中,两次发数之间有时间延时,延时量略大于PC机串行中断和更高级中断服务时间,以免PC机接收时丢失数据。此外,程序还负责功能代码的收发。PC机在收到全部数据后,仅当发现了误码才发送“请重发数”代码。


关键字:单片微机  串行口 引用地址:8031单片微机串行口的应用

上一篇:一种0-24小时的时钟源程序
下一篇:PIC循环指令和花样彩灯控制器的源程序

推荐阅读最新更新时间:2024-03-16 15:56

怎样处理单片机与锁存器的关系? 为何要用串行口扩展 I/O?
通过P0口扩展输出口时,怎样处理单片机与锁存器之间的关系? 答:当通过P0口扩展单片机的输出口时,可以将锁存器视为一个外部的RAM单元,输出信号为WR。 为什么要用串行口扩展I/O接口? 答:MCS-51串行口的方式0可以用于I/O扩展,其前题是串行口未被占用。 用串行口扩展I/O接口时,既不占用片外的RAM地址,又能节省硬件开销,经济、实用。
[单片机]
80C51串行口通信
80C51串行口的结构 TXD 是80C51单片机的P3.1口 RXD 是80C51单片机的P3.0口 T1 溢出率 是定时器1 的溢出率 SMOD 是发送速率倍频的 16分频 T1每溢出一次发送一位,里面复杂咱们不管,每次发送完后TI 申请中断,就是串口每次发送完一个字节去申请一个中断,每接受完一个字节它也要申请一次中断。接受完了通过移位寄存器 SBUF 取走。发送也用SBUF . 单片机上有两个物理上独立的接受,发送缓冲器SBUF,它们占用同一地址99H;接受器是双缓冲结构;发送缓冲器,因为发送时CPU是主动的,不会产生重叠错误。 解释下这句话意思:物理上独立的但是地址相同,但是具体内部构造
[单片机]
80C51<font color='red'>串行口</font>通信
单片8031,8051区别及引脚功能资料介绍
单片机8031和8051是最常见的mcs51系列单片机,是inter公司早期的成熟的单片机产品,应用范围涉及到各行各业,下面介绍一下它的引脚图等资料。 8031的特点 8031片内不带程序存储器ROM,使用时用户需外接程序存储器和一片逻辑电路373,外接的程序存储器多为EPROM的2764系列。用户若想对写入到EPROM中的程序进行修改,必须先用一种特殊的紫外线灯将其照射擦除,之后再可写入。写入到外接程序存储器的程序代码没有什么保密性可言。 8051的特点 8051片内有4k ROM,无须外接外存储器和373,更能体现 单片 的简练。但是你编的程序你无法烧写到其ROM中,只有将程序交芯片厂代你烧写,并是一次性的,今后你和芯片厂都不
[单片机]
51单片串行口通信程序设计例子
串行口方式0应用编程 8051单片机串行口方式0为移位寄存器方式,外接一个串入并出的移位寄存器,就能扩展一个并行口。 单片机串行口通信程序设计硬件连接图 例:用8051单片机串行口外接CD4094扩展8位并行输出口,如图所示,8位并行口的各位都接一个发光二极管,要求发光管呈流水灯状态。 串行口方式0的数据传送可采用中断方式,也可采用查询方式,无论哪种方式,都要借助于TI或RI标志。串行发送时,能靠TI置位(发完一帧数据后)引起中断申请,在中断服务程序中发送下一帧数据,或者通过查询TI的状态,只要TI为0就继续查询,TI为1就结束查询,发送下一帧数据。在串行接收时,则由RI引起中断或对RI查询来确定何时接收下一帧数据。无论采用
[单片机]
51<font color='red'>单片</font>机<font color='red'>串行口</font>通信程序设计例子
PIC单片机软件异步串行口实现技巧
  在用单片机开发各种嵌入式应用系统时,异步串行通信是经常要用到的一种通信模式,很多应用中还要求实现多路异步串行通信。大家平时熟悉的各种厂家的单片机,绝大部分片上只提供一个硬件UART模块,利用它可以方便实现一路串行通讯。PIC系列单片机也不例外,在其丰富的产品家族成员中,除高端系列(PIC17/18)一些型号片上带有两路硬件UART模块外,其它大部分型号片上只有一路UART,一些低端廉价的PIC单片机甚至还不带硬件 UART。为了提高系统的性能价格比,就要求设计工程师用软件增加实现一路或多路异步串行通信。很多工程师对用软件实现的UART在可靠性和效率方面持怀疑态度,其实关键问题是看软件采用何种方式来实现可靠的UART功能。   在
[单片机]
PIC<font color='red'>单片</font>机软件异步<font color='red'>串行口</font>实现技巧
(笔记总结)80C51的串行口
80C51的串行口的结构 SBUF:两个物理上独立的接收、发送缓冲器。他们两个占用同一个地址99H。接收器是双缓冲结构,发送缓冲器,因为发送时,CPU是主动的,不会产生重叠错误。 80C51的串行口的控制寄存器 1.SCON是一个特殊功能寄存器,用来设定串行口的工作方式、接收/发送控制以及设置状态标志。 SM0和SM1是工作方式选择位(和之前一样),可以选择四种工作方式,如下 RI(SCON.0),接收中断标志位。在方式0时,当串行接收第8位数据结束时;或在其他方式,串行接收停止位中间时,由内部硬件使RI置1,向CPU发出中断申请。在中断服务程序中,用软件将其清0,取消此中断申请。 TI(SCON.1),发
[单片机]
(笔记总结)80C51的<font color='red'>串行口</font>
AT89C51单片机高速串行输出口设计
AT89C51(与MCS-51兼容)单片机的串行口在方式0工作状态下,使用移位寄存器芯片可以扩展多个8位并行I/O口。在LED点阵显示屏应用系统中,一般都采用数据同步移位输出方式,并使用移位寄存器芯片(如74LS595)扩展并行I/O口驱动LED点阵显示。LED 点阵显示采用扫描方式,为不产生闪烁感,每秒需要传送50屏点阵显示数据,因此有大量的数据要通过同步移位的方式送到显示驱动电路部分,这就要求单片机能够快速地输出数据。AT89C51单片机的串行口在方式0工作状态下,数据以fosc/12的波特率输出,1个字节数据写入SBUF后,需检查中断标志位 TI是否为“1”并清“0”TI或延时几个机器周期后才能继续写入了一个数据,输出速度慢
[单片机]
AT89C51<font color='red'>单片</font>机高速串行输出口设计
从PC串行口实现简单红外数据传输
常有这种情况,需要在没有直接电缆连接的情况下,将一些位或字节的数据送给一个微控制器。实现这一目标的一种简单方式是使用到处可见的红外接收器,如Vishay公司的TSOP17xx或类似接收器,它们一般用于红外遥控设备,如电视和录像机。这些装置很容易实现,因为它们不需要外接元件。这些接收器通常使用一个38kHz的脉冲载波,并带有一个放大器、自动增益控制和解调器。     简单应用的主要问题是建立发射机,它需要一个38kHz的起始-停止振荡器、附加电源,以及毫秒与亚毫秒范围内的调制脉冲。用PC操作系统难以控制这些要素。另一方面,PC串行端口的标准传输速率为38400bps,用一个简单的倍频器和两只红外LED就可以生成精确的38.4
[模拟电子]
从PC<font color='red'>串行口</font>实现简单红外数据传输
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved