在51单片机中波特率的计算方法

合集下载

STC单片机串口通信与应用

STC单片机串口通信与应用

STC单片机串口通信一、串口通信原理串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到计算机端,而且也能实现计算机对单片机的控制。

由于其所需电缆线少,接线简单,所以在较远距离传输中,得到了广泛的运用。

串口通信的工作原理请同学们参看教科书。

以下对串口通信中一些需要同学们注意的地方作一点说明:1、波特率选择波特率(Boud Rate)就是在串口通信中每秒能够发送的位数(bits/second)。

MSC-51串行端口在四种工作模式下有不同的波特率计算方法。

其中,模式0和模式2波特率计算很简单,请同学们参看教科书;模式1和模式3的波特率选择相同,故在此仅以工作模式1为例来说明串口通信波特率的选择。

在串行端口工作于模式1,其波特率将由计时/计数器1来产生,通常设置定时器工作于模式2(自动再加模式)。

在此模式下波特率计算公式为:波特率=(1+SMOD)*晶振频率/(384*(256-TH1))其中,SMOD——寄存器PCON的第7位,称为波特率倍增位;TH1——定时器的重载值。

在选择波特率的时候需要考虑两点:首先,系统需要的通信速率。

这要根据系统的运作特点,确定通信的频率范围。

然后考虑通信时钟误差。

使用同一晶振频率在选择不同的通信速率时通信时钟误差会有很大差别。

为了通信的稳定,我们应该尽量选择时钟误差最小的频率进行通信。

下面举例说明波特率选择过程:假设系统要求的通信频率在20000bit/s以下,晶振频率为12MHz,设置SMOD=1(即波特率倍增)。

则TH1=256-62500/波特率根据波特率取值表,我们知道可以选取的波特率有:1200,2400,4800,9600,19200。

列计数器重载值,通信误差如下表:因此,在通信中,最好选用波特率为1200,2400,4800中的一个。

2、通信协议的使用通信协议是通信设备在通信前的约定。

单片机、计算机有了协议这种约定,通信双方才能明白对方的意图,以进行下一步动作。

MCS-51单片机串行通讯波特率设置的误差分析

MCS-51单片机串行通讯波特率设置的误差分析
范 围为小 于5 % ;当工作 在方式3 ,发送 帧位数为 I,波特率误 . 0 时 l 差 的允许 范围则 为4s . %。单片机 串行 u工作 在方 式l 和方式 3 下波 特率 的设置比较灵活 ,故在 MC 一 1 S 5 中单 片机的串行 通汛中通常采 用这 两种方式 ,但在 殴置波特率时应注 意是台在溟差允许范围内
丽s l 2  ̄ 十 l 南 a
L - 『 =,c + - J * x 譬
岫 ㈩ l
f O) 、l
山以上的误差推导可知 ,工作方 式【 l 和方式2 的波特率 误差与系 统晶振频率误差有关 ;而工作方式 l 和方式3 的波特率误差除 了与系 统 晶振频 率{差有关外 , 与定时 器T 1 ; { 还 H 的预置值 x 的 差有关。 系统 晶振一般在 出厂前要经过严格 的检测 ,其频率准确性比较高 , 误差可以忽略不 汁,故方式0 和方式 2 的误差可忽略。由于系统晶振
自 动重载方式 ),可 以避免通过程序反复装入 初值所 引起的定时 溟 差 ,使波特率更加稳定。设x H 的预置值 则 为T 1
方 l方 3波 率 . x}; 式和 式的 特 ,兰 一 ;
() 4
在实际应用 中,对 串行通 讯波特 率的精度有一定的要求 ,不能 超过 一定范围 。文献表明 :串行通 讯 中发送和接收双方的允许 溪差 与帧的位数有关 ,发送帧 的位数越 多 ,波特 率的精度要求就越高, 当串行口工作在方式 l ,发送帧 的位数 为l ,波特率误 差的允许 时 O
可根据给定的波特率和 系统 晶振频 率在不同的波特 率选择位情 况 综 上所述 ,串行接 口在不 同的 工作方式 下决定波特率的参数也 不同。单片机 各参数对波特率 误差影响 的程度 不同。在 通讯中,为 了避 免太多误码或数据丢失 的发生 , 须深入研 究各工作方式 下的 必 误差来源 只有在弄清 误差来源 的前提 下有的放 矢地 设置波特 率, 方可保证通讯 中误差小于规定的值 。

基于51单片机串口波特率自适应方法

基于51单片机串口波特率自适应方法

基于51单⽚机串⼝波特率⾃适应⽅法 在单⽚机中,UART是常⽤的通信⽅式。

最近在研究Bootloader需要设置UART的波特率⾃适应,通过查阅资料参考了⽹友的⽅法,故借此分享我的⽅法。

⼀般的,串⼝⾃适应波特率有以下2种⽅法。

⼀是通过具有独⽴的同步字符。

使⽤串⾏通讯前,要先进⾏同步操作,即接收端通过对⽐接收到的字符与同步字符的差异调整波特率,或者通过定时器测量同步字符的位宽计算波特率。

