Всем привет.
Вот такая проблема.
Последовательно опрашиваю АЦП канал 0 и канал 1.
А в результате только канал тот который первый в прогамме.
CODE
// Built with IAR Embedded Workbench [Kickstart] Version : 4.11
//******************************************************************************
#include <msp430x12x2.h>
volatile char cmd;
volatile int A0,A1;
read_adc(void)
{
ADC10CTL1=ADC10SSEL_0+INCH_0;
ADC10CTL0 = ADC10SHT_0 + ADC10ON ;
ADC10AE = ADC10AE0; // P2.0 êàê âõîä ÀÖÏ
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
while (ADC10CTL1 & BUSY); // Wait if ADC10 core is active
A0=ADC10MEM;
ADC10CTL1=ADC10SSEL_0+INCH_1;
ADC10CTL0 = ADC10SHT_0 + ADC10ON ;
ADC10AE = ADC10AE1; // P2.1 êàê âõîä ÀÖÏ
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
while (ADC10CTL1 & BUSY); // Wait if ADC10 core is active
A1=ADC10MEM;
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1DIR |= BIT0; // Set P1.0 to output direction
P1OUT &=~ BIT0; // Óñòàíîâèòü ïåðâîíà÷àëüíî â 0
P2DIR |= BIT3; // Set P2.3 to output direction
P2OUT &=~ BIT3; // Óñòàíîâèòü ïåðâîíà÷àëüíî â 0
CCTL0 = CCIE; // CCR0 interrupt enabled
CCR0 = 0xFFFF;
TACTL = TASSEL_2 + MC_1; // SMCLK, upmode
P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD íàçíà÷åíèå íîæåê ïîðòà
ME2 |= UTXE0 + URXE0; // âêëþ÷èòü USART
UCTL0 |= CHAR; // 8-áèò â ñèìâîëå
UTCTL0 |= SSEL1; // UCLK = SMCLK âûáîð ÷àñòîòû òàêòèðîâàíèÿ îò DCO
UBR00 = 0x4E; // 750 kHz 9600
UBR10 = 0x00; //
UMCTL0 = 0x10; //
UCTL0 &= ~SWRST; // Initialize USART state machine
IE2 |= URXIE0; // Âêëþ÷èòü ïðåðûâàíèå îò USART
_BIS_SR(GIE);
for (;;)
{
read_adc();
if (cmd=='a') // АЦП0
{
while (!(IFG2 & UTXIFG0));
TXBUF0 = A0>>2;
cmd='0';
};
if (cmd=='b') // АЦП1
{
while (!(IFG2 & UTXIFG0));
TXBUF0 = A1>>2;
cmd='0';
};
}
}
// Timer A0 interrupt service routine
volatile int i;
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
i=i+1;
if (i==10)
{
i=0;
P1OUT ^= BIT0; // Toggle P1.0
}
}
// USART0
#pragma vector=USART0RX_VECTOR
__interrupt void usart0_rx (void)
{
cmd=RXBUF0; }
Все спасибо.Уже разобрался.
После каждой строки A=ADC10MEM;
надо было сбрасывать ENC строкой ADC10CTL0 &= ~ENC;