[转]51单片机如何设置串口传输的波特率

2018-2-6 23:54 546 1 1 分类: MCU/ 嵌入式 文集: MCU
原文地址:https://zhidao.baidu.com/question/206585022.html

串行口的四种工作方式对应三种波特率。由于输入的移位时钟的来源不同,所以,各种方式的波特率计算公式也不相同。
方式0的波特率 = fosc/12
方式2的波特率 =((2^SMOD)/64)• fosc
方式1的波特率 =((2^SMOD)/32)•(T1溢出率)
方式3的波特率 =((2^SMOD)/32)•(T1溢出率)
注意:SMOD为PCON寄存器的最高位(即PCOM<7>)。
T1 溢出率 = fosc /{12×[256 -(TH1)]} --将该公式代人方式1或3
最后推出公式:TH1=256-(fosc*2^SMOD)/(baudrate*12*32);
呵呵
如果你用方式2(波特率 =((2^SMOD)/64)• fosc )的话
12M的晶振就不能得到9600波特率了(除非你改变你的晶振,但是那样的晶振好像没有卖) 所以你只能选择方式1或3
而且12M的晶振在串口传输时会有误差,就如你上面算的那样结果会有小数点
TH1又只能是整数的 所以传输时会有误差.
参考:
#include<reg51.h>
#define baudrate 9600UL
#define fosc 11059200UL//其中,UL是不能省略的,代表长整型。
unsigned char a,flag;
void serial_init(void)
unsigned char S_MOD=1;
TMOD=0x20;//T1工作在方式2
SCON=0x50;//SM0=0 SM1=1->串口通信在模式1,
//SM2=0->多级通信中使用的位,REN=1;
PCON=0;
if((PCON&0x80)==0x80) S_MOD=2;
TH1=256-(fosc*S_MOD)/(baudrate*12*32);//其中SMOD=0,
TL1=256-(fosc*S_MOD)/(baudrate*12*32);
TR1=1;ES=1;EA=1;
}
广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
colapin 2018-02-09 08:45
[转]浅析adc的六种分类以及六大关键性能指标
原文地址:https://ezchina.analog.com/thread/13531过采样频率:增加一位分辨率或每减小6dB 的噪声,需要以4 倍的采样频率fs 进行过采样.假设一个系统使用12 ...
colapin 2018-02-09 08:39
[转]详解经典51单片机P0口
原文地址:http://www.360doc.com/content/16/1223/01/37366008_616961848.shtml学习单片机最基础、最重要的就是掌握I/O口的使用。会使用I/...
colapin 2018-02-05 15:59
[转]逐次逼近型ADC(SAR ADC)之简单理解
原文地址:http://blog.sina.com.cn/s/blog_a438e5290102wakc.htmlSAR ADC:successive approximation&...
colapin 2018-01-24 01:46
[转]keil仿真 error 65的处理
原文地址:http://blog.csdn.net/bobbat/article/details/41059721keil软件仿真 error 65: access violation at 0x00...
colapin 2018-01-23 10:18
[转]ISP与IAP的区别
原文地址:http://blog.csdn.net/shenye1141664884/article/details/8514433ISP(In-System Programming)在系统可编程,指...
我要评论
0
1
广告