即将串⼝接收IO电平状态进⾏定时器计时,计算出最⼩脉宽时长,即⼀帧时长,就可算出其波特率值,这种⽅式需要特定的同步字符(如:0x55、0xAA等)或者增加检测的周期。

⼆是不需要独⽴的同步字符。

即不管波特率如何,可以直接通讯。

通讯命令前导字符固定,⽐如⼀些短消息模块使⽤AT指令集,每条指令都是以AT开始的,这样虽然是命令但是有同步的作⽤,不过要求必须在真实命令到来前调整波特率,这种⽅式需要的时间周期长,因为单⽚机需要不断调整波特率去接收判断传输的字符直到通讯成功,且判断必须快速准确。

由于⽅便需要,以下实验采⽤的是⽅法⼀,使⽤单⽚机SC95F8617作为串⼝实验对象。

实验条件:内部定时器⼀个。

实验⽅法:通过定时器,连续检测UART输⼊引脚RXD上的电平变化,得到RXD上最⼩的脉宽时长计算出波特率,以达到波特率⾃适应。

参考代码如下,最后返回的就是波特率数值,其中发送的同步字符为0x55:1#define SystemClock 32000000 //HRC=32MHz2#define UART_TX P21 //TX⼝3#define UART_RX P20 //RX⼝4#define UART_TX_INIT {P2CON &= ~(1<<1);P2PH |= (1<<1);} //TX设为输⼊上拉模式5#define UART_RX_INIT {P2CON &= ~(1<<0);P2PH |= (1<<0);} //RX设为输⼊上拉模式67//波特率⾃适应8//需要⽤到读IO电平9//通过检测到最⼩的脉宽时间10 unsigned long UART_Baud_Adapt(void)11 {12 unsigned long baudrate =0;13 unsigned long t1=0,t2,t=0;14 unsigned long oldLevel,newLevel;15 unsigned char i=0;16 UART_RX_INIT; //RX设为输⼊模式1718 oldLevel = UART_RX; //读取⼀次RX的电平19while(UART_RX == 1); //等待RX被拉低20 Timer0_Open();21 Timer0_Enable();22for(i=0;i<8;) //连续检测8次电平变化,检测1个字节23 {24 newLevel = UART_RX; // 读RX的电平25if(newLevel != oldLevel) // 如果有电平变化26 {27 t2 = (unsigned long)(TH0<<8)+TL0; // 读定时器中的值28 oldLevel = newLevel; // 更新为新的引脚值29if((t1 == 0)&&(t == 0)) // 第⼀个电平变化30 {31 t1 = t2; // 记录第⼀个时刻点32 }33else// 不是第⼀个电平变化34 {35if(t == 0) // 第⼀段电平36 {37 t = t2-t1; // 记录第⼀段电平所⽤时间38 }39else// 不是第⼀段电平40 {41if((t2-t1)< t)42 {43 t = t2-t1; // 保留电平脉宽的最⼩值44 }45 }46 t1 = t2; // 更新为新的时刻点47 }48 i++; // 电平变化数+149 }50 }51 Timer0_Close();52 baudrate = (unsigned long)(t*403/400); //计算时间53 baudrate = SystemClock/baudrate; //计算波特率54return baudrate;55 }56//Timer0设置57void Timer0_Open(void)58 {59 TMCON = 0X07; //不分频60 TMOD |= 0x01; //0000 0001;Timer0设置⼯作⽅式161 TH0=TL0=0;62 }63//使能Timer064void Timer0_Enable(void)65 {66 ET0 = 1; //定时器0允许67 TR0 = 1; //打开定时器068 }69//关闭Timer070void Timer0_Close(void)71 {72 ET0 = 0; //定时器0关闭73 TR0 = 0; //关闭定时器074 } 通过实际测试多个波特率,结果如下:波特率⾃适应实验对⽐发送同步字符波特率(bps)⾃适应⽅法计算得到的波特率(bps)480047649600958919200194173840038787115200122605256000240601 从上⾯测试数据可以看到这种⽅法计算出的低速波特率还是⽐较接近的,系统时钟越快,理论上计算出来的数据越接近。

第06章-单片机串行通信系统-习题解答

第06章-单片机串行通信系统-习题解答

第6章单片机串行通信系统习题解答一、填空题1.在串行通信中,把每秒中传送的二进制数的位数叫波特率。

2.当SCON中的M0M1=10时,表示串口工作于方式 2 ,波特率为 fosc/32或fosc/64 。

3.SCON中的REN=1表示允许接收。

4.PCON 中的SMOD=1表示波特率翻倍。

5.SCON中的TI=1表示串行口发送中断请求。

6.MCS-51单片机串行通信时,先发送低位,后发送高位。

7.MCS-51单片机方式2串行通信时,一帧信息位数为 11 位。

8.设T1工作于定时方式2,作波特率发生器,时钟频率为11.0592MHz,SMOD=0,波特率为2.4K时,T1的初值为 FAH 。

9.MCS-51单片机串行通信时,通常用指令 MOV SBUF,A 启动串行发送。

10.MCS-51单片机串行方式0通信时,数据从 P3.0 引脚发送/接收。

