#include<msp430x16x.h>
void initADC();
void initTA(void);
// unsigned long ADC12TM=0;
float sample[3];//第一次电位器的值和以后测的值
int motorstep=0,t;//步进电机转步数
void main()
{
WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
P6SEL=BIT0;//p60口电位器输入
P6DIR &=~BIT0;
P1DIR=0XFF;
P1OUT=0XFF;
initADC();
for(t=50;t>0;t--);
//if(~(P2IN&BIT6))
//{
// for(t=5000;t>0;t--);
initTA();
//if(~(P2IN&BIT6))
//{
//ADC12CTL0 |=ENC;
ADC12CTL0 |=ADC12SC;
P1OUT &=~BIT6;
motorstep=(int)(sample[3]-sample[1])/0.45;
//ADC12CTL0 &=~ADC12SC;
//}
//}
while(1)
{
_NOP();
}
}
void initADC()
{
ADC12CTL0=SHT0_4+MSC+ADC12ON;//设置参考电压2.5v
ADC12CTL1=SHP+CONSEQ_2;
ADC12IE=0X01;
ADC12CTL0 |=ENC;
//ADC12CTL0 |=ADC12SC;
_EINT();
}
void initTA()
{
CCTL0=CCIE;
CCR0=40;
TACTL=TASSEL_1+MC_1;
}
#pragma vector=ADC12_VECTOR
__interrupt void inputADC()
{
sample[t++]=ADC12MEM0;
ADC12CTL0 &=~ENC;
ADC12CTL0 &=~ADC12SC;
}
#pragma vector=TIMERA0_VECTOR
__interrupt void motor_PWM()
{
if(motorstep>0)
{
P1OUT &=~BIT0;
P1OUT^=BIT2;
motorstep--;
}
else
if(motorstep<0)
{
P1OUT|=BIT0;
P1OUT^=BIT2;
motorstep++;
}
else
CCTL0 &=~CCIE;
}