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

標題: 我的單片機串口通信,目的是發送什么就接受什么,程序總是出現問題 [打印本頁]

作者: yeyuemyl    時間: 2022-2-27 16:00
標題: 我的單片機串口通信,目的是發送什么就接受什么,程序總是出現問題
  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;                        //設置波特率=((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;                                        //中斷總開關
  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. }
復制代碼
接收和發送內容不對等,如圖

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

2022-02-28_080828.png

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

2022-02-28_080723.png

作者: glinfei    時間: 2022-2-27 16:00
你沒弄清楚51 串口中斷要求,你收發都寫到一起了,造成中斷嵌套了。1、無論收發都會進中斷;2、發一般寫到主程序,包括TI清零;3、額外提醒,中斷中對RI要先判斷啊,否則發信觸發中斷也讀一遍成什么了。
作者: TEC    時間: 2022-2-27 16:44
出現的是什么問題? 一般是先把串口配置好之后,SM0=0;SM1=1;再REN=1;,允許串口接收。
作者: yeyuemyl    時間: 2022-2-28 08:12
TEC 發表于 2022-2-27 16:44
出現的是什么問題? 一般是先把串口配置好之后,SM0=0;SM1=1;再REN=1;,允許串口接收。

圖片發了,有沒有可能是編碼問題?我用的Keil
作者: 人工置頂員    時間: 2022-2-28 15:53
頂一下
作者: 1517347243    時間: 2022-2-28 16:27
先配置好串口

作者: hcfat51h    時間: 2022-2-28 17:10
中斷要判定是接收中斷還是發送中斷
作者: tongtianta    時間: 2022-3-3 11:10
不要發送123,用兩位數試一下,例如發送12,看返回什么
作者: dazhige    時間: 2022-3-3 11:28
  1. #include <reg51.h>
  2. /**************************************************
  3. 接收數據中斷服務子函數
  4. ***************************************************/
  5. void RXD_CHAR() interrupt 4
  6. {
  7.     unsigned char RXD_data;
  8.     if(RI==1) {                                //判斷串行接收中斷
  9.         RXD_data = SBUF;        //讀取數據
  10.         P0 = RXD_data;                 //顯示所讀取的數據
  11.         RI = 0;                                //接收完畢,清中斷標志
  12.     }                               
  13. }
  14. void main()
  15. {
  16.     TMOD = 0x20;                //將定時器1作為比特率的產生器
  17.     TH1  = 0xFD;                //比特率設置為9600bit/s
  18.     SCON = 0x50;                //串行工作模式為1,允許接收01010000                                  
  19.     EA = 1;                                //開總中斷
  20.     ES = 1;                                //開串行中斷
  21.     TR1 = 1;                        //啟動定時器1
  22.    
  23.         while(1) {
  24.         ;        
  25.     }
  26. }
復制代碼


僅供參考




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