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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4237|回復: 15
收起左側

stc8a8串口接收不穩定怎么辦?丟字節 求助大佬

[復制鏈接]
ID:370473 發表于 2020-5-31 13:55 | 顯示全部樓層 |閱讀模式
stc8a8k64a4s12 接收丟字 求助

main
#include "h.h"


extern char rrec[50];
extern count;



unsigned char Data_compare(unsigned char *p)
{
    if(strstr(rrec,p)!=NULL)
            return 1;
         else
                  return 0;
}

void main(){
        
init();
uartinit();        
        
lcddisplay(2,0,"hello uart test ");
lcddisplay(1,0,"STC 8A8K64S4A12 ");
        

while(1){
        
if(Data_compare("AT")==1){Uart1SendStr("ok\n",strlen("ok\n")); lcd1602clean(' ');}
else
memset(rrec, 0, 50);count=0;
lcddisplay(1,0,rrec);
delay_us(2);

if(P53==0)
{lcd1602clean(' ');Uart1SendStr("cl\n",strlen("cl\n"));}


}
        
}


uart

#include "uart.h"

char rrec[lenth];
int count=0;


void uartinit()//1000000bps
{
        

        SCON = 0x50;                //8???,?????
        AUXR |= 0x40;                //???1???Fosc,?1T
        AUXR &= 0xFE;                //??1?????1???????
        TMOD &= 0x0F;                //?????1?16???????
        TL1 = 0xFA;                //??????
        TH1 = 0xFF;                //??????
        ET1 = 0;                //?????1??
        TR1 = 1;                //?????1
  ES  = 1;   
  EA  = 1;         
}  


void uart()interrupt 4
{ uartrec();}
        

void uartrec(){
unsigned char rec;        
        if(RI){RI=0;
        rec=SBUF;
        rrec[count] = SBUF;
                count++;
        if(count>lenth) count = 0;
        }
}
        


void uartsend(unsigned char dat)
{
        if(TI){TI=0;}
        SBUF=dat;
        while(!TI);
        TI=0;
}


void Uart1SendStr(unsigned char *str ,unsigned char len)
{
        while(len--)
        {
                uartsend(*str);
                str++;
        }
}

uart+1602.rar

66.68 KB, 下載次數: 6

回復

使用道具 舉報

ID:370473 發表于 2020-5-31 14:06 | 顯示全部樓層
void UartInit(void)                //1000000bps@24.000MHz {         SCON = 0x50;                //8位數據,可變波特率         AUXR |= 0x40;                //定時器1時鐘為Fosc,即1T         AUXR &= 0xFE;                //串口1選擇定時器1為波特率發生器         TMOD &= 0x0F;                //設定定時器1為16位自動重裝方式         TL1 = 0xFA;                //設定定時初值         TH1 = 0xFF;                //設定定時初值         ET1 = 0;                //禁止定時器1中斷         TR1 = 1;                //啟動定時器1 }
回復

使用道具 舉報

ID:370473 發表于 2020-5-31 14:06 | 顯示全部樓層
#include "h.h"   extern char rrec[50]; extern count;    unsigned char Data_compare(unsigned char *p) {      if(strstr(rrec,p)!=NULL)             return 1;          else                   return 0; }  void main(){          init(); uartinit();                  lcddisplay(2,0,"hello uart test "); lcddisplay(1,0,"STC 8A8K64S4A12 ");           while(1){          if(Data_compare("AT")==1){Uart1SendStr("ok\n",strlen("ok\n")); lcd1602clean(' ');}  else memset(rrec, 0, 50);count=0; lcddisplay(1,0,rrec); delay_us(2);    if(P53==0)  {lcd1602clean(' ');Uart1SendStr("cl\n",strlen("cl\n"));}   }          }
回復

使用道具 舉報

ID:299519 發表于 2020-5-31 15:15 | 顯示全部樓層
我覺得8a的串口不如15w的好使。
回復

使用道具 舉報

ID:155507 發表于 2020-5-31 18:49 | 顯示全部樓層
你的串口是否支持這么高波特率,然后用示波器或者邏輯分析儀抓一下波形,看看時序是否出錯,可能是波特率過高,誤差超過允許范圍所以亂碼
回復

使用道具 舉報

ID:370473 發表于 2020-5-31 20:25 | 顯示全部樓層
myemcu 發表于 2020-5-31 15:15
我覺得8a的串口不如15w的好使。

發現15基本沒有這個問題
回復

使用道具 舉報

ID:370473 發表于 2020-6-1 22:32 來自手機 | 顯示全部樓層
angmall 發表于 2020-5-31 18:49
你的串口是否支持這么高波特率,然后用示波器或者邏輯分析儀抓一下波形,看看時序是否出錯,可能是波特率過 ...

