qingshanchun 2014-08-03 11:23 采纳率: 0%
浏览 2801

MSP430G2转换结果数据类型

以下是程序,软件用的IAR:

#include "io430.h"
#include "dandao_duocai.h"
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
#define dataout P2OUT
unsigned int ADC10_Result[100];
int d,c;

void cheek_clock()
{
BCSCTL3_bit.LFXT1S0 = 0; //配置ACLK为12KHz
BCSCTL3_bit.LFXT1S1 = 1;

if(CALBC1_1MHZ==0xFF||CALDCO_1MHZ==0xFF) //配置MCLK为1MHz
while(1); //校准数据是否被擦除,若是则CPU挂起。
BCSCTL1=CALBC1_1MHZ;
DCOCTL=CALDCO_1MHZ;

}

///////----------采集一串数,并取出最大值

void zzzz()
{
//unsigned int ADC10_Result[100];
int i,j;
P1SEL|=BIT1;//P1.1第二功能

ADC10CTL1 |= CONSEQ_2; //单通道重复采样模式
ADC10CTL0 |= SREF_1+REFON+REF2_5V;//选择内部参考源2.5V,打开基准源

ADC10CTL0 |= ADC10SHT_3+MSC; //过采样率设置为64个采样周期,打开AD转换
ADC10CTL1|= ADC10SSEL_1+ADC10DIV_1+SHS_0; //ACLK2分频为采样时钟,用ADC10SC触发采集
ADC10CTL1 |=INCH_1; //选择通道A1

ADC10CTL0 |= ADC10ON; //开启ADC10
ADC10AE0 |= 0x02; //开启外部通道A1

ADC10CTL0&=~ADC10IFG;//清中断标志
for(int k=0;k<100;k++)
{
ADC10CTL0 |=ENC+ADC10SC; //开始转换
while((ADC10CTL0 &ADC10IFG)==0); //等待ADC10IFG标志变高(转换完成)
ADC10_Result[k]=ADC10MEM; //读取采样结果
delay_ms(2);
P1SEL&=~BIT1;//关P1.1第二功能。

}
////////--------取ADC10_Result[100] 中的最大数赋值给C

for(i=0;i<100;i++)
{
for(j = i + 1;j<100;j++)
if(ADC10_Result[i]<=ADC10_Result[j])
{
d=ADC10_Result[i];ADC10_Result[i]=ADC10_Result[j];ADC10_Result[j]=d;
}
}
c=ADC10_Result[99];
/////////--------取ADC10_Result[100] 中的最大数赋值给C

}

///////----------采集一串数,并取出最大值

void beishu()
{

if(c dataout=0x00;
if((c>=45)&&(c dataout=0x01;
if((c>=53)&&(c<613))
dataout=0x10;
else
dataout=0x11;
}

int main(void)
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
cheek_clock();
P2DIR|=(BIT0+BIT1+BIT2);
while(1)
{
zzzz(); /// ----调用
beishu();
dataout&=~BIT3;/////p1.3外接另一个芯片的使能端。低电平有效,
}

}

问题是:Error[Pe147]: declaration is incompatible with "unsigned char ADC10_Result[100]" (declared at line 6 of "D:\workspace_v5_1\lianxi\caiji_fangda\dandao_duocai.h") D:\workspace_v5_1\lianxi\caiji_fangda\main.c 7

补充:当我将unsigned int ADC10_Result[100];设置为局部变量时(也就是zzzz()子程序中的屏蔽部分)就不会有错。或者我把这个数组定义为unsigned char 类型且作为全局变量也可以,但是unsigned char 是8位的,而转换结果是10位,软件没报错。

  • 写回答

1条回答 默认 最新

  • qingshanchun 2014-08-04 03:09
    关注

    补充:我改一点程序后,可以定义为全局变量了,以下是程序。但是还有一个不懂的地方就是unsigned char 是8位的,而转换结果是10位,软件没报错。求大神指导呀,,,

    #include "io430.h"
    #define CPU_F ((double)1000000)
    #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
    #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
    #define dataout P2OUT
    unsigned int ADC10_Result[100];
    int d,c;

    void check_clock()
    {
    BCSCTL3_bit.LFXT1S0 = 0; //配置ACLK为12KHz
    BCSCTL3_bit.LFXT1S1 = 1;

    if(CALBC1_1MHZ==0xFF||CALDCO_1MHZ==0xFF) //配置MCLK为1MHz
    while(1); //校准数据是否被擦除,若是则CPU挂起。
    BCSCTL1=CALBC1_1MHZ;
    DCOCTL=CALDCO_1MHZ;

    }
    void zzzz()
    {

    P1SEL|=BIT1;//P1.1第二功能

    ADC10CTL1 |= CONSEQ_2; //单通道重复采样模式
    ADC10CTL0 |= SREF_1+REFON+REF2_5V;//选择内部参考源2.5V,打开基准源

    ADC10CTL0 |= ADC10SHT_3+MSC; //过采样率设置为64个采样周期,打开AD转换
    ADC10CTL1|= ADC10SSEL_1+ADC10DIV_1+SHS_0; //ACLK2分频为采样时钟,用ADC10SC触发采集
    ADC10CTL1 |=INCH_1; //选择通道A1

    ADC10CTL0 |= ADC10ON; //开启ADC10
    ADC10AE0 |= 0x02; //开启外部通道A1

    ADC10CTL0&=~ADC10IFG;//清中断标志
    for(int k=0;k<200;k++)
    {
    ADC10CTL0 |=ENC+ADC10SC; //开始转换
    while((ADC10CTL0 &ADC10IFG)==0); //等待ADC10IFG标志变高(转换完成)
    ADC10_Result[k]=ADC10MEM; //读取采样结果
    delay_ms(1);
    P1SEL&=~BIT1;//关P1.1第二功能。

    }

    int i,j;
    for(i=0;i<100;i++)
    {
      for(j = i + 1;j<100;j++)
        if(ADC10_Result[i]>=ADC10_Result[j])
         {
            d=ADC10_Result[i];ADC10_Result[i]=ADC10_Result[j];ADC10_Result[j]=d;
                 }
     }
        c=ADC10_Result[99];
    

    }

    void beishu()
    {

    if(c dataout=0x00;
    if((c>=45)&&(c dataout=0x01;
    if((c>=53)&&(c<613))
    dataout=0x10;
    else
    dataout=0x11;
    }

    int main(void)
    {
    // Stop watchdog timer to prevent time out reset
    WDTCTL = WDTPW + WDTHOLD;
    check_clock();
    P2DIR|=0xff;

    while(1)
    {
    dataout&=~BIT2;
    zzzz();
    beishu();
    delay_us(10);
    }

    }

    评论

报告相同问题?

悬赏问题

  • ¥15 Jenkins+k8s部署slave节点offline
  • ¥15 微信小游戏反编译后,出现找不到分包的情况
  • ¥15 如何实现从tello无人机上获取实时传输的视频流,然后将获取的视频通过yolov5进行检测
  • ¥15 WPF使用Canvas绘制矢量图问题
  • ¥15 用三极管设计一个单管共射放大电路
  • ¥15 孟德尔随机化r语言运行问题
  • ¥15 pyinstaller编译的时候出现No module named 'imp'
  • ¥15 nirs_kit中打码怎么看(打码文件是csv格式)
  • ¥15 怎么把多于硬盘空间放到根目录下
  • ¥15 Matlab问题解答有两个问题