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

2009-8-29 21:31 11518 7 8 分类: MCU/ 嵌入式


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



 



    网友们大都推荐改成11.0592M晶振。当然这个方案是绝对可行的,但我实在懒得去买这号晶振(跑一趟电子市场要花3小时呢)。于是重新去研究芯片手册,终于功夫不负有心人,我发现,如果你一不小心选的是52或者5458的芯片,这个问题是可以解决的哦。



 



       51单片机通常由TIMER1来产生波特率,TIMER1的频率是晶振的1/12,也就是1M。它的频率太低导致它不能实现9600波特率。这也给我们提供了一条新的解决途径:如果我们能提高时钟频率,那么也可能实现9600的波特率。



 



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



点击看大图



1 TIMER2 的波特率发生器



 



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



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



2.       
TH2TL2串联成16位时钟,溢出后自动重装;重装常数存放在RCAP2HRCAP2L



3.       
RCLKTCLK1,将特率生成器切换到TIMER2



4.       
TR2,启动TIMER2



 



代码如下:



void Uart0_Init()



{



       //9600波特率对应 FFD9H



       RCAP2L = 0xD9;



       RCAP2H
= 0xFF;



 



       //RCLKTCLK1



       //TR21



       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;



}



}


     以上设置,用串口调试助手调试通过。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户377235 2014-3-29 23:20

确实有效,谢谢博主分享
相关推荐阅读
用户150704 2010-08-08 09:49
关于 error 122 AGDI: memory read failed 问题
 在和STM32F103战斗了1个多星期之后,终于搞定error122 AGDI: memory read failed问题。其中过程曲折,而结果却出人意料的简单。特别整理出来,希望对各位同仁有所帮助...
用户150704 2010-03-14 14:36
三相无刷电机控制与TMS320F2812 -- F2812简介(5)
系统控制与时钟    系统控制与时钟模块包括复位控制、时钟、功耗控制,如图1所示。复位控制:    外部复位脚XRS输入低电平信号后,系统控制模块产生内核复位信号(Reset),使CPU复位。再由CP...
用户150704 2010-03-13 16:00
三相无刷电机控制与TMS320F2812 -- F2812简介(4)
中断系统        F2812芯片的CPU支持一个不可屏蔽中断(NMI)和14个可屏蔽中断(INT1~INT14),这些中断称为CPU级中断。芯片内部集成了许多外部设备,如SPI、SCI、CAN等...
用户150704 2010-03-11 22:59
三相无刷电机控制与TMS320F2812 -- F2812简介(3)
存储器映射        F2812采用哈佛结构,数据与程序分开编址,即数据空间与程序空间。如图1,为数据空间、程序空间存储器的映射关系。     数据与程序空间地址的0x000000~0x00 04...
用户150704 2010-03-07 15:19
三相无刷电机控制与TMS320F2812 -- F2812简介(2)
F2812总体结构       F2812总体结构见图1。芯片内总结构基本上可以分为三大部分:内核、外设及总线。    内核即图中的C28x CPU部分,为芯片的中央处理器。主要接受外部四种信号:- ...
用户150704 2010-03-06 22:11
三相无刷电机控制与TMS320F2812 -- F2812简介(1)
TMS320F2812简介(1)     作为新手,当你第一次拿到电机控制的设计任务时,最先要解决的问题就是选什么样的控制芯片。通常你会去师兄师姐或都是老前辈那请教该用什么。估计70%的回答是TI的C...
EE直播间
更多
我要评论
1
7
关闭 站长推荐上一条 /3 下一条