智能车制作

标题: 自己写的电磁信号处理,发现点小问题 [打印本页]

作者: 浙东东    时间: 2013-4-20 00:29
标题: 自己写的电磁信号处理,发现点小问题
void ad_dealvalue(void)
{
      uint8 i,j;
     uint16 max,min;
     uint32 temp;       
     for(j=0;j<4;j++)//选择ADvalue其中一行数据
           {
                  
                   max = ADvalue[j][0];
                min = ADvalue[j][0];
                for(i=1;i<4;i++)//处理ADvalue的一行数据,去最大、最小值,再取平均
                        {
                if(max < ADvalue[j][i])
                        {
                            max = ADvalue[j][i]; //得到每行的最大值
                        }
                                if(min > ADvalue[j][i])
                                        {
                                            min = ADvalue[j][i];//得到每行的最小值

                                    }
                    }
                temp = 0;
                for(i=0;i<4;i++)
                        {
                           temp = temp + ADvalue[j][i];//每行数据总和
                        }
                temp = (temp-max-min)/2;   //去掉最小值和最大值后,每行数据的平均值
                Final_ADvalue[j]=(uint16)temp;
                Led_flash(15);
    }
          
}
ADvalue[j][i]为4行4列数组,LED_flash(15)为pta15引脚取反函数(其为判断程序是否正常进行)。第一条代码for(j=0;j<4;j++)改成for(j=0;j<=4;j++),该程序能正常运行。按照我的理解,四行四列数组,第一行应该为[0],第n
行为[n-1].在本程序中,在for(j=0;j<4;j++)应该能正常处理数据,但是写成这样实现不了里面的代码,主要表现为PTA15引脚小灯不亮。而将Led_flash(15);代码移到for(j=0;j<4;j++)外面,小灯正常亮。我用的是K60,100m频率。求解决


作者: iamback    时间: 2013-4-20 00:54
首先<=那个肯定不对,下标越界。
然后Led_flash(15);在很短的时间内执行4次。
你说这个函数是取反的意思。
那进入到ad_dealvalue();之前灯是神马状态?
若之前是暗的,那 0亮1暗2亮3暗,最后就没亮呗,而之前亮的的时间太短,你肉眼可能看不到。

作者: 浙东东    时间: 2013-4-20 17:06
对对,你说的对。后来发现了这问题,只要j是偶数,就会熄,j奇数就会亮,其亮
作者: 流微·寒    时间: 2013-6-19 16:46
大神你好,能把你的ad采集程序,让我学学吗? 我刚换K60,不会




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2