首页 线性CCD控制舵机巡线程序

线性CCD控制舵机巡线程序

举报
开通vip

线性CCD控制舵机巡线程序#include /* common defines and macros */ #include "derivative.h" /* derivative-specific definitions */ #define TSL_SI PORTA_PA0 //定义线性传感器的端口 SI #define TSL_CLK PORTA_PA1 //定义线性传感器的端口 CLK #define led PORTA_PA2 #define PWM1 PTP_PTP0 ...

线性CCD控制舵机巡线程序
#include /* common defines and macros */ #include "derivative.h" /* derivative-specific definitions */ #define TSL_SI PORTA_PA0 //定义线性传感器的端口 SI #define TSL_CLK PORTA_PA1 //定义线性传感器的端口 CLK #define led PORTA_PA2 #define PWM1 PTP_PTP0 //定义线性传感器的端口 CLK #define PWM2 PTP_PTP1 uchar ADV[128]; uchar table[128]; void PWM_Init() { PWME=0X00; PWMCTL=0Xf0;//级联 PWMPOL=0XFF;//极性 PWMCAE=0X00;//0为左对齐方式 PWMCLK=0XFF;//时钟选择寄存器 PWMPRCLK=0X44;////// 64MHZ/16=4MHZ; PWMSCLA=200;// 4MHZ/(2*200) =10000HZ 4MHZ=4*10的6次方4 000 000HZ PWMSCLB=200; PWMPER01=500; //调周期长短A1 10HZ PWMPER23=500; PWMPER45=500; PWMDTY01=200; // 电机占空比 PWMDTY23=300; PWMDTY45=15; //控制舵机 } void PLL_Init(void) { CLKSEL=0X00; //disengage PLL to system PLLCTL_PLLON=1; //turn on PLL SYNR =0xc0 | 0x07; REFDV=0x80 | 0x01; POSTDIV=0x00; //pllclock=2*osc*(1+SYNR)/(1+REFDV)=128MHz; _asm(nop); //BUS CLOCK=64M _asm(nop); while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it; CLKSEL_PLLSEL =1; //engage PLL to system; } void Dly_us(void) { int ii; //for(ii=0;ii<20;ii++); //32M for(ii=0;ii<400;ii++); //64M } void SetBusCLK_32M(void) { CLKSEL=0X00; // disengage PLL to system PLLCTL_PLLON=1; // turn on PLL SYNR =0x40 | 0x03; // pllclock=2*osc*(1+SYNR)/(1+REFDV)=64MHz; REFDV=0x80 | 0x01; POSTDIV=0x00; _asm(nop); // BUS CLOCK=32M _asm(nop); while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it; CLKSEL_PLLSEL =1; //engage PLL to system; } /*void Dly_ms(int ms) { int ii,jj; if (ms<1) ms=1; for(ii=0;ii0;i--) for(j=110;j>0;j--); } void AD_Init(void) { ATD0CTL1=0x00; //7:1-外部触发,65:00-10位精度,4:放电,3210:ch ATD0CTL2=0x40; //禁止外部触发, 中断禁止 ATD0CTL3=0xa0; //右对齐无符号,每次转换4个序列, No FIFO, Freeze模式下继续转 ATD0CTL4=0x01; //765:采样时间为4个AD时钟周期,ATDClock=[BusClock*0.5]/[PRS+1] ATD0CTL5=0x30; //6:0特殊通道禁止,5:1连续转换 ,4:1多通道轮流采样 ATD0DIEN=0x00; //禁止数字输入 } void init_AD12() { ATD0CTL1=0X20; //10位精度 ATD0CTL2=0XC0; //自动清除标志位 ATD0CTL3=0X98; //转换序列5 ATD0CTL4=0x0F; //采样时间4周期,AD时钟8MHz ATD0CTL5=0X30; //连续,多通道转换 ATD0DIEN=0X00; //禁止数字输入 } void RD_TSL(void) { byte i=0,tslp=0; TSL_CLK=1;//起始电平高 TSL_SI=0; //起始电平低 Dly_us(); //合理的延时 TSL_CLK=0;//下降沿 TSL_SI=1; //上升沿 Dly_us(); //合理延时 TSL_CLK=1;//上升沿 TSL_SI=0; //下降沿 Dly_us(); //合理延时 for(i=0;i<128;i++) { TSL_CLK=0;//下降沿 Dly_us(); //合理延时 while(!ATD0STAT0_SCF);//等待转换结束 ADV[tslp]=ATD0DR0L; //AD采集 ++tslp; TSL_CLK=1;//上升沿 Dly_us(); //合理延时 } } void main(void) { int i,j,k,D_value1,D_value2; PLL_Init(); //SetBusCLK_32M(); AD_Init(); //init_AD12(); PWM_Init(); DDRA_DDRA0=1; DDRA_DDRA1=1; DDRP=0XFF; PWME=0XFF; EnableInterrupts; for(;;) { //_FEED_COP(); /* feeds the dog */ RD_TSL(); for(i=0;i<128;i++) { if(ADV[i]<9) table[i]=0; else table[i]=1; } for(j=64;j>0;j--) { if(table[j]==0) break; } D_value1=64-j; for(k=128;k>0;k--) { if(table[k]==0) break; } D_value2=k-64; if(D_value1D_value2) //右偏 { if(D_value2<=40); } } }
本文档为【线性CCD控制舵机巡线程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_288339
暂无简介~
格式:doc
大小:42KB
软件:Word
页数:5
分类:互联网
上传时间:2013-10-26
浏览量:67