有个小程序 需要高人指点一下

2020-01-20 19:05发布

//测光照
void Read_Light()
{
        unsigned int lx_data;
        delay_nms(200);                                   //延时200ms       
        Single_Write_BH1750(0x01);    //初始化BH1750
        Single_Write_BH1750(0x10);    //H- resolution mode               
        delay_nms(180);               //延时180ms                       
        Multiple_Read_BH1750();       //连续读出数据,存储在BUF中               
        dis_data=BUF[0];
        dis_data=(dis_data<<8)+BUF[1];  //合成数据                        
        lx_data=dis_data/1.2;
        BH_BUF[0] = lx_data/256;
        BH_BUF[1] = lx_data%256;
}
//测温湿度
void RH(void)
{  
   AM_DATA=0;         //主机拉低18ms
   Delay(180);
   AM_DATA=1;         //总线由上拉电阻拉高 主机延时20us
  delay10us(4);
   AM_DATA=1;         //主机设为输入 判断从机响应信号
   if(!AM_DATA)       //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行                                   
   {
           U8FLAG=2;         
           while((!AM_DATA)&&U8FLAG++); //判断从机是否发出 80us 的低电平响应信号是否结束
           U8FLAG=2;
           while((AM_DATA)&&U8FLAG++); //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态         
           COM(); //数据接收状态
           U8RH_data_H_temp=U8comdata;
           COM();
           U8RH_data_L_temp=U8comdata;
           COM();
           U8T_data_H_temp=U8comdata;
           COM();
           U8T_data_L_temp=U8comdata;
           COM();
           U8checkdata_temp=U8comdata;
           AM_DATA=1;                  
           U8temp = (U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); //数据校验
           if(U8temp == U8checkdata_temp)
                   {
                            U8RH_data_H = U8RH_data_H_temp;
                      U8RH_data_L = U8RH_data_L_temp;

                          U8T_data_H = U8T_data_H_temp;
                      U8T_data_L = U8T_data_L_temp;
                      U8checkdata = U8checkdata_temp;

                          shidu = U8RH_data_H<<8;
                          shidu = shidu+U8RH_data_L;

                          wendu = U8T_data_H<<8;
                          wendu = wendu+U8T_data_L;
                   }
   }
}       
void main(void)
{
        uint data_int = 0;
        INIT_Time0();       
        Init_BH1750();             //初始化BH1750
        WDTInit();
        P1 = 0;
        while(1)
        {               
                WDT();
                if(Flag_Time1 >= 0)
                {
                        Flag_Time1 = 0;

                        RH();  //读取温湿度数据
                        TxBuf[0]=U8T_data_H;
                        TxBuf[1]=U8T_data_L;
                        TxBuf[2]=U8RH_data_H;
                        TxBuf[3]=U8RH_data_L;

                        //读取光照数据
                        Read_Light();
                        TxBuf[4]=BH_BUF[0];
                        TxBuf[5]=BH_BUF[1];

                        //读取CO2数据
                        Co2_Value(&TxBuf1[0],&TxBuf1[1]);
                        SroftFilter_data(&data_int);                       
                        TxBuf[6] = data_int/256;
                          TxBuf[7] = data_int%256;
                        TxBuf[8] = TxBuf1[0];
                        TxBuf[9] = TxBuf1[1];

                        Tx_Buf(TxBuf,10);
                }       
        }
}
单步调试的时候,调试到测光照的函数Read_Light();时,进入此函数中调试,此函数调试结束,程序怎么突然跳到了测温湿度的函数RH()中的倒数第二句话wendu = U8T_data_H<<8;上(真奇怪!!)?接着调试,运行完RH()中的最后一句,程序又回到main函数开始处,一直这么循环,怎么回事呢??



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
haibaogk
1楼-- · 2020-01-20 20:21
重新编译运行,再不行跟进汇编代码看看怎么跳转了
bujie8010
2楼-- · 2020-01-21 00:34
 精彩回答 2  元偷偷看……
zouzhichao
3楼-- · 2020-01-21 01:52
先不说别的,除以1.2怎么写出来的?
myiccdream
4楼-- · 2020-01-21 05:44
你调试的时候不注释掉WDT? 。会不会被复位?