您好,
我想测量有机设备的IV特性,为了实现这一目的,我要使用外部电路连接此设备,并且我要从MCU生成电压,在步骤之间有固定的时间延迟, 电压范围为0 V至3 V, 步进增量可以是任何小数字,当施加电压时,我想使用ADC读取每个点的外部电路输出并保存该输出,以便在末尾绘制IV图。 我编写了此代码,但它不能正常工作。 我仍然不知道如何保存输出,如何应用延迟。
#include <msp430fr6989.h>
#define period_PWM 4000
无符号int j;
无符号int I;
unsigned int ADC_value[1]={0};
浮点ADC_value_volt[1]={0};
_Bool flag_start = 0;
void init_tim_A(void);
void init_adc (void);
void init_gpio (void);
void init_dco(void);
Void主(void)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
PM5CTL0 &=~LOCKLPM2;
INIT_DCO();
init_gPIO();
init_tim_a();
INIT_ADC();
_enable_interrupt ();
ADC12CTL0 |= ADC12SC;
同时(1)
{
对于(i=0;i<=5095;i=i+200)
{
TA0CCR0 =(3.3)- 1;
TA0CTL |= MC_2;
_delay_cycles (1亿);//延迟
IF (flag_start == 1)
{
ADC12CTL0 || ADC12SC;//启动ADC
Flag_start = 0;
ADC_value_volt[0]= ADC_value[0]*ADC/4095; 3.3
//Y11_OUT = ADC_value_volt[1];
}
TA0CTL &=~MC_0;
}
//}
}
}
void init_adc (void)
{
P8SEL0 |= BIT7;//|BIT6|BIT5|BIT4;// 8.7 ,WFP 8.6 ,WFP 8.5 ,8.4 ADC选项选择
P8SEL1 |= BIT7;//|BIT6|BIT5|BIT4;
ADC12CTL0 &=~ADC12ENC;
ADC12CTL1 || ADC12CONSEQ_1;
ADC12CTL0 || ADC12SHT0_5|ADC12SHT1_5 | ADC12ON|ADC12MSC;
ADC12CTL1 || ADC12PDIV__1|ADC12SHP|ADC12DIV_5|ADC12SSEL_0;
ADC12CTL2 || ADC12RES_2;
ADC12IER0 |= BIT0;//|BIT1|BIT2|BIT3|BIT4|BIT5|BIT6|BIT7|BIT8;;//启用中断
ADC12MCTL0 = ADC12INCH_4|ADC12EOS;
ADC12CTL0 || ADC12ENC;
}// ADC_INIT
void init_dco (void)
{
FRCTL0 = FRCTLPW | NWITS_2;
CSCTL0_H = CSOKEY >> 8;//解锁CS寄存器
CSCTL1 = DCOFSEL_5|DCORSEL;// DCO = 24 MHz
CSCTL3 = DIVA_0 | DIVS_0 | DIVM_0;
CSCTL0_H = 0;////锁定CS寄存器
}
void init_tim_a (void)
{
TA0CCR0 = Period_PWM/2 - 1;
TA0CCR1 =周期PWM - 1;
TA0CCTL0 = CCIE;
TA0CCTL1 = CCIE;
TA0CTL = tassel_2 | ID_0 | MC_2;
}
void init_gpio (void)
{
P1DIR || BIT5|BIT6;
P1OUT || BIT5;
}
#pragma vector = TIMER0_A0_vector
__interrupt void CCR0 (void)
{
P1OUT &=~BIT5;
}
#pragma vector = TIMER0_A1_vector
__interrupt void CCR1 (void)
{
IF (TA0CCTL1&CCIFG == CCIFG)
{
TA0CCTL1 &=~CCIFG;
P1OUT || BIT5;
TA0R = 0;
}
}
#pragma vector = ADC12_vector
__interrupt void ADC_ISR(void)
{
开关(ADC12IV)
{
案例0:中断;
案例2:中断;
案例4:中断;
案例6:中断;
案例8:中断;
案例10:中断;
案例12://矢量12:ADC12IFG0
{
ADC_VALUE [0]= ADC12MEM0;
Flag_start = 1;
}中断;
默认值:中断;
}
}