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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC51單片機為啥向PC發送漢字會出現亂碼?

[復制鏈接]
跳轉到指定樓層
樓主
ID:609989 發表于 2019-9-10 16:45 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
程序:(這是網上下載的,剛開始我的程序也這樣,排查不出來原因,直接在網上下載了一個,還是這樣,求大神指點。_下面還有串口接收的信息。)
//#include <reg52.h>
#include <stdio.h>
#include <stc89.h>

#define uint unsigned int
#define uchar unsigned char


//毫秒級延時函數定義
void delay(uint z)
{
        uint x,y;
        for(x = z; x > 0; x--)
                for(y = 114; y > 0 ; y--);                 
}


//串口初始化
void UARTInit()
{
        SM0 = 0;        SM1 = 1;//串口工作方式1,8位UART波特率可變
        TR1 = 1;//啟動定時器1
        TMOD = 0x20;//定時器1,工作模式2 8位自動重裝
        TH1 = 0xfd;
        TL1 = 0xfd;//設置比特率9600
}


void main()
{
        UARTInit(); //串口初始化
        while(1)
        {
                TI = 1;//發送請求標志位
                puts("大家好!歡迎學習單片機");//發送的漢字
                while(!TI);//判斷是否發送完成  發送完成出循環
                TI = 0;
                delay(1000);//延遲1秒
        }        
}
串口接收內容:
大家好!歡?暗テ?
大家好!歡迎學習單片??
大家好!歡迎學習單片機
大家好!歡迎學習單片機
大家?!魂牠暗テ?機


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

使用道具 舉報

沙發
ID:351097 發表于 2019-9-10 17:04 | 只看該作者
你這個函數時無法打印漢字的,需要自己搞個printf函數,我這里有參考的程序
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
/**********************************************
名稱:Uart_write
功能:串口發送函數
參數:*pBuf--> 待發送數據指針          len-->數據長度
返回:void
**********************************************/
void Uart_write(uint8 *pBuf,int ulLen)
{
        int i;
    for(i = 0; i < ulLen; i++)
    {
       SBUF=*pBuf;  //數據加載到發送緩沖區
       while(!TI);  //等待發送完成         
           TI=0;                //發送標志清零
           pBuf++;     //數據指針指向下一組數據
    }
}
/*********************************************
名稱:printfs
功能:類似printf串口打印函數(采用數組緩存數據)
參數:fmt-->不定參數標志位。如%d,%s等
返回:發送數據長度
注意:在IAR平臺正常使用;
但在keil平臺,如果輸出為以下類型,需要改為動,否則數據不正常。
顯示long類型 %d ===> %ld
顯示char類型 %d ===> %bd

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

int printfs(char*fmt,...)
{  
    char  pBuf[50];
    int ulen;
    va_list ap;
    va_start(ap, fmt);
    ulen = vsprintf(pBuf, fmt, ap);
        va_end(ap);
        Uart_write((uint8*)pBuf, ulen);
    return ulen;
}
然后初始化串口后,直接調用printfs函數:比如printfs("大家好!\r\n");
回復

使用道具 舉報

板凳
ID:593646 發表于 2019-9-10 17:16 | 只看該作者
51單片機串口發送應該要用到sbuf吧
回復

使用道具 舉報

地板
ID:275826 發表于 2019-9-10 18:07 | 只看該作者
程序沒錯,估計是硬件,比如晶振不對,地線沒接好的原因吧
回復

使用道具 舉報

5#
ID:609989 發表于 2019-9-11 08:33 | 只看該作者
恩,謝謝大家,已經解決,給大家分享下原因,我使用keil_5,補丁了一個“keil+漢字+FD補丁”,就OK啦。
1.謝謝1樓的幫助。
2.二樓說的SBUF,我也使用過,是PC或者上位機發送指令字節,printf & puts我是發送漢字,都可以使用,自己習慣,但是使用printf & puts得需要#include <stdio.h>。
回復

使用道具 舉報

6#
ID:123289 發表于 2019-9-11 22:22 | 只看該作者
發送函數是引用它人的,未知道應用時是有限制條件的。
回復

使用道具 舉報

7#
ID:537172 發表于 2020-5-25 15:21 | 只看該作者
用了樓主的程序,發現在我這是可行的。
網上找到的其他的一些程序在我這會顯示部分亂碼或者多出一些字。還沒找到問題所在。
學習了。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线观看黄免费 | 91av免费看| 毛片入口 | 午夜影视网 | 国产欧美精品一区二区色综合朱莉 | 亚洲精品国产电影 | 女人精96xxx免费网站p | 欧美在线一区二区三区 | 免费特黄视频 | 中文字幕高清免费日韩视频在线 | 国产一区二区三区在线观看免费 | 亚洲黄色视屏 | 国产美女在线免费观看 | 一区二区三区亚洲 | 婷婷综合色 | 国产黄色在线观看 | 999热视频| 亚洲国产精品久久久久久 | 国产一级片久久久 | 久久国产精品亚洲 | 91传媒在线观看 | 成人亚洲精品久久久久软件 | 伦理片97 | h视频在线看 | 中文字幕 国产 | 欧美一区二区免费电影 | 男人阁久久 | 亚洲欧美一区二区三区在线 | 日韩一区在线观看视频 | 草草视频在线观看 | 九九热精品在线 | 亚洲视频一区二区三区 | 国产精品久久久久久久久久三级 | 找个黄色片 | 狠狠综合久久av一区二区小说 | 欧洲成人 | 成人亚洲精品 | 天天操操操操操 | 欧美韩一区二区三区 | 一区二区三区中文字幕 | 欧美成人免费在线 |