智能小车的四路避障C程序_第1页
智能小车的四路避障C程序_第2页
智能小车的四路避障C程序_第3页
智能小车的四路避障C程序_第4页
智能小车的四路避障C程序_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、智能小车的四路避障 C程序默认分类 2009-08-24 10:35 阅读164 评论4字号:大中小前,左,后避障传感器现在对应中,右,左二路寻线传感器.#i nclude #in elude vintrin s.h #i nclude STC12C5410AD.H#in clude sio.h#defi ne MIN9MS 0x0120/9ms 中心是 0x0159#defi ne MAX9MS 0x01a0#defi ne MIN45MS 0x0090/4.5ms 中心是 0x00ac#defi ne MAX45MS 0x00d0#defi ne MIN225MS 0x0040/2.25m

2、s中心是0x0056#defi ne MAX225MS 0x0080#defi ne MIN056MS 0x000e/0.56ms中心是0x0015#defi ne MAX056MS 0x001b#defi ne MIN168MS 0x0020/1.68ms中心是0x0040#define MAX168MS 0x0060 sfr ISP_CUNTR = 0xE7;sbit LED1 = P1八1;sbit LED2 = P1八2;sbit IR_FRONT = P 3八3;sbit IR_LEFT = P 3八4;sbit IR_RIGHT = P 3八5;sbit IR_BACK = P1八

3、3;sbit IR_OUT = P1八0;sbit PWM0 = P 3八7;sbit M0T0_IN_A1 = P1八7;sbit M0T0_IN_A2 = P1八6;sbit M0T0_IN_B1 = P1八5;sbit M0T0_IN_B2 = P1八4;bit power_stat;static unsigned char car_stat; / 小车状态 :0,停止;1,前进;2,后退;3,左转;4,右转;ff,自控寻线模式 static unsigned char code led_mod_table320 = 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

4、,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0 ;unsigned char idata led_mod = 0;static unsigned char idata led_tick = 0;static unsigned char idata led_ptr = 0;#define IR_SIGNAL_TOTAL 21 #define IR_SIGNAL_VALID 18 static unsigned char code ir_tableIR_SIGNAL_TOTAL

5、 = 1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0 ;static unsigned char code ir_check_tableIR_SIGNAL_TOTAL = 0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0 ;static unsigned char idata ir_ptr = 0;static unsigned char idata front_signal = 0; static unsigned char idata back_signal = 0;static unsigned char idata

6、left_signal = 0;static unsigned char idata right_signal = 0;static bit front_obj = 0, back_obj = 0, left_obj = 0, right_obj = 0;static void delay(unsigned long v) while (v-) /* * PCA 中断计数 ,根据位置判断信号区域和定义 ,位置 0 表 示初始,1 代表引导码信号 ,2 表示引导码间隔 ,* 3 表示第一个 bit 的信号,4 表示第一个 bit 的间隔,以次 类推.* 更具体见对应的红外线协议 .*/ stat

7、ic unsigned char idata pca_tick; static unsigned char idata pca_int_count;/* 根据引/* 红外信号占或空static unsigned char data pca_int_total; 导头确定总长度 */ static unsigned int idata period;周期计数 */static unsigned char idata data_buf6; /* 议数据缓冲区 */红外线协static unsigned int idata ccap1; 的的计数/PCA0static unsigned char i

8、data frame_dog; / 狗,限定时间未接收完成清除工作红外帧看门void time0_isr() interrupt 1 unsigned char tmp;if (ir_tableir_ptr+) IR_OUT = 0; else IR_OUT = 1;ir_ptr %= IR_SIGNAL_TOTAL;tmp = ir_check_tableir_ptr;if (!IR_FRONT & tmp) | (IR_FRONT & !tmp) front_signal+;if (!IR_LEFT & tmp) | (IR_LEFT & !tmp)left_signal+;if (!IR

9、_RIGHT & tmp) | (IR_RIGHT & !tmp) right_signal+;if (!IR_BACK & tmp) | (IR_BACK & !tmp) back_signal+;if (ir_ptr = 0) / com_putchar(front_signal);if (front_signal = IR_SIGNAL_VALID) front_obj = 1;elsefront_obj = 0;if (back_signal = IR_SIGNAL_VALID)back_obj = 1; elseback_obj = 0;if (left_signal = IR_SI

10、GNAL_VALID) left_obj = 1;elseleft_obj = 0;if (right_signal = IR_SIGNAL_VALID) right_obj = 1;else right_obj = 0; front_signal = 0;back_signal = 0; left_signal = 0; right_signal = 0;void time0_initialize(void)TMOD &= 0x0F;/* clear timer 0 mode bits */TMOD |= 0x02;/* put timer 0 into MODE 2 */TH0 = 0x5

