我有一个从 2引脚重复读取的程序、并将其保存到数组中。 但它仅从一个引脚读取。 help..plssss
#include "msp430G2553.h"
#define TPWM 1000 // PWM 周期
void mppt_compute (void);
void ADC10_ISR (void);
unsigned int samples[2]、loop = 0;//用于保存转换结果
long int p_0 = 0、p_1 = 0;
void main (void){
WDTCTL = WDTPW + WDTHOLD; //停止 WDT
//配置计时器 CPU
BCSCTL1 = CALBC1_16MHz;
DCOCTL = CALDCO_16MHz;
//配置 PWM
//Freq PWM =频率时钟/(* x * TACCR0)//如果向上/向下,x = 2,否则 x = 1
TA0CTL = tassel_2 + MC_3 + ID_0 ;// SMCLK、上行-下行模式、定时器 A 输入分频器/1
TACCR0 = TPWM; // PWM 周期
TA0CCTL1 = OUTMOD_2; // Timer_A.OUT1 PWM 切换/复位
TACCR1 = 500; // PWM 占空比
TACCR2 = 1000-1; // Timer_A.OUT2的周期来触发 ADC
TA0CCTL2 |= OUTMOD_6; // Timer_A.OUT2切换/复位
P1DIR |= BIT2 + BIT6; // P1.2和 P1.6 ->输出
P1SEL |= BIT2; // P1.2 = TA1输出
P1SEL &=~BIT6; // P1.6 -> I/O
//配置 ADC
ADC10CTL0 &=~ENC; //禁用 ADC
ADC10CTL1 = INCH_1 + CONSEQ_3 + SHS_3 + ADC10DIV_0 + ADC10SSEL_3;
// A4 A3 - A1 A0 ->多通道
//重复通道序列
// Timer_A。输出2触发 ADC
ADC10CTL0 = SREF_1 + ADC10SHT_2 + MSC+ REFON + ADC10IE;
// VR+= VREF+和 VR-= VSS
// 16 x ADC10CLK,启用多通道
ADC10AE0 = BIT0 + BIT1; // P1.0 -> A0 (采样[1]-> IPV)、P1.1 -> A1 (采样[0]-> Vpv)
ADC10DTC1 = 0x02; // 2次转换
ADC10SA =(int)个样本; //缓冲区
ADC10CTL0 |= ENC+ADC10SC; //采样和转换准备就绪
_enable_interrupt ();
对于(;;) {
//其他代码
}
}
void mppt_compute (void){
P_1 = samples[0]* samples[1]; //计算新的功耗
if (p_1 > p_0)
TACCR1 =(TACCR1 >=(TPWM -1))? TACCR1:+(TACCR1+1); //递增饱和 PWM 的占空比
否则、如果(p_1 < p_0)
TACCR1 =( TACCR1 <= 1)? TACCR1:TA0CCR1 -1; //具有低饱和的 PWM 的减量占空比
P_0 = p_1; //存储新电源
返回;
}
#pragma vector=ADC10_vector
_interrupt void ADC10_ISR (void){
LOC++;
if (loop >= 3906){
mppt_compute ();
LOOP = 0;
}
ADC10CTL0 &=~ENC; //禁用 ADC
while (ADC10CTL1和 ADC10BUSY); //等待 ADC10内核处于活动状态
ADC10SA =(int)样本; //数据缓冲区启动
ADC10CTL0 |= ENC+ADC10SC; //启用和启动 ADC
ADC10CTL0 &=~ADC10IFG; //清除中断
返回;
}

