51单片机串行口--同步移位寄存器

发布者:真诚友爱最新更新时间:2015-10-15 来源: eefocus关键字:51单片机  串行口  同步移位寄存器 手机看文章 扫描二维码
随时随地手机看文章
MCS-51单片机的串行口具有两条独立的数据线——发送端TXD和接收端RXD,它允许数据同时往两个相反的方向传输。一般通信时发送数据由TXD端输出,接收数据由RXD端输入。

MCS-51单片机的串行口既可以用于网络通信,亦可实现串行异步通信,还可以用作同步移位寄存器。如果在串行口的输入输出引脚上加上电平转换器,就可方便地构成标准的RS-232接口。

MCS-51单片机的串行接口是一个全双工通信接口,它有两个物理上独立的接收、发送缓冲器SBUF,可以同时发送和接收数据。但是发送缓冲器只能写入,不能读出;接收缓冲器只能读出,不能写入。两个缓冲器共用一个地址(99H)。

数据通信的基本概念

常用于数据通信的传输方式有单工、半双工、全双工和多工方式。

  • 单工方式:数据仅按一个固定方向传送。因而这种传输方式的用途有限,常用于串行口的打印数据传输与简单系统间的数据采集。
  • 半双工方式:数据可实现双向传送,但不能同时进行,实际的应用采用某种协议实现收/发开关转换。
  • 全双工方式:允许双方同时进行数据双向传送,但一般全双工传输方式的线路和设备较复杂。
  • 多工方式:以上三种传输方式都是用同一线路传输一种频率信号,为了充分地利用线路资源,可通过使用多路复用器或多路集线器,采用频分、时分或码分复用技术,即可实现在同一线路上资源共享功能。

根据同步方式,串行数据通信有两种形式,如图5-5所示。

  • 异步通信。在这种通信方式中,接收器和发送器有各自的时钟,它们的工作是非同步的。异步通信用一帧来表示一个字符,其内容是一个起始位,紧接着是若干个数据位。
  • 同步通信。同步通信格式中,发送器和接收器由同一个时钟源控制,在异步通信中,每传输一帧字符都必须加上起始位和停止位,占用了传输时间,若要求传送数据 量较大,速度就会慢得多。同步传输方式去掉了这些起始位和停止位,只在传输数据块时先送出一个同步头(字符)标志即可。
  • 同步传输方式比异步传输方式速度快,这是它的优势。但同步传输方式也有其缺点,即它必须要用一个时钟来协调收发器的工作,所以它的设备也较复杂。

MCS-51的串行口控制寄存器

在完成串行口初始化后,发送数据时,采用MOV SBUF,A指令,将要发送的数据写入SBUF,则CPU自动启动和完成串行数据的输出;接收数据时,采用MOV A,SBUF指令,CPU就自动将接收到的数据从SBUF中读出。

控制MCS-51单片机串行接口的控制寄存器有两个——特殊功能寄存器SCON和PCON,用以设置串行端口的工作方式、接收/发送的运行状态、接收/发送数据的特征、数据传输率的大小,以及作为运行的中断标志等,其格式如下:

① 串行口控制寄存器SCON。SCON的字节地址是98H,位地址(由低位到高位)分别是98H一9FH。SCON的格式如下:

51单片机串行口--同步移位寄存器

SM0、SMl:串行口工作方式控制位。

00——方式0;01——方式1;

10——方式2;11——方式3。

SM2:仅用于方式2和方式3的多机通信控制位。

发送机SM2=1(要求程控设置)。

当为方式2或方式3时:

接收机 SM2=1时,若RB8=1,可引起串行接收中断;若RB8=0,不引起串行接收中断。SM2=0时,若RB8=1,可引起串行接收中断;若RB8=0,亦可引起串行接收中断。

  • REN串行接收允许位:0——禁止接收;1——允许接收。
  • TB8:在方式2、3中,TB8是发送机要发送的第9位数据。
  • RB8:在方式2、3中,RB8是接收机接收到的第9位数据,该数据正好来自发送机的TB8。
  • TI:发送中断标志位。发送前必须用软件清零,发送过程中TI保持零电平,发送完一帧数据后,由硬件自动置1。如要再发送,必须用软件再清零。
  • RI:接收中断标志位。接收前,必须用软件清零,接收过程中RI保持零电平,接收完一帧数据后,由片内硬件自动置1。如要再接收,必须用软件再清零。

② 电源控制寄存器PCON。PCON的字节地址为87H,无位地址,其格式如下:

51单片机串行口--同步移位寄存器

