欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
STC51單片機(jī)為啥向PC發(fā)送漢字會(huì)出現(xiàn)亂碼?
[打印本頁(yè)]
作者:
baiyun1234
時(shí)間:
2019-9-10 16:45
標(biāo)題:
STC51單片機(jī)為啥向PC發(fā)送漢字會(huì)出現(xiàn)亂碼?
程序:(這是網(wǎng)上下載的,剛開(kāi)始我的程序也這樣,排查不出來(lái)原因,直接在網(wǎng)上下載了一個(gè),還是這樣,求大神指點(diǎn)。_下面還有串口接收的信息。)
//#include <reg52.h>
#include <stdio.h>
#include <stc89.h>
#define uint unsigned int
#define uchar unsigned char
//毫秒級(jí)延時(shí)函數(shù)定義
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;//啟動(dòng)定時(shí)器1
TMOD = 0x20;//定時(shí)器1,工作模式2 8位自動(dòng)重裝
TH1 = 0xfd;
TL1 = 0xfd;//設(shè)置比特率9600
}
void main()
{
UARTInit(); //串口初始化
while(1)
{
TI = 1;//發(fā)送請(qǐng)求標(biāo)志位
puts("大家好!歡迎學(xué)習(xí)單片機(jī)");//發(fā)送的漢字
while(!TI);//判斷是否發(fā)送完成 發(fā)送完成出循環(huán)
TI = 0;
delay(1000);//延遲1秒
}
}
串口接收內(nèi)容:
大家好!歡?暗テ?
大家好!歡迎學(xué)習(xí)單片??
大家好!歡迎學(xué)習(xí)單片機(jī)
大家好!歡迎學(xué)習(xí)單片機(jī)
大家?茫』隊(duì)暗テ?機(jī)
作者:
沒(méi)有你
時(shí)間:
2019-9-10 17:04
你這個(gè)函數(shù)時(shí)無(wú)法打印漢字的,需要自己搞個(gè)printf函數(shù),我這里有參考的程序
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
/**********************************************
名稱:Uart_write
功能:串口發(fā)送函數(shù)
參數(shù):*pBuf--> 待發(fā)送數(shù)據(jù)指針 len-->數(shù)據(jù)長(zhǎng)度
返回:void
**********************************************/
void Uart_write(uint8 *pBuf,int ulLen)
{
int i;
for(i = 0; i < ulLen; i++)
{
SBUF=*pBuf; //數(shù)據(jù)加載到發(fā)送緩沖區(qū)
while(!TI); //等待發(fā)送完成
TI=0; //發(fā)送標(biāo)志清零
pBuf++; //數(shù)據(jù)指針指向下一組數(shù)據(jù)
}
}
/*********************************************
名稱:printfs
功能:類似printf串口打印函數(shù)(采用數(shù)組緩存數(shù)據(jù))
參數(shù):fmt-->不定參數(shù)標(biāo)志位。如%d,%s等
返回:發(fā)送數(shù)據(jù)長(zhǎng)度
注意:在IAR平臺(tái)正常使用;
但在keil平臺(tái),如果輸出為以下類型,需要改為動(dòng),否則數(shù)據(jù)不正常。
顯示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;
}
然后初始化串口后,直接調(diào)用printfs函數(shù):比如printfs("大家好!\r\n");
作者:
wzl-mcu
時(shí)間:
2019-9-10 17:16
51單片機(jī)串口發(fā)送應(yīng)該要用到sbuf吧
作者:
tyrl800
時(shí)間:
2019-9-10 18:07
程序沒(méi)錯(cuò),估計(jì)是硬件,比如晶振不對(duì),地線沒(méi)接好的原因吧
作者:
baiyun1234
時(shí)間:
2019-9-11 08:33
恩,謝謝大家,已經(jīng)解決,給大家分享下原因,我使用keil_5,補(bǔ)丁了一個(gè)“keil+漢字+FD補(bǔ)丁”,就OK啦。
1.謝謝1樓的幫助。
2.二樓說(shuō)的SBUF,我也使用過(guò),是PC或者上位機(jī)發(fā)送指令字節(jié),printf & puts我是發(fā)送漢字,都可以使用,自己習(xí)慣,但是使用printf & puts得需要#include <stdio.h>。
作者:
yzwzfyz
時(shí)間:
2019-9-11 22:22
發(fā)送函數(shù)是引用它人的,未知道應(yīng)用時(shí)是有限制條件的。
作者:
通過(guò)但收購(gòu)
時(shí)間:
2020-5-25 15:21
用了樓主的程序,發(fā)現(xiàn)在我這是可行的。
網(wǎng)上找到的其他的一些程序在我這會(huì)顯示部分亂碼或者多出一些字。還沒(méi)找到問(wèn)題所在。
學(xué)習(xí)了。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1