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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4036|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜影院在线观看免费 | 国产原创在线观看 | jlzzjlzz欧美大全 | 在线播放国产一区二区三区 | www.天天操 | 久久精品网 | 欧美一级久久精品 | 亚洲国产成人久久久 | 国产一级免费视频 | www.久久 | 色婷婷一区二区三区四区 | 91精品国产91久久久久久吃药 | 久久av网| 中文字幕在线免费观看 | 中文字幕成人免费视频 | 一区二区免费 | 欧美日韩高清 | 激情五月婷婷综合 | 欧美日韩一区精品 | 超碰电影 | 精品一区久久 | 久草网址| 成人精品在线观看 | 亚洲欧洲精品成人久久奇米网 | 懂色av色香蕉一区二区蜜桃 | h片在线播放 | 蜜桃特黄a∨片免费观看 | 男女羞羞视频网站 | 欧美日韩亚洲一区 | 麻豆久久久久 | 欧美国产一区二区 | 日本久久久影视 | 日韩一区不卡 | 欧美色图另类 | 欧美一区在线视频 | 成人黄色在线 | 中文字幕一区二区三区不卡在线 | 国产伦精品 | 亚洲天堂影院 | 国产精品欧美一区二区三区 | 国产精品日韩一区 |