您的位置 首页 5G

51系列单片机12M晶振与9600波特率闲谈

最近写了个小程序,用到9600波特率,板子上是12M晶振。但在调试的时候,死活都配不出9600的波特率。于是上狗狗,狗了一下,发现不少朋友们

最近写了个小程序,用到9600波特率,板子上是12M晶振。但在调试的时分,死活都配不出9600的波特率。所以上狗狗,狗了一下,发现不少朋友们都遇到了相同的问题,并且下了铁板钉钉的定论:51单片机在12M晶振的时分是无法完成9600波特率的。

网友们大都引荐改成11.0592M晶振。当然这个计划是肯定可行的,但我真实懒得去买这号晶振(跑一趟电子市场要花3小时呢)。所以重新去研讨芯片手册,总算功夫不负有心人,我发现,假如你一不小心选的是52或许54、58的芯片,这个问题是能够处理的哦。

51单片机一般由TIMER1来发生波特率,TIMER1的频率是晶振的1/12,也便是1M。它的频率太低导致它不能完成9600波特率。这也给咱们供给了一条新的处理途径:假如咱们能进步时钟频率,那么也或许完成9600的波特率。

进步时钟频率是不是一定要进步晶振频率呢?当然,答案是否定的(改晶振频率那就太土了)。52及以上的单片机供给了TIMER2,可作为波特率发器。且它作为波特率发生器时,它的频率是晶振的1/2,也便是6M。其结构如图1。

coordsize=”21600,21600″ o:spt=”75″ o:preferrelative=”t” path=”m@4@5l@4@11@9@11@9@5xe”
filled=”f” stroked=”f”>

o:title=””/>

图1 TIMER2 的波特率发生器

TIMER2作为波特率发生器,要注意以下几点:

1.
C/T位清零,挑选OSC/2作为时钟;

2.
TH2和TL2串联成16位时钟,溢出后主动重装;重装常数存放在RCAP2H和RCAP2L;

3.
置RCLK和TCLK为1,将特率生成器切换到TIMER2;

4.
置TR2,发动TIMER2。

代码如下:

void Uart0_Init()

{

//9600波特率对应 FFD9H

RCAP2L = 0xD9;

RCAP2H
= 0xFF;

//RCLK、TCLK置1

//TR2置1

T2CON
= 0x34;

//串口作业形式1,接纳使能

SCON
= 0x50;

//答应串口中止

ES
= 1;

return;

}

void Uart0_Ist() interrupt 4

{

if(RI)

{

RI
= 0;

//Do
whatever you want;

}

if(TI)

{

TI
= 0;

//Do
whatever you want;

}

}

以上设置,用串口调试帮手调试经过。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/5g/257910.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部