找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1930|回复: 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#
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黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表