音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

51單片機(jī)串口通訊問題求解,請幫忙分析,謝謝!

作者:hgchenkv 欄目:單片機(jī)
51單片機(jī)串口通訊問題求解,請幫忙分析,謝謝!
我在做串口調(diào)試實(shí)驗(yàn)時,PC與51的通訊,依次輸入1234567890a~z串行通訊顯示出來的結(jié)果如下所示,英文字母的錯誤還能接受,但那個數(shù)字的誤

碼率太高了啊,請各位高手幫忙分析一下,謝謝了!
qq11qq1q1qqqq1r222rr34t5uu5uuvvv

677w88xy999y0p00pp0abcdefghIjklmnopqrstuvwxyzz
程序如下:
#include<reg51.h>
void main()
{
unsigned int a[10];
TMOD=0x20;//方式2
TL1=0xF3;//波特率為4800的初值
TH1=0xF3;
SCON=0x54;//串口工作在方式1
PCON=0x80;//SMOD=1
TR1=1;
while(1)
{
while(RI==0);
RI=0;
a[10]=SBUF;
SBUF=a[10];
while(TI==0);
TI=0;
}
}

2樓: >>參與討論
彪哥
接收后發(fā)回去
直接將接收后的字符存在一個變量里,先發(fā)一個,看碼率對不對。
void delay(void)
{
   unsigned CHAR i=255;
     while(--i);
}
void main()
{
unsigned CHAR a;
TMOD=0x20;//方式2
TL1=0xF3;//波特率為4800的初值
TH1=0xF3;
SCON=0x54;//串口工作在方式1
PCON=0x80;//SMOD=1
TR1=1;
while(1)
{
while(RI==0);
RI=0;
a=SBUF;
delay();
SBUF=a;
while(TI==0);
TI=0;
}
}

3樓: >>參與討論
hgchenkv
彪哥,先謝了
彪哥,先謝了,但是還是跟剛才一樣啊,沒有什么改變,而且又出現(xiàn)了一個新問題就是:發(fā)送大寫的英文字母也跟發(fā)送數(shù)字有一樣的效果,收到的不是亂碼就是小寫的字母啊,求各位了!!!

4樓: >>參與討論
hunao
晶振是多少?
 
5樓: >>參與討論
xzlrhlg
PC機(jī)與單片機(jī)波特率一樣?
 
6樓: >>參與討論
diannaoza
串口通訊

;;;;;;;;;;;;;;;;;;;;;11.0592MHZ;;;;;;;;;;;;;
TMOD=0x20;//方式2
Th1=0xF4;//波特率為2400的初值;;;

PCON=0x80;//SMOD=1;;;4800


7樓: >>參與討論
hgchenkv
我的晶振是12M的啊,應(yīng)該沒什么問題吧?
還有我的單片機(jī)和PC的波特率都是4800,現(xiàn)在我就不懂到底是什么問題了啊,還請各位高手分析,謝謝!

8樓: >>參與討論
eyesonme
有沒有問題,算算就知道了
根據(jù)晶振,確認(rèn)相應(yīng)寄存器的初始值是否準(zhǔn)確。然后看看程序的代碼有無錯誤。你完全可以先只接收和發(fā)送單一字符,然后再看看數(shù)組的顯示對不

9樓: >>參與討論
zhaoruixbj
不是要11.0592MHZ的晶振嗎
串口通信不是要11.0592MHZ的晶振嗎

10樓: >>參與討論
ttjlc
實(shí)在不行,用示波器量波特率
晶振當(dāng)然由你自己選擇了,11.0592最適合9600波特率,當(dāng)然不是說其它波特率就不行了,你自己算一下波特率就知道了。

11樓: >>參與討論
hgchenkv
樓上的諸位高手好
我的晶振用的是12M的,而且根據(jù)計(jì)算波特率也應(yīng)該是4800最適合,包括定時器的初值設(shè)定也是通過我計(jì)算和參考別人的啊,網(wǎng)上也有這方面的資料,我基本上參考的就是那個,但是現(xiàn)在顯示的就是單片機(jī)發(fā)送16進(jìn)制時,PC接受的老是一位對一位錯(比如發(fā)0x30\0xAF,收到的卻是0x70\0x6F),我真的就不知道為什么?小弟先謝謝各位了!

12樓: >>參與討論
power5000
串口工作在方式
 
13樓: >>參與討論
hgchenkv
power5000 你好
power5000 你好,串口工作在方式1有問題嗎?

14樓: >>參與討論
margaret03
你用的串口調(diào)試軟件設(shè)置的是否正確?
 
15樓: >>參與討論
hgchenkv
margaret03
margaret03 你好!串口調(diào)試軟件的設(shè)置跟單片機(jī)程序中的設(shè)置完全一致啊,請?jiān)賻兔Ψ治鲆幌掳?謝謝!

16樓: >>參與討論
dengm
用示波器看一下,可能是硬件問題
 
17樓: >>參與討論
hgchenkv
再求各位幫忙啊,謝謝!
 
18樓: >>參與討論
ukgo

1.可以先在300波特的速率下檢驗(yàn)一下硬件電路和軟件是否正常。
  (用示波器檢查串口波形)
2.硬件和軟件都正常,再檢查2400的波特率在晶振是12M時是否好用。
  (當(dāng)然,晶振最好選11.0592MHZ的)


