基于飞思卡尔图像采集.docx
《基于飞思卡尔图像采集.docx》由会员分享,可在线阅读,更多相关《基于飞思卡尔图像采集.docx(13页珍藏版)》请在冰豆网上搜索。
基于飞思卡尔图像采集
附录C:
程序原代码
#include/*commondefinesandmacros*/
#include/*derivativeinformation*/
#pragmaLINK_INFODERIVATIVE"mc9s12dg128b"
#definehsTFLG1_C0F
#defineclr_hsTFLG1_C0F
#definevideoATD0DR0
#defineodd_evenPTIS_PTIS2
/********************************************************\
DeclarationofValuebales
\********************************************************/
//CCDvariables//
#definer_max40
#definel_max40
charccd_d[r_max+2][l_max];
charccd[l_max];
charr_chg;
charrow;
charline;
charinterval=7;
charoeflag=0;
chary_up[r_max+2];
chartemp_up[r_max+2];
#definelatch20
#definelatch_neg-20
charw_flg[r_max+2];
intdif;
//-------------//
//SCIvariables//
charsci_d;
//-------------//
//PWMvariables//
#definemid_P20
intctl;
第VI页
第十一章总结
interr[r_max+2];
unsignedcharm_speed;
intstr;
intturn;
unsignedcharpulse[6];
unsignedcharspeed;
unsignedcharturn_S;
unsignedcharstr_S;
//-------------//
//generalvariables//
charx,y,z;
//-----------------//
/********************************************************\
DeclarationofFunctions
\********************************************************/
//overallinitiation
voidini_orall(void){
DDRS_DDRS2=0;
DDRS_DDRS7=1;
TIOS_IOS0=0;
TIOS_IOS1=0;
TCTL4=0b00001101;
TSCR1_TEN=1;
ICPAR_PA1EN=1;
DDRH=0xff;
}
//initiatebusclock
voidini_PLL(void){
REFDV=3;
SYNR=7;
while(0==CRGFLG_LOCK);
CLKSEL=0x80;
VII
第页
}
/****SCI****/
//initiateSCI
voidini_SCI(void){
SCI0BD=208;
SCI0CR1=0x00;
SCI0CR2=0x0C;
}
//SCIreceive
voidre_sci(void){
while(SCI0SR1_RDRF!
=1);
sci_d=SCI0DRL;
}
//SCItransmit
voidtx_sci(chartx_d){
while(SCI0SR1_TC!
=1);
while(SCI0SR1_TDRE!
=1);
SCI0DRL=tx_d;
}
/***********/
/****PWM****/
//PWM&33886initialization
voidini_PWM(void){
PTS_PTS7=0;
PWME=0x00;
PWMCTL_CON01=1;
PWMPRCLK=0x33;
PWMSCLA=100;
PWMSCLB=1;
PWMCLK=0b00011100;
PWMPOL=0xff;
PWMCAE=0x00;
PWMPER0=0x4e;
第VIII页
第十一章总结
PWMPER1=0x20;
PWMDTY0=0x18;
PWMDTY1=0x38;
PWME_PWME1=1;
PWMDTY2=120;
PWMPER2=200;
PWME_PWME2=1;
}
//Settheangleofsteer
voidpwm_set(intdutycycle)
{
inthigh8;
high8=dutycycle&0xFF00;
PWMDTY0=high8>>8;
PWMDTY1=dutycycle&0x00FF;
}
/*************/
/****SPEED****/
//InitiatetheAveragespeed
voidspeed_init(void){
DDRM_DDRM0=0;
DDRM_DDRM1=0;
DDRM_DDRM2=0;
DDRM_DDRM3=0;
DDRM_DDRM4=0;
DDRM_DDRM5=0;
DDRJ_DDRJ6=0;
DDRJ_DDRJ7=0;
if(1==PTIM_PTIM0){
m_speed=120+
2*(PTIM_PTIM1*10+PTIM_PTIM2*5+PTIM_PTIM3*2+PTIM_PTIM4*2+PTIM
_PTIM5+PTIJ_PTIJ6+PTIJ_PTIJ7);
}else{
m_speed=120-
2*(PTIM_PTIM1*10+PTIM_PTIM2*5+PTIM_PTIM3*2+PTIM_PTIM4*2+PTIM
_PTIM5+PTIJ_PTIJ6+PTIJ_PTIJ7);
IX
第页
}
PWMDTY2=m_speed;
str_S=m_speed/2-10;
}
//Getthecurrentspeed
voidget_speed(){
chark;
for(k=0;k<5;k++){
pulse[k]=pulse[k+1];
}
pulse[5]=PACN1;
speed=pulse[5]-pulse[0];
}
//Setthecurrentspeed
voidset_speed(unsignedchara){
if(speedPWMDTY2=200;
}
if(speed>a){
PWMDTY2=0;
}
}
/*************/
/****CONTROL****/
voidvhcl_pid(void){
get_speed();
if(err[8]>0){
ctl=6250+42*err[8];
}else{
ctl=6250+38*err[8];
}
//------------------------
dif=err[2]+err[10]-2*err[6];
if((dif>-7)&&(dif<7)&&(err[6]>-15)&&(err[6]<15)){
str++;
第X页
第十一章总结
turn=0;
PTH=0xff;
}else{
turn++;
if(turn>20){
str=0;
}
PTH=0x00;
}
//------------------------
if(turn>0){
set_speed(29);
}else{
set_speed(str_S);
}
//-----------------------------
if(ctl<5200)ctl=5200;
if(ctl>7400)ctl=7400;
pwm_set(ctl);
if(1==odd_even)oeflag=1;
if(0==odd_even)oeflag=0;
}
/***********/
/****CCD****/
//InitiateA/Dregisters
voidini_AD(void)
{
ATD0CTL2=0xC0;
ATD0CTL3=0x08;
ATD0CTL4=0x81;
ATD0CTL5=0xA0;
ATD0DIEN=0x00;
}
XI
第页
//ScantheCCDimage
voidccd_sc(void){
r_chg=0;
while(r_chg<26-interval){
if(1==hs){
clr_hs=1;
r_chg++;
}
}
line=0;
r_chg=0;
for(row=1;row<=r_max;){
if(1==hs){
clr_hs=1;
r_chg++;
}
if(r_chg>=interval){
ini_AD();
for(line=0;linewhile(!
ATD0STAT1_CCF0);
ccd[line]=video;
}
line=6;
row++;
w_flg[row-1]=0;
r_chg=0;
ATD0CTL2=0x00;
}
if((r_chgccd_d[row-1][line]=ccd[line];
dif=ccd[line]-ccd[line+3];
if(0==w_flg[row-1]){
if(dif>latch){
temp_up[row-1]=line+3;
w_flg[row-1]=1;
}
}else{
第XII页
第十一章总结
if(dif