⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_adc.c

📁 第二届飞思卡尔杯智能车大赛
💻 C
字号:
// Test ADC Modle


#include "includes.h"


INT16U Watch_AD[16];



void TestADC1(void) {


    INT16U i,j, Data;
    INT8U led;

    //StartTimeBase();
    // set port B as output (LEDs)
    DDRB  = 0xff;
    PORTB = 0xA5;

    // activate ADC
    InitADC();

    //forever
    for (;;) {
        for (j = 0;j < 16;j++) {
            //read ADC
            Data = Watch_AD[j] = ReadADC(j);  // right justified, unsigned, channel AN07

            // determine LED bit pattern
            for (i=0, led=0x00; i<(Watch_AD[15] & 0x3FF); i += 0x3FF/8) {

                // assemble LED bit pattern
                led = led<<1 | 0x01;
            }

            // set LED array to new value
            PORTB = (char)led;
        }

    }

}


// 测试同时读两套AD的值 -------------------------------------------------------

INT16U w[2][8];
INT8U t,conTime1,conTime2;

// 单独读
INT16U rad0(INT16U channel) {
    ATD0CTL5 = 	ATD0CTL5_DJM_MASK +  //数据右对齐
                (ATD0CTL5_Cx_MASK & channel); // 防止出错
    // 等待CCF0 ,即转换完成, 经计算此转换要在使 while 循环31次
    while ((ATD0STAT1&0x01)==0) {};
    return ATD0DR0;
}

// 单独读
INT16U rad1(INT16U channel) {
    ATD1CTL5 = 	ATD1CTL5_DJM_MASK +
                (ATD1CTL5_Cx_MASK & channel);
    while ((ATD1STAT1&0x01)==0) {};
    return ATD1DR0;
}

// 单独读2
void rad(INT16U channel1, INT16U channel2, INT16U * a, INT16U * b) {
    t = 0;
    ATD0CTL5 = 	ATD0CTL5_DJM_MASK +  //数据右对齐
                (ATD0CTL5_Cx_MASK & channel1); // 防止出错
    // 等待CCF0 ,即转换完成, 经计算此转换要在使 while 循环31次
    while ((ATD0STAT1&0x01)==0) {
        t++;
    };
    conTime1 = t;
    t = 0;

    *a = ATD0DR0;

    ATD1CTL5 = 	ATD1CTL5_DJM_MASK +
                (ATD1CTL5_Cx_MASK & channel2);
    while ((ATD1STAT1&0x01)==0) {
        t++;
    };
    conTime2 = t;

    *b = ATD1DR0;
}

// 合起来读
void radd(INT16U channel1, INT16U channel2, INT16U * a, INT16U * b) {
    t = 0;
    ATD0CTL5 = 	ATD0CTL5_DJM_MASK +  //数据右对齐
                (ATD0CTL5_Cx_MASK & channel1); // 防止出错
    ATD1CTL5 = 	ATD1CTL5_DJM_MASK +
                (ATD1CTL5_Cx_MASK & channel2);

    //while((ATD0STAT1&0x01)==0 && (ATD1STAT1&0x01)==0){t++;};
    while (!(ATD0STAT1_CCF0 || ATD1STAT1_CCF0)) {
        t++;
    };

    conTime1 = t;
    *a = ATD0DR0;
    *b = ATD1DR0;
}

// 测试
void TestADCDouble(void) {
    INT8U i;
    INT16U a, b;

    ATD0CTL2 = 0x80;
    ATD0CTL4 = 0x05;

    ATD1CTL2 = 0x80;
    ATD1CTL4 = 0x05;

    for (;;) {
        for (i = 0;i < 8;i++) {
            ReadADCDouble(i, i, &a, &b);
            w[0][i] = a;//rad0(i);
            w[1][i] = b;//rad1(i);
        }
    }
}

// 测试同时读两套AD的值 -------------------------------------------------------



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -