基于飞思卡尔图像采集Word文档下载推荐.docx
《基于飞思卡尔图像采集Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于飞思卡尔图像采集Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
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!
while(SCI0SR1_TDRE!
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-
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(speed<
a){
PWMDTY2=200;
if(speed>
PWMDTY2=0;
/****CONTROL****/
voidvhcl_pid(void){
get_speed();
if(err[8]>
0){
ctl=6250+42*err[8];
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;
turn++;
if(turn>
20){
str=0;
PTH=0x00;
set_speed(29);
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;
for(row=1;
row<
=r_max;
){
if(r_chg>
=interval){
ini_AD();
for(line=0;
line<
l_max;
line++){
while(!
ATD0STAT1_CCF0);
ccd[line]=video;
line=6;
row++;
w_flg[row-1]=0;
ATD0CTL2=0x00;
if((r_chg<
interval-2)&
(line<
l_max-3)){
ccd_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;
第XII页
if(dif<
latch_ne