11、C;XTAL*dur/T1_12/1000000, dur= 定时器的周期 ,以 us 为 单位*/* 256 -TL0 = 0x5C;/* 100us */PT0 = 0;/* 时钟 0 中断低优先级 */TR0 = 1;ET0 = 1;static void wakeup (void) interrupt 2static void pca_isr (void) interrupt 6 unsigned char i, j;if (CCF1) CCF1 = 0; /清 PCA1 中断标志LED1 = IR_RIGHT;/第一次收到信号LED2 = IR_RIGHT; if (!pca_int

12、_count) if (!IR_RIGHT) ccap1 = pca_tick * 256 + CCAP1H; pca_int_count+; else /已经收到一些信号period = pca_tick * 256 + CCAP1H - ccap1; ccap1 = pca_tick * 256 + CCAP1H;/com_putchar(period / 256);/com_putchar(period % 256);if (pca_int_count = 1) if (period MAX9MS) /9mspca_int_count = 0; frame_dog = 0; elsepc

13、a_int_count+; else if (pca_int_count = 2) if (period MIN225MS & period MIN45MS & period MIN056MS & period = pca_int_total) / 帧接收完毕 ,下面进行有效分析 .if (pca_int_total = 67) / 完整信号 , 含有引导信号 ,设备码 8bit, 设备反码 8bit, 命令字 8bit, 命 令字反码 8bitif (data_bufO八 data_buf1=0xff) & (data_buf2八 data_buf3 = Oxff) com_putchar(

14、data_buf0); com_putchar(data_buf2);if (data_buf0 = 0x40) switch (data_buf2) case 0x5F: / 左car_stat = 3; break;case 0x5B: / 右car_stat = 4;break;case 0x5A: /car_stat = 1;break;case 0x5E: / 下car_stat = 2;break;case 0x56: / 菜单car_stat = 0;break;case 0x0: / 数字 0car_stat = 0xff;break;case 0x12: /POWER/ po

15、wer_stat = frame_dog = 0;power_stat;break;default:break; else /重复信号 ,仅含pca_int_count = 0; else pca_int_count+; else pca_int_count = 0;frame_dog = 0; else j = (pca_int_count - 3) / 2;i = j / 8;j = j % 8;if (period MIN168MS & period MAX168MS) /1.68ms/ com_putchar(0x01); data_buf |= (0x01 MIN056MS & pe

16、riod MAX056MS) /0.56ms/ com_putchar(0x00);data_buf &= (0x01 = 10) led_tick = 0;if (led_mod_tableled_modled_ptr+) LED1 = 0;LED2 = 0; else LED1 = 1;LED2 = 1;led_ptr %= 20;if (pca_int_count) frame_dog+;if (frame_dog = 15) /100ms 后重新开始分 析新的红外线数据包pca_int_count = 0; frame_dog = 0;void auto_power_down() de

17、lay(30000);ISP_CUNTR = 0x20; / 从 AP 复位并从 AP 执行void main (void)unsigned char i;unsigned long j;MOTO_IN_A1 = 0;MOTO_IN_A2 = 0;MOTO_IN_B1 = 0;MOTO_IN_B2 = 0;P1M1 = 0xf0;/P1.7P1.4 强推挽输出EA = 0;power_stat = 0;time0_initialize();com_initialize ();/* initialize interrupt drivenserial I/O */com_baudrate (480

18、0); /* setup for 1200 baud */*CMOD = 0x01; / #00000000B,PCA 空闲计 数,PCA计数源=Fosc/12,PCA 溢出中断(做一个定时器 使用)CCON = 0x00; 计数/PCA 中断标志清 0,PCA 停止CL = 0x0;CH = 0x0;CCAPM1 = 0x31;/PCA1 上升下降沿捕获CMOD = 0x03;*/* #00000010B,PCA 空闲计数,PCA计数源=fosc/2,PCA 溢出中断*/CCON = 0x00; 计数/PCA 中断标志清 0,PCA 停止CL = 0x0;CH = 0x0;CCAPM1 =

19、0x31;/PCA1升下降沿捕获CCAPM0 = 0x42;/PCA0 工作模式 :8 位 pwmPCA_PWM0 = 0x00;CCAP0L = 0x20;CCAP0H = 0x20;EPCA_LVD = 1;/允许 PCA 和低压检测中断car_stat = 0;pca_tick = 0;pca_int_count = 0;frame_dog = 0;EA = 1;CR = 1;/* Enable Interrupts */启动 PCA 计数while (1)if (power_stat) / auto_power_down();if (left_obj | right_obj | front_obj | back_obj) LED1 = 0;LED2 = 0;switch (car_stat) case 0:MOTO_IN_A1 = 0;MOTO_IN_A2 = 0;MOTO_IN_B1 = 0;MOTO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论