二、简答题1.串行口设有几个控制寄存器?它们的作用是什么?答:串行口设有2个控制寄存器,串行控制寄存器SCON和电源控制寄存器PCON。

其中PCON 中只有PCON.7的SMOD与串行口的波特率有关。

在SCON中各位的作用见下表:2.MCS-51单片机串行口有几种工作方式?各自的特点是什么?答:有4种工作方式。

各自的特点为:3.MCS-51单片机串行口各种工作方式的波特率如何设置,怎样计算定时器的初值? 答:串行口各种工作方式的波特率设置:工作方式O :波特率固定不变,它与系统的振荡频率fosc 的大小有关,其值为fosc/12。

工作方式1和方式3:波特率是可变的,波特率=(2SMOD/32)×定时器T1的溢出率 工作方式2:波特率有两种固定值。

当SM0D=1时,波特率=(2SM0D/64)×fosc=fosc/32当SM0D=0时,波特率=(2SM0D/64)×fosc=fosc/64计算定时器的初值计算:4.若fosc = 6MHz ,波特率为2400波特,设SMOD =1,则定时/计数器T1的计数初值为多少?并进行初始化编程。

51单片机串口通信

51单片机串口通信

一、串口通信原理串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到计算机端,而且也能实现计算机对单片机的控制。

由于其所需电缆线少,接线简单,所以在较远距离传输中,得到了广泛的运用。

串口通信的工作原理请同学们参看教科书。

以下对串口通信中一些需要同学们注意的地方作一点说明:1、波特率选择波特率(Boud Rate)就是在串口通信中每秒能够发送的位数(bits/second)。

MSC-51串行端口在四种工作模式下有不同的波特率计算方法。

其中,模式0和模式2波特率计算很简单,请同学们参看教科书;模式1和模式3的波特率选择相同,故在此仅以工作模式1为例来说明串口通信波特率的选择。

在串行端口工作于模式1,其波特率将由计时/计数器1来产生,通常设置定时器工作于模式2(自动再加模式)。

在此模式下波特率计算公式为:波特率=(1+SMOD)*晶振频率/(384*(256-TH1))其中,SMOD——寄存器PCON的第7位,称为波特率倍增位;TH1——定时器的重载值。

在选择波特率的时候需要考虑两点:首先,系统需要的通信速率。

这要根据系统的运作特点,确定通信的频率范围。

然后考虑通信时钟误差。

使用同一晶振频率在选择不同的通信速率时通信时钟误差会有很大差别。

为了通信的稳定,我们应该尽量选择时钟误差最小的频率进行通信。

下面举例说明波特率选择过程:假设系统要求的通信频率在20000bit/s以下,晶振频率为12MHz,设置SMOD=1(即波特率倍增)。

则TH1=256-62500/波特率根据波特率取值表,我们知道可以选取的波特率有:1200,2400,4800,9600,19200。

列计数器重载值,通信误差如下表:因此,在通信中,最好选用波特率为1200,2400,4800中的一个。

2、通信协议的使用通信协议是通信设备在通信前的约定。

单片机、计算机有了协议这种约定,通信双方才能明白对方的意图,以进行下一步动作。

假定我们需要在PC机与单片机之间进行通信,在双方程式设计过程中,有如下约定:0xA1:单片机读取P0端口数据,并将读取数据返回PC机;0xA2:单片机从PC机接收一段控制数据;0xA3:单片机操作成功信息。

stc c51 串口通信协议常用校验计算以及一些常用方法

stc c51 串口通信协议常用校验计算以及一些常用方法

stc c51 串口通信协议常用校验计算以及一些常用方法一、引言随着现代通信技术的快速发展,串口通信在各领域得到了广泛应用。

STC C51 作为一种高性能、低功耗的单片机,其串口通信协议在实际工程中具有很高的实用价值。

本文将详细介绍STC C51 串口通信协议的常用校验计算方法及其实现,以期为相关领域的研究和应用提供参考。

二、STC C51 串口通信协议简介1.串口通信的基本原理串口通信是通过传输线将数据位按照位顺序依次传输的一种通信方式。

在数据传输过程中,通常采用异步串行通信和同步串行通信两种方式。

2.STC C51 串口通信的特点STC C51 单片机内部集成了异步串行通信模块,具有以下特点:(1)高速率:最高可达1Mbps;(2)低功耗:待机模式下电流小于1uA;(3)丰富的波特率选择:支持0-115200bps等多种波特率;(4)灵活的通信模式:支持多机通信、广播通信等;(5)内置硬件滤波器:可滤除噪声干扰,提高通信可靠性。

三、常用校验计算方法1.奇偶校验奇偶校验是一种简单而有效的校验方法。

在数据传输过程中,根据数据位中1的个数是否为奇数来判断数据是否正确。

若数据位中1的个数为奇数,则为奇校验;若为偶数,则为偶校验。

2.循环冗余校验(CRC)循环冗余校验是一种基于二进制多项式的校验方法。

发送方和接收方使用相同的生成多项式,对数据位进行异或操作,得到校验位。

接收方在接收到数据后,同样对数据位进行异或操作,若结果与接收到的校验位相同,则数据正确;否则,数据错误。

3.异或校验异或校验是一种基于异或运算的校验方法。

