您的位置 首页 报告

用51单片机+11.0592的晶振,怎么发生115200的波特率?

今天解决了一个小问题(查书后才得到确切结论。。。)用51单片机+11.0592的晶振,如何产生115200的波特率?本来感觉这个小意思,直接初始化定时器1,程序如下:void in

  今日处理了一个小问题(查书后才得到切当定论。。。)用51单片机+11.0592的晶振,怎么发生115200的波特率?

  原本感觉这个小意思,直接初始化定时器1,程序如下:

  void init_com( void )

  {

  SCON = 0x50 ; //串口工作方式1,8位UART,波特率可变

  TMOD |= 0x20 ; //定时器1,工作方式2,主动再装入8位定时器

  PCON |= 0x80 ; //SMOD=1; 波特率加倍

  TH1 = 0xfa ; //波特率:9600 晶振=11.0592MHz

  IE |= 0x90 ; //使能串口中止

  TR1 = 1 ; // 定时器1开端

  }

  成果发现这样只能得到9600的波特率。。。

  当SMOD=1时,K=2,波特率加倍,公式为:

  波特率=K×11059200/32×12×(256-TH1)

  所以,TH1=0xfa=256-(2×11059200/384×波特率) 其间波特率为9600

  这时,及时令TH1=0xff,所得波特率最大只能为57600,也就是说,这样无法得到115200的波特率。。。

  这样就只有选用其他办法了:

  1、换晶振,用22.1184M晶振,在TH1=0xff时,刚好能够发生115200波特率。

  2、选用6个时钟周期的单片机(换单片机啊。。。)

  3、增强型51单片机有定时器2!(幸亏偶用的是增强型。。。)

  就用第三种办法啦!这时的公式如下:

  波特率=11059200/32×[65535-(RCAP2H,RCAP2L)]

  其间的RCAP2H,RCAP2L为主动重装值,由上式得:

  RCAP2H,RCAP2L=65536-11059200/32×波特率

  这样得波特率为115200时,RCAP2H,RCAP2L=0xff,0xfd,初始化程序如下:

  void init_com( void )

  {

  SCON=0x50; //串口工作方式1,8位UART,波特率可变

  TH2=0xFF;

  TL2=0xFD; //波特率:115200 晶振=11.0592MHz

  RCAP2H=0xFF;

  RCAP2L=0xFD; //16位主动再装入值

  /*****************/

  TCLK=1;

  RCLK=1;

  C_T2=0;

  EXEN2=0; //波特率发生器工作方式

  /*****************/

  TR2=1 ; //定时器2开端

  }

  OK!这样就实现用51单片机+11.0592的晶振,发生115200的波特率了,当然老鸟看来很根本,但好长时间不用了,再温习一下~~

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部