兩周前同樣代碼可以完美接收
兩周后同樣代碼就不行了
不知到為啥會這樣
回復

使用道具 舉報

ID:370473 發表于 2020-6-1 22:34 來自手機 | 顯示全部樓層
angmall 發表于 2020-5-31 18:49
你的串口是否支持這么高波特率,然后用示波器或者邏輯分析儀抓一下波形,看看時序是否出錯,可能是波特率過 ...

發的對收不對
回復

使用道具 舉報

ID:370473 發表于 2020-6-1 22:37 來自手機 | 顯示全部樓層
angmall 發表于 2020-5-31 18:49
你的串口是否支持這么高波特率,然后用示波器或者邏輯分析儀抓一下波形,看看時序是否出錯,可能是波特率過 ...

店家的hex燒錄了也一樣的效果
回復

使用道具 舉報

ID:370473 發表于 2020-6-2 00:14 | 顯示全部樓層
#include"h.h"


extern char rrec[lenth];
extern count;



unsigned char Data_compare(unsigned char *p)
{
    if(strstr(rrec,p)!=NULL)
            return 1;
         else
                  return 0;
}

void main(){
        int a=0;
        init();
uartinit();
       
lcddisplay(2,0,"hello uart test ");
lcddisplay(1,0,"hello uart test ");
while(1){
       
if(Data_compare("cl\n")==1){Uart1SendStr("all right!\n",strlen("all right!\n")); lcd1602clean(' ');}
        Uart1SendStr(rrec,strlen(rrec));
  memset(rrec, 0, 50);count=0;
         for(a=60000;a;a--);
  lcddisplay(1,0,rrec);
  if(P32==0)
{lcd1602clean(' ');Uart1SendStr("cl\n",strlen("cl\n"));}


}
       
}

//一臉懵逼這是舊主函數 其他庫沒變
//突然就好了
回復

使用道具 舉報

ID:370473 發表于 2020-6-2 00:29 | 顯示全部樓層
問題發現 我去掉了這個延時for(a=60000;a;a--);
并且 后來加上的延時不合要求
回復

使用道具 舉報

ID:383721 發表于 2020-6-2 08:50 | 顯示全部樓層
降低波特率試試看,換個定時器做波特率發生器試試看
回復

使用道具 舉報

ID:1046027 發表于 2022-9-27 15:18 | 顯示全部樓層
myemcu 發表于 2020-5-31 15:15
我覺得8a的串口不如15w的好使。

我發現8系列的串口有問題
回復

使用道具 舉報

ID:1034262 發表于 2022-9-28 11:57 | 顯示全部樓層
STC8系列速度更快,按理應該更好用的。丟數據基本都是應用的問題,可以使用STC官方的例程測試100萬個字節看看,一個也不會錯才算通過。我用過STC8的幾乎所有型號做產品,都很穩定。特備是4串口的做工控很方便。
回復

使用道具 舉報

ID:106977 發表于 2022-9-28 12:49 | 顯示全部樓層
芯片很穩定,問題在自己!
回復

使用道具 舉報

ID:624769 發表于 2022-9-28 13:29 | 顯示全部樓層
在一個有收有發的  程序里, 串口中斷里 只開了接收,沒有開發送,不丟字是僥幸,丟字才是必然。

說的白話一點, 一個半雙工通訊系統中,你不設計一個 如何在發送時 對端設備絕對不會發送的流程的話,丟字是必然的。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美黑人一区二区三区 | 国产精品久久久久久52avav | 欧美精品一区二区免费 | 久久久久久久一区 | 国产欧美在线一区二区 | 欧美精品在线免费观看 | 国产精品久久久久国产a级 欧美日本韩国一区二区 | 国产美女精品视频免费观看 | 7777在线 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 在线观看三级av | 精品国产乱码久久久久久中文 | 日韩一级精品视频在线观看 | 亚洲一区 | 黄色一级毛片免费看 | 成人在线不卡 | 91亚洲国产精品 | 亚洲欧美高清 | 国产免费麻豆视频 | 亚洲三区在线 | 亚洲欧美激情四射 | 久久999| 九九九久久国产免费 | 欧美专区在线 | 久久网国产 | 99精品国产一区二区青青牛奶 | 国产成人在线免费 | 亚洲天堂一区 | 亚洲精品视频观看 | 91精品国产乱码久久久久久久久 | 99久久婷婷国产综合精品 | 久久久噜噜噜久久中文字幕色伊伊 | 欧美性猛片aaaaaaa做受 | 久久99精品久久久久久青青日本 | 欧美色偷拍 | 国产伦精品一区二区三区四区视频 | 青青草这里只有精品 | 国产国产精品久久久久 | 中文字幕在线中文 | 久久伊人精品 | 亚洲vs天堂 |