PCON是为在CMOS结构的MCS-51单片机上实现电源控制而附加的,对于HMOS结构的MCS-51系列单片机,除了第7位外,其余都是虚设的。与串行通信有关的也就是第7位,称作SMOD,它的用处是使数据传输率加倍。

SMOD:数据传输率加倍位。在计算串行方式1,2,3的数据传输率时;0表示不加倍;1表示加倍。

其余有效位说明如下。

GF1、GF2:通用标志位。

PD:掉电控制位,0表示正常方式,1表示掉电方式。

IDL:空闲控制位,0表示正常方式,1表示空闲方式。

除了以上两个控制寄存器外,中断允许寄存器IE中的ES位也用来作为串行I/O中断允许位。当ES=1,允许 串行I/O中断;当ES=0,禁止串行I/O中断。中断优先级寄存器IP的PS位则用作串行I/O中断优先级控制位。当PS=1,设定为高优先级;当PS =0,设定为低优先级。

工作方式

MCS-51 单片机可以通过软件设置串行口控制寄存器SCON中SM0(SCON.7)和SMl(SCON.6)来指定串行口的4种工作方式。串行口操作模式选择如表5-2所示。

表5-2 串行口操作模式选择表

SM0 SM1

模 式

功 能

波 特 率

0 0

0

同步移位寄存器

fOSC/12

0 1

1

8位UART

可变(T1溢出率)

1 0

0

9位UART

fOSC/64或fOSC/32

1 1

1

9位UART

可变(T1溢出率)

其中,fosc是振荡器的频率,UART为通用异步接收和发送器的英文缩写。下面对这4种工作模式作进一步介绍。[page]

1.方式0

当设定SM1、SM0为00时,串行口工作于方式0,它又叫同步移位寄存器输出方式。在方式0下,数据从 RXD(P3.0)端串行输出或输入,同步信号从TXD(P3.1)端输出,发送或接收的数据为8位,低位在前,高位在后,没有起始位和停止位。数据传输 率固定为振荡器的频率1/12,也就是每一机器周期传送一位数据。方式0可以外接移位寄存器,将串行口扩展为并行口,也可以外接同步输入/输出设备。

执行任何一条以SBUF为目的的寄存器指令,就开始发送。

2.方式1

当设定SM1、SM0为01时,串行口工作于方式1。方式1为数据传输率可变的8位异步通信方式,由TXD发 送,RXD接收,一帧数据为10位,1位起始位(低电平),8位数据位(低位在前)和1位停止位(高电平)。数据传输率取决于定时器1或2的溢出速率 (1/溢出周期)和数据传输率是否加倍的选择位SMOD。

对于有定时器/计数器2的单片机,当T2CON寄存器中RCLK和TCLK置位时,用定时器2作为接收和发送的数据传输率发生器,而RCLK=TCLK=0时,用定时器1作为接收和发送的数据传输率发生器。两者还可以交叉使用,即发送和接收采用不同的数据传输率。

类似于模式0,发送过程是由执行任何一条以SBUF为目的的寄存器指令引起的。

3.方式2

当设定SM0、SM1二位为10时,串行口工作于方式2,此时串行口被定义为9位异步通信接口。采用这种方式 可接收或发送 11 位数据,以 11 位为一帧,比方式 1 增加了一个数据位,其余相同。第 9 个数据即 D8 位用作奇偶校验或地址/数据选择,可以通过软件来控制它,再加特殊功能寄存器 SCON 中的 SM2 位的配合,可使 MCS-51 单片机串行口适用于多机通信。发送时,第9位数据为TB8,接收时,第9位数据送入RB8。方式 2 的数据传输率固定,只有两种选择,为振荡率的 1/64 或 1/32 ,可由 PCON 的最高位选择。

4.方式3

当设定SM0、SM1二位为11时,串行口工作于方式3。方式3与方式2类似,唯一的区别是方式3的数据传输率是可变的。而帧格式与方式2一样为11位一帧。所以方式3也适合于多机通信。

数据传输率的确定

串行口每秒钟发送(或接收)的位数就是数据传输率。

对方式0来说,数据传输率已固定成fosc/12,随着外部晶振的频率不同,数据传输率亦不相同。常用的fosc有12MHz和6MHz,所以数据传输率相应为1000×103和500×103bit/s。在此方式下,数据将自动地按固定的数据传输率发送/接收,完全不用设置。

对方式2而言,数据传输率的计算式为2SMOD·fosc/64。当SMOD=0时,数据传输率为fm/64;当SMOD=1时,数据传输率为fosc/32。在此方式下,程控设置SMOD位的状态后,数据传输率就确定了,不需要再作其他设置。

