找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 846|回復(fù): 0
收起左側(cè)

MSP430單片機(jī)多通道ADC采集,串口無(wú)法打印ADC值

[復(fù)制鏈接]
ID:1128884 發(fā)表于 2024-7-13 10:20 | 顯示全部樓層 |閱讀模式
static void ConfigADCInit(void)
{
    // 復(fù)位GPIO
    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P6,GPIO_PIN0);
    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P6,GPIO_PIN1);
    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P6,GPIO_PIN2);
    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P6,GPIO_PIN5);
    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P6,GPIO_PIN6);

    // 配置ADC參數(shù)
    ADC12_A_init(ADC12_A_BASE,ADC12_A_SAMPLEHOLDSOURCE_SC, ADC12_A_CLOCKSOURCE_ADC12OSC, ADC12_A_CLOCKDIVIDER_1);

    // 啟用ADC12_A模塊
    ADC12_A_enable(ADC12_A_BASE);

    // 配置ADC12_A模塊的采樣計(jì)時(shí)器,以控制采樣/保持信號(hào)的持續(xù)時(shí)間以及采樣過(guò)程中的時(shí)鐘周期數(shù)
    ADC12_A_setupSamplingTimer(ADC12_A_BASE,ADC12_A_CYCLEHOLD_128_CYCLES,ADC12_A_CYCLEHOLD_4_CYCLES,ADC12_A_MULTIPLESAMPLESENABLE);

    // 配置ADC P6.0
    ADC12_A_configureMemoryParam  ADCA0_InitStructure = {
    .inputSourceSelect = ADC12_A_INPUT_A0,                  // A0作為輸入通道
    .endOfSequence = ADC12_A_NOTENDOFSEQUENCE,              // 不是序列結(jié)束
    .memoryBufferControlIndex = ADC12_A_MEMORY_0,           // 內(nèi)存0
    .negativeRefVoltageSourceSelect = ADC12_A_VREFPOS_AVCC, // 參考電壓為AVCC
    .positiveRefVoltageSourceSelect = ADC12_A_VREFNEG_AVSS, // 參考電壓為AVSS
    };

    // 配置ADC P6.1
    ADC12_A_configureMemoryParam  ADCA1_InitStructure = {
    .inputSourceSelect = ADC12_A_INPUT_A1,
    .endOfSequence = ADC12_A_NOTENDOFSEQUENCE,
    .memoryBufferControlIndex = ADC12_A_MEMORY_1,
    .negativeRefVoltageSourceSelect = ADC12_A_VREFPOS_AVCC,
    .positiveRefVoltageSourceSelect = ADC12_A_VREFNEG_AVSS,
    };

    // 配置ADC P6.2
    ADC12_A_configureMemoryParam  ADCA2_InitStructure = {
    .inputSourceSelect = ADC12_A_INPUT_A2,
    .endOfSequence = ADC12_A_NOTENDOFSEQUENCE,
    .memoryBufferControlIndex = ADC12_A_MEMORY_2,
    .negativeRefVoltageSourceSelect = ADC12_A_VREFPOS_AVCC,
    .positiveRefVoltageSourceSelect = ADC12_A_VREFNEG_AVSS,
    };

    // 配置ADC P6.5
    ADC12_A_configureMemoryParam  ADCA5_InitStructure = {
    .inputSourceSelect = ADC12_A_INPUT_A5,
    .endOfSequence = ADC12_A_NOTENDOFSEQUENCE,
    .memoryBufferControlIndex = ADC12_A_MEMORY_5,
    .negativeRefVoltageSourceSelect = ADC12_A_VREFPOS_AVCC,
    .positiveRefVoltageSourceSelect = ADC12_A_VREFNEG_AVSS,
    };

    // 配置ADC P6.6
    ADC12_A_configureMemoryParam ADCA6_InitStructure = {
    .endOfSequence = ADC12_A_ENDOFSEQUENCE,
    .inputSourceSelect = ADC12_A_INPUT_A6,
    .memoryBufferControlIndex = ADC12_A_MEMORY_6,
    .negativeRefVoltageSourceSelect = ADC12_A_VREFPOS_AVCC,
    .positiveRefVoltageSourceSelect = ADC12_A_VREFNEG_AVSS,
    };

    // 配置ADC
    ADC12_A_configureMemory(ADC12_A_BASE ,&ADCA0_InitStructure);
    ADC12_A_configureMemory(ADC12_A_BASE ,&ADCA1_InitStructure);
    ADC12_A_configureMemory(ADC12_A_BASE ,&ADCA2_InitStructure);
    ADC12_A_configureMemory(ADC12_A_BASE ,&ADCA5_InitStructure);
    ADC12_A_configureMemory(ADC12_A_BASE ,&ADCA6_InitStructure);

    // 開(kāi)始轉(zhuǎn)換
    ADC12_A_startConversion(ADC12_A_BASE, ADC12_A_MEMORY_0, ADC12_A_REPEATED_SEQOFCHANNELS);
    ADC12_A_startConversion(ADC12_A_BASE, ADC12_A_MEMORY_1, ADC12_A_REPEATED_SEQOFCHANNELS);
    ADC12_A_startConversion(ADC12_A_BASE, ADC12_A_MEMORY_2, ADC12_A_REPEATED_SEQOFCHANNELS);
    ADC12_A_startConversion(ADC12_A_BASE, ADC12_A_MEMORY_3, ADC12_A_REPEATED_SEQOFCHANNELS);

}

