新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 用51單片機(jī)+11.0592的晶振,如何產(chǎn)生115200的波特率?

用51單片機(jī)+11.0592的晶振,如何產(chǎn)生115200的波特率?

作者: 時間:2016-10-07 來源:網(wǎng)絡(luò) 收藏

  今天解決了一個小問題(查書后才得到確切結(jié)論。。。)用單片機(jī)+11.0592的,如何產(chǎn)生115200的波特率?

本文引用地址:http://m.butianyuan.cn/article/201610/310908.htm

  本來感覺這個小意思,直接初始化定時器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開始

  }

  結(jié)果發(fā)現(xiàn)這樣只能得到9600的波特率。。。

  當(dāng)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時,剛好可以產(chǎn)生115200波特率。

  2、采用6個時鐘周期的單片機(jī)(換單片機(jī)啊。。。)

  3、增強(qiáng)型單片機(jī)有定時器2!(幸好偶用的是增強(qiáng)型。。。)

  就用第三種方法啦!這時的公式如下:

  波特率=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; //波特率發(fā)生器工作方式

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

  TR2=1 ; //定時器2開始

  }

  OK!這樣就實現(xiàn)用單片機(jī)+11.0592的晶振,產(chǎn)生115200的波特率了,當(dāng)然老鳥看來很基本,但好長時間不用了,再復(fù)習(xí)一下~~



關(guān)鍵詞: 晶振 51

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