在数据传输过程中,发送方和接收方约定一个校验位,并对数据位进行异或操作。

接收方在接收到数据后,对数据位进行异或操作,若结果与接收到的校验位相同,则数据正确;否则,数据错误。

四、STC C51 串口通信协议的实现1.硬件配置为实现STC C51 串口通信,需要配置以下硬件:(1)串口通信模块:UART0、UART1 或UART2;(2)波特率发生器:用于产生不同的波特率;(3)电平转换器:用于匹配发送和接收端的电平;(4)滤波器:用于滤除噪声干扰。

51单片机串口工作方式0和1解析

51单片机串口工作方式0和1解析

RXD
7.1.1 串行口控制寄存器SCON b7 b6 b5 b4 b3 b2 b1 TI b0 RI
SM0 SM1 SM2 REN TB8 RB8
9FH 9EH 9DH 9CH 9BH 9AH 99H 98H
SM0、SM1 —— 串行接口工作方式定义位
• SM0、SM1 = 00 —— 方式 0,8位同步移位寄存器 • SM0、SM1 = 01 —— 方式 1,10 位异步接收发送 • SM0、SM1 = 10 —— 方式 2,11 位异步接收发送 • SM0、SM1 = 11 —— 方式 3,11 位异步接收发送 注意: 方式 0 的特点,方式 2、方式 3 的差异
寄存器 SCON、PCON、SBUF
寄存器 IE、IP
• MCS-51 单片机串Fra bibliotek接口工作方式 方式 0 方式 2 方式 1 方式 3
有两个数据缓冲寄存器 SBUF,一个输入移位寄存器,一个 串行控制寄存器SCON和一个特殊功能寄存器PCON等组成。 8 位SBUF是全双工串行接口寄存器, 它是特殊功能寄存器, 地址为 99H,不可位寻址;串行输出时为发送数据缓冲器,发送
时钟振荡频率为6MHz或12 MHz时,产生的比特率偏差较大, 故用到串口通信时通常选用11.0592MHZ晶体振荡器。
串行口的结构
• MCS-51 单片机串行接口的硬件
P3.0 位的第二功能 —— 收端 RXD P3.1 位的第二功能 —— 发端 TXD
• MCS-51 单片机串行接口的控制
比特率 比特率
= /12
P.110
=
/32 计1次 计3次 计3次 计6次 计12次 计24次
=
/12/计次/16

51单片机波特率设置 串口调试发送接收

51单片机波特率设置 串口调试发送接收
11.0592M是因为在进行通信时,12M频率进行串行通信不容易实现标准的波特率,比如9600,4800,而11.0592M计算时正好可以得到,因此在有通信接口的单片机中,一般选11.0592M
计算一下就知道了。如我们要得到9600 的波特率,晶振为11.0592M 和12M,定时器1 为模式2,SMOD 设为1,分别看看那所要求的TH1 为何值。代入公式:
最终解决办法:
换用11.592MHz晶振!!!
/******************************************************************/
void UART_SER() interrupt 4
{
uchar Temp;//定义临时变量
if(RI)
{
RI=0;
//标志位清零
Temp=SBUF;
//读入gned char
/******************************************************************//*名称:主函数*/
/*内容:打开串口调试程序,将波特率设置为9600,无奇偶校验*/
/*晶振11.0592MHz,发送和接收使用的格式相同,如都使用*/
ES=1;
EA=1;
}
//*************
void main(void)
{
serial_init(); //初始化
while(1)
//主循环不做任何动作
{}
}
/******************************************************************//*串口中断程序*/
/*字符型格式,在发送框输入hello,ILoveMCU,在接*/

51单片机各针脚介绍

51单片机各针脚介绍

51单片机各引脚及端口详解51单片机引脚功能:MCS-51是标准的40引脚双列直插式集成电路芯片,引脚分布请参照----单片机引脚图:l P0.0~P0.7 P0口8位双向口线(在引脚的39~32号端子)。

l P1.0~P1.7 P1口8位双向口线(在引脚的1~8号端子)。

l P2.0~P2.7 P2口8位双向口线(在引脚的21~28号端子)。

l P3.0~P3.7 P2口8位双向口线(在引脚的10~17号端子)。

这4个I/O口具有不完全相同的功能,大家可得学好了,其它书本里虽然有,但写的太深,对于初学者来说很难理解的,我这里都是按我自已的表达方式来写的,相信你也能够理解的。

P0口有三个功能:1、外部扩展存储器时,当做数据总线(如图1中的D0~D7为数据总线接口)2、外部扩展存储器时,当作地址总线(如图1中的A0~A7为地址总线接口)3、不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。

P1口只做I/O口使用:其内部有上拉电阻。

P2口有两个功能:1、扩展外部存储器时,当作地址总线使用2、做一般I/O口使用,其内部有上拉电阻;P3口有两个功能:除了作为I/O使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置,具体功能请参考我们后面的引脚说明。

有内部EPROM的单片机芯片(例如8751),为写入程序需提供专门的编程脉冲和编程电源,这些信号也是由信号引脚的形式提供的,即:编程脉冲:30脚(ALE/PROG)编程电压(25V):31脚(EA/Vpp)接触过工业设备的兄弟可能会看到有些印刷线路板上会有一个电池,这个电池是干什么用的呢?这就是单片机的备用电源,当外接电源下降到下限值时,备用电源就会经第二功能的方式由第9脚(即RST/VPD)引入,以保护内部RAM中的信息不会丢失。

在介绍这四个I/O口时提到了一个“上拉电阻”那么上拉电阻又是一个什么东东呢?他起什么作用呢?都说了是电阻那当然就是一个电阻啦,当作为输入时,上拉电阻将其电位拉高,若输入为低电平则可提供电流源;所以如果P0口如果作为输入时,处在高阻抗状态,只有外接一个上拉电阻才能有效。

51单片机串行口的工作方式解析

51单片机串行口的工作方式解析

51单片机串行口的工作方式解析方式0是外接串行移位寄存器方式。

工作时,数据从RXD串行地输入/输出,TXD输出移位脉冲,使外部的移位寄存器移位。

波特率固定为fosc/12(即,TXD 每机器周期输出一个同位脉冲时,RXD接收或发送一位数据)。

每当发送或接收完一个字节,硬件置TI=1或RI=1,申请中断,但必须用软件清除中断标志。

实际应用在串行I/O口与并行I/O口之间的转换。

2)方式1方式1是点对点的通信方式。

