zoukankan      html  css  js  c++  java
  • 用51单片机+11.0592的晶振,如何产生115200的波特率

    原文地址http://homezzy.blog.hexun.com/29601793_d.html

    以前自己也遇到过这种情况,模块115200波特率而且不能更改,如何用51产生115200波特率,最近朋友也可能遇到这个问题,,特转载一下原文博客大神的文章

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

  • 相关阅读:
    shell脚本学习(1)列出一组IP内所有活动主机
    中兴ZXR10 GER4核心路由器配置案例
    中兴ZXR10 6905核心交换机配置案例
    NFS笔记(二)NFS服务器配置实例
    NFS笔记(一)NFS服务器工作原理及详细配置
    CentOS7.3下关于DHCP中继代理服务器的详细配置
    CentOS6下DHCP服务(二)简单配置案例及故障排查
    impdp 多个表空间到1个表空间通配符的使用
    11.2.0.4 has 启动失败
    oracle 11g 添加删除haip
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/6374919.html
Copyright © 2011-2022 走看看