对方式1和方式3来说,数据传输率和定时器1的溢出率有关,定时器1的溢出率为:

定时器1的溢出率=定时器1的溢出次数/秒

方式1和方式3的数据传输率计算式为:

2SMOD/32×T1溢出率

根据SMOD状态位的不同,数据传输率有Tl/32溢出率和T1/16溢出率两种。由于T1溢出率的设置是方便的,因而数据传输率的选择将十分灵活。

前已叙及,定时器Tl有4种工作方式,为了得到其溢出率,而又不必进入中断服务程序,往往使T1设置在工作方式2的运行状态,也就是8位自动加入时间常数的方式。

表5-3所示常用数据传输率的设置方法。

表5-3 常用数据传输率设置方法

数据传输率/Hz

fOSC/MHz

SMOD

定时器1

C/T

方 式

重新装入值

方式0最大:1M

方式2最大:375k

方式1、3:62.5k

19.2k

9.6k

4.8k

2.4k

1.2k

110

12

12

12

11.0592

11.0592

11.0592

11.0592

11.0592

12

X

1

1

1

0

0

0

0

0

X

X

0

0

0

0

0

0

0

X

X

2

2

2

2

2

2

1

X

X

FFH

FDH

FDH

FAH

F4H

E8H

0FEEH

串行通信实例

这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收和查询发送。

#include  #include  #define length 4 //数据长度 unsigned char inbuf[length]; unsigned char checksum,counter; bit flag = 0; //取数标记 main() { init_serial(); //串行口初始化 while (1) { if (flag!=0) //如果取数标志已置位,就将读到的数从串口发出 { flag= 0; //取数标志清0 send_string(inbuf,length); //向串口发送字符串 } } } void init_serial( void ) { SCON = 0x50; //串行工作方式1, 8位异步通信方式 TMOD |= 0x20; //定时器1, 方式 2, 8位自动重装 PCON |= 0x80; //SMOD=1,表示数据传输率加倍 TH1 = 0xF4; //数据传输率:4800 fosc=11.0592MHz IE |= 0x90; //允许串行中断 TR1 = 1; //启动定时器1 } void send_char( unsigned char x) { SBUF=x; while (TI== 0 ); TI= 0; } void send_string( unsigned char *s, unsigned int string_length) { unsigned int i= 0; do { send_char(*(s + i)); //向串口发送一个字符 i++; } while ( i 127 ) { counter= 0; inbuf[counter]=x; checksum= x- 128; } else { counter++; inbuf[counter]=x; checksum ^= x; if ((counter==(length- 1)) && (!checksum)) { flag= 1; //如果串口接收的数据达到length个,且校验没错, //就置位取数标志 } } } }

资料整理自:http://hi.baidu.com/mikenoodle/blog/item/53920ffa87544d9259ee908a.html

关键字:51单片机  串行口  同步移位寄存器 引用地址:51单片机串行口--同步移位寄存器

上一篇:51单片机与GPS串口通信
下一篇:C51对特殊功能寄存器位变量定义写法不严谨

推荐阅读最新更新时间:2024-03-16 14:35

