datasheet

单片机串行接口工作方式

2015-03-23来源: diangon关键字:单片机  串行接口  工作方式
    AT89S52单片机的串行口有方式0、方式1、方式2、方式3四种工作方式。方式0主要用于扩展并行输入输出口,方式1、2、3用于串行通信。对这4中工作方式的学习,主要是通过分析各个方式下的发送和接收逻辑来掌握。单片机的串行通信方式包括单片机与单片机之间的双机或多机通信、单片机与PC机的通信等,需要留意。
一、串行口方式0:同步移位寄存器方式

串行口的工作方式0为移位寄存器输入输出方式,方式0发送或接收完8位数据后由硬件置位发送中断标志TI或接收中断标志RI。

1.方式0发送

串行数据从RXD引脚输出,TXD引脚输出移位脉冲。CPU将数据写入发送寄存器(SBUF)时,立即启动发送,将8位数据以fosc/12的固定波特率从RXD输出,低位在前,高位在后,直至最高位(D7位)数字移出后,停止发送数据和移位时钟脉冲。

MOV SCON, #10H ; 串行口方式0

MOV A, SBUF ; 接收数据

JNB RI, $ ; 等待数据接收完毕

2.方式0接收

方式0接收前,务必先置位REN=1,允许接收数据。此时,RXD为串行数据输入端,TXD仍为同步脉冲移位输出端。当RI=0和REN=1同时满足时,就会启动一次接收过程。接收器以fosc/12的固定波特率接收TXD端输入的数据。当接收到第8位数据时,将数据移入接收寄存器,并由硬件置位RI,向CPU申请中断。

MOV  SCON, #00H   ; 串行口方式0

MOV  SBUF, A       ; 将数据送出

JNB   TI, $          ; 等待数据发送完毕

工作方式0一般用于对并行输入输出口的扩展,如图1所示。

 


图1 方式0的应用
二、方式1:8位UART方式

当SM0=0、SM1=l时,串行口选择方式1,单片机工作于8位数据异步通讯方式(UART)。在方式1时,传送一帧信息为10位,即1位起始位(0),8位数据位(低位在先)和1位停止位(1)。方式1的数据格式如图2所示。



图2 方式1的数据格式

 

1.方式1发送

当CPU执行MOV  A,SBUF指令将数据写入发送缓冲SBUF,启动发送。先把起始位输出到TXD,然后把移位寄存器的输出位送到TXD。接着发出第一个移位脉冲(SHIFT),使数据右移一位,并从左端补入0。此后数据将逐位由TXD端送出,而其左面不断补入0。发送完一帧数据后,就由硬件置位TI。


图3 方式1发送

 

2.方式1接收

当REN=1且接收到起始位后,在移位脉冲的控制下,把接收到的数据移入接收缓冲寄存器(SBUF)中,停止位到来后,把停止位送入RB8中,并置位RI,通知CPU接收到一个字符。


图4  方式1接收

 

三、方式2和方式3:9位数据异步通讯方式

当SM0=1、SM1=0时,串行口选择方式2;当SM1=1、SM0=1时,串行口选择方式3。方式2和方式3的工作原理相似,定义为9位的异步通讯接口,发送(通过TXD)和接收(通过RXD)一帧信息都是11位,1位起始位(0)、8位数据位(低位在先)、1位可编程位(即第9位数据)和1位停止位(1)。其数据格式如图5所示。


图5 方式2和3的数据格式

[page]

方式2和方式3唯一的差别是方式2的波特率是固定的,方式3的波特率是可变的。

1.方式2和方式3发送

当CPU执行一条数据写入SUBF的指令时,启动发送器发送。把起始位(0)放到TXD端,经过一位时间后,数据由移位寄存器送到TXD端,通过第一位数据,出现第一个移位脉冲。当TB8的内容移到位寄存器的输出位置时,其左面一位是停止位“1”,再往左的所有位全为“0”。这种状态由零检测器检测到后,就通知发送控制器作最后一次移位,然后置TI=1,请求中断。发送过程如图6所示。


图6 方式2和3的发送

 

2.方式2和方式3接收

接收时,数据从右边移入输入移位寄存器,在起始位0移到最左边时,控制电路进行最后一次移位。当RI=0,且SM2=0(或接收到的第9位数据为1)时,接收到的数据装入接收缓冲器SBUF和RB8(接收数据的第9位),置RI=1,向CPU请求中断。如果条件不满足,则数据丢失,且不置位RI,继续搜索RXD引脚的负跳变。接收的过程如图7所示。


图7 方式2和3的接收

 

四、波特率的计算

