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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3899|回復: 8
收起左側

單片機通訊中斷接收程序 求解釋和流程圖

[復制鏈接]
回帖獎勵 20 黑幣 回復本帖可獲得 20 黑幣獎勵! 每人限 1 次
ID:294461 發表于 2019-4-8 19:21 | 顯示全部樓層 |閱讀模式
  1. //  通訊中斷接收程序   
  2.   void uart_rx(void)  interrupt 4        using 3         
  3. {

  4.            unsigned char i;
  5.         unsigned char flag;
  6.         unsigned char dat;
  7.     if(RI)                         //是否接收中斷
  8.     {

  9.            RI=0;
  10.        dat=SBUF;
  11.        if(dat==':'&&(i==0)) //接收數據第一幀
  12.        {
  13.             buff[i]=dat;
  14.             flag=1;        //開始接收數據
  15.        }
  16.        else
  17.             if(flag==1)
  18.               {
  19.                       i++;
  20.                       buff[i-1]=dat;
  21.                       if(i>=2)
  22.                   {
  23.                            i=0;
  24.                            flag=0;
  25.                            flag_REC=1 ;
  26.                            switch (buff[0])
  27.                            {
  28.                                  case 'C':
  29.                                  switch (buff[1])
  30.                                  {
  31.                                   case '1': LED_3_S=1;break;
  32.                                   case  '3': LED_3_S=0;break;

  33.                                  }        break;

  34.                                  case 'D':
  35.                                  switch (buff[1])
  36.                                  {
  37.                                   case '1': LED_4_S=1;break;
  38.                                   case  '3': LED_4_S=0;break;

  39.                                  }        break;
  40.                            }
  41.                       }  // 停止接收
  42.               }
  43.          }

  44. }
復制代碼
回復

使用道具 舉報

ID:507279 發表于 2019-4-8 20:00 | 顯示全部樓層
前面  dat=SBUF;直接賦值了,后面if語句里面的判斷不就沒有起到作用,就一直是無法用的,直接跳轉else,不就錯了。。。嗯。我也不是很懂,只是覺得這個地方錯了。
回復

使用道具 舉報

ID:213173 發表于 2019-4-8 22:59 | 顯示全部樓層
這個串口中斷函數有諸多錯誤,根本不可能正常工作。
回復

使用道具 舉報

ID:294461 發表于 2019-4-9 09:34 | 顯示全部樓層
wulin 發表于 2019-4-8 22:59
這個串口中斷函數有諸多錯誤,根本不可能正常工作。

求大佬幫我改一下錯誤

回復

使用道具 舉報

ID:158375 發表于 2019-4-9 13:14 | 顯示全部樓層
先從簡單的開始吧;
你是想一口吃成胖子嗎?
回復

使用道具 舉報

ID:213173 發表于 2019-4-9 13:31 | 顯示全部樓層
123741 發表于 2019-4-9 09:34
求大佬幫我改一下錯誤

按你的意圖寫了串口通訊程序
無標題.jpg


  1. #include <reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit LED_3_S=P1^6;
  5. sbit LED_4_S=P1^7;
  6. bit flag=0;
  7. uchar buff[]={0,0,0};                        //緩存
  8. /*************初始化串口**************/
  9. void InitUART()                //9600bps@11.0592MHz
  10. {
  11.         PCON &= 0x7F;                //波特率不倍速
  12.         SCON = 0x50;                //8位數據,可變波特率
  13.         TMOD= 0x20;                        //設定定時器1為8位自動重裝方式
  14.         TL1 = 0xFD;                        //設定定時初值
  15.         TH1 = 0xFD;                        //設定定時器重裝值
  16.         ET1 = 0;                        //禁止定時器1中斷
  17.         TR1 = 1;                        //啟動定時器1
  18.         EA = 1;                                //開總中斷
  19.         ES = 1;                                //開串口中斷
  20. }
  21. /**********串口發送函數*************/
  22. void SendOneByte(uchar c)
  23. {
  24.     SBUF = c;                        //發送數據
  25.     while(!TI);                        //等待發送完成
  26.     TI = 0;                                //發送中斷請求標志位清0
  27. }
  28. /**************主程序**************/
  29. void main()
  30. {
  31.         uchar i;
  32.         InitUART();                                //初始化串口
  33.         while(1)
  34.         {
  35.                 if(flag==1)                        //3字節數據串接收完成
  36.                 {
  37.                         ES=0;                        //關串口中斷
  38.                         flag=0;                        //接收完成標志清0
  39.                         for(i=0;i<3;i++)
  40.                                 SendOneByte(buff[i]);//返回收到的數據
  41.                         ES=1;                        //開串口中斷
  42.                         if(buff[1]=='C')
  43.                         {
  44.                                 switch (buff[2])
  45.                                 {
  46.                                         case '1': LED_3_S=1;break;
  47.                                         case '3': LED_3_S=0;break;
  48.                                 }
  49.                         }
  50.                         if(buff[1]=='D')
  51.                         {
  52.                                 switch (buff[2])
  53.                                 {
  54.                                         case '1': LED_4_S=1;break;
  55.                                         case '3': LED_4_S=0;break;
  56.                                 }
  57.                         }
  58.                         for(i=0;i<3;i++)
  59.                                 buff[i]=0;        //清空緩存
  60.                 }
  61.         }
  62. }
  63. /*****通訊中斷接收程序**********/   
  64. void uart_rx() interrupt 4         
  65. {       
  66.         static uchar  i=0;       
  67.         RI=0;
  68.         buff[i]=SBUF;
  69.         if(buff[0]==':')        //驗證數據頭,否則重新接收覆蓋
  70.         {
  71.                 i++;               
  72.                 if(i==3)
  73.                 {
  74.                         flag=1;                 //接收完成標志置1
  75.                         i=0;
  76.                 }
  77.         }
  78. }
復制代碼



回復

使用道具 舉報

ID:192847 發表于 2019-8-1 15:26 | 顯示全部樓層
我最近也在弄串口,覺得自己好多不會啊
回復

使用道具 舉報

ID:542954 發表于 2019-8-8 10:29 | 顯示全部樓層
值得學習
回復

使用道具 舉報

ID:597613 發表于 2019-8-8 11:29 | 顯示全部樓層
好多錯誤
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级做a爰片性色毛片16美国 | 日韩精品无码一区二区三区 | 国产精品美女一区二区 | 免费午夜视频 | 一本色道久久综合亚洲精品高清 | 国产香蕉视频 | 久久这里只有 | 日韩欧美在线不卡 | 久久综合久久综合久久综合 | 久久精品色视频 | 欧美成人a∨高清免费观看 老司机午夜性大片 | 亚洲成人一区 | 超碰免费在 | 亚洲码欧美码一区二区三区 | www.久久久久久久久 | 日韩视频在线免费观看 | 爱爱视频日本 | 精品久久久一区 | 青草久久免费视频 | 国产精品成人久久久久 | 久久一级免费视频 | 日韩不卡在线 | 欧美9999 | 亚洲国产精品久久久 | 99亚洲精品视频 | 色秀网站| 粉嫩一区二区三区性色av | 五月天国产| 91在线免费观看 | 日本中文字幕在线视频 | 天天射天天干 | 日韩欧美在线不卡 | 亚洲国产精品一区二区久久 | 成人18亚洲xxoo| 国产视频一区二区 | 精品国产一区二区三区久久久四川 | 婷婷开心激情综合五月天 | 亚洲日韩中文字幕一区 | 久精品久久 | 超碰在线免费av | 在线国产一区二区 |