野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 22583|回复: 2

用ADC采样并取其最值时出现的问题

[复制链接]
发表于 2014-8-15 18:54:15 | 显示全部楼层 |阅读模式
我写了一个程序,用ADC5 个通道取5个数,然后通过冒泡排序法取最大值和最小值,结果出现了一个问题。程序如下
#include "stm32f10x.h"
#include "includes.h"
#define N 5

__I int16_t ADC_ConvertedValue[15];
float ADC_ConvertedValueLocal[15];
float sum=0,temp;
int32_t j,k,t,m,n=0;

int main()
{
              USART1_Config();
                  ADC1x_Init(5);
         while(1)
           {
                  int t;
                  for(t=0;t<5;t++)
                  {
                    ADC_ConvertedValueLocal[t]=3.300*ADC_ConvertedValue[t]/0X0FFF;       
                   }
                  /***求和***/
                        sum=0;
                         for(m=0;m<N;m++)
                         {
                            sum+=ADC_ConvertedValueLocal[m];       
                          }

                                 printf("\r\n显示电压\r\n");
                                Delay(500);
                                 printf("\r\n采样值1=%.3fv\r",ADC_ConvertedValueLocal[0]);
                                Delay(500);
                                 printf("\r 采样值2=%.3fv\r",ADC_ConvertedValueLocal[1]);
                                Delay(500);
                                 printf("\r 采样值3=%.3fv\r",ADC_ConvertedValueLocal[2]);
                                Delay(500);
                                 printf("\r 采样值4=%.3fv\r",ADC_ConvertedValueLocal[3]);
                                Delay(500);
                                 printf("\r 采样值5=%.3fv\r\n",ADC_ConvertedValueLocal[4]);
                                Delay(500);
                                 printf("\r\n和  值=%.3f\r",sum);
                                Delay(500);
                                 printf("\r 平均值=%.3f\r",sum/m);
                                Delay(500);

                  /***排序***/
                           for (j=0;j<N-1;j++)
                                  {
                                   for (k=0;k<N-j;k++)
                                   {
                                    if(ADC_ConvertedValueLocal[k]>ADC_ConvertedValueLocal[k+1])
                                     {
                                       temp = ADC_ConvertedValueLocal[k];
                                       ADC_ConvertedValueLocal[k] = ADC_ConvertedValueLocal[k+1];
                                       ADC_ConvertedValueLocal[k+1] = temp;
                                     }
                                   }
                                  }


                                 printf("\r 最小值 = %.3f\r",ADC_ConvertedValueLocal[0]);
                                 Delay(500);
                                 printf("\r 最大值 = %.3f\r\n",ADC_ConvertedValueLocal[N-1]);
                                 Delay(1500);
                        }
                           }
当我在定义数组时,定义为__I int16_t ADC_ConvertedValue[];
float ADC_ConvertedValueLocal[];时,若把最后取最值的语句屏蔽,则前面采样值和平均值都能通过串口在电脑上显示,但是如果不屏蔽,电脑上什么也不显示。如果数组按上面程序里那样定义就没有问题,这是为什么啊?
回复

使用道具 举报

发表于 2014-8-15 18:55:52 | 显示全部楼层
屏蔽哪个取值语句?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-17 22:48:18 来自手机 | 显示全部楼层
魏秋月 发表于 2014-8-15 18:55
屏蔽哪个取值语句?

就是最后两句printf,这是串口传电脑显示的,怎么会影响整个程序呢,好奇怪
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 11:38 , Processed in 0.036294 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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