版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
〔指尝试室一机器人与51机硬件掌握物器用教学与计算硬件连和宝物底子布;熟悉及掌握C51列单机Vision〔集成开发环境下载软件及串口调试终端的使用方法。尝试设软件宝物车器人套、ISP下载线、行接口线、计算机、电源。KeilVision2IDE集成开环、下载软件串口调试软件。尝试内单片控制的物车器人是过串口或USB接口通信交互,由硬件系统与软系统彼此合组成的一个完整的能控制统片必需与外设备及软件组一个完的应用系统〔如图1.11、熟悉宝物车机器的布局组成〔如图1.2车底、车轮教学板、伺服电机、电池盒。这是物车机器人的硬件系统,它的微控制器〔MCU〕由Atmel公司出产与列兼容的8AT89S52单机。2、教学板指便利片机与电、下载线和的个〔图1.3计连并连
连教板ISP接到计算机,以便程序下载;连接单片机教学板串行接口到计算机,以便调试和交互;连接机器人到电池或者是供电电源。USBaspC版通用编程器图1.3片机教学板3、运用语言编程,用编译器编译成可执文件并下载到单片,用串口试软件查看单片机出信息。①成立用户文夹,便办理程,拷入译所需文件〔如,将盘“头文件〞文件夹的文件贝到C:\ProgramFiles\Keil\C51\INC文件夹。②进入编程系〔KeiluVision21)新建工程工〔ProjectNew,定名,保留在新成的用户文件夹;选择单片机产公司及类型:、AT89S52。2)新建C程序文件:→New编纂程序,保留为*.c的文件。注意程序关键的拼写、英文标点字母大小写等。3)添序到工工程:Source1右单→AddFilesGroupSourceGroup1前面呈现+号单击它现刚刚添加的C序文件名击此C文件,Keil会自识别关键,并不同颜色示用户加以注意,这样会用户犯错误,有利于提高编效率。4)生成执行文件十六进制目标代码文)Target1右键单击→Optiontarget‘Target1’→tput→选中“HexFi〞→连接编译生成可行文件。译要求没有错误生,允呈现警。③进入下载系统〔1)参数选择:勾选芯片擦除、编程FLASH、校验FLASH。单机型:AT89S52。2单击调入Flas〞按,找要下的HEX文件。3)单击“编程〞的“功击、验Flash。等待下载完后,件下载完成。拔掉载器ISP接排线。注意将ISP下载线连接计算和机器人教板源接好关拨〞档位置〔PRO学通,才进单程序载。④从行件载单片的阿时始程序就开始行单向算机发送信息。可操纵串调试软件查看单片机输出信息〞按钮可让载到单机内的程序头运行一次使串口助手首使用单片的口与计机的USB口,然后机的设理查使的串如列。记该标语,翻串调试软件,选正确标语,如列。4、做“〞OFF消电能池1、程序。#include<uart.h>int{//串初始printf("Hello,thisamessagefromyourRobot\n");}操纵循环与_nms()函数〔毫秒级延时〕程:每发送一个息〔内容为英本身定过口显示在算上delay)函数在头文件中定。#,编译时系统按照头文件自动将延时数插入到程序中。让竖线|〞在屏上顺时针或逆时针动弹输。参考下面的程序代码:|");/");-");\");|");4、显示静态图形:**********按要:秒送个息〔容英本定过串口显示算机上,设计。程序调。不雅察运行效阐发。、思题什么单机、8051、、之是什么系?宝物车机人采用的AT89S52单机特点什么?头文件的用是么?程序中的作是么?注:尝试操作场查抄。二伺服电机制的理和握单机的输\输出接口的性;理解器人服电机,C机。件宝物机器、下载线、串行口线、计算机、电源螺刀、红色发光极管个和Ω电阻2个。KeilVision2IDE集开环境PROGISP1.72下载件、串口调软件。、尝和步调1用单机的位上平控制发光二极管闪烁。看教材录关于面包及的介。面包板上共有18行插座通过中间槽分为列每一由个插组成这插座在包板是气相连如线入口行个,电的。“〞对应教板接地Vcc〞指校的+5V电压发二管〔图〕是向导的子,长为,短为,必连正确否那么不不正常作。通5mA布可光电流大其亮越但假设流过会毁极给发光二管联个阻目是限通过光二管电流要大。色环阻为,用条环暗阻阻值小。黑棕红橙黄绿蓝紫灰白金、银暗示误差具体如下:
第一条色环:阻值的第一位数字;第二条色环:阻值的第二位数字;第三条色环:阻值的第三位数字;第四条色环:阻值乘数的的幂数;第五条色环:误差〔常见是棕色,误差为1%。由此,470Ω电阻为黄紫黑。搭建一个发光二极管闪烁的电图2.2Led.c。注意,教学底上搭建路时要开电源点窜程让两个LED同闪,并窜程序让两个LED交亮或者灭,也可以改变延时函数参数的值改变LED闪烁率。Led.c程下:#include<BoeBot.h>#include<uart.h>int{//始化串printf("TheLEDconnectedtoP1_0isblinking!\n");{//P1_0输高电平//延500ms//P1_0输低电平//延500ms}}【拓练】现4个或更多LED水灯控制,应流水灯从灭到一个一个亮或者对应流水灯全亮到一个一个灭。编程方与两个LED闪烁类似,接入的二管继续接在面包板左侧其他的端口位上。注意,程序控制各引脚输出下电平要与所接的端口要一一对应起来。2、
两
伺控制线如图〕否经正确的连接到片机教学板的两个用电控制接口。引脚制左边电机,P1_0引脚控制右边电,在路板我们别离采用W、RB来示号线电源和,电控制颜色教学接对应母一〔红黑应WRB图伺服图
图电“关电PWM〔脉调制〕底子道理,通过制固定电压直流电源开关频率改负载两端的电压在PWM驱控制的调系统中按一个固定的频率接和开源并照需改一周内接〞“开时的长通改直电电上“空〞改平电的大从而控电机转。如图,脉作下当机电,度加电断时速逐渐减少。只要按必然律,改变通、断的时间,即可让电转速得到控制。高电平持续的时间控制机转速,即脉冲度控制持续旋转电速度和标的目的。将时间间隔为,宽为1.5ms的系列脉冲称为零点标定信号电机转速为零,机器人轮子静不动。如果电机有进行零点标定,器人轮子会动弹,如图所示,用螺丝轻轻调节马达上的电器,直到马达遏制动弹。如电机已经完成了零调节不动弹但是损坏了出缺陷的电机有时也不动弹。继检测:当高电平持续时间为1.3ms时,电机顺时针全速旋转;当高电平持续时间为1.7ms时,电机逆时针全速旋转;当高电平持续时间为间时,电机顺时针旋转;当高电平持续时间为间时,电机逆时针旋转。3、测试机,改变脉冲宽度控制机器人运动速度和标的目的。图定义机器人的前、、左、右四个标目的。例程中使用函是为了起提示作用假设觉串口线响机器的运动可以不此函数将程序下载到单片机,关闭机器人源开关,断开下线,将开关拨到“档雅察宝物车况。图2.6机器人及其前进标的目的义1参考一个LED闪烁程〔程序Led.c写序两个LED同时闪并窜程序让两个LED交替闪烁也可改延函参数n的,改变LED闪烁频率。编程实现个或更多LED流灯控制应流水灯从全灭到一个一个亮者对应流水从全亮到一个一个灭。2、编程两调零完{输出高电输出低电延时0ms}3、验证下程序是否让物车前进,撤退退却3s。按照此程序按尝试述要编程#include<BoeBot.h>#include<uart.h>int{intcounter;uart_Init();printf("ProgramRunning!\n");for(counter=1;counter<=130;counter++){delay_nus(1700);delay_nus(1300);delay_nms(20);}for(counter=1;counter<=130;counter++){delay_nus(1300);delay_nus(1700);delay_nms(20);}}4、用LED指示电机运状态在实际应用中,LED往往起到应用你以窜序来拟通过:假A灯通,B灯行指示模拟程如A灯闪,B灯灭,电机遏制运;灯B灯亮,电机开始运行;灯闪烁,机减速行;B灯灭,灯闪烁,电机遏制行;如此往复。1实现两个LED交替闪烁的编程及电路道理图不雅察到的运效果并加以阐发,程序调试心得。有兴趣的同学还可以完成个或更多LED流水灯控,对应流灯从全灭到一一亮或者应水灯从亮一个个。求编程绘电路理图,雅到的运效并加以发程序试得编伺服运控s函数的参数有不的合各组合的运动状况写下表。P1_1P1_0
描述
运动状况
全速P1_1机逆时针P1_0电顺时针两个机都静止六、题LED闪的工作道理,即引脚输上下平信号,发光二极管会或者亮的因是么?LED闪烁的尝试中,逐渐减小延时函参数的值,还能看到LED闪烁吗?什么?LED烁的中,将开到“〞〔PRO〞RUN,现象有什区阐。调零程载单开关到〞按“Reset〞按钮,轮子仍动弹,不克不及完全停来,试阐发有哪些原因造成的?编程给与连接的左发脉宽为1.7ms,与P1_0连接的轮发出脉宽1.3ms,不雅察到宝物车退退却,阐发什么原因引起的?注:试操现场抄。尝语1、掌转通过测试机器人脉冲数实现精掌写将宝物车器人载线、串行接口线、计算机、电。KeiluVision2IDE成发环境、下载件、串口调软件。1、验证程序ForwardLeftRightBackward.c,看机器人是向前、左转右转及向后走。如果宝物车向前运动的程轻微向左右偏移不一直线成就是轮与程序是全速实输有速差要左速太要右轮速太让轮子加太实但是轮子速就以决题电机速是脉度程序时函数delay的数n决定。n越接近电机转速慢要重复试验到一个比准确的输出将确定好的直线运动的参数更新程序ForwardLeftRightBackward.c中相应的。操纵循环制电机的行时间,由车运动形决定输出距或角度。例程中for循环的循环数为65,小运行时间为1.5s运行距离减。循环的循环数为电机的运行时决定小车旋的角度调整循环循环次数得到常接近你想的旋转角由于每小车的情不一样在向左转与右转中for循的循环次数加或减少机的转角,宝物车旋期望的角度,例如旋转90。如果发现个值使旋超过90°,另一个使旋小于°,测验考试择一个使其转更多的然后稍减小电机度测试一下的小车要循环少次才能旋转度。在转弯半较大时可以采用一电机增速一个电机速的方法弯由于小车布的影响这种方转弯较慢转弯径较大效果受运动速的影响大。在需要转弯半径小时,可以采用个电机动弹,而另个静止的方法。两个电机等速反向动弹以实现原地转弯。测试宝物车速度。将物车放在尺子旁边,确保轮子接触的地与尺子的厘米对齐在一条线上按位键从头运行程序让物车向前走秒钟测从出发点到机器人停下所接触的地面距离测量成果就是以厘/s为元可以考下序。#include<BoeBot.h>#include<uart.h>int{intcounter;uart_Init();printf("ProgramRunning!\n");for(counter=0;counter<130;counter++)//3秒{delay_nus(1700);delay_nus(1300);delay_nms(20);}}2、将加速或减速与底子巡动结合起,使器的每一个作都能匀加速或匀减。考教材程序StartAndStopWithRamping.c及相似代码更改。3教材程序MovementsWithFuntions.c运成果与ForwardLeftRightBackw发生的效是不异的用函数调用化运动程序。点窜使机器人一个正方。4、验证程序是否走了一个形。用数或调函数编程序使机器人按你的想法运,实现较复杂运动。【拓练使克人、、虫人巡。序1、验证程序ForwardLeftRightBackward.c。#include<BoeBot.h>#include<uart.h>int{intcounter;uart_Init();Running!\n");for(counter=1;counter<=65;counter++)//前{delay_nus(1700);delay_nus(1300);delay_nms(20);}for(counter=1;counter<=26;counter++)//左转{delay_nus(1300);delay_nus(1300);delay_nms(20);}for(counter=1;counter<=26;counter++)//右转{delay_nus(1700);delay_nus(1700);delay_nms(20);}for(counter=1;counter<=65;counter++)//后{delay_nus(1300);delay_nus(1700);delay_nms(20);}}编程反复测试一下小车要循环多少次才能旋转精确的90。编程测试宝物车速度,测量成果就是以厘米/s为单的参考下序及似代码,更改ardLeftRightBackw,使机器人的每一个动作都能够匀加速或减速。#include<BoeBot.h>#include<uart.h>int{intuart_Init();printf("ProgramRunning!\n");for(pulseCount=10;pulseCount<=200;pulseCount=pulseCount+1){delay_nus(1500+pulseCount);delay_nus(1500-pulseCount);delay_nms(20);}for(pulseCount=1;pulseCount<=75;pulseCount++){delay_nus(1700);delay_nus(1300);delay_nms(20);}for(pulseCount=200;pulseCount>=0;pulseCount=pulseCount-1){delay_nus(1500+pulseCount);delay_nus(1500-pulseCount);delay_nms(20);}}5、点窜MovementsWithOneFuntion.c使器人走个正方形。#include<>#include<uart.h>voidMove(intcounter,intPC1_pulseWide,intPC0_pulseWide){inti;for(i=1;i<=counter;i++){delay_nus(PC1_pulseWide);delay_nus(PC0_pulseWide);delay_nms(20);}}int{uart_Init();printf("ProgramRunning!\n");Move(65,1700,1300);Move(26,1300,1300);Move(26,1700,1700);Move(65,1300,1700);}6、使数组或调用函数编写程序,使机器人按你的想法运动,实现较为复杂的运动。程序设小车要循环多少次才能转精确的度不雅察的运效果并加以发,程序调试心得。更改Forward.c,使机器人每一个动作都能够匀加速或匀减。写出程序,不雅察到的运行效果并加以阐发,程序调试心得。点窜MovementsWithOneFuntion.c,使机器人走一个正方形。写出程序,不雅察到的运行效果并加以阐发,序调试心得使用数组或调用函数编写程序,使器人按你的法运动,实现较为复杂的运动。写出程序,不雅察到的行效果并加阐发,程序调试心得。六、题在程序ForwardLeftRightBackward.c中,向左转与右转的for环循次数为26,这是什么意?序行果怎的机器人完成各种巡航作过程中,每次动和遏时,动太快,乎倾倒,为什么会这呢采用什么方法以解决种问题让小车实现转弯的方有些?注:尝试操作现场查。四觉导航的接型感作输反与C51单机的程实现。编使机器基于胡导航,件判断句的嵌与机器的人工能决的编程机器人离进入角死区。件宝物机器载线口、USB接口、计算机电源安装器人胡须,需硬如图4.1。元件单:胡须金属丝;平头头钉个;13mm圆形立柱个;M3尼龙圈个;公-公接头;220Ω电阻2个;10kΩ电阻2个。
图胡须硬件KeilVision2IDE集开发环境、PROGISP1.72下载件、串口调软件。、尝1、通过安插得当路在开对C51单片机编程来监视触觉开的状。安装并测试机器人须见图。确定两条胡比较靠近,但又不触面包板上的3-pin头,保举保持距离。参接线图,胡须电路。环电阻:220Ω电阻Ω电阻。:胡须状态入通过口的4,胡须状态入通口3成。接路。图4.2安装机器人胡须
图4.3胡须电路示意图图4.4是实际的参考接线图,安装好的触觉胡须的机器人如图4.5。单片机AT89S52的个口和是以按位来作从低到高依次第口第第口书写离为、PX.1……、〔X取0到。P1.5100x08100和P2&0x08别离提取了P1.4和的值屏蔽了其他位。测试胡须源程序要用调试终当程运行要确串口已经接好。弄清哪胡须是左胡须,条是右胡须。当胡没有被碰到,使引脚电压为5V,胡须状态为;当胡须被到时,使引脚电压为0V,胡须状态为0。2
RoamingWithWhiskers.c()Backw3从境解出含else嵌套语句用探持续交替呈现轮流颠末四之180°量counter值不雅察不1TestWhiskers.c用#include<BoeBot.h>#include<uart.h>P1_4state(void)//P1_4{1:0;}P2_3state(void)//P2_3{1:0;}int{uart_Init();printf("WHISKERSTARTES\n");{:%d",P1_4state());:%d\n",P2_3state());}}2、程序触觉导航的实现,胡须机器人怎样行走。#include<BoeBot.h>#include<uart.h>int{1:0;}int{1:0;}void{delay_nus(1700);delay_nus(1300);delay_nms(20);}voidLeft_Turn(void){inti;for(i=1;i<=26;i++){delay_nus(1300);delay_nus(1300);delay_nms(20);}}{inti;for(i=1;i<=26;i++){delay_nus(1700);delay_nus(1700);delay_nms(20);}}void{inti;for(i=1;i<=65;i++){delay_nus(1300);delay_nus(1700);delay_nms(20);}}int{uart_Init();printf("ProgramRunning!\n");{if((P1_4state()==0)&&(P2_3state()==0))胡须同时碰{//Left_Turn();//向左Left_Turn();//向左}elseif(P1_4state()==0)//胡须碰到{向后Left_Turn();//向左}elseif(P2_3state()==0)//胡须碰到{向后Right_Turn();//}//须没有碰到向前}}3、程序如何工作的。#include<BoeBot.h>#include<uart.h>int{1:0;}int{1:0;}void{delay_nus(1700);delay_nus(1300);delay_nms(20);}voidLeft_Turn(void){inti;for(i=1;i<=26;i++){delay_nus(1300);delay_nus(1300);delay_nms(20);}}{inti;for(i=1;i<=26;i++){delay_nus(1700);delay_nus(1700);delay_nms(20);}}void{inti;for(i=1;i<=65;i++){delay_nus(1300);delay_nus(1700);delay_nms(20);}}int{int//胡须碰撞总次数//右胡旧状态//左胡旧状态uart_Init();printf("ProgramRunning!\n");{if(P1_4state()!=P2_3state()){if((old2!=P1_4state())&&(old3!=P2_3state())){counter=counter+1;old2=P1_4state();old3=P2_3state();if(counter>4){counter=1;向后Left_Turn();//向左Left_Turn();//向左}}elsecounter=1;}if((P1_4state()==0)&&(P2_3state()==0)){向后Left_Turn();//向左Left_Turn();//向左}elseif(P1_4state()==0){向后Left_Turn();//向左}elseif(P2_3state()==0){向后Right_Turn();//右}else向前}}五、题触觉航道是么通胡导时何开碍?语句Return(P1&0x10)1:0的义什?说。语句if((P1_4state()==0)&&(P2_3state()==0)){Backward();Left_Turn();Left_Turn();}含义是什么在胡导航程序中数Forward()有变更,只发送一个脉冲,然返回,这样的好处是什么?是否有且只有一根胡被动,如何通过取左、胡须的状态作出断写出体判断语。注:尝试操作现场查。五航的掌握别传器作输入反响与单片机的编程实现,让机器人的C51单片机以收发红外光信号。使用外线发射和接收器探测路编实现性能的航边缘探。件宝物机器、ISP下载线、串行接口、口、算机电源。所需件:两个外检测器,如图5.1;两个LED,如图5.2;四个Ω电阻紫黑棕;两个9013极如图5.3。图三极管9013管脚图局及符图KeiluVision2IDE成发环境、下载件、串口调软件。、尝和步调使用外光来射器人前的线定何时有光线从被探测目标反射回来通过测反回来红外可以确前方否有体机器人用红线二极管LED发射红外光线红外检器相当于眼睛检测到射回的红外光,并出来说到从物体反射回红图红外〔〕接收检测器有内置光滤波器,除了需要检测波长的红线外,几不允许其他光通红外检测器还一个电子波器只允许大约38.5kHz的电信号通过。图5.4用红外探测障碍物1搭建并测试发射探器对如图5.5注意断主板电机电源。图5.6摆布组实物参考图本任务中,发送持续1ms的的红外光,如果红外光被小车路径上的物体反射回来红外检测器将给微控制器发送一个信号让它知道已经检测到反射回的红外光。当没有信号回时,探测器的出状态为高电平。当它探测到被物体反射的38.5kHz的外信号,它的输出为低平。放一个物体,比手或一张纸,距离组约英。验证你放一物体在IR前时,调终端是会显示,当你将物体移开时,它是否示。注意保持宝物车机器人与串口缆的连接因你将用串调试助来测试你的IR组。考〔:#include<BoeBot.h>#include<uart.h>int{1:0;}int{intcounter;intirDetectLeft;uart_Init();printf("ProgramRunning!\n");{for(counter=0;counter<38;counter++){delay_nus(13);delay_nus(13);}irDetectLeft=P1_2state();printf("irDetectLeft=%d\n",irDetectLeft);}}2、IR测器探和避开障碍物IR检器的触非测到,出为故胡导。#include<BoeBot.h>#include<uart.h>#include<intrins.h>LeftIRP1_2左边红接收连1_2#defineRightIRP3_5//右边外接收接P3_5#defineLeftLaunch//左边红外发射连接到1_3#defineP3_6//边红外发射连接P3_6voidIRLaunch(unsignedIR){intcounter;左边发射for(counter=0;counter<38;counter++)//发射时间比胡须长{LeftLaunch=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();LeftLaunch=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}//右边发射for(counter=0;counter<38;counter++){RightLaunch=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();RightLaunch=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}}//向前行走子程序{delay_nus(1700);delay_nus(1300);delay_nms(20);}voidLeft_Turn(void)//左转程{inti;for({delay_nus(1300);delay_nus(1300);delay_nms(20);}}voidRight_Turn(void)//转子程序{inti;for({delay_nus(1700);delay_nus(1700);delay_nms(20);}}void//向后行走子程序{inti;for({delay_nus(1300);delay_nus(1700);delay_nms(20);}}int{intirDetectLeft,irDetectRight;uart_Init();printf("ProgramRunning!\n");{//右边发射irDetectRight=RightIR;//右边接收//左边发射irDetectLeft=LeftIR;//左边接收if((irDetectLeft==0)&&(irDetectRight==0))//边同接收红外线{Backward();Left_Turn();Left_Turn();}elseif(irDetectLeft==0)//有左边接收到红线{Backward();Right_Turn();}elseif(irDetectRight==0)//有右边接收到红外线{Backward();Left_Turn();}elseForward();}}3、高性能的导在脉间样止。在触导航里用的预程机动作很好但是在用IR和测时会造不要痴发送冲电之查障物宝物车持续使用电机驱动脉和测直它绕障物然它继送向行的冲这样以大改宝车行性。参考序#include<BoeBot.h>#include<uart.h>#include<intrins.h>LeftIR//左边红接收连P1_2#defineRightIRP3_5//右边外接收接P3_5#defineLeftLaunch//左边红外发射连接到#defineP3_6//边红外发射连接到P3_6voidIRLaunch(unsignedIR){intcounter;//左边发射for(counter=0;counter<38;counter++){LeftLaunch=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();LeftLaunch=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}//右边发射for(counter=0;counter<38;counter++)//边发射{RightLaunch=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();RightLaunch=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}}int{intpulseLeft,pulseRight;intirDetectLeft,irDetectRight;uart_Init();printf("ProgramRunning!\n");do{//右边发射irDetectRight=RightIR;//右边接收//左边发射irDetectLeft=LeftIR;//左边接收if((irDetectLeft==0)&&(irDetectRight==0))//撤退{pulseRight=1700;}elseif((irDetectLeft==0)&&(irDetectRight==1))//{pulseRight=1700;}elseif((irDetectLeft==1)&&(irDetectRight==0))//{pulseRight=1300;}//前进{pulseRight=1300;}delay_nus(pulseRight);delay_nms(20);}}4、用缘带模拟桌子的边缘,边缘探测编程。宝物车在桌子上行走检测器下监测桌子外。只要两个探测桌宝车走如一的探测器有发桌〔即发现边宝物车向另个标目的弹。参考程序:#include<BoeBot.h>#include<uart.h>#include<intrins.h>LeftIRP1_2左边红接收连1_2#defineRightIRP3_5//右边外接收接P3_5#defineLeftLaunch//左边红外发射连接到1_3#defineP3_6//边红外发射连接P3_6voidIRLaunch(unsignedIR){intcounter;左边发for(counter=0;counter<38;counter++){LeftLaunch=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();LeftLaunch=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}右边发for(counter=0;counter<38;counter++){RightLaunch=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();RightLaunch=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}}int{inti,pulseCount;intpulseLeft,pulseRight;intirDetectLeft,irDetectRight;uart_Init();printf("ProgramRunning!\n");do{//右边发射irDetectRight=RightIR;//边接收//左边发射irDetectLeft=LeftIR;//边接收if((irDetectLeft==0)&&(irDetectRight==0))//向前走{pulseCount=1;pulseRight=1300;}elseif((irDetectLeft==1)&&(irDetectRight==0))//转{pulseCount=10;pulseRight=1300;}elseif((irDetectLeft==0)&&(irDetectRight==1))//转{pulseCount=10;pulseRight=1700;}else//退却{pulseCount=15;pulseRight=1700;}for(i=0;i<pulseCount;i++){delay_nus(pulseRight);delay_nms(20);}}}掌握别感作输反响与片的程现要编实高能导和边缘测。、思题注:尝试操作现场查抄。六时器机器的距检测的掌握按时计的应及程现机人红距及随略的实。尝试设宝物车器人、载线、串行接口线、计算机、电。KeilVision2IDE集开发环境、下载软、串口调试软件。尝试内1、单机AT89S52的按时计器提供精的间。控制存器位符号
描述TF1按器溢出标记位。硬件置位,由件去除TR1按器运行控制。由软置去:置1启动;置为遏制TF0按时器0溢标记TR0按器0运行控位IE1外部断1边缘触标记IT1外部断1类型标位IE0外部断0边缘触标记IT0外部断0类型标位TMOD模式存器按时工作模工作模式每个按时/数器都有16位存器Tn〔n=01〕控计长,由高8位THn和低8位TLn初。时计器四种工作模。模式0:按时器按13自加计。这13位TH的全部8位和中低5位组成TL中高3位没有用到。模式1:时/计数器按16位自1计数器工作。模式2按时/计数器被拆成8位放器和一个8位计器TL以便实自动载这式使起非常利一旦好TTHn,按器就可按设定周期溢。模式TH0和TL0均作为两个独立的8位计数器工作器在模式下工作。按时计数初值算按时/计数器是在数初的根底法记数设Tn〔THn〕中写值为T,在式下大数为2程序运行计数为CCTC=2n
假设通P所灯闪动一次,即过.2ms灭一次,再过亮次。模式最大数为〔28足要求,因用模2来显示ED灯闪烁功能计数值CC为.2ms/1us=200操公式计算得TC=256-200=59换成十六进为TC=0x38。IE〔中断使能存器简表参考电路参考程序<AT89X52.H><stdio.h>void//子函数声明void{调用按时计数器初始化函数//等待中断}/*===========================================初始化时/计数器函数===========================================*/void{//开总中EA,允许按时器0中ET0遏制按时器,去除标记工作在按时器0的模式中//设置重值//设置按器初值TR0=1;//动按时器0}//中效劳序voidinterrupt1//中断劳程序1是按时0的中断号{//P1_0的值取反}2、机器人用红外发射频率扫描进行编程做距离探测。用同前面一样的测电路来探测距离。选择5个不同频率,后从最高灵敏度到低灵敏度进行测试。首先测验考试最高灵度频率,如果物体被探测到,就让仅次于它的高灵敏度率测试,不雅察是可以探测到依赖于测器不克不及再检测到物体的红外线率就可以揣度体的大要位置。运行程序时,在机器人前端放一张纸或卡片对两个LED/探测器做距离探测改纸片与机器距调试端将显示白地的区域测考试测量不同物体的距弄物体的颜色材质否造成距离量差别用串口试助手看试成果。参考程序:#include<BoeBot.h>#include<uart.h>LeftIRP1_2左边红接受连1_2#defineLeftLaunch//左边红外发射连接到1_3int按不时左边的离intirDetectLeft;unsignedintfrequency[5]={29370,31230,33050,35700,38460};{//开总中EA,允按时0中断ETMOD|=//按时0工在模1:16位按器模式}voidFreqOut(unsignedFreq){time=256-//按照算初值=//八位设FF=//低八位按照算=1;启动按时器//延时=0;遏制按时器}voidinterrupt//按时器中断{=~LeftLaunch;//取反=//头设值TL0=time;}voidGet_lr_Distances(){intcount;=初始化左边的距离for(count=0;count<5;count++){FreqOut(frequency[count]);//发射频率irDetectLeft=LeftIR;printf("irDetectLeft=%d",irDetectLeft);==1)}}int{uart_Init();timer_init();printf("ProgamRunning!\n");printf("FREQENCYETECTED\n");{Ge
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 脊柱结核的护理工作总结
- 医院各疗区工作制度
- 医院配液室工作制度
- 协助工作室工作制度
- 南昌印钞厂工作制度
- 卫生室肿瘤工作制度
- 卫生院内科工作制度
- 卫生院转诊工作制度
- 厂区值班室工作制度
- 来宾市2026年中小学教师招聘考试-教育综合知识题库(含答案)
- 《灰尘的旅行》导读
- GB/T 15651.7-2024半导体器件第5-7部分:光电子器件光电二极管和光电晶体管
- 光明电力公司招聘笔试题目
- 成人心理健康教育讲座
- 牛场实习报告
- 成都职业技术学院教师招聘考试历年真题
- 断绝亲情关系协议书
- 四川省高等教育自学考试毕业生登记表【模板】
- 井筒举升设计及实例分析讲课材料详解
- 大学物理考试题库(二)
- 2019新人教高一英语必修第三册-课本听力与视频材料文本
评论
0/150
提交评论