8051单片机数据说明
深入理解并应用C51对标准ANSIC的扩展是学习C51的关键之一。因为大多数扩展功能都是直接针对8051系列CPU硬件的。 具体说明如下(8031为缺省CPU)。 一、Keil C51扩展关键字 C51 V4.0版本有以下扩展关键字(共19个): _at_idata sfr16 alien interrupt small bdata large _task_ Code bit pdata using reentrant xdata compact sbit data sfr 二、内存区域(Memory Areas): 1、 Pragram Area: 由Code说明可有多达64kBytes的程序
[单片机]
51单片机 4*4矩阵键盘 扫描方式
实际工程应用中,遇到按键比较多的情况,大多是使用矩阵键盘或者编码键盘。处于成本考虑,一般使用矩阵键盘。 以下是矩阵键盘部分原理图: 代码如下: #include #define uint unsigned int #define uchar unsigned char sbit duanxuan=P2^6; sbit pianxuan=P2^7; uchar code table ={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; //编码定义 void dela
[单片机]
51单片机实现智能泊车系统的设计方法
本文主要讲述用51单片机实现智能泊车系统,该智能泊车系统可以在实验室内实现小车的自动驶入指定停车位的功能。将小车停在停车场入口处,然后车主可以离开小车,此时小车就可以根据停车场内的车辆诱导信号(光源引导信号)将车引入停车场,从而实现自动泊车过程。 随着我国汽车数量逐年急剧增多,泊车位、停车场的数量却跟不上其增长的步伐,越来越多的人为如何泊车而发愁。日益拥挤的泊车环境要求人们对汽车的泊车技术更加地娴熟,这就更加重了人们工作之外的紧张情绪,降低了人们的生活质量。因此,如何解决泊车过程中的不便利,消除安全隐患,迅速、准确、安全地将汽车停靠到合适的位置,逐渐引起了人们的关注。 一、系统的工作原理及功能 智能泊车系统可分为控制部
[单片机]
<font color='red'>51单片机</font>实现智能泊车系统的设计方法
DS18B20温度测试程序(51单片机数码管显示)+电路图
下面是电路图 采用4位数码管显示 程序一共有2个文件 : /*********************************************** ds18b20.h 头文件 *************************************************/ #ifndef _DS18B20_H_ #define _DS18B20_H_ #include reg51.h #define led P1 #define ledw P2 extern unsigned char f; extern void ds18b20_reset(); extern void dela(unsigned char
[单片机]
DS18B20温度测试程序(<font color='red'>51单片机</font>数码管显示)+电路图
51单片机不断电下载程序
stc单片机支持串口isp程序下载,不必使用专用下载器,仅使用串口就能下载程序。但每次下载程序都要断电再上电,比较麻烦。 下面介绍一种不需断电就能下载程序的方法,在程序调试时比较方便。 基本原理: stc单片机有专用的复位寄存器,通过对该寄存器写入不同的数值可以实现单片机热启动复位。 寄存器功能如下图所示: 由上图可以看出只要满足某个条件,向ISP_CONTR写入0x60,就可以实现从ISP监控区软启动启动 某个条件设置为:当串口接收到0xaa数据时,单片机执行ISP_CONTR=0x60; 指令,从ISP监控区软启动启动。 演示程序如下: //*************************STC12C5410AD软启
[单片机]
<font color='red'>51单片机</font>不断电下载程序
嵌入式系统中扩展串行口的几种方法
引言   串行接口设备凭借其控制灵活、接口简单、占用系统资源少等优点,被广泛应用于工业控制、家庭安防、GPS卫星定位导航以及水、电、气表的抄表等领域。在这些嵌入式系统中,可能会有很多从设备都通过串行接口与主机进行通信,如GPRS MODEM、红外发送和接收模块、RS485总线接口等。这使得开发人员常常面临嵌入式系统中主机串行通信接口不足的问题,针对此问题,本文介绍了几种常见的解决方法。 软件模拟法   软件模拟法可根据串行通讯的传送格式,利用定时器和主机的I/O口来模拟串行通讯的时序,以达到扩展串口的目的。   接收过程中需要检测起始位,这可以使用查询方式,或者,在端口具有中断功能的主机中也可以使用端口的中断进行处理。接收和发送
[嵌入式]
51单片机驱动16*16点阵显示生日快乐程序
自己亲手做的一个点阵屏 仿真+实物, 送给女朋友的生日礼物 单片机+液晶显示 带仿真文件 妞都狠喜欢这个了,显示生日快乐4个字然后还有心型,还有i love you,全部源码和仿真文件的下载地址是:http://www.51hei.com/bbs/dpj-18851-1.html 下面是部分源码预览: #include at89x51.h #include DS1302.h #define din P3_2 #define load P3_3 #define clk P3_4 #define uchar unsigned char #define uint unsigned int unsigned char code
[单片机]
<font color='red'>51单片机</font>驱动16*16点阵显示生日快乐程序
采用MXT8051单片机实现基站温控仪的设计
引言 移动基站分布在全国各地,覆盖面广,各地气候差异大。解决好散热问题,是基站正常运作的关键因素之一。本文介绍的温控仪,利用温度传感器采集信号,然后通过单片机进行A/D转换、处理、运算得到室内外温度,并且根据当前室内外温差,计算出风机风速。然后利用PWM方式控制可控硅对交流220V斩波,实现风机风速调制。从而实现了利用自然冷源达到降低基站内部温度的目的。 系统设计 本温控仪是以MXT8051单片机为核心,整个硬件系统(如图1)分为温度信号采集、显示、键盘、控制输出、通信接口和存储模块。该仪表工作流程是:单片机通过集成的A/D采样室内室外温度,根据温差调制风机风速。键盘部分实现对温控仪参数的设置,如风机启动温度、停止温度等参数。
[单片机]
采用MXT80<font color='red'>51单片机</font>实现基站温控仪的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

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

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

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