就是中間那些INCH數值跟AE0的數值不對應啊!我運行起來舵機老是亂轉,求高手幫忙,我急用。。感激!!!! #include "msp430g2553.h" #define uint unsigned int #define uchar unsigned char unsigned int a[32],b[4]; unsigned int i=50,j=50;
void delay(uint z); void pwm(); void circle();
void main( void ) { P1OUT=0x00; WDTCTL = WDTPW + WDTHOLD; BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; pwm(); while(1) { ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON, interrupt enabled ADC10CTL0 |= 0x0020; ADC10CTL1 = INCH_4; // input A1 ADC10AE0 |= 0x10; // PA.1 ADC option select ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start __bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit b[1]=ADC10MEM; delay(2); ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON, interrupt enabled ADC10CTL0 |= 0x0020; ADC10CTL1 = INCH_3; // input A3 ADC10AE0 |= 0x08; // PA.3 ADC option select ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start __bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit b[3]=ADC10MEM; delay(2); ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON, interrupt enabled ADC10CTL0 |= 0x0020; ADC10CTL1 = INCH_0; // input A0 ADC10AE0 |= 0x01; // PA.0 ADC option select ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start __bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit b[0]=ADC10MEM; delay(2); ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON, interrupt enabled ADC10CTL0 |= 0x0020; ADC10CTL1 = INCH_5; // input A2 ADC10AE0 |= 0x20; // PA.2 ADC option select ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start __bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit b[2]=ADC10MEM; delay(2); if(b[1]>b[3]) { if(b[1]-b[3]>150) { CCR1=CCR1+i; delay(300); i=i+3; } } if(b[3]>b[1]) { if(b[3]-b[1]>150) { CCR1=CCR1-i; delay(300); i=i+3; } } if(b[0]>b[2]) { if(b[0]-b[2]>150) { CCR1=CCR1+j; delay(300); j=j+3; } } if(b[2]>b[0]) { if(b[2]-b[0]>150) { CCR1=CCR1-j; delay(300); j=j+3; } }
} }
void pwm() { P1DIR|=BIT2; P1SEL|=BIT2; P1DIR|=BIT6; P1SEL|=BIT6; TACTL|= MC_1+TASSEL_2; CCTL1 = OUTMOD_7; CCR0 = 20000; CCR1 = 1000 ; } void delay(uint z) { uint i,j; for(i=210;i>0;i--) for(j=z;j>0;j--); } #pragma vector=ADC10_VECTOR __interrupt void ADC10_ISR(void) { __bic_SR_register_on_exit(CPUOFF); }
// Clear CPUOFF bit from 0(SR)
|