找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3257|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

我的單片機(jī)串口通信,目的是發(fā)送什么就接受什么,程序總是出現(xiàn)問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
50黑幣
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4.         

  5. void main()
  6. {
  7.         TMOD=0x20;                //選擇定時器1工作方式2-8位自動重裝
  8.         TH1=0xe8;
  9.         TL1=0xe8;                        //設(shè)置波特率=((2^smod)* F)/(32*12*(256-N)=9600                //smod=0
  10.         REN=1;
  11.         SM0=0;                                //選擇串口通信模式1
  12.         SM1=1;
  13.         TR1=1;                                //定時器1開啟
  14.         EA=1;                                        //中斷總開關(guān)
  15.         ES=1;                                        //串行中斷允許位
  16.         while(1);
  17. }        

  18. void inter()interrupt 4
  19. {
  20.                 uchar s;
  21.                 RI=0;                //接收
  22.                 s=SBUF;
  23.                 RI=0;
  24.                 SBUF=s;
  25.                 while(!TI);
  26.                 TI=0;
  27. }
復(fù)制代碼
接收和發(fā)送內(nèi)容不對等,如圖

2022-02-28_080828.png (35.9 KB, 下載次數(shù): 87)

2022-02-28_080828.png

2022-02-28_080723.png (33.49 KB, 下載次數(shù): 85)

2022-02-28_080723.png

最佳答案

查看完整內(nèi)容

你沒弄清楚51 串口中斷要求,你收發(fā)都寫到一起了,造成中斷嵌套了。1、無論收發(fā)都會進(jìn)中斷;2、發(fā)一般寫到主程序,包括TI清零;3、額外提醒,中斷中對RI要先判斷啊,否則發(fā)信觸發(fā)中斷也讀一遍成什么了。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:844772 發(fā)表于 2022-2-27 16:00 | 只看該作者
你沒弄清楚51 串口中斷要求,你收發(fā)都寫到一起了,造成中斷嵌套了。1、無論收發(fā)都會進(jìn)中斷;2、發(fā)一般寫到主程序,包括TI清零;3、額外提醒,中斷中對RI要先判斷啊,否則發(fā)信觸發(fā)中斷也讀一遍成什么了。
回復(fù)

使用道具 舉報

板凳
ID:625730 發(fā)表于 2022-2-27 16:44 | 只看該作者
出現(xiàn)的是什么問題? 一般是先把串口配置好之后,SM0=0;SM1=1;再REN=1;,允許串口接收。
回復(fù)

使用道具 舉報

地板
ID:997450 發(fā)表于 2022-2-28 08:12 | 只看該作者
TEC 發(fā)表于 2022-2-27 16:44
出現(xiàn)的是什么問題? 一般是先把串口配置好之后,SM0=0;SM1=1;再REN=1;,允許串口接收。

圖片發(fā)了,有沒有可能是編碼問題?我用的Keil
回復(fù)

使用道具 舉報

5#
ID:301191 發(fā)表于 2022-2-28 15:53 | 只看該作者
頂一下
回復(fù)

使用道具 舉報

6#
ID:1007106 發(fā)表于 2022-2-28 16:27 | 只看該作者
先配置好串口
回復(fù)

使用道具 舉報

7#
ID:466505 發(fā)表于 2022-2-28 17:10 | 只看該作者
中斷要判定是接收中斷還是發(fā)送中斷
回復(fù)

使用道具 舉報

8#
ID:143186 發(fā)表于 2022-3-3 11:10 | 只看該作者
不要發(fā)送123,用兩位數(shù)試一下,例如發(fā)送12,看返回什么
回復(fù)

使用道具 舉報

9#
ID:514254 發(fā)表于 2022-3-3 11:28 | 只看該作者
  1. #include <reg51.h>
  2. /**************************************************
  3. 接收數(shù)據(jù)中斷服務(wù)子函數(shù)
  4. ***************************************************/
  5. void RXD_CHAR() interrupt 4
  6. {
  7.     unsigned char RXD_data;
  8.     if(RI==1) {                                //判斷串行接收中斷
  9.         RXD_data = SBUF;        //讀取數(shù)據(jù)
  10.         P0 = RXD_data;                 //顯示所讀取的數(shù)據(jù)
  11.         RI = 0;                                //接收完畢,清中斷標(biāo)志
  12.     }                               
  13. }
  14. void main()
  15. {
  16.     TMOD = 0x20;                //將定時器1作為比特率的產(chǎn)生器
  17.     TH1  = 0xFD;                //比特率設(shè)置為9600bit/s
  18.     SCON = 0x50;                //串行工作模式為1,允許接收01010000                                  
  19.     EA = 1;                                //開總中斷
  20.     ES = 1;                                //開串行中斷
  21.     TR1 = 1;                        //啟動定時器1
  22.    
  23.         while(1) {
  24.         ;        
  25.     }
  26. }
復(fù)制代碼


僅供參考
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表