就是中間那些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)
歡迎光臨 (http://m.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |