请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP430FR6989 工具/软件:Code Composer Studio
大家好,我正在我学校的一个项目中工作,这个项目是要制作一 个有4个通道的数据采集(电压)程序。 这是我的代码...我不知道如何配置以切换值,因为有人可以帮助我。
#include <MSP430-h>
#include <string.h>
#include <stdlib.h>
#include "driverlib.h"
#include "hal_lcd.h"
#define startup模式 0
volatile unsigned char mode = startup_mode;//
rezultate ADC - matrice cu 10 masuratori
int ADC_results [10][4];//
index ADC în matricea ADC_resetts; initializare cu 0
int index_adc =0;
volatile unsigned short usiButton1 =0;
int main(void){
int j,k;
int ind_adc;
char disp_adc [50];
字符样本1_ADC [5];
字符样本2_ADC [5];
字符样本3_ADC [5];
字符样本4_ADC [5];
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
(j= 0;j<10;j++)
(k=0;j<4;j++)
ADC_Results [j][k]= 0;
/*禁用GPIO开机默认高阻抗模式以激活
*以前配置的端口设置
*/
ADC12_B_initParam initParam ={0};
initParam.sampleHoldSignalSourceSelect = ADC12_B_SAMPLEHOLDSOURCE_SC;
initParam.clockSourceSelect = ADC12_B_CLOCKSOURCE_ADC12OSC;
initParam.clockSourceDivider = ADC12_B_CLOCKDIVIDER_1;
initParam.clockSourcePrediver= ADC12_B_CLOCKPREDIER__1;
initParam.internalChannelMap = ADC12_B_NOINTCH;
ADC12_B_INIT(ADC12_B_base,&initParam);
ADC12_B_setupSamplingTimer(ADC12_B_base,
ADC12_B_CYCLEHOLD_64_CYCLES,
ADC12_B_CYCLEHOLD_64_CYCLES,
ADC12_B_MULTIPLESAMPLESENABLE);
//启用ADC12 B模块
ADC12_B_ENABLE (ADC12_B_BASE);
ADC12_B_enableInterrupt (ADC12_B_BASE,ADC12_B_IE0,0,0);
ADC12_B_enableInterrupt (ADC12_B_BASE,ADC12_B_IE1,0,0);
ADC12_B_enableInterrupt (ADC12_B_BASE,ADC12_B_IE2,0,0);
ADC12_B_enableInterrupt (ADC12_B_BASE,ADC12_B_IE3,0,0);
ADC12_B_configureMemoryParam配置MemoryParam ={0};
configureMemoryParam.memoryBufferControlIndex = ADC12_B_memory_0;
configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_A4;
配置内存Param.refVoltageSourceSelect = ADC12_B_VREFPOS_AVCC_VREFNEG_VSS;
configureMemoryParam.endOfSequence = ADC12_B_NOTENDOFENCE;
配置内存Param.windowComparatorSelect = ADC12_B_window_Comparer_disable;
配置内存Param.DifferalModeSelect = ADC12_B_Different_mode_disable;
ADC12_B_configureMemory (ADC12_B_BASE,&configureMemoryParam);
配置内存Param.MemoryBufferControlIndex = ADC12_B_MEMORY_1;
configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_A5;
配置内存Param.refVoltageSourceSelect = ADC12_B_VREFPOS_AVCC_VREFNEG_VSS;
configureMemoryParam.endOfSequence = ADC12_B_NOTENDOFENCE;
配置内存Param.windowComparatorSelect = ADC12_B_window_Comparer_disable;
配置内存Param.DifferalModeSelect = ADC12_B_Different_mode_disable;
ADC12_B_configureMemory (ADC12_B_BASE,&configureMemoryParam);
配置内存Param.MemoryBufferControlIndex = ADC12_B_MEMORY_2;
configureMemoryParam.inputSourceSelect = ADC12_B_Input_A6;
配置内存Param.refVoltageSourceSelect = ADC12_B_VREFPOS_AVCC_VREFNEG_VSS;
configureMemoryParam.endOfSequence = ADC12_B_NOTENDOFENCE;
配置内存Param.windowComparatorSelect = ADC12_B_window_Comparer_disable;
配置内存Param.DifferalModeSelect = ADC12_B_Different_mode_disable;
ADC12_B_configureMemory (ADC12_B_BASE,&configureMemoryParam);
configureMemoryParam.memoryBufferControlIndex = ADC12_B_memory_3;
configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_A7;
配置内存Param.refVoltageSourceSelect = ADC12_B_VREFPOS_AVCC_VREFNEG_VSS;
configureMemoryParam.endOfSequence = ADC12_B_NOTENDOFENCE;
配置内存Param.windowComparatorSelect = ADC12_B_window_Comparer_disable;
配置内存Param.DifferalModeSelect = ADC12_B_Different_mode_disable;
ADC12_B_configureMemory (ADC12_B_BASE,&configureMemoryParam);
ADC12_B_startConversion(ADC12_B_base,
ADC12_B_MEMORY_0,
ADC12_B_REALITED_SEQOFCHANNELS);
Init_LCD ();
pm_unlockLPM5 ();
__BIC_SR_REGISTER (GIE);
__bis_sr_register (GIE);
同时(1)
{
__BIC_SR_REGISTER (GIE);
IF (index_adc == 0)
IND_ADC= 9;
否则
IND_ADC= index_ADC-1;
ltoa (((long) ADC_results[ind_ADC][0],sample1_ADC);
ltoa (((long) ADC_results[ind_ADC][1],sample2_ADC);
ltoa (((long) ADC_results[ind_ADC][2],sample3_adc);
ltoa (((long) ADC_results[ind_ADC][3],sample4_adc);
strcpy (disp_adc,"1");
strcat (disp_adc,sample1_adc);
DisplayScrollText(disp_adc);
strcpy (disp_adc,"2");
strcat (disp_adc,sample2_adc);
DisplayScrollText(disp_adc);
strcpy (disp_adc,"3");
strcat (disp_adc,sample3_adc);
DisplayScrollText(disp_adc);
strcpy (disp_adc,"4 ");
strcat (disp_adc,sample4_adc);
DisplayScrollText(disp_adc);
__bis_sr_register (GIE);
__DELAY周期(20万);
}
}//
Asta trebuie lasata
asa // se poate modificat codul corepunzator
//内部超大器端口ADC12MEM0 (ADC12_B_MEMORY_0) pana la ADC12MEM3
// cele 4 locatii de mem asociate canalelor ADC 4,5,6, 7
#if defined(__TI_Compiler_version__)|| defined (__IAR_SYSTEMS _ICC__)
#pragma vector = ADC12_vector
__interrupt void ADC12_ISR(void)
#Elif defined(__GNUC__)
void __attribute__(interrupt (ADC12_vector)) ADC12_ISR(vector))
#elle!
#endif
{
switch (__偶 数_in_range (ADC12IV,ADC12IV_ADC12RDYIFG))
{
案例ADC12IV_NONE: 中断; //矢量0:无中断
CASE ADC12IV_ADC12OVIFG:中断; //矢量2:ADC12MEMx溢出
CASE ADC12IV_ADC12TOVIFG:中断; //矢量4:转换时间溢出
CASE ADC12IV_ADC12HIIFG:中断; //向量6:ADC12BHI
CASE ADC12IV_ADC12LOIFG:中断; //矢量8:ADC12BLO
CASE ADC12IV_ADC12INIFG:中断; //矢量10:ADC12BIN
Case ADC12IV_ADC12IFG0: //向量12:ADC12MEM0中断
ADC12_B_clearInterrupt (ADC12_B_BASE,0,ADC12_B_IFG0);
index_adc++;
IF (index_adc == 10) //
index_adc=0;
// index_ad=公式penturu convise.
ADC_Results [index_ADC][0]= ADC12MEM0;
// __BIC_SR_REGISTER_ON_EXIT (LPM0_bits); //退出活动CPU
中断; //从0 (SR)清除CPUOFF位
CASE ADC12IV_ADC12IFG1: //矢量14:ADC12MEM1
ADC12_B_clearInterrupt (ADC12_B_BASE,0,ADC12_B_IFG1);
ADC_Results [index_ADC][1]= ADC12MEM1;
中断;
CASE ADC12IV_ADC12IFG2: //矢量16:ADC12MEM2
ADC12_B_clearInterrupt (ADC12_B_BASE,0,ADC12_B_IFG2);
ADC_Results [index_ADC][2]= ADC12MEM2;
中断;
Case ADC12IV_ADC12IFG3: //向量18:ADC12MEM3
ADC12_B_clearInterrupt (ADC12_B_BASE,0,ADC12_B_IFG3);
ADC_Results [index_ADC][3]= ADC12MEM3;
中断;
默认值:break;
}
}