⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 只能车控制主程序
💻 C
字号:
#include <hidef.h>      /* common defines and macros */
#include <mc9s12dg128.h>     /* derivative information */
#include"crg.h"
#include"pid.h"

#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"

#define DC_Limit 500


#define MID   5500
#define MAXTURN   800
#define AD_LEVEL  170



#define SPEED 70                  //170,97         168,96       160,95
#define DEG   950/12      //    500/13=38.46;       600/13=46.15




volatile unsigned int stop_flag=0;
volatile unsigned int timer_overflow=0;

volatile int NowSpeed;
volatile unsigned int IC0Counter=0;			  //2.083ms one int
volatile unsigned int IC0Counter_1=0;			  //
    
volatile unsigned int GearWidth[4]={0} ;
volatile unsigned int  GearIndex=0;

    unsigned long GearWidthSum;
    unsigned long AveGearWidth ;
    unsigned long AveSpeed ;
    unsigned int pulse_counter=0; //计数   
   int Sensor;

sCaiXinBoPID SpdPID;
int DCDuty;
int Object_Speed=SPEED;		//100cm/s

int time_up=0;

int atd_value[14]; //量化为0-9的数组


 unsigned int AD_Value[14];

void ATD_Init(void)
  {   ATD0CTL2=0xc0;//不开中断2;  ////上电,标志位快速清零	...	 ATD队列转换完成中断使能
      ATD0CTL3=0x00;//sequence length:8   0;	 //转换队列长度8,非FIFO存储模式,
      ATD0CTL4=0x85;  //8位精度,AD时钟为bus_clk/(2*(5+1))
      //ATD0CTL5=0x91; //右对齐,无符号数,单次转换队列模式,ch 1 begin,6 channels;多通道8路,从通道0开始
  
        ATD1CTL2=0xc0;//ADPU,fast flag clear
        ATD1CTL3=0x30;//sequence length:6,not fifo mode,
        ATD1CTL4=0x85;//8 bit decision,ATD clock:bus_clk/(2*(5+1))
  }
  
  
  
  
 //***************Servo_Init()***************
void Servo_Init(void)      //舵机 16位PWM控制
{
         PWME_PWME1=0;     //disable PWM1  servo 
         PWMPRCLK|= 0x03;  //CLKA:8分频
         PWMCLK=0x00 ;    //这就是默认值//通道1用clock A时钟源
                           //24MHZ/8=3M                         
         PWMPOL_PPOL1 = 1; //先高电平
         
         PWMCAE=0X00;			//对齐方式默认 左对齐
         
         PWMCTL_CON01 = 1; //通道1:16BIT 连接
         PWMPER01  = 60000;//60000:20ms;;;20000//舵机的频率是150Hz	   1/3M * x=1/150Hz
                           //1ms 脉冲 到2ms 脉冲
                           //1.5ms脉冲对应0度
         PWMDTY01 =4500;//4500:1.5ms;	 //控制3500左极限 5500右极限  4500正中央
         PWMCNT01  = 0;		 //写计数寄存器,会使PWMDTYx,PWMPERx进入锁存器,同时使能通道时会从此值

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -