///舵机函数///
/******************************倍频
*****************************************/ void vPLLInit(void) {
unsigned char refdv; refdv=3; CLKSEL=0X00; PLLCTL_PLLON=1;
//disengage PLL to system
//turn on PLL
SYNR =0xc0 | ((80/(refdv+1))-1); REFDV=0x40 | refdv;
POSTDIV=0x00; //pllclock=2*osc*(1+SYNR)/(1+REFDV)=160MHz; _asm(nop); //BUS CLOCK=80M _asm(nop);
while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it; CLKSEL_PLLSEL =1; }
/******************************倍频
*****************************************/
unsigned int cur_speed; unsigned int cur_length;
//engage PLL to system;
////////控速函数/////
void controlSpeed(int speed) {
int pwm_motor=0;
pwm_motor=(speed-cur_speed)*20; //////////dianji
if(pwm_motor>PWMPER67) PWMDTY67=PWMPER67; else if(pwm_motor>0) PWMDTY67=pwm_motor; else
PWMDTY67=0; }
////////控速函数/////
/****测速初始化****/ void speed_Init(void) {
PACTL_PAMOD=0;//0 Event counter mode.
PACTL_PEDGE=1;//1 Rising edges on IOC7 pin cause the count to be incremented. PACTL_PAEN=1;//1 Pulse Accumulator system enabled. }
//////stl测速定时器中断///////////// void Init_INT_Timer(void) {
TSCR2_PR=7; TSCR2_TOI|=1; TSCR1_TEN=1; }
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 16 INT_Timer0(void) {
cur_speed=PACNT/100;
PACNT=0;
cur_length+=cur_speed;
TFLG2_TOF=1; }
////SCI初始化////
void ini_SCI(void){
SCI0BD=(80*1000000/115200/16); //115200=(busclk*1000000/SCI0BD/16); SCI0CR1=0x00; SCI0CR2=0x0C; }
void TERMIO_PutChar(unsigned char ch) {
while(!(SCI0SR1&0x80)); SCI0DRL=ch;
}
/****SCI初始化****/
////////////////////////A/D初始化/////////////////////////////////// void ini_AD(void) {
ATD0DIEN=0x00;
ATD0CTL1=0x00;
ATD0CTL2=0b10000000; //0b11000000; // ATD0CTL3=0b11000000; //A/D转换序列长度为8 ATD0CTL4=0b00010110; //8位精度,
//禁止数字输入
ATDclock=Busclock/(PRS+1)/2=BusClock/40=2MHz,要求ATDclock<=2MHz&&ATDclock>=500KHz
//ATD0CTL4=0x81; // 8位精度, 2个时钟,
ATDClock=[BusClock*0.5]/[PRS+1] ; PRS=1, divider=12
ATD0CTL5=0b00110000; //右对齐无符号数,连续转换序列模式,2通道采样,
AN0-AN7模拟量通道输入
}
///////////////////////A/D初始化/////////////////////////////////////
//*******************************读取转换结果****************************** byte ReadATD(byte ch) {
byte ad=0;
while(!ATD0STAT0_SCF);
switch(ch) { default: case 0:
ad= ATD0DR0L; break; case 1:
ad= ATD0DR1L; break; case 2:
ad= ATD0DR2L; break; case 3:
ad= ATD0DR3L; break; /* case 4: ad= ATD0DR4L; break; case 5:
ad= ATD0DR5L; break; case 6:
ad= ATD0DR6L; break; case 7:
ad= ATD0DR7L; break; */ } return ad; }