已经51单片机的晶振频率是12MHZ 要产生4800BPS的波特率 问波特率的计算公式 还有 计算 TH1 TL1的初始值

已经51单片机的晶振频率是12MHZ要产生4800BPS的波特率问波特率的计算公式还有计算TH1TL1的初始值... 已经51单片机的晶振频率是12MHZ 要产生4800BPS的波特率 问波特率的计算公式 还有 计算 TH1 TL1的初始值 展开
 我来答
erchowyo
推荐于2017-11-25 · TA获得超过250个赞
知道小有建树答主
回答量:113
采纳率:0%
帮助的人:79万
展开全部
串行口的四种工作方式对应三种波特率。由于输入的移位时钟的来源不同,所以,各种方式的波特率计算公式也不相同。
方式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;
}
阜娃子
2012-05-28 · 超过11用户采纳过TA的回答
知道答主
回答量:51
采纳率:0%
帮助的人:3.4万
展开全部
单片机串行口工作方式有四种,用到定时器1的有两种,分别是方式1和方式3.
这种情况下定时器被设置工作在方式2,不过波特率为4800bPS,对应的晶振频率应该是11.0592MHz,否则代入公式无法得到整数的TH1与TL1。
若晶振频率为11.0592MHz时,SMOD=0,TH1=FAH,TL1=FAH,即可得到4800bps的波特率。
如果允许波特率由一定误差,在晶振为12MHz时,则TH1=TL1=F3H即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lin1936
2012-05-28 · TA获得超过184个赞
知道答主
回答量:23
采纳率:0%
帮助的人:7.9万
展开全部
同楼上
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式