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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2598|回復: 10
打印 上一主題 下一主題
收起左側

小白一個,求解下面這段MCU程序的意思

  [復制鏈接]
跳轉到指定樓層
樓主
ID:389645 發表于 2018-8-24 14:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這個程式是什么意思啊!

void uart_js() interrupt 4  
{
        static unsigned char count;
        uchar xdata  receive1_xorg=0;
        
        if(RI==1)
                {
                RI=0;
                rbuf[count]=SBUF;        
                if(uart1_flag!=0)
                        {        
                        count=0;
                        return;
                        }
                count++;
                if((count==1)&&(rbuf[0]!=HEAD)
                        {
                        count=0;
                        }
                else if((count==2)&&(rbuf[1]!=FH_VERSION)
                        {
                         count=0;
                        }
                else if((count==3)&&(rbuf[2]!=FH_YUAN)
                        {
                         count=0;
                        }

請知道的大神幫忙解答啊
特別是if((count==1)&&(rbuf[0]!=HEAD)
else if((count==2)&&(rbuf[1]!=FH_VERSION)
else if((count==3)&&(rbuf[2]!=FH_YUAN)這三個是什么意思。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:381818 發表于 2018-8-24 16:32 | 只看該作者
判斷接受到的數據是否一致。
if((count==1)&&(rbuf[0]!=HEAD),這個是判斷接受到的第一個數據,HEAD應該是一個宏,如果一致,就繼續接收,如果不一致,就一直等待接收正確的rbuf[0]數據,也就是HEAD。
else if((count==2)&&(rbuf[1]!=FH_VERSION)與else if((count==3)&&(rbuf[2]!=FH_YUAN)同理。
整個函數就是一個51串口接收的函數。
希望能幫到你。

評分

參與人數 1黑幣 +70 收起 理由
admin + 70 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:389714 發表于 2018-8-24 16:51 | 只看該作者
要看宏定義,跟串口通訊的協議有關

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:370231 發表于 2018-8-24 16:53 | 只看該作者
先理解一下這個,然后再看你的
if(條件)
如果條件為真,執行這里;(條件為真才執行)
else
否則,執行這里。(只要不是真,就執行。)
-----------------------------
if(條件1)
如果條件1為真,執行這里;(條件為真才執行)
else if(條件2)
否則,當條件2為真執行這里。(當條件1不為真,條件2為真執行這里)
else
條件1,條件2都不為真,執行這里

在說白一點:
if(今天是星期三)
  今天要上班
else
今天不用上班
上面的情況,只有星期三要上班。其他的星期一,二,四,五,六,日。都不用上班。

if(今天是星期六)
今天不用上班
else if(今天是星期天)
今天不用上班
else
都用上班
第一個,先判斷,是不是星期六,如果是,就不用上班,
如果今天不是星期六,繼續用else if判斷今天是不是星期天,如果是,也不用上班。
如果今天不是星期六,也不是星期天,那么,就會執行最后一個ELSE,
都要上班

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:389645 發表于 2018-8-24 17:15 | 只看該作者
達達達 發表于 2018-8-24 16:32
判斷接受到的數據是否一致。
if((count==1)&&(rbuf[0]!=HEAD),這個是判斷接受到的第一個數據,HEAD應該是 ...

        else if(count==4)                                //rbuf[3]                  
                        {               

                        }
                else if(count==5)                                //rbuf[4]                  
                        {               

                        }
                else if(count==6&&rbuf[5]==(rbuf[0]^rbuf[1]^rbuf[2]^rbuf[3]^rbuf[4]))                   //count=6         實際接收6個字節 0-5         rbuf[5]
                         {
                         count=0 ;
                         uart1_flag=rbuf[3];
                          ES=0;                       
                         }
                else if(count==7&&(rbuf[6]==(rbuf[0]^rbuf[1]^rbuf[2]^rbuf[3]^rbuf[4]^rbuf[5])))                //count=7         實際接收7個字節 0-6
                         {
                         count=0  ;
                         uart1_flag=rbuf[3];
                         ES=0;
                         }
                else if(count==8&&(rbuf[7]==(rbuf[0]^rbuf[1]^rbuf[2]^rbuf[3]^rbuf[4]^rbuf[5]^rbuf[6])))                //count=7         實際接收7個字節 0-6
                         {
                         count=0  ;
                         uart1_flag=rbuf[3];
                         ES=0;
                         }
//                else if(count>8&&count<45)        //6-42                 count=45時        rbuf[44]還未收到數據,必須當count=45         [0-44]
//                        {                         
//                        }
//                else if(count==45)                   //0-44                 count=45時        rbuf[44]還未收到數據,必須當count=45         [0-44]
//                        {
//                         receive1_xorg=0;
//                         count=0;
//                         for (n=0;n<44;n++)        //0-43
//                                 {
//                                 receive1_xorg^= rbuf[n] ;
//                                }
//                         if(rbuf[44]==receive1_xorg)          //通訊模塊采集數據
//                                 {
//                                uart1_flag=rbuf[3];
//                                ES=0;       
//                                }                                                           
//                        }
                else if(count>8)
                        {
                        count=0;
                        }
                }
}后面還有一堆,不明白意思

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:229010 發表于 2018-8-24 17:38 | 只看該作者
要看別人定義的,具體通信協議。
回復

使用道具 舉報

7#
ID:389645 發表于 2018-8-27 14:56 | 只看該作者
不明白正個函數的使用,還請說明整個函數的意思,謝謝????????
回復

使用道具 舉報

8#
ID:387733 發表于 2018-8-27 16:29 | 只看該作者
代碼蝦 發表于 2018-8-27 14:56
不明白正個函數的使用,還請說明整個函數的意思,謝謝????????

整個函數就是一個串口中斷程序,當串口接收到一個字符,或一個字符發送完成都會產生中斷。進入中斷以后首先需要判斷是接收產生(RI==1)的還是發送產生(TI==1)的,然后進行相應的操作。
回復

使用道具 舉報

9#
無效樓層,該帖已經被刪除
10#
ID:252428 發表于 2018-8-27 16:41 | 只看該作者
代碼蝦 發表于 2018-8-27 14:56
不明白正個函數的使用,還請說明整個函數的意思,謝謝????????

類似于報文解析吧,就跟你刮獎一樣,看到謝謝 其余的就不用看了,這地方也是一樣,連續確認接收到的數據是否符合要求!
回復

使用道具 舉報

11#
ID:390564 發表于 2018-8-27 20:22 | 只看該作者
要看別人定義的,需要看具體協議
回復

使用道具 舉報

12#
ID:236826 發表于 2018-8-30 15:20 | 只看該作者
這應該是一個中斷計數的程序,count是計數的次數,rbuf[0]這是數組的第0位表示0位所對應的數據和程序中定義的HEAD數據進行比較,如果計數count等于1且數組第0位的數據不等于HEAD的話這執行if((count==1)&&(rbuf[0]!=HEAD)后面花括號正的語句,else if  是否則如果的意思,就是第一個if語句不執行則執行else if 語句進行判斷。rbuf[1],rbuf[2] 分別是數組的第1位和第二位所對應的數據,他們所表達的意思和if語句所標的的意思相同。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表