第一次做智能车。。。网上找了段程序,,,有没有人能教教人家呢?
//主函数// void main(void) { DisableInterrupts; //禁止中断 PWMDTY23=3800; //占空比寄存器 PLL_Init(); //锁相环初始化 DDRA=0X00; //定义A的脚为输入脚 boma(); //拨码开关 PACBInit(); // PT7 获得脉冲值 RTI_init(); //RTI 产生 10ms 的中断定时 PWM_rudder_init(); //舵机初始化 PWM_init_motor(); //电机初始化 AD_Init(); //AD转换 DDRB=0XFF; //定义B的脚为输出脚 PORTB=0X03; //1号与2号灯亮 delay(5000); //4000 3s左右??应该是5ms吧?? PORTB=0xFC; //3号与4号灯亮 Checkstart(); //检测起跑线 EnableInterrupts; //使能中断 /* put your own code here */ for(;;) { while(!ATD0STAT2_CCF0); //等待转换结束while(ATDOSTAT2_CCF0==1) left1=ATD0DR0; //读取结果寄存器left1的值 while(!ATD0STAT2_CCF2); // 等待转换结束while(ATDOSTAT2_CCF1==1) left2=ATD0DR2; //读取结果寄存器的值 while(!ATD0STAT2_CCF1); // 等待转换结束while(ATDOSTAT2_CCF2==1) right1=ATD0DR1; //读取结果寄存器的值 while(!ATD0STAT2_CCF3); // 等待转换结束while(ATDOSTAT2_CCF3==1) right2=ATD0DR3; //读取结果寄存器的值 AR_LEFT=left1+left2; AR_RIGHT=right1+right2; CR=(AR_RIGHT-AR_LEFT)/10; if(Pulse_count>65)Flag_gaosu=1; else Flag_gaosu=0; if(AR_RIGHT<110||AR_LEFT<95) //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ left93 { if(pref>3800) //if(AR_RIGHT<110) f=4500; //f=3100; if(pref<3800) //if(AR_LEFT<95) f=3100; //f=4500; mkp=b_mkp[5]; mki=b_mki[5]; mkd=b_mkd[5]; ideal_speed=s_table[5]; } else{ Roadjudge(); //先对道路进行判断 rudder_ctrl(); //调整舵机 motor_ctrl1(); //调整电机的pid参数 } if(f>4500)f=4500; if(f<3100)f=3100; PWMDTY23=f; pref=PWMDTY23; motor_ctrl2(); } } /* loop forever */ #pragma CODE_SEG__NEAR_SEG NON_BANKED //?? interrupt 7 void Int_TimerOverFlow(void) { Pulse_count= PACNT; //脉冲计数赋值 PACNT = 0X0000; CRGFLG_RTIF=1; //?? if(ting<1100)ting++; else ting=1100; } interruptVectorNumber_Vtimch0 void stop(void) { DisableInterrupts; TFLG1_C0F=1; //清除中断标志位 //PORTB=0X03;//1号与2号灯亮 // delay(20); // PORTB=0xFC;//3号与4号灯亮 // ganhuang++; //if(ganhuang%4==0){ // ganhuang=0; //PORTB=0xFC;//3号与4号灯亮 //ganhuang=0; //TIE=TIE&0X0FE; flag=1; if(ting==1100) { flag=2; PORTB=0xF6; for(i=0;i<3000;i++) { while(!ATD0STAT2_CCF0); // 等待转换结束while(ATDOSTAT2_CCF0==1) left1=ATD0DR0;//读取结果寄存器left1的值 while(!ATD0STAT2_CCF2); // 等待转换结束while(ATDOSTAT2_CCF1==1) left2=ATD0DR2;//读取结果寄存器的值 while(!ATD0STAT2_CCF1); // 等待转换结束while(ATDOSTAT2_CCF2==1) right1=ATD0DR1;//读取结果寄存器的值 while(!ATD0STAT2_CCF3); // 等待转换结束while(ATDOSTAT2_CCF3==1) right2=ATD0DR3;//读取结果寄存器的值 AR_LEFT=left1+left2; AR_RIGHT=right1+right2; CR=(AR_RIGHT-AR_LEFT)/10; rkp=9; rkd=0; f=3800+rkp*CR+rkd*(CR-preCR); preCR=CR; if(f>4500)f=4500; if(f<3100)f=3100; PWMDTY23=f; pref=PWMDTY23; //mkp=20; //mki=0; //mkd=0; //ideal_speed=0; //motor_ctrl2(); PWMDTY01=0; PWMDTY45=0; delay(2); } } EnableInterrupts; } // asm cli; #pragma CODE_SEGDEFAULT
不知后面什么意思啊???有没有人能教教人家呢??ting是干嘛用的呢?为什么ting==1100后进行那一大堆呢??
|