* - 本貼最后修改時間:2006-3-30 12:20:31 修改者:ukgo

19樓: >>參與討論
pilibeibei
程序有問題
a[10]=SBUF;
SBUF=a[10];
你不覺得別扭嗎?你是把SBUF中的數(shù)據(jù)存到數(shù)組中嗎?
                你是把數(shù)組中的數(shù)據(jù)放到SBUF中去嗎?
                建議你要么用循環(huán),要么用指針,一個一個傳值

20樓: >>參與討論
szxw
晶振換成11.0592MHZ!
12MHZ的不行,誤差太大~

21樓: >>參與討論
dai_weis
通訊速率和CRC
串行通訊要有校驗(yàn)碼,12M晶振產(chǎn)生的串口速率要選擇整倍率的發(fā)送速度,要不會出現(xiàn)不定期的錯誤


22樓: >>參與討論
teddeng
把MCU拔了,短接RX/TX,PC自發(fā)自收,看正確否
 
23樓: >>參與討論
jacky-cheung
拜托,別誤導(dǎo)人家,12M晶體沒問題。
拜托,別誤導(dǎo)人家,12M晶體沒問題。寫片看看,通信講究實(shí)時。

24樓: >>參與討論
hgchenkv
樓上的各位大俠好!
首先感謝各位大俠幫我認(rèn)真分析,各位各有自己的見解和經(jīng)驗(yàn),小弟先謝過了!
現(xiàn)在我又出現(xiàn)了新問題了,再請各位幫忙,也同時把我作出來的實(shí)驗(yàn)事實(shí)告訴大家,共同交流:
我現(xiàn)在用的晶振是12M的,發(fā)送還算正常吧,發(fā)送接受程序也有所改動,只發(fā)送和接受單個字符,程序如下:
#include<reg51.h>
void main()
{
unsigned int a[10];
TMOD=0x20;//方式2
TL1=0xF3;//波特率為2400的初值
TH1=0xF3;
SCON=0x50;//串口工作在方式1
TR1=1;
while(1)
{
while(RI==0);
RI=0;
a=SBUF;
SBUF=;
while(TI==0);
TI=0;
}
}
現(xiàn)在結(jié)果是:當(dāng)調(diào)整波特率為2400時,發(fā)送和接受字母(a~z只小寫)正常,誤碼率10錯1吧,但換成大寫和數(shù)字錯誤率就很高了,當(dāng)調(diào)整波特率為1200時,數(shù)字的發(fā)送接受就正常了,其他的就不行了啊,各位這又是什么原因?

25樓: >>參與討論
hgchenkv
接樓上的話
我聽幾位大哥大姐說,象我上邊那樣用查詢法發(fā)送接受不穩(wěn)定,應(yīng)該用串口中斷實(shí)現(xiàn)要求操作才比較穩(wěn)定啊,是嗎?請各位幫忙再分析一下,再提點(diǎn)額外的要求關(guān)于串口中斷我查了好多資料,但對他的工作過程還不是很了解,能否麻煩各位附個小程序?qū)ζ鋱?zhí)行步驟解釋一下,謝謝!

26樓: >>參與討論
pilibeibei
都說了是程序問題!
你定義了:unsigned int a[10];
其實(shí)用的時候最大也只能用a[9]啊,要用a[10]定義時應(yīng)為unsigned int a[11];

27樓: >>參與討論
hgchenkv
不好意思
不好意思,各位,是我的筆誤啊,我的程序應(yīng)該是:
#include<reg51.h>
void main()
{
unsigned CHAR a;
TMOD=0x20;//方式2
TL1=0xF3;//波特率為2400的初值
TH1=0xF3;
SCON=0x50;//串口工作在方式1
TR1=1;
while(1)
{
while(RI==0);
RI=0;
a=SBUF;
SBUF=;
while(TI==0);
TI=0;
}
}
除了這個地方a [10]還有什么問題嗎?再請各位幫忙,謝謝!


28樓: >>參與討論
hgchenkv
各位大俠幫幫忙啊,謝謝
 
29樓: >>參與討論
hgchenkv
????????
 
30樓: >>參與討論
hgchenkv
感謝信
感謝這些天來,各位高手的指點(diǎn)和幫忙分析,通過諸位仁兄義姐的幫忙,我的串口通訊已經(jīng)基本實(shí)現(xiàn)了,當(dāng)然只是簡單的實(shí)現(xiàn),以后的深入實(shí)現(xiàn)還要繼續(xù)麻煩各位高手幫忙!再次感謝各位。!

31樓: >>參與討論
ares_lan
TO pilibeibei
你好!我就用過你說過的方法.用個循環(huán),但只能接收開始的一位.我后來又用串口中斷寫過,但是還是這種問題.不知道你的一個一個傳是怎么寫的.可不可以寫一段給我學(xué)習(xí)一下.
另外,在我理解來,串口調(diào)試助手發(fā)送一串字符,是連續(xù)發(fā)送的,8位寫入SBUF后,標(biāo)志位RI=1,然后把SBUF中的內(nèi)容寫進(jìn)緩存,然后TI=0開始接收.不知道我這樣的理解是不是對的.謝謝

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
求助,C8051F020如何通過程序控制DAC0的輸出?
c的奇怪用法
程序問題!
電池的使用?電池壽命估計(jì)?
關(guān)于端口上的按鍵
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號