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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1270|回復(fù): 3
收起左側(cè)

STC15W204S單片機(jī)串口程序哪里有問(wèn)題?無(wú)論發(fā)送什么,都只是返回 沒(méi)有接收數(shù)據(jù)

[復(fù)制鏈接]
ID:269211 發(fā)表于 2023-11-25 00:53 | 顯示全部樓層 |閱讀模式
如上代碼,發(fā)送A03_Ligt01Off_#沒(méi)反應(yīng),無(wú)論發(fā)送什么,都只是返回“沒(méi)有接收數(shù)據(jù)!”。請(qǐng)問(wèn)代碼是哪里出錯(cuò)了?

  1. #include "stc15.h"
  2. #include"periphs.h"
  3. #include"typedefs.h"

  4. uchar BYTE;
  5. uint  WORD;
  6. char RecvString_buf[16];            //定義數(shù)據(jù)包長(zhǎng)度為15個(gè)字符
  7. #define datapackage_headflag 'A'        //用于串口通信時(shí),定義數(shù)據(jù)包頭部的驗(yàn)證標(biāo)記

  8.         
  9. #define FOSC 11059200L          //系統(tǒng)頻率
  10. #define BAUD 9600               //串口波特率

  11. void UartInit(void)                //9600bps@11.0592MHz
  12. {
  13.         SCON = 0x50;                //8位可變波特率 串口工作模式1
  14.         T2L = (65536 - (FOSC/4/BAUD));   //設(shè)置波特率重裝值
  15.         T2H = (65536 - (FOSC/4/BAUD))>>8;
  16.         AUXR = 0x14;                //T2為1T模式, 并啟動(dòng)定時(shí)器2
  17.     AUXR |= 0x01;               //選擇定時(shí)器2為串口1的波特率發(fā)生器
  18.         ES = 1;                     //使能串口1中斷
  19.         EA = 1;
  20. }
  21. /*----------------------------
  22. 發(fā)送串口數(shù)據(jù)
  23. ----------------------------*/
  24. void SendData(uchar dat)
  25. {
  26.         SBUF = dat;
  27.         while(TI == 0);
  28.         TI = 0;
  29. }

  30. /*----------------------------
  31. 發(fā)送字符串
  32. ----------------------------*/
  33. void SendString(char *s)
  34. {
  35.     while (*s)                  //檢測(cè)字符串結(jié)束標(biāo)志
  36.     {
  37.         SendData(*s++);         //發(fā)送當(dāng)前字符
  38.     }
  39. }
  40. //串口接收函數(shù)
  41. __bit ReceiveString()
  42. {
  43.     char * RecStr=RecvString_buf;
  44.     char num=0;
  45.     unsigned char count=0;
  46.     loop:
  47.     *RecStr=SBUF;
  48.     count=0;
  49.     RI=0;
  50.     if(num<14)  //數(shù)據(jù)包長(zhǎng)度為15個(gè)字符,嘗試連續(xù)接收15個(gè)字符
  51.     {
  52.         num++;
  53.         RecStr++;
  54.         while(!RI)
  55.         {
  56.             count++;
  57.             if(count>130)return 0;    //接收數(shù)據(jù)等待延遲,等待時(shí)間太久會(huì)導(dǎo)致CPU運(yùn)算閑置,太短會(huì)出現(xiàn)"數(shù)據(jù)包被分割",默認(rèn)count=130
  58.         }
  59.         goto loop;
  60.     }
  61.     return 1;
  62. }
  63. __bit Deal_UART_RecData()   //處理串口接收數(shù)據(jù)包函數(shù)(成功處理數(shù)據(jù)包則返回1,否則返回0)
  64. {
  65.         if(RecvString_buf[0]==datapackage_headflag&&RecvString_buf[14]=='#')
  66.         {
  67.         if(RecvString_buf[1]=='0')
  68.                 {
  69.                         LED=1;
  70.                         SendString("發(fā)送成功!\r\n");
  71.                 }
  72.                 else
  73.                 {
  74.                         LED=0;
  75.                         SendString("發(fā)送失敗!\r\n");
  76.                 }
  77.         }
  78.         return 0;
  79. }

  80. /*----------------------------
  81. UART 中斷服務(wù)程序
  82. -----------------------------*/
  83. void Uart() __interrupt(4)
  84. {        
  85.         if(ReceiveString())
  86.     {
  87.         //數(shù)據(jù)包長(zhǎng)度正確則執(zhí)行以下代碼
  88.         Deal_UART_RecData();
  89.     }
  90.     else
  91.     {
  92.         //數(shù)據(jù)包長(zhǎng)度錯(cuò)誤則執(zhí)行以下代碼
  93.         //LED=!LED;
  94.                 SendString("沒(méi)有接收數(shù)據(jù)!\r\n");
  95.     }
  96.     RI=0;  //接收并處理一次數(shù)據(jù)后把接收中斷標(biāo)志清除一下,拒絕響應(yīng)在中斷接收忙的時(shí)候發(fā)來(lái)的請(qǐng)求
  97. }

  98. /***************************
  99.         主函數(shù)
  100. ***************************/
  101. void main()
  102. {        
  103.         EA=1;
  104.         UartInit();
  105.         while(1);
  106. }
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

ID:65956 發(fā)表于 2023-11-25 09:19 | 顯示全部樓層
你的中斷處理程序不對(duì),比如那個(gè)num這個(gè)變量,你無(wú)論怎么運(yùn)行它都是0,建議你修改中斷處理程序,中斷里只負(fù)責(zé)接收存入緩存,當(dāng)接收完一幀數(shù)據(jù)后再利用起時(shí)機(jī)制在主程序中判斷接收的數(shù)據(jù)是否你想要的

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:1034262 發(fā)表于 2023-11-25 21:31 | 顯示全部樓層
可以參考測(cè)試STC官方的例程,串口1使用定時(shí)器2的程序,STC-ISP里的范例程序就有,可以直接下載HEX文件測(cè)試。
回復(fù)

使用道具 舉報(bào)

ID:1012735 發(fā)表于 2023-11-27 17:30 | 顯示全部樓層
while(!RI) 里加個(gè)Delay()試試
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 免费在线观看毛片 | 中文字幕av在线播放 | 亚洲三区视频 | 欧区一欧区二欧区三免费 | 久久久久久久久久久爱 | 69热视频在线观看 | 91精品国产综合久久久久久蜜臀 | 天天影视亚洲综合网 | 四虎在线观看 | 欧美精品欧美精品系列 | 亚洲午夜在线 | 最新av中文字幕 | 天天爱天天操 | 久操av在线 | 五月婷婷丁香 | 亚洲 中文 欧美 日韩 在线观看 | 久久精品视频免费观看 | 午夜视频免费在线观看 | 黄色一级毛片 | 精品国产乱码久久久久久蜜退臀 | 在线视频91 | 色久伊人| 中文字幕在线一区二区三区 | 91在线第一页 | 日韩激情视频一区 | 性欧美hd| 狠狠涩| 国产欧美日韩在线观看 | 亚洲精品一区二区三区四区高清 | 日韩一区二区三区精品 | 一区二区三区在线观看免费视频 | 在线观看www高清视频 | 日韩精品一区二 | av中文天堂 | 热久久性 | 欧美h| 国产高清精品一区二区三区 | 午夜影院在线观看视频 | 日韩理论电影在线观看 | 美女网站视频免费黄 | 精品国产乱码久久久久久闺蜜 |