標(biāo)題: 請教關(guān)于STC89C52RC的串口高速發(fā)送數(shù)據(jù)問題 [打印本頁]

作者: TEC    時(shí)間: 2022-1-28 01:41
標(biāo)題: 請教關(guān)于STC89C52RC的串口高速發(fā)送數(shù)據(jù)問題
本帖最后由 TEC 于 2022-1-28 02:00 編輯

在測試上位機(jī)接收STC89C52RC單片機(jī)高速發(fā)送字節(jié)數(shù)據(jù)準(zhǔn)確率的時(shí)候,發(fā)現(xiàn)一個(gè)現(xiàn)象,描述如下:
1、結(jié)尾沒有延時(shí)(0xff自減到0),結(jié)束字節(jié)不是'\n',上位機(jī)顯示的是亂碼,16位顯示有規(guī)律,波特率降到1200也不行。
2、結(jié)尾有延時(shí)(短了不行,0xff自減到0可以),結(jié)尾發(fā)送的不管是不是'\n',上位機(jī)都能正常顯示字符。
3、結(jié)尾發(fā)送的是'\n',有沒有延時(shí),上位機(jī)都可以正常顯示字符。
這是怎么回事呢?我在aduc7061板子上也會(huì)遇到同樣的問題,aduc7061需要0x5ff自減到0的延時(shí)。
  1. #include<reg52.h>
  2. void usart_init()
  3. {
  4.         TMOD=0x20;
  5.         TH1=0xfd;
  6.         TL1=0xfd;
  7.         SM0=0;
  8.         SM1=1;
  9.         REN=1;
  10.         ES=1;
  11.         EA=1;
  12.         TR1=1;
  13. }
  14. void main()
  15. {
  16.         unsigned int z;
  17.         usart_init();
  18.         while(1)
  19.         {
  20.                 //z=0xff;//延時(shí)初值
  21.                 ES=0;
  22.                 TI=0;
  23.                 SBUF='a';
  24.                 while(!TI);
  25.                 TI=0;
  26.                 SBUF='b';
  27.                 while(!TI);
  28.                         TI=0;
  29.                 SBUF='c';
  30.                 while(!TI);
  31.                         TI=0;
  32.                 SBUF='d';
  33.                 while(!TI);
  34.                         TI=0;
  35.                 SBUF='e';
  36.                 while(!TI);
  37.                         TI=0;
  38.                 SBUF='g';
  39.                 while(!TI);
  40.                         TI=0;
  41.                 SBUF='h';
  42.                 while(!TI);
  43.                 TI=0;
  44.         //        SBUF='\n'; //加結(jié)束符,正常顯示
  45.         //        while(!TI);
  46.         //        TI=0;
  47.                 ES=1;
  48. //        while(z--);//加延時(shí),顯示正常。
  49.         }
  50. }
復(fù)制代碼






作者: lkc8210    時(shí)間: 2022-1-28 10:44
代碼1沒問題啊~




作者: TEC    時(shí)間: 2022-1-28 13:42
lkc8210 發(fā)表于 2022-1-28 10:44
代碼1沒問題啊~

哦,謝謝。我又試了一下,在其中一塊單片機(jī)上有問題,這塊單片機(jī)燒完程序后提示芯片可能是翻新的。在另外89C52RC、89C52上測試是好的。
作者: 188610329    時(shí)間: 2022-1-28 19:38
STC89C52RC, 用40MHz 晶振,單片機(jī)設(shè)置為6T模式,串口設(shè)置 SCON = 0x90; (模式2)  加上 PCON里面設(shè)置串口速率倍頻,最終串口速率達(dá)到 2.5MHz  連續(xù)發(fā)送信息到電腦,無任何亂碼。(用的還是杜邦線)

所以,你這問題,最大的可能,要么波特率計(jì)算錯(cuò)誤,要么電腦端串口助手有問題,要么就是硬件問題。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1