当前位置:首页 > 智能车光电组程序
} }
//******************************************************** /////////////////////////参数初始化///////////////////////
//******************************************************** void canshuchushihua() {
zhiturn[0]=2800; zhiturn[1]=3300; zhiturn[2]=3600; zhiturn[3]=3900; zhiturn[4]=4200; zhiturn[5]=4500; zhiturn[6]=4500; zhiturn[7]=4800; zhiturn[8]=5100; zhiturn[9]=5400; zhiturn[10]=5700; zhiturn[11]=6200;
Speed [0]=0x2500; Speed[10]=0x12bf; Speed[15]=0x7f8; Speed[20]=0x565;
Speed[25]=0x34e; ////速度已经很慢了可以用在调整路线 Speed[30]=0x312; Speed[34]=0x2cc; Speed[35]=0x29c;
Speed[40]=0x234; ////回头弯最大速度 Speed[45]=0x1e6;
Speed[50]=0x1a8; ////大弧一般速度 Speed[55]=0x191;
Speed[60]=0x158; ////直线最大速度 Speed[65]=0x128; Speed[70]=0x100;
tingcheshineng=0; lushu_servo=4; lushu_speed=5; heixianjishu_speed=0;
heixianjishu_servo=0; /////记录黑线位置的计数器 qipaoxian=0; /////起跑线计数器
add=10;
SPEED=fast;
DOWN_biaozhun=0x200; DOWN_former=2; BLACKLINEUP_former=5;
flag_shache=1; /////flag_shache=1刹车使能 flag_tuxiang=1; /////LASER数组的标志位
flag_caijiwancheng=0;/////10路采集完成标志位,置1表示采集完成 }
//******************************************************** ///////////////////////////主程序/////////////////////////
//******************************************************** void main(void) {
/////设定起跑线个个数qipaoxiansheding(); /////拨码开关置零清零
/////设定速度方案canshusheding(); /////拨码开关置零清零 /////采集预值caijiyuzhi(); /////完成,zhishideng(); /////起跑
HardInit(); PTM=0xff; PORTA=0xff;
/////参数初始化 canshuchushihua();
/////大程序的选择 /////1代表下排五路 /////2代表固定预值 /////3代表动态预值
if(PORTK==1) chengxuleixing=1; if(PORTK==2) chengxuleixing=2; if(PORTK==3) chengxuleixing=3; for(;;) {
if(PORTK==0) break;
}
zhishideng();
if(chengxuleixing==1) { for(;;) {
/////设定起跑线个数 qipaoxiansheding(); PTM=0b11110011; PORTA=0xff;
EnableInterrupts; for(;;)
{
if(flag_caijiwancheng==1) {
flag_caijiwancheng=0;/////10路采集完成标志位清零 for(i=1;i<=10;i++) {
LASER[i]=LASER_chucai[i]; } kuai=40; zhong=35; man=35; caiji_down();
servo_wulu(); //////下排起跑线函数
if(heidian_down>=3) qipaoxianchuli_down(); if(qipaoxian==qipaoxian_geshu) {
PWMDTY23=0; PWMDTY45=0; PWMDTY01=zhiturn[5]; for(;;) { } }
DOWN_former=DOWN; } } } }
else { for(;;) {
fanganshezhi(); qipaoxiansheding(); EnableInterrupts; caiji_yuzhi(); zhishideng(); PTM=0b11110011; PORTA=0xff;
EnableInterrupts; for(;;)
{
if(flag_caijiwancheng==1) {
flag_caijiwancheng=0;/////10路采集完成标志位清零 for(i=1;i<=10;i++) {
LASER[i]=LASER_chucai[i]; }
//////黑线提取 if(chengxuleixing==2) daoluxingcheng(); else {
xiugaiyuzhi(); daoluxingcheng(); }
caiji_down(); //////速度控制
jiluheixianweizhi_speed(heixianjishu_speed);
//////记录函数(普通)宏观控制速度和对舵量产生一个修正舵量 if(heidian>=5) shangpo(); //////舵量控制
servo(); //////下排起跑线函数
if(heidian_down>=2&&qipaoxian_shineng==1) qipaoxianchuli_down(); if(qipaoxian==qipaoxian_geshu) {
PWMDTY23=0; PWMDTY45=0;
PWMDTY01=zhiturn[BLACKLINEUP]; for(;;)
{ } }
if(heidian_down>=3&&heidian>=5) GotoDebug(); /////出错保护 BLACKLINEUP_former=BLACKLINEUP; DOWN_former=DOWN; }
//////速度控制
if(flag_yunsu==1) yunsu(speed); else {
if(SPEED==fast) yunsu(fast); else if(SPEED==mid) yunsu(mid); else yunsu(sudu[BLACKLINEUP]); } } } } }
#pragma CODE_SEG __NEAR_SEG NON_BANKED //指示该程序在不分页区 void interrupt 66 PIT_caji(void) {
PITCE_PCE0=0;//关闭通道0(采集)中断
//该中断每触发1次,表明激光管点亮时间已经足够,可以进行AD转换 tuxiangcaiji_shuanglu(flag_tuxiang); flag_tuxiang=flag_tuxiang+1; /////初采完成 if(flag_tuxiang==6) {
flag_caijiwancheng=1;/////10路采集完成标志位 flag_tuxiang=1;////计数器清零 }
PITTF_PTF0=1;//清中断标志位
PITCE_PCE0=1;//打开通道0(采集)中断 }
共分享92篇相关文档