久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5549|回復: 3
打印 上一主題 下一主題
收起左側

關于stc15f2k60s2單片機串口printf函數的使用問題

[復制鏈接]
回帖獎勵 40 黑幣 回復本帖可獲得 10 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主

為什么調用printf在這個板子上輸出中文會出現亂碼,我拿不同的板子試了基本一樣的代碼就沒亂碼,板子應該沒有問題,請賜教




單片機源碼如下:

  1. #include<STC15F2K60S2.H>
  2. #include <stdio.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int        
  5. uint a;
  6. bit flag=0;
  7. float b;
  8. void delayms(int ms);
  9. void allinit();
  10. void keyscan();
  11. void PCreceive();
  12. void UartInit(void); //串口初始化
  13. void main()
  14. {
  15.         a=100;       b=0.01;
  16.         UartInit();//串口初始化
  17.         EA=1; //打開總中斷
  18.         ES=1; //串口1中斷
  19.         allinit(); //初始化板子
  20.         while(1)
  21.         {
  22.                 if(flag==1)
  23.                 {
  24.                         flag=0;
  25.                         PCreceive();
  26.                 }
  27.                 keyscan();
  28.         }
  29. }
  30. void PCreceive()
  31. {                        
  32.         TI=1;
  33.         printf("  hello world!     \n"    );delayms(5);
  34.         printf("   總水量:%dL      \n"  ,a);delayms(5);
  35.         printf(" 瞬時速度:%.1fL/min\n\n",b);        delayms(5);                        
  36. }
  37. void UartInit(void)                //9600bps@11.0592MHz
  38. {
  39.         SCON = 0x50;                //8位數據,可變波特率
  40.         AUXR |= 0x01;                //串口1選擇定時器2為波特率發生器
  41.         AUXR |= 0x04;                //定時器2時鐘為Fosc,即1T
  42.         T2L = 0xE0;                //設定定時初值
  43.         T2H = 0xFE;                //設定定時初值
  44.         AUXR |= 0x10;                //啟動定時器2
  45. }
  46. void keyscan()
  47. {
  48.         if(P33==0)
  49.         {
  50.                 delayms(5);
  51.                 if(P33==0)
  52.                 {
  53.                         flag=1;
  54.                 }
  55.                 while(!P33);
  56.         }
  57. }
  58. void delayms(int ms) //延時函數
  59. {
  60.         int i,j;
  61.         for(i=ms;i>0;i--)
  62.                 for(j=845;j>0;j--);
  63. }
  64. void allinit() //初始化板子的,不會有問題
  65. {
  66.         P2=0XA0;
  67.         P0=0X00;//關閉蜂鳴器,繼電器
  68.         P2=0X80;
  69.         P0=0XFF;//關閉LED燈
  70.         P2=0XC0;
  71.         P0=0XFF;//選擇所有數碼管
  72.         P2=0XFF;
  73.         P0=0XFF;//關閉所有數碼管
  74. }
復制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:388197 發表于 2018-10-23 20:11 | 只看該作者
看下有問題的板子晶振是不是11.0592MHz

評分

參與人數 1黑幣 +10 收起 理由
霍禮林 + 10 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:244223 發表于 2018-10-23 20:57 | 只看該作者
cjm82 發表于 2018-10-23 20:11
看下有問題的板子晶振是不是11.0592MHz

兩個板子都是焊接的都是12M的晶振
回復

使用道具 舉報

地板
ID:387733 發表于 2018-10-24 06:53 | 只看該作者
霍禮林 發表于 2018-10-23 20:57
兩個板子都是焊接的都是12M的晶振

12M晶振就要用12M晶振計算,否則誤差太大了,自然容易出錯:

void UartInit(void)                //9600bps@12.000MHz
{
        SCON = 0x50;                //8位數據,可變波特率
        AUXR |= 0x01;                //串口1選擇定時器2為波特率發生器
        AUXR |= 0x04;                //定時器2時鐘為Fosc,即1T
        T2L = 0xC7;                //設定定時初值
        T2H = 0xFE;                //設定定時初值
        AUXR |= 0x10;                //啟動定時器2
}


這樣與PC機串口通訊會失步。11.0592M計算的9600波特率誤差為0,而12M計算的誤差為0.16,所以還是建議用11.0592的晶振。

如果只是兩個單片機之間串口通訊,那么晶振與波特率都無所謂,只要兩邊完全相同就可以了。

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本一区二区高清视频 | 成人在线视频免费播放 | 天天爱天天操 | 中文字幕视频在线看 | 一区二区不卡视频 | 久久国产精品免费一区二区三区 | av片在线播放 | 欧美一区二区在线 | 亚洲精品一| 亚洲欧美中文日韩在线v日本 | www.亚洲精品| 日韩欧美理论片 | 成人区精品 | 久久久久久91 | 亚洲免费观看视频 | 免费一级大片 | 一区二区三区久久久 | 欧美一级www片免费观看 | 四虎成人免费电影 | www..99re| 一区二区三区四区视频 | 久久久久久久av麻豆果冻 | 中文字幕一区二区三区四区五区 | 精品久久久久久中文字幕 | 欧美激情精品久久久久久 | 久草新在线 | 在线国产欧美 | 中国一级特黄真人毛片免费观看 | 成人超碰 | 国产亚洲精品精品国产亚洲综合 | 草久在线 | 亚洲电影免费 | 久久r免费视频 | 国产一区二区三区四区在线观看 | 91精品久久久 | 日本精品一区二区三区在线观看视频 | 亚洲精品在线看 | 亚洲视频免费在线 | 精品欧美激情精品一区 | av手机免费在线观看 | 人成久久|