8位异步串行通信口,TXD为发送端,RXD为接收端。

一帧为10位,1位起始位、8位数据位(先低后高)、1位停止位。

波特率由T1或T2的溢出率确定。

在发送或接收到一帧数据后,硬件置TI=1或RI=1,向CPU申请中断;但必须用软件清除中断标志,否则,下一帧数据无法发送或接收。

(1)发送:CPU执行一条写SBUF指令,启动了串行口发送,同时将1写入输出移位寄存器的第9位。

发送起始位后,在每个移位脉冲的作用下,输出移位寄存器右移一位,左边移入0,在数据最高位移到输出位时,原写入的第9位1的左边全是0,检测电路检测到这一条件后,使控制电路作最后一次移位,/SEND和DATA 无效,发送停止位,一帧结束,置TI=1。

(2)接收:REN=1后,允许接收。

接收器以所选波特率的16倍速率采样RXD端电平,当检测到一个负跳变时,启动接收器,同时把1FFH写入输入移位寄存器(9位)。

由于接、发双方时钟频率有少许误差,为此接收控制器把一位传送时间16等分采样RXD,以其中7、8、9三次采样中至少2次相同的值为接收值。

接收位从移位寄存器右边进入,1左移出,当最左边是起始位0时,说明已接收8位数据,再作最后一次移位,接收停止位。

此后:A、若RI=0、SM2=0,则8位数据装入SBUF,停止位入RB8,置RI=1。

B、若RI=0、SM2=1,则只有停止位为1时,才有上述结果。

C、若RI=0、SM2=1,且停止位为0,则所接数据丢失。

MCS—51系列单片机串行通信波特率的研究

MCS—51系列单片机串行通信波特率的研究

MCS—51系列单片机串行通信波特率的研究作者:李鹏来源:《电脑知识与技术》2013年第28期摘要:阐述了89C51单片机串行通信口的结构及波特率的计算方法,通过对89C52串行通信口波特率发生器结构的分析,指出了89C52产生波特率的两种方式。

计算出了89C51和89C52产生波特率与初值的对应关系,找出了波特率的最大值,给出了初始化编程的实例。

关键词:波特率;串行通信口;单片机;89C52中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2013)28-6265-03随着智能化控制仪表和网络设备的大力发展与使用,单片机的串行通信应用也无处不在,单片机作为前台计算机与其他计算机的通信,比如和PC微机的通信十分广泛,设计通信系统的首要问题是单片机串行通信口的正确使用,主要是波特率的设定以及串口的初始化编程,在单片机课程的教学中,单片机串口的应用是一个最具综合性的应用,也是一个难点,为此,结合教学与多年科研应用,特对MCS-51单片机的子51和子52单片机的波特率分别进行了分析与研究。

1 89C51单片机波特率的确定1.1 89C51串行通信口的结构89C51内部有2个16位定时/计数器,分别称为T0和T1,每个计数器均有四种工作方式:方式0(13位计数),方式1(16位计数),方式2(自动重装的1个8位计数),方式3(2个独立8位计数)。

从图1可以看出,内部结构确定仅使用T1定时器的溢出频率去产生串行通信口的波特率。

由于收、发时钟应该是周期性信号,所以T1工作在方式2,初值被装入TH1,由TL1计数并产生周期性溢出频率信号,溢出率是否除以2,由PCON中SMOD位的值确定,只有当SMOD=0时,才被除以2,上下输出的脉冲信号均被除以16,然后作为收、发时钟脉冲信号。

1.2 波特率的计算单片机串行通信口有4种工作方式:方式0,波特率固定为fosc/12,方式2,波特率固定为(2SMOD/64)×fosc ,方式1和方式3的波特率可以调整,在单片机与PC微机的RS-232C 串口通信时,必须调整单片机串口通信的波特率,以达到与PC微机串口通信波特率相同。

