51单片机波特率如何设置啊

看了不少说法,还是不明白如何算1\51单片机为12M2\要发送八个数128,128,82,0,0,0,82,03\想在T1的工作方式24\希望波特率为9600(因为与之通... 看了不少说法,还是不明白如何算
1\51单片机为12M
2\要发送八个数 128,128,82,0,0,0,82,0
3\想在T1的工作方式2
4\希望波特率为9600(因为与之通讯的东东原来就是9600的)
5\串口的工作方式为2(波特率固定)

书上要求输送位数又是TH1,TL1的设定
公式都不知代那个进去
请原谅小菜的问题,
最好能够详细地说明一下
非常感谢
我用的是学习板,这个是没办法改的了
这样:
=256-12000000/(96000*12*32)=252.744
就取253=FDH?
12与32分别是什么意思?
为什么有人说与发送的位数有关?
串口的工作方式2是11位吧?
展开
 我来答
I多多问题多多
推荐于2017-09-06 · TA获得超过379个赞
知道小有建树答主
回答量:158
采纳率:0%
帮助的人:100万
展开全部
串行口的四种工作方式对应三种波特率。由于输入的移位时钟的来源不同,所以,各种方式的波特率计算公式也不相同。
方式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;
}
清华红牛
推荐于2018-06-16 · TA获得超过5.1万个赞
知道大有可为答主
回答量:1.2万
采纳率:93%
帮助的人:924万
展开全部
51单片机波特率设置主要有以下两种方式:1) 工作方式0 ,2)工作方式1 。
1) 工作方式0
SM0=0且SM1=0时,串口选择工作方式0,实质这是一种同步移位寄存器模式。 其数据传输的波特率固定为Fosc/12,数据由RXD引脚输入或输出,同步时钟由TXD引脚输出。
2)工作方式1
当SM0=0且SM1=1时,串口选择工作方式1,其数据传输的波特率由定时/计数器T1、T2的溢出速率决定,可通过程序设定。当T2CON寄存器中的RCLK和TCLK置位时,用T2作为发送和接收波特率发生器,而RCLK=TCLK=0时,用T1作为波特率发生器,两者还可以交叉使用,即发送和接收采用不同的波特率。数据由TXD引脚发送,由RXD引脚接收。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pmwxda
2010-12-16 · TA获得超过814个赞
知道小有建树答主
回答量:751
采纳率:0%
帮助的人:641万
展开全部
51MCU-方式1:10位通用异步通信
一帧信息为10位:1位为起始位(0),8位数据位,1位停止位(1)
采用定时器T1(1个16位计数器)作为串行口接收和发送的波特率发生器,数据传输波特率可调,由T1的溢出决定,可用程序设定。
波特率设定:
波特率=(2^smod)*(定时器T1溢出率)/32
溢出率=溢出周期的倒数
溢出周期=12*(256-X)/Fosc
波特率=(2^smod * Fosc)/(32 *12*(256-X))
初值X=256-(Fosc*2^smod)/384*波特率

如:11.0592MHz,波特率为9600的初值:TH1=0FFH,TL1=0FDH

强调:51串行口方式1为由定时器T1的计数溢出率来决定,T1为16位定时器,故TH1,TL1均需设值,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luochris2010
2010-12-16 · 超过16用户采纳过TA的回答
知道答主
回答量:38
采纳率:0%
帮助的人:33.7万
展开全部
波特率是单片机通信中必设置的地方
至于对应不同的波特率设置TH/TL
可以查表就能找到
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ylq600
2010-12-15 · 超过12用户采纳过TA的回答
知道答主
回答量:56
采纳率:0%
帮助的人:30.1万
展开全部
在烧程序的软件中设置。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式