波特率反映串行口传输数据的速率,它取决于振荡频率、PCON寄存器的SCON位以及定时器的设定。在串行通讯中,收发双方的数据传送率(波特率)要遵循一定的约定。(http://www.diangon.com版权所有)AT89S52串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器的溢出率控制。

方式0为固定波特率:波特率=fosc/12

方式2可选两种波特率:波特率=(2SMOD/64)×fosc

当SMOD=1时,波特率=fosc/32;

当SMOD=0时,波特率=fosc/64。

方式1、3为可变波特率,用T1作波特率发生器。

波特率=(2SMOD/32)×T1溢出率,T1溢出率为T1溢出一次所需时间的倒数。

 

例如:计算波特率。要求用T1工作于方式2来产生波特率2400,已知晶振频率=12MHz。

解:求出T1的初值:

常用波特率和T1初值可参考教材中的表6-2。
五、多机通信

在集散式分布系统中,往往采用一台主机和多台从机。其中主机发送的信息可以被各个从机接收,而各从机的信息只能被主机接收,从机与从机之间不能互相直接通信。

图8为多机通信连线示意图,系统中左边为主机,其余的为1~n号从机,并保证每台从机在系统中的编号是惟一的。


图8 多通信示意图

关键字:单片机  串行接口  工作方式

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/2015/0323/article_18890.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:单片机串行接口的编程方法和应用
下一篇:AT89S52单片机的串行接口

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

单片机时钟的解析

时钟周期       时钟周期也称为振荡周期,定义为时钟脉冲的倒数(时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时钟周期就是1/12us),是计算机中的最基本的、最小的时间单位。       在一个时钟周期内,CPU仅完成一个最基本的动作。时钟脉冲是计算机的基本工作脉冲,控制着计算机的工作节奏。时钟频率越高,工作速度就越快。       8051单片机把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。机器周期       计算机中
发表于 2019-04-16
单片机时钟的解析

关于单片机通过串口发送浮点数信息

最近弄一个小东西的时候,需要将AD采集的数据,通过串口发送上位机。由于还得在下位机部分显示出来,所以这个AD采集的数据转换之后发送到串口,比较容易点。但是问题来了,以前的串口,只有从GPS模块接收的信息是浮点类型外。其他的东西,都只是把字符类型或者字符串类型的数据发到串口。 查阅了一点资料,这里是资料的链接。 单片机将浮点数从串口发送出去: 1.http://www.51hei.com/bbs/dpj-31223-1.html 采用了将浮点数转换为四个字节的数据,放到数组中,发送到串口。 2.http://blog.sina.com.cn/s
发表于 2019-04-12

单片机之STM32 中的 assert_param 函数

我们在学STM32的时候函数assert_param出现的几率非常大,上网搜索一下,网上一般解释断言机制,做为程序开发调试阶段时使用。下面我就谈一下我对这些应用的看法,学习东西抱着知其然也要知其所以然。4 断言机制函数assert_param我们在分析库函数的时候,几乎每一个函数的原型有这个函数assert_param();下面以assert_param(IS_GPIO_ALL_PERIPH(GPIOx));为例说一下我的理解,函数的参数IS_GPIO_ALL_PERIPH(GPIOx),我们可以寻找到原型#define IS_GPIO_ALL_PERIPH(PERIPH) (((*(uint32_t*)&(PERIPH))
发表于 2019-04-11
单片机之STM32 中的 assert_param 函数

STM32单片机常用库函数

必须在其中选择,抢占级别高的会打断其他中断优先执行,而响应级别高的会在其他中断执行完优先执行。4.FLASH:芯片内部存储器flash操作函数对芯片内部flash进行操作的函数,包括读取,状态,擦除,写入等等,可以允许程序去操作flash上的数据。 基础应用1,FLASH时序延迟几个周期,等待总线同步操作。推荐按照单片机系统运行频率,0—24MHz时,取Latency=0;24—48MHz时,取Latency=1;48~72MHz时,取Latency=2。所有程序中必须的 用法:FLASH_SetLatency(FLASH_Latency_2);位置:RCC初始化子函数里面,时钟起振之后。 基础应用
发表于 2019-04-11

C51单片机通过串口调节PWM波

PWM 是一种常用的电子控制技术PWM 本意为 脉冲宽度调制,可以简单理解为对占空比的控制。下图就是占空比图例,一个周期内高电平时间与周期时间的比值。现在的一些MCU自带PWM控制功能,但是51/52单片机还是没有这个功能。可以用程序自己实现。用到的51单片机资源如下:1.双定时器及定时器中断 2.串口和串口中断 下面看下程序:PWM.H#ifndef _PWM_H#define _PWM_H#include <reg52.h>#include <stdio.h>#include <stdlib.h>#define uint  unsigned int 
发表于 2019-04-09
C51单片机通过串口调节PWM波

51单片机之IIC&EEPROM的驱动程序

#include <reg52.h>#include "./delay/delay.h"sbit SCL = P2^0;sbit SDA = P2^1;bit ack = 0; unsigned char flag = 1;#define LCDPORT P0#define LCD_WRITE_DATA 1#define LCD_WRITE_COM 0sbit RS = P2^4;sbit RW = P2^5;sbit E = P2^6; #define SUCC 0#define ERR 1 void iic_start(){ SDA = 1;  //先操作
发表于 2019-04-08

小广播

何立民专栏

单片机及嵌入式宝典

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

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved