3ms程序代码手册.docx
- 文档编号:25570746
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:46
- 大小:22.55KB
3ms程序代码手册.docx
《3ms程序代码手册.docx》由会员分享,可在线阅读,更多相关《3ms程序代码手册.docx(46页珍藏版)》请在冰豆网上搜索。
3ms程序代码手册
#include
#include
#pragmaLINK_INFODERIVATIVE"mc9s12dg128b"
//#include"sci.h"
#definesciflag1;
#defineflag1;
externucharcflag;
externinti,j,m,n;
externbytecs[40][60];
/*-----------------------*/
/*-------初始化----------*/
voidInputInit(){
TIE_C1I=0;//channel0interruptDISable
TIOS_IOS1=0;//channel0inputcapture
TCTL4_EDG1A=1;
TCTL4_EDG1B=0;
}
/*-----------------------*/
/*--中断初始化--------------------*/
voidinit_IRQ(){
INTCR_IRQE=1;//IRQselectedgesensitiveonly
INTCR_IRQEN=1;//externalIRQenable
}
/*------ADT初始化--------------*/
voidADCInit(void)
{
ATD0CTL2_ADPU=1;//ENABLEATDPOWER
ATD0CTL2_AFFC=1;//FASTCLEARFLAGALL
ATD0CTL2_ASCIE=1;
ATD0CTL3_S1C=1;//ConversionSequenceLength
ATD0CTL3_S4C=0;
ATD0CTL3_S2C=0;
ATD0CTL3_S8C=0;
//ATD0CTL3=ATD0CTL3_S1C_MASK;
//每个序列2次转换,NoFIFO,Freeze模式下继续转换
ATD0CTL4_SRES8=1;
ATD0CTL4_PRS=0;
ATD0CTL5_DJM=1;
//8位精度,1个时钟+4A/D时钟周期,ATDClock=[BusClock*0.5]/[PRS+1];PRS=5,divider=12
//AD时钟10MATDclock=[BusClock]/[PRS+1]*0.5
ATD0CTL5_CC=0;
ATD0CTL5_CA=0;
ATD0CTL5_CB=0;
ATD0DIEN=0x00;//禁止数字输入
}
#pragmaCODE_SEGNON_BANKED
#pragmaTRAP_PROC
interruptvoidInputInt(void){
TFLG1_C1F=1;
j=0;
i++;
if(i==315){
TIE_C1I=0;
INTCR_IRQEN=0;
}
#ifflag
ATD0CTL5_SCAN=0;
if(i>=35&&i<315&&(i<169&&(i-35)%5==0)){
ATD0CTL5_SCAN=1;
m=(i-35)/5;
}
if(i>=169&&i<315&&(i-169)%12==0){
ATD0CTL5_SCAN=1;
m=(i-169)/12+27;
}
#else
ATD0CTL5_SCAN=1;
#endif
}
#pragmaCODE_SEGDEFAULT
#pragmaCODE_SEGNON_BANKED
#pragmaTRAP_PROC
voidIRQ_ISR()
{
TIE_C1I=1;;
//DDRB=0XFF;
//PORTB=0XF0;
//while
(1);
i=0;
j=0;
}
#pragmaCODE_SEGDEFAULT
#pragmaCODE_SEGNON_BANKED
#pragmaTRAP_PROC
voidInt_AD0(void)
{wordAD_wData;
AD_wData=ATD0DR0;
#ifflag
cs[m][j++]=(byte)AD_wData;
#else
cs[i][j++]=(byte)AD_wData;
#endif
}
#pragmaCODE_SEGDEFAULT
#include
#include
#pragmaLINK_INFODERIVATIVE"mc9s12dg128b"
voidSciInit(){
SCI0BD=208;//SCIbaudrate=SCImoduleclock/(16xBR)
SCI0CR1=0x00;//normaloperation,8-bitdata,noparity
SCI0CR2=0x0C;//enabletransmitter,enablereceiver
}
/***********************************
************************************/
voidtransmit_sci(uchartransmit_data)
{
while(SCI0SR1_TC!
=1);
while(SCI0SR1_TDRE!
=1);//waituntiltransmitfinished
SCI0DRL=transmit_data;
}
/***********************************
************************************/
voidSciTransmitString(uchar*t,intn){
uinti;
for(i=0;i while(! SCI0SR1_TDRE); SCI0DRL=*t; //while(! SCI0SR1_TC); t++; } } #include #include #pragmaLINK_INFODERIVATIVE"mc9s12dg128b" #include #include #include"pwm.h" #definerow40 #defineline40 #defineBLACKMAX130 #defineWHITEMAX255 #defineyuzhi25 #defineyuzhihou18 #defineThresholdkp116 #defineThresholdkp28 #definexganrao1 #definebganrao2 #definewganrao3 #definewellroad5 #definezhidao6 #definewandao7 #definesroad8 #definesroadb9 #definesroads10 //#definewandaor9 #definexroadblacke6 externwordSpeedValue; externwordspeedzhankongbi; wordzspeedvalue=0; wordsspeedvalue=0; wordwspeedvalue=0; wordcspeedvalue=0; bytebc[33]; bytejiaochaxian=0; byteruwanbiaozhi=0; bytechazhib=0; bytedifnum=0; bytechazhis=40; bytedifarray[26]; bytestangle(void); typedefstructpoint{ intx; inty; }point; intangle=0; intlastangle=0; intoutangle=0; byteK; byteKD; uchargetlinecenter(uchari); ucharfgetlinecenter(uchari); uchargetlinecenter1(uchari); bytegetstartlinecenter(ucharj); bytegetblackline(byteoline,byteorow); bytecopycs[40][42]; ucharbline[40]; bytethreshold=WHITEMAX; bytethresholdmax=0; bytethresholdmin=255; ucharstart=0; ucharend=0; byteendp=0; externbytecs[40][60]; externucharfz[row]; externbytemax[row]; externbytecmax[21]; bytexz=0; longblackcontrol; bytenumber=0; //均值 byteroad; doublejuzhi=0; doublefangcha=0; ulongleicha=0; voidroadtype(); bytestartkind=0; byteslrecognise(void); voidanglecontrol(void); /*******************************************/ /********赛道判断变量***********/ voidroadparameter(void); voidsdch(pointp1,pointp2); voidchange(pointp[6]); doublesa; doubleca; doublesdpuan(void); doubled,xp,pe; pointceshi[7]; doublepancha[10]; bytemincenter=0; bytemincenternum=0; bytemaxcenterend=0; bytemaxcenterstart=0; bytemaxcenterstartnum=0; bytemaxcenterendnum=0; bytemincenterend=0; bytemincenterstart=0; byteroadkind; bytelastroadkind=0; bytesroadcount=0; bytezhidaocount=0; bytewandaocount=0; bytenumcenter=0; bytebnum=0; byteroadturnl=0; /****************************************/ //直线拟合变量 pointx[10]; voidzhixian(void); voidlinenihe(void); intfun(intt,intn); voidquqi(int*a,int*b,int*c,int*d); intf0[10]; intf1[10]; intf2[10]; doubleh=0; doublech[4]; doublea=0; doubleb=0; doublepc=0; //inti=0; //intj=0; intA,B,C,D; intF1=0; intF2=0; floatpianjiao=0; floatlpianjiao=0; doubleq=0; intsroadcontrol(void); /********************************************/ ucharCountThreshold(inti) { unsignedintmax1=BLACKMAX,max2=BLACKMAX,min1=WHITEMAX,min2=WHITEMAX; intj; for(j=3;j<40;j++){ //if((cs[i][j] //continue; if(cs[i][j]>max1){ max2=max1; max1=cs[i][j]; }elseif(cs[i][j]>max2){ max2=cs[i][j]; }elseif(cs[i][j] min2=min1; min1=cs[i][j]; }elseif(cs[i][j] min2=cs[i][j]; } //死循环标志 //PORTB_BIT0=0; } if(i>20) return((uchar)((max2+min2)/2-(uchar)(Thresholdkp1*(max2-min2)/100))); else return((uchar)((max2+min2)/2-(uchar)(Thresholdkp2*(max2-min2)/100))); //return120; } /**************************************************************************/ voidvideo(){ ////////////////////////////////////////////////////////// //// //黑线提取与虑波// //// //// ////////////////////////////////////////////////////////// uchari=0; ucharu=0; byteonum=0; max[end]=0; start=0; end=0; for(i=0;i max[i]=0; } for(i=row-1;i>=19;i=i-5){ fz[i]=CountThreshold(i); } thresholdmax=0; thresholdmin=255; for(i=row-1;i>=19;i=i-5){ if(thresholdmax thresholdmax=fz[i]; } for(i=row-1;i>=19;i=i-5){ if(thresholdmin>fz[i]) thresholdmin=fz[i]; } threshold=(byte)((fz[39]+fz[34]+fz[29]+fz[24]+fz[19]-thresholdmin-thresholdmax)/3); /******************************************************************/ /*for(i=row-1;i>=20;i--) for(j=4;j if(cs[i][j] copycs[i][j]=0; else copycs[i][j]=255;*/ /********************************************************************/ for(i=row-1;i>=19;i--){ max[i]=getlinecenter(i); if(max[i]>=39||max[i]<5) max[i]=0; } for(i=row-1;i>0;i--){ if(max[i]! =0){ start=i; break; } } for(i=19;i if(max[i]! =0){ end=i; break; } /**********************************************/ if(start>=19) if(getstartlinecenter(start)! =xganrao) for(i=start-1;i>=19;i--){ if(getstartlinecenter(i)==xganrao) max[i]=max[i+1]; //死循环标志 //PORTB_BIT1=0; }else for(i=start-6;i<=start;i++){ if(getstartlinecenter(i)==xganrao) max[i]=max[i-1]; //sixunhuan //PORTB_BIT2=0; } if(end<=start){ if(fabs(max[end]-fgetlinecenter(end))>4){ for(i=end;i if(fabs(max[i]-fgetlinecenter(i))<4){ xz=max[i]; u=i; break; } for(i=end;i if(fabs(fgetlinecenter(i)-max[i])>3){ if(fabs(fgetlinecenter(i)-xz) max[i]=fgetlinecenter(i); } } //while (1); } elseif(fabs(max[start]-fgetlinecenter(start))>4){ for(i=end+1;i<=start;i++){ if(fabs(fgetlinecenter(i)-max[i-1]) max[i]=fgetlinecenter(i); } } elseif(fabs(max[end]-fgetlinecenter(end))<4&&fabs(max[start]-fgetlinecenter(start))<4){ for(i=end+1;i if(fabs(max[i]-max[i+1])>4||fabs(max[i]-max[i-1])>4){ if(fabs(fgetlinecenter(i)-max[end]) max[i]=fgetlinecenter(i); } } } ///////////////////////////////////////////////////////// if(start>=end) for(i=start-1;i>end+1;i--){ if(fabs(max[i]-max[i+1])>4&&fabs(max[i]-max[i-1])>4) max[i]=max[i-1]; //SIXUNHUAN //PORTB_BIT3=0; } end=0; for(i=19;i if(max[i]! =0){ end=i; break; } /*for(i=end;i>0;i--){ max[i]=getblackline(max[i+1],i); }*/ if(end! =0){ onum=0; for(i=end;i>0;i--){ max[i]=getblackline(max[i+1],i); if(max[i]! =0) onum=0; if(max[i]==0&&onum<3){ max[i]=max[i+1]; cs[i][max[i]]=cs[i+1][max[i+1]]; onum++; /*if(onum==2){ PORTB=0XF0; while (1); }*/ } if(onum==3){ break; } } if(max[1]! =0){ max[0]=getblackline(max[1],0); } } for(i=0;i if(max[i]! =0){ end=i; break; } } ///发数据 //transmit_sci(222); //SciTransmitString(max,40); //transmit_sci(end); /*********算前20中心平均值*************************/ for(i=row-1;i>20;i--){ blackcontrol=max[i]+blackcontrol; if(max[i]! =0) number++; } blackcontrol=(long)(blackcontrol/number); //while (1); ////////////////////////////////////////////////////////// //// //赛道判断// //// //// ////////////////////////////////////////////////////////// roadparameter(); /////////清标志 roadkind=0; /**************s弯判断******************/ mincenter=0; mincenternum=0; maxcenterend=0; maxcenterstart=0; maxcenterstartnum=0; maxcenterendnum=0; mincenterend=0; m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ms 程序代码 手册