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

QQ登錄

只需一步,快速開始

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

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

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 20 黑幣 回復(fù)本帖可獲得 20 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
ID:294461 發(fā)表于 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)) //接收數(shù)據(jù)第一幀
  12.        {
  13.             buff[i]=dat;
  14.             flag=1;        //開始接收數(shù)據(jù)
  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. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

求大佬幫我改一下錯(cuò)誤

回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

按你的意圖寫了串口通訊程序
無標(biāo)題.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位數(shù)據(jù),可變波特率
  13.         TMOD= 0x20;                        //設(shè)定定時(shí)器1為8位自動(dòng)重裝方式
  14.         TL1 = 0xFD;                        //設(shè)定定時(shí)初值
  15.         TH1 = 0xFD;                        //設(shè)定定時(shí)器重裝值
  16.         ET1 = 0;                        //禁止定時(shí)器1中斷
  17.         TR1 = 1;                        //啟動(dòng)定時(shí)器1
  18.         EA = 1;                                //開總中斷
  19.         ES = 1;                                //開串口中斷
  20. }
  21. /**********串口發(fā)送函數(shù)*************/
  22. void SendOneByte(uchar c)
  23. {
  24.     SBUF = c;                        //發(fā)送數(shù)據(jù)
  25.     while(!TI);                        //等待發(fā)送完成
  26.     TI = 0;                                //發(fā)送中斷請(qǐng)求標(biāo)志位清0
  27. }
  28. /**************主程序**************/
  29. void main()
  30. {
  31.         uchar i;
  32.         InitUART();                                //初始化串口
  33.         while(1)
  34.         {
  35.                 if(flag==1)                        //3字節(jié)數(shù)據(jù)串接收完成
  36.                 {
  37.                         ES=0;                        //關(guān)串口中斷
  38.                         flag=0;                        //接收完成標(biāo)志清0
  39.                         for(i=0;i<3;i++)
  40.                                 SendOneByte(buff[i]);//返回收到的數(shù)據(jù)
  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]==':')        //驗(yàn)證數(shù)據(jù)頭,否則重新接收覆蓋
  70.         {
  71.                 i++;               
  72.                 if(i==3)
  73.                 {
  74.                         flag=1;                 //接收完成標(biāo)志置1
  75.                         i=0;
  76.                 }
  77.         }
  78. }
復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:542954 發(fā)表于 2019-8-8 10:29 | 顯示全部樓層
值得學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:597613 發(fā)表于 2019-8-8 11:29 | 顯示全部樓層
好多錯(cuò)誤
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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