#pragma vector=ADC12_VECTOR
__interrupt void ADC12_interrupt (void)
{
    static unsigned int index = 0;
    switch (__even_in_range(ADC12IV,34)){
        case  0: break;   //Vector  0:  No interrupt
        case  2: break;   //Vector  2:  ADC overflow
        case  4: break;   //Vector  4:  ADC timing overflow
        case  6: break;   //Vector  6:  ADC12IFG0
        case  8: break;   //Vector  8:  ADC12IFG1
        case 10: break;   //Vector 10:  ADC12IFG2
        case 12: break;   //Vector 12:  ADC12IFG3
        case 14: break;   //Vector 14:  ADC12IFG4
        case 16: break;   //Vector 16:  ADC12IFG5
        case 18:
            A0results[index] = ADC12_A_getResults(ADC12_A_BASE, ADC12_A_MEMORY_0);           // Move A0 results, IFG is cleared
            UART_printf(USCI_A1_BASE,"%f",A0results[index] / 0xffff * 3.3);
            A1results[index] = ADC12_A_getResults(ADC12_A_BASE, ADC12_A_MEMORY_1);           // Move A1 results, IFG is cleared
            UART_printf(USCI_A1_BASE,"%f",A1results[index] / 0xffff * 3.3);
            A2results[index] = ADC12_A_getResults(ADC12_A_BASE, ADC12_A_MEMORY_2);           // Move A2 results, IFG is cleared
            UART_printf(USCI_A1_BASE,"%f",A2results[index] / 0xffff * 3.3);
            A5results[index] = ADC12_A_getResults(ADC12_A_BASE, ADC12_A_MEMORY_5);           // Move A5 results, IFG is cleared
            UART_printf(USCI_A1_BASE,"%f",A5results[index] / 0xffff * 3.3);
            A6results[index] = ADC12_A_getResults(ADC12_A_BASE, ADC12_A_MEMORY_6);           // Move A6 results, IFG is cleared
            UART_printf(USCI_A1_BASE,"%f",A6results[index] / 0xffff * 3.3);
            index++;

            if (index == 8)
            {
              (index = 0);
            }
            break;   //Vector 18:  ADC12IFG6
        case 20: break;   //Vector 20:  ADC12IFG7
        case 22: break;   //Vector 22:  ADC12IFG8
        case 24: break;   //Vector 24:  ADC12IFG9
        case 26: break;   //Vector 26:  ADC12IFG10
        case 28: break;   //Vector 28:  ADC12IFG11
        case 30: break;   //Vector 30:  ADC12IFG12
        case 32: break;   //Vector 32:  ADC12IFG13
        case 34: break;   //Vector 34:  ADC12IFG14
        default: break;
    }
}
串口無(wú)法打印ADC值


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表