msp430g2553有8個外部通道可以輸入,下面將完成3路輸入控制3個LED亮滅的程序。
寄存器說明
msp430g2553的ADC10寄存器
代碼說明
在熟悉adc10的幾個寄存器後,來看代碼
1、ADC10CTL1 = INCH_5+CONSEQ_1;控制寄存器設置了最高的通道和轉換模式。
2、ADC10AE0|= BIT5+BIT4+BIT3;輸入使能寄存器設置了要輸入的引腳。
3、採樣次數和存放位置:
ADC10DTC1 = 0x03;設置採樣次數
unsigned int a[]={0};
ADC10SA = (unsigned int)a; 存放地址
若p1.5,p1.4,p1.3輸入,採樣3次,通道序列單次(轉換模式)
則a[0]存放p1.5採樣結果,則a[1]存放p1.4採樣結果,則a[2]存放p1.3採樣結果
若p1.5,p1.4,p1.3輸入,採樣6次,通道序重複(轉換模式)
則a[0]存放p1.5採樣結果,則a[1]存放p1.4採樣結果,則a[2]存放p1.3採樣結果
則a[3]存放p1.5採樣結果,則a[4]存放p1.4採樣結果,則a[5]存放p1.3採樣結果
eg:4通道4次重複採樣
unsigned int adc[4];
unsigned int adc_temp[16];
for(i=0;i<4;i++)
adc[i]=(adc_temp[i]+adc_temp[i+4]+adc_temp[i+8]+adc_temp[i+12])>>2;除4
#include <msp430.h>
unsigned int a[]={0};
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
ADC10CTL1 = INCH_5+CONSEQ_1; // A5/A4, single sequence
ADC10CTL0 = ADC10SHT_1 + MSC + ADC10ON +ADC10IE;
ADC10DTC1 = 0x03; // 2 conversions
ADC10AE0|= BIT5+BIT4+BIT3; // P1.3,2,1 ADC10 option select
P1DIR |= BIT0+BIT1+BIT2; // Set P1.0 output
for(;;)
{
ADC10CTL0 &= ~ENC;
ADC10SA = (unsigned int)a; // Data buffer start
while (ADC10CTL1 & ADC10BUSY); // Wait if ADC10 core is active
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
if (a[0] < 0x1FF)
P1OUT &= ~0x01; // Clear P1.0 LED off
else
P1OUT |= 0x01; // Set P1.0 LED on
if (a[1] < 0x1FF)
P1OUT &= ~BIT1; // Clear P1.1 LED off
else
P1OUT |= BIT1; // Set P1.1 LED on
if (a[2] < 0x1FF)
P1OUT &= ~BIT2; // Clear P1.2 LED off
else
P1OUT |= BIT2; // Set P1.2 LED on
}
}
// ADC10 interrupt service routine
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(ADC10_VECTOR))) ADC10_ISR (void)
#else
#error Compiler not supported!
#endif
{
}