51单片机各引脚及端口详解

51单片机各引脚及端口详解

51单片机各引脚及端口详解51单片机引脚功能:MCS-51是标准的40引脚双列直插式集成电路芯片,引脚分布请参照----单片机引脚图:l ~ P0口8位双向口线(在引脚的39~32号端子)。

l ~ P1口8位双向口线(在引脚的1~8号端子)。

l ~ P2口8位双向口线(在引脚的21~28号端子)。

l ~ P2口8位双向口线(在引脚的10~17号端子)。

这4个I/O口具有不完全相同的功能,大家可得学好了,其它书本里虽然有,但写的太深,对于初学者来说很难理解的,我这里都是按我自已的表达方式来写的,相信你也能够理解的。

P0口有三个功能:1、外部扩展存储器时,当做数据总线(如图1中的D0~D7为数据总线接口)2、外部扩展存储器时,当作地址总线(如图1中的A0~A7为地址总线接口)3、不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。

P1口只做I/O口使用:其内部有上拉电阻。

P2口有两个功能:1、扩展外部存储器时,当作地址总线使用2、做一般I/O口使用,其内部有上拉电阻;P3口有两个功能:除了作为I/O使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置,具体功能请参考我们后面的引脚说明。

有内部EPROM的单片机芯片(例如8751),为写入程序需提供专门的编程脉冲和编程电源,这些信号也是由信号引脚的形式提供的,即:编程脉冲:30脚(ALE/PROG)编程电压(25V):31脚(EA/Vpp)接触过工业设备的兄弟可能会看到有些印刷线路板上会有一个电池,这个电池是干什么用的呢这就是单片机的备用电源,当外接电源下降到下限值时,备用电源就会经第二功能的方式由第9脚(即RST/VPD)引入,以保护内部RAM中的信息不会丢失。

在介绍这四个I/O口时提到了一个“上拉电阻”那么上拉电阻又是一个什么东东呢他起什么作用呢都说了是电阻那当然就是一个电阻啦,当作为输入时,上拉电阻将其电位拉高,若输入为低电平则可提供电流源;所以如果P0口如果作为输入时,处在高阻抗状态,只有外接一个上拉电阻才能有效。

51单片机IO口应用详解

51单片机IO口应用详解

51单片机IO口应用详解MCS-51是标准的40引脚双列直插式集成电路芯片,引脚分布请参照单片机引脚图:这4个I/O口具有不完全相同的功能,大家可得学好了,其它书本里虽然有,但写的太深,对于初学者来说很难理解的,我这里都是按我自已的表达方式来写的,相信你也能够理解的。

P0口有三个功能:1、外部扩展存储器时,当做数据总线(如图1中的D0~D7为数据总线接口)2、外部扩展存储器时,当作地址总线(如图1中的A0~A7为地址总线接口)3、不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。

P1口只做I/O口使用:其内部有上拉电阻。

P2口有两个功能:1、扩展外部存储器时,当作地址总线使用2、做一般I/O口使用,其内部有上拉电阻;P3口有两个功能:除了作为I/O使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置,具体功能请参考我们后面的引脚说明。

有内部EPROM的单片机芯片(例如8751),为写入程序需提供专门的编程脉冲和编程电源,这些信号也是由信号引脚的形式提供的,即:编程脉冲:30脚(ALE/PROG)编程电压(25V):31脚(EA/Vpp)在介绍这四个I/O口时提到了一个“上拉电阻”那么上拉电阻又是一个什么东东呢?他起什么作用呢?都说了是电阻那当然就是一个电阻啦,当作为输入时,上拉电阻将其电位拉高,若输入为低电平则可提供电流源;所以如果P0口如果作为输入时,处在高阻抗状态,只有外接一个上拉电阻才能有效。

ALE 地址锁存控制信号:在系统扩展时,ALE用于控制把P0口的输出低8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。

