欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1550|回復: 5
收起左側

單片機串口發送丟字符 附源程序

[復制鏈接]
ID:970163 發表于 2022-3-17 16:12 來自觸屏版 | 顯示全部樓層 |閱讀模式
51單片機,使用printf函數發送數據時,需要重寫putchar函數
char putchar(char c)
{
   SBUF=c;
   while(bTI==0);
   bTI=0;
   return c;
}
bTI是位變量,在觸發串口發送中斷后軟件清零。
調試發現,發送換行符\n時,只能收到n,而收不到\
什么原因,怎么解決呢?望指教,感謝!
回復

使用道具 舉報

ID:935919 發表于 2022-3-17 17:00 | 顯示全部樓層
把bTI換成 發送緩存區變空 標志位 看看, 不要用發送完成標志位
回復

使用道具 舉報

ID:935919 發表于 2022-3-17 17:02 | 顯示全部樓層
把bTI換成 "發送緩沖區變空" 標志位看看(此標志位不需要軟件清0), 不要用發送完成標志位.
回復

使用道具 舉報

ID:161164 發表于 2022-3-17 17:44 | 顯示全部樓層
試試改一下位置
char putchar(char c)
{
   while(bTI==0);
   bTI=0;
   SBUF=c;
   return c;
}
回復

使用道具 舉報

ID:401564 發表于 2022-3-18 10:37 | 顯示全部樓層
個人認為,要重寫庫函數,還不是和自己再寫一個重新寫一個函數是一樣的,所以,我用串口都是自己寫的,不用printf函數的,這樣自己也能加深對串口的理解和學習
以下是我現在用的串口發送函數,可以直接發送字符串Send_Out_txt("\n")         
//─────────────────────────────────────────────────────────────────────────────────────────────
void Send_Out_COM(unsigned char COM)        //發送一個字節數據
{
        while(busy);                                                //等待上次發送完成,Busy在串口2完成發送后清除       
        busy=1;
        SBUF=COM;       
}
//─────────────────────────────────────────────────────────────────────────────────────────────
void Send_Out_txt(char *p)                                 //發送TXT文本
{
   int a=0;
   while(p[a]!='\0')
                   {
                   Send_Out_COM(p[a]);
                   a++;
                   }
}
//─────────────────────────────────────────────────────────────────────────────────────────────

回復

使用道具 舉報

ID:298123 發表于 2022-3-18 17:58 | 顯示全部樓層
邏輯錯誤; 發送前把bTI置1,等待bTI變成0
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表