搜索
bottom↓
回复: 4

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

[复制链接]

出0入0汤圆

发表于 2015-4-20 17:02:24 | 显示全部楼层 |阅读模式
//测光照
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函数开始处,一直这么循环,怎么回事呢??



阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2015-4-20 17:16:58 | 显示全部楼层
重新编译运行,再不行跟进汇编代码看看怎么跳转了

出0入8汤圆

发表于 2015-4-20 17:28:37 | 显示全部楼层
重点检查数组越界

出10入23汤圆

发表于 2015-4-20 18:09:22 来自手机 | 显示全部楼层
先不说别的,除以1.2怎么写出来的?

出0入45汤圆

发表于 2015-4-20 18:36:06 | 显示全部楼层
你调试的时候不注释掉WDT? 。会不会被复位?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 02:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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