《循迹小车程序.pdf》由会员分享,可在线阅读,更多相关《循迹小车程序.pdf(4页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、ORG 0000HLJMP MAINORG 000BHLJMP FUNORG 0040HMAIN:MOV SP,#60HMOV TH0,#0D8H;定时 10msMOV TL0,#0F0HMOV TMOD,#01HMOV IP,#02HMOV IE,#82HMOV 08H,#0FHMOV 31H,#00HSETB TR0MOV P1,#87H;初始化小车,使得小车一开始左转;MOV P3,#0F0H;传感器清零,复位键置 1SJMP$ORG 00A0HFUN:PUSH ACCPUSH PSWMOV PSW,#8MOV TH0,#0D8HMOV TL0,#0F0H;DJNZ 30H,TSTDEC
2、 R0CJNE R0,#00H,FRUEETMOV R0,#0FHSJMP TSTFRUEET:CJNE R0,#0AH,CMPCMP:JC TSTMOV 30H,#02HMOV A,P3CPL A;取反 p3 口的数据,使得信息和给予分析的一致ANL A,#1FHJB,ST;由于 p3 口的取反,使得原来的“0”信号变为“1”信号判断CJNE A,#00H,NEXT0;判断及调用功能SJMP LEFTNEXT0:CJNE A,#01H,NEXT1SJMP UPNEXT1:CJNE A,#02H,NEXT2SJMP LEFTNEXT2:CJNE A,#03H,NEXT3SJMP LEFTNEX
3、T3:CJNE A,#04H,NEXT4SJMP STNEXT4:CJNE A,#05H,NEXT5SJMP UPNEXT5:CJNE A,#06H,NEXT6SJMP LEFTNEXT6:CJNE A,#07H,NEXT7SJMP LEFTNEXT7:CJNE A,#08H,NEXT8SJMP RIGHTNEXT8:CJNE A,#09H,NEXT9SJMP RIGHTNEXT9:CJNE A,#0AH,NEXTASJMP LEFTNEXTA:CJNE A,#0BH,NEXTBSJMP STNEXTB:CJNE A,#0CH,NEXTCSJMP RIGHTNEXTC:CJNE A,#0DH,
4、NEXTDSJMP RIGHTNEXTD:CJNE A,#0FH,STMOV P1,31HSJMP OUTLEFT:MOV P1,#0A7HSJMP OUTRIGHT:MOV P1,#9BHSJMP OUTUP:MOV P1,#97HSJMP OUTST:MOV P1,#00HMOV 31H,P1SJMP OUTTST:MOV P1,#80HOUT:SETBPOP PSWPOP ACCRETIENDL293D 是步进电机驱动芯片L293D 采用 16 引脚 DIP 封装,其内部集成了双极型 H-桥电路,所有的开量都做成 n型。这种双极型脉冲调宽方式具有很多优点,如电流连续;电机可四角限运行;电
5、机停止时有微振电流,起到“动力润滑”作用,消除正反向时的静摩擦死区:低速平稳性好等。L293D通过内部逻辑生成使能信号。H-桥电路的输入量可以用来设置马达转动方向,使能信号可以用于脉宽调整(PWM)。另外,L293D 将 2 个 H-桥电路集成到 1 片芯片上,这就意味着用 1 片芯片可以同时控制2 个电机。每1 个电机需要 3 个控制信号 EN12、IN1、IN2,其中EN12 是使能信号,IN1、IN2 为电机转动方向控制信号,IN1、IN2 分别为 1,0 时,电机正转,反之,电机反转。选用一路PWM 连接 EN12 引脚,通过调整PWM 的占空比可以调整电机的转速。选择一路I/O 口,
6、经反向器74HC14 分别接 IN1 和 IN2 引脚,控制电机的正反转main()main()P1=0 x40;P1=0 x40;P3=0 xff;P3=0 xff;high=80;high=80;lowlow=30;=30;flag=0;flag=0;time=50;time=50;Start();Start();while(1)while(1)P3|=0 x0f;P3|=0 x0f;Run();Run();Start()Start()char exit,key;char exit,key;exit=1;exit=1;while(exit)while(exit)key=P1;key=P1;
7、if(key&0 x40)=0)exit=0;if(key&0 x40)=0)exit=0;Run()Run()char sensors;char sensors;sensors=(P3&=0 x0f);sensors=(P3&=0 x0f);if(sensors&0 x04)=0)if(sensors&0 x04)=0)TurnRight();TurnRight();flag=1;flag=1;elseelseif(sensors&0 x02)=0)if(sensors&0 x02)=0)TurnLeft();TurnLeft();flag=2;flag=2;elseelseif(sensors=0 x09)if(sensors=0 x09)Forward(high);Forward(high);flag=0;flag=0;elseelseif(sensors=0 x0b)|(sensors=0 x0d)&(flag=0)if(sensors=0 x0b)|(sensors=0 x0d)&(flag=0)Forward(low);Forward(low);
限制150内