登录|立即注册|使用QQ帐号登录
论坛 > 24小时必答区
发帖|
看2540|回10|收藏
楼主 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)这三个是什么意思啊!
沙发 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串口接收的函数。
希望能帮到你。
板凳 ID:389714 只看他
2018-8-24 16:51
要看宏定义,跟串口通讯的协议有关
地板 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,
都要上班
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;
                        }
                }
}后面还有一堆,不明白意思
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# ID:252428 只看他
2018-8-27 16:41

引用:

代码虾 发表于 2018-8-27 14:56
不明白正个函数的使用,还请说明整个函数的意思,谢谢????????

类似于报文解析吧,就跟你刮奖一样,看到谢谢 其余的就不用看了,这地方也是一样,连续确认接收到的数据是否符合要求!
10# ID:390564 只看他
2018-8-27 20:22
要看别人定义的,需要看具体协议
11# 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黑电子论坛

Powered by Discuz! X3.1

首页|标准版|触屏版|电脑版