参见图2(8051扩展2KB EEPROM电路,在图中ALE与4LS373锁存器的G相连接,当CPU对外部进行存取时,用以锁住地址的低位地址,即P0口输出。

由于ALE是以晶振六分之一的固定频率输出的正脉冲,当系统中未使用外部存储器时,ALE脚也会有六分之一的固定频率输出,因此可作为外部时钟或外部定时脉冲使用。

MCS-51单片机的串行口及串行通信技术

MCS-51单片机的串行口及串行通信技术

MCS-51单⽚机的串⾏⼝及串⾏通信技术数据通信的基本概念串⾏通信有单⼯通信、半双⼯通信和全双⼯通信3种⽅式。

单⼯通信:数据只能单⽅向地从⼀端向另⼀端传送。

例如,⽬前的有线电视节⽬,只能单⽅向传送。

半双⼯通信:数据可以双向传送,但任⼀时刻只能向⼀个⽅向传送。

也就是说,半双⼯通信可以分时双向传送数据。

例如,⽬前的某些对讲机,任⼀时刻只能⼀⽅讲,另⼀⽅听。

全双⼯通信:数据可同时向两个⽅向传送。

全双⼯通信效率最⾼,适⽤于计算机之间的通信。

此外,通信双⽅要正确地进⾏数据传输,需要解决何时开始传输,何时结束传输,以及数据传输速率等问题,即解决数据同步问题。

实现数据同步,通常有两种⽅式,⼀种是异步通信,另⼀种是同步通信。

异步通信在异步通信中,数据⼀帧⼀帧地传送。

每⼀帧由⼀个字符代码组成,⼀个字符代码由起始位、数据位、奇偶校验位和停⽌位4部分组成。

每⼀帧的数据格式如图7-1所⽰。

⼀个串⾏帧的开始是⼀个起始位“0”,然后是5〜8位数据(规定低位数据在前,⾼位数据在后),接着是奇偶校验位(此位可省略),最后是停⽌位“1”。

起始位起始位"0”占⽤⼀位,⽤来通知接收设备,开始接收字符。

通信线在不传送字符时,⼀直保持为“1”。

接收端不断检测线路状态,当测到⼀个“0”电平时,就知道发来⼀个新字符,马上进⾏接收。

起始位还被⽤作同步接收端的时钟,以保证以后的接收能正确进⾏。

数据位数据位是要传送的数据,可以是5位、6位或更多。

当数据位是5位时,数据位为D0〜D4;当数据位是6位时,数据位为D0〜D5;当数据位是8位时,数据位为D0〜D7。

奇偶校验位奇偶校验位只占⼀位,其数据位为D8。

当传送数据不进⾏奇偶校验时,可以省略此位。

此位也可⽤于确定该帧字符所代表的信息类型,“1"表明传送的是地址帧,“0”表明传送的是数据帧。

停⽌位停⽌位⽤来表⽰字符的结束,停⽌位可以是1位、1.5位或2位。

停⽌位必须是⾼电平。

接收端接收到停⽌位后,就知道此字符传送完毕。

51单片机uart停止位2位的实现

51单片机uart停止位2位的实现

51单片机uart停止位2位的实现51单片机是一种广泛应用于嵌入式系统中的单片机芯片,具有高性能、低功耗和易于编程的特点。

其中,UART(Universal Asynchronous Receiver/Transmitter)是一种通用异步收发器,常用于实现串口通信。

本文主要探讨如何在51单片机中实现UART停止位为2位的功能。

UART通信是一种通过串行线路进行数据传输的方式,包括发送和接收两个过程。

在UART通信中,数据的传输是以数据帧为单位进行的,每个数据帧由起始位、数据位、校验位和停止位组成。

停止位是数据帧的最后一位,用于告诉接收方数据帧的结束位置。

通常情况下,UART通信中的停止位为1位,即数据帧的最后一位是一个高电平信号。

但有些特殊情况下,需要使用停止位为2位的UART通信。

实现UART停止位为2位的功能需要对51单片机的串口寄存器进行相应的配置。

首先,需要设置串口的工作模式为异步模式,并选择相应的波特率。

然后,需要设置串口的数据位数、校验方式和停止位数。

在51单片机中,UART的寄存器位于特殊功能寄存器SFR中,包括TCON、TMOD、TH1、TL1、SCON等寄存器。

具体的配置步骤如下:1. 设置串口工作模式:将TCON寄存器中的SM0和SM1位分别设置为1和0,表示选择8位异步模式。

2. 设置波特率:串口通信需要设定一个固定的波特率,用于控制数据传输的速度。

在51单片机中,波特率的设定通过设置TH1和TL1寄存器的值来实现。

具体的计算公式是:波特率 = 1 / (2 * (256 - TH1) * 12 / 机器周期)。

在这里,机器周期是指51单片机的工作周期,一般为12个机器周期。

根据需要设定的波特率,通过计算可以得到TH1和TL1的值。

3. 设置数据位数、校验方式和停止位数:通过设置SCON寄存器中的相应位来实现。

其中,数据位数可以选择为8位或9位;校验方式可以选择为无校验、奇校验或偶校验;停止位数可以选择为1位或2位。

51单片机各引脚及端口详解

51单片机各引脚及端口详解

51单片机各引脚及端口详解51单片机引脚功能:MCS-51是标准的40引脚双列直插式集成电路芯片,引脚分布请参照----单片机引脚图:l ~ P0口8位双向口线(在引脚的39~32号端子)。

l ~ P1口8位双向口线(在引脚的1~8号端子)。

l ~ P2口8位双向口线(在引脚的21~28号端子)。

l ~ P2口8位双向口线(在引脚的10~17号端子)。

这4个I/O口具有不完全相同的功能,大家可得学好了,其它书本里虽然有,但写的太深,对于初学者来说很难理解的,我这里都是按我自已的表达方式来写的,相信你也能够理解的。

P0口有三个功能:1、外部扩展存储器时,当做数据总线(如图1中的D0~D7为数据总线接口)2、外部扩展存储器时,当作地址总线(如图1中的A0~A7为地址总线接口)3、不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。

P1口只做I/O口使用:其内部有上拉电阻。

P2口有两个功能:1、扩展外部存储器时,当作地址总线使用2、做一般I/O口使用,其内部有上拉电阻;P3口有两个功能:除了作为I/O使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置,具体功能请参考我们后面的引脚说明。

有内部EPROM的单片机芯片(例如8751),为写入程序需提供专门的编程脉冲和编程电源,这些信号也是由信号引脚的形式提供的,即:编程脉冲:30脚(ALE/PROG)编程电压(25V):31脚(EA/Vpp)接触过工业设备的兄弟可能会看到有些印刷线路板上会有一个电池,这个电池是干什么用的呢这就是单片机的备用电源,当外接电源下降到下限值时,备用电源就会经第二功能的方式由第9脚(即RST/VPD)引入,以保护内部RAM中的信息不会丢失。

在介绍这四个I/O口时提到了一个“上拉电阻”那么上拉电阻又是一个什么东东呢他起什么作用呢都说了是电阻那当然就是一个电阻啦,当作为输入时,上拉电阻将其电位拉高,若输入为低电平则可提供电流源;所以如果P0口如果作为输入时,处在高阻抗状态,只有外接一个上拉电阻才能有效。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在51单片机中波特率的计算方法
一、传统51单片机波特率的算法
传统51单片机的及其周期是晶振的1/12,一般在使用串口工作方式1使用时,波特率的计算公式:
)
2(12*32*2X fosc bps n SMOD -= 其中:
bps----------波特率(bit/s )
SMOD------波特率加倍位(PCON.7)
n-------------单次收发8为数据
X------------初值
当设定确定波特率时,需要计算初值,换算公式为:
12**32*22bps fosc X SMOD n
-= 误码率计算公式:
%100*1bps
bps bps WML -= 其中:
WML-------误码率
bps1---------实际波特率
Bps----------理论波特率
注意:误码率一般不要超过3%。

以下举例说明:
1、传统51单片机(机器周期是晶振的1/12),外部晶振11.1592MHz ,使用串口工作方式1(异步串口通信),bps=9600bit/s 。

求定时器1工作方式2的初值?
当设定SMOD=0时,根据初值计算公式:
25312*9600*3210*0592.11*226
08
=-=X 转换成HEX (十六进制)为0xfd 。

误码率为0
当设定SMOD=1时,根据初值计算公式:
25012*9600*3210*0592.11*226
18
=-=X
转换成HEX (十六进制)为0xfa 。

误码率为0
2、传统51单片机(机器周期是晶振的1/12),外部晶振11.1592MHz ,使用串口工作方式1(异步串口通信),bps=4800bit/s 。

求定时器1工作方式2的初值?
当设定SMOD=0时,根据初值计算公式:
25012*4800*3210*0592.11*226
08
=-=X 转换成HEX (十六进制)为0xfa 。

误码率为0
当设定SMOD=1时,根据初值计算公式:
24412*4800*3210*0592.11*226
18
=-=X 转换成HEX (十六进制)为0xf4。

误码率为0
二、STC 高性能系列的单片机
例如SCT12系列的单片机为12T 工作方式,即及其周期与外部晶振频率相同。

一般在使用串口工作方式1使用时,波特率的计算公式有两种,第一种是使用定时器1工作方式2作为波特率发生器,定时器1的初值计算:
bps fosc X SMOD *32*228
-= 对应波特率计算公式:
)
2(*32*2X fosc bps n SMOD -= 其中:
X-------------初值
fosc---------外部晶振频率
SMOD------波特率加倍位
bps----------波特率(bit/s )
N-------------数据位
另一种是使用STC12系列单片机内部独立波特率发生器。

使用方法按照对应数据手册即可。

举例说明:
3、STC12系列单片机的外部晶振为11.0592MHz ,串口使用工作方式1,定时器1工作方式2,计算定时器1 的初值?
当SMOD=0(波特率不加倍)时,使用初值计算公式:
2209600*3210*0592.11*226
08
=-=X 转换成HEX (十六进制)为0xdc 。

误码率为0.
当SMOD=1时,使用初值计算公式:
1849600*3210*0592.11*226
18
-=X 转换成HEX (十六进制)为0xb8。

误码率为0.
4、STC12系列单片机的外部晶振为12MHz ,串口使用工作方式1,定时器1工作方式2,计算定时器1 的初值?
当SMOD=0(波特率不加倍)时,使用初值计算公式:
9375.2169600*3210*12*226
08
=-=X 取值217
转换成HEX (十六进制)为0xd8。

使用初值217计算实际波特率
9615)
2172(*3210*12*2186
0=-=bps 误码率:
%3%15.0%100*9600
96009615%100*1<=-=-=bps bps bps WML 说明STC12系列单片机在使用外部晶振你12MHz 时,波特率9600bit/s 可行。

当SMOD=1时略。

上题设定bps=4800bit/s 时,计算初值:
875.1774800*3210*12*226
08
=-=X 取值177
转换成HEX (十六进制)为0xb1。

使用初值177计算实际波特率
69.4807)
1782(*3210*12*2186
0=-=bps 误码率:
%3%16.04800
480069.48071<=-=-=bps bps bps WML
说明STC12系列单片机在使用外部晶振你12MHz时,波特率4800bit/s 可行。

友情提示:方案范本是经验性极强的领域,本范文无法思考和涵盖全面,供参考!最好找专业人士起草或审核后使用。

相关文档
最新文档