📄 main.c
字号:
#include <math.h>
#include <hidef.h> /* common defines and macros */
#include <mc9s12dg128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
void ATD_init(void);
void GETATDVALUE(void);
void PWM_dir_init(void);
void PWM_motor_init(void);
void ADJUST_dir(char degree);
void ADJUST_speed(uchar pwmduty);
void port_init(void);
void TEST_speed(void);
uchar advalue[8];
uchar dirr[8]={0};
uchar admax,dir,speed,formspeed,flag,dirflag,yaokong,sum;
char P;
void main(void){
uchar i;
port_init();
PWM_dir_init();
PWM_motor_init();
ATD_init();
SCI0Init();
ECT_Init();
flag=0;
dirflag=0;
yaokong=0;
speed=0;
formspeed=200;
PWMDTY3=68;
dir=3;
for(;;)
{
//admax=0;
GETATDVALUE();
sum=0;
for(i=0;i<8;i++)
{
dirr[i]=0;
if(advalue[i]<0xa7)
{
dirr[i]=1;
dir=i;
sum=sum+dirr[i];
}
}
if(sum>1)
{
if(dirr[3]==1||dirr[4]==1)
{
if(dirr[3]==1) dir=3;
if(dirr[4]==1) dir=4;
}
if(dirr[2]==1||dirr[5]==1)
{
if(dirr[2]==1) dir=2;
if(dirr[5]==1) dir=5;
}
if(dirr[1]==1||dirr[6]==1)
{
if(dirr[1]==1) dir=1;
if(dirr[6]==1) dir=6;
}
if(dirr[0]==1||dirr[7]==1)
{
if(dirr[0]==1) dir=0;
if(dirr[7]==1) dir=7;
}
}
PORTB=dir;
if(dir==0) ADJUST_dir(-70);
if(dir==7) ADJUST_dir(70);
if(dir==1) ADJUST_dir(-48);
if(dir==6) ADJUST_dir(48);
if(dir==2) ADJUST_dir(-30);
if(dir==5) ADJUST_dir(30);
if(dir==3) ADJUST_dir(-0);
if(dir==4) ADJUST_dir(0);
}
}
void port_init(void)
{
DDRA=0X00;
PORTA=0X00;
DDRB=0XFF;
PORTB=0X00;
}
void PWM_dir_init(void)
{
PWMCTL_CON45=1; //4和5联合成16位PWM;
PWMCAE_CAE5=0; //选择输出模式为左对齐输出模式
PWMCNT45=0; //计数器清零;
PWMPOL_PPOL5=1; //正脉冲
PWMPRCLK=0; //clockA64分频; clockA=busclock/64=8MHZ;
PWMSCLA=4; //进行8分频;pwm clock=8M/8=1MHz;
PWMPER45 = 20000; //周期20ms; 50Hz;
PWMDTY45 = 1500; //高电平时间为1.5ms;
PWMCLK_PCLK5 = 1; //选择clock SA做时钟源;
PWME_PWME5 = 1; //开启PWM
}
void PWM_motor_init(void){
PWMCAE_CAE3=0;
PWMCNT3=0;
PWMPOL_PPOL3=1;
PWMPRCLK=0;
PWMSCLB=8;
PWMPER3=200;
PWMDTY3=0;
PWMCLK_PCLK3=1;
PWME_PWME3=1;
}
void ADJUST_dir(char degree)
{
PWMDTY45=(word)(degree+100)*5+1000;
}
void ATD_init(void){ //ATD初始化
ATD0CTL3=0X00; //通道0作为AD采集通道
ATD0CTL4=0X83; //8位
ATD0CTL5=0XB0; //通道0连续采集
ATD0DIEN=0X00;
ATD0CTL2=0XC0;
advalue[0]=0;
advalue[1]=0;
advalue[2]=0;
advalue[3]=0;
advalue[4]=0;
advalue[5]=0;
advalue[6]=0;
advalue[7]=0;
}
void GETATDVALUE(void)
{
while(!ATD0STAT1_CCF0);
advalue[0]=ATD0DR0L;
while(!ATD0STAT1_CCF1);
advalue[1]=ATD0DR1L;
while(!ATD0STAT1_CCF2);
advalue[2]=ATD0DR2L;
while(!ATD0STAT1_CCF3);
advalue[3]=ATD0DR3L;
while(!ATD0STAT1_CCF4);
advalue[4]=ATD0DR4L;
while(!ATD0STAT1_CCF5);
advalue[5]=ATD0DR5L;
while(!ATD0STAT1_CCF6);
advalue[6]=ATD0DR6L;
while(!ATD0STAT1_CCF7);
advalue[7]=ATD0DR7L;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -