标题: 51单片机串口发送数字实验为什么改了一下波特率就不对了? [打印本页]

作者: Hazard    时间: 2018-4-3 21:59
标题: 51单片机串口发送数字实验为什么改了一下波特率就不对了?
51单片机为什么串口,根据例程将4800改成了9600就不对了(我是根据图片上配置的)(功能:串口发送一个数字,串口助手上显示出来)感觉是配置上哪里出了点问题???

  1. #include<reg52.h>


  2. typedef unsigned char u8;

  3. void UsartInit()
  4. {
  5.   SCON=0x50;
  6.   TMOD=0x20;                //定时器1方式2
  7.   PCON=0x80;
  8.   TH1=0xF9;                  //自动重装载8位计数器
  9.   TL1=0xF9;                         //9600
  10.   TR1=1;                          
  11.   ES=1;                        //开串口中断
  12.   EA=1;



  13. }


  14. void Usart() interrupt 4
  15. {
  16. u8 ReceiveData;
  17.           ReceiveData=SBUF;
  18.           RI=0;
  19.         SBUF=ReceiveData;
  20.          while(!TI);
  21.    TI=0;

  22. }





  23. void main()
  24. {

  25. UsartInit();

  26.   while(1);

  27. }
复制代码



9600.png (58.61 KB, 下载次数: 45)

显示结果

显示结果

波特率表.png (232.93 KB, 下载次数: 41)

波特率配置

波特率配置

作者: Hazard    时间: 2018-4-3 22:06
是12Mhz晶振,下载软件也是9600,com4,就是调不出来
作者: coulomb    时间: 2018-4-4 06:48
使用12Mhz晶振,一開始就不好.買不到11.0592M?甚至買22.1184M.
計算波特率誤差最小.
作者: HC6800-ES-V2.0    时间: 2018-4-4 07:32
Hazard 发表于 2018-4-3 22:06
是12Mhz晶振,下载软件也是9600,com4,就是调不出来

这就对了!!!!!
12M晶振,最大只能是4800的波特率且要加倍。不然误差很大,串口就收不到正确的信息。









作者: zhangxiaozi    时间: 2018-4-4 08:42
程序没错,错的是12M 不应该在9600波特率工作,你仔细看看后边的误差率6.99%
用11.0592在大多数波特率工作下,误差很小
作者: Hazard    时间: 2018-4-4 16:46
谢谢大牛们们




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1