51单片机 11.0592MHz 产生115200 波特率

51单片机 11.0592MHz 产生115200 波特率



连接:http://homezzy.blog.hexun.com/29601793_d.html

具体定义如下:
    SM0 SM1 SM2 REN TB8 RB8 TI RI 
    SM0、SM1为串行口工作模式设置位,这样两位可以对应进行四种模式的设置。
看表8-2串行口工作模式设置。

    SM0 SM1         模 式           功 能               波特率 
     0  0              0             同步移位寄存器       fosc/12 
     0  1              1             8位UART              可变 
     1  0              2             9位UART              fosc/32或fosc/64 
     1  1              3             9位UART              可变 
 
    表中的fosc代表振荡器的频率,也就是晶振的频率。
    UART为(Universal Asynchronous Receiver)的英文缩写。

今天解决了一个小问题(查书后才得到确切结论。。。)用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×[65536-(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的波特率了,当然老鸟看来很基本,但好长时间不用了,再复习一下~~



评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值