求大神帮助!
时间:10-02
整理:3721RD
点击:
本人是单片机爱好者,没上过大学。自己制作一部普通超声波避障小车,然后自己写了代码,但是烧录进去硬件却没反应,硬件没问题,帮我看看我的程序有什么问题,急!
#include<intrins.h>
#include<reg52.h>
#define uint unsigned int
#define ulong unsigned long
sbit in1=P0^0;
sbit in2=P0^1;
sbit in3=P0^2;
sbit in4=P0^3;
sbit ena=P0^5;
sbit enb=P0^4;
sbit echo=P0^1;
sbit trig=P0^0;
bit flag=0;
ulong s,ls,rs;
uint time;
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void qianjin()
{
ena=1;enb=1;in1=1;in2=0;in3=1;in4=0;
}
void houtui()
{
ena=1;enb=1;in1=0;in2=1;in3=0;in4=1;delay(2000);
}
void zuozhuan()
{
ena=1;enb=1;in1=0;in2=1;in3=1;in4=0;delay(1000);
}
void youzhuan()
{
ena=1;enb=1;in1=1;in2=0;in3=0;in4=1;delay(1000);
}
void tingzhi()
{
ena=0;enb=0;in1=0;in2=0;in3=0;in4=0;
}
void chushihua()
{
TMOD=0x01;
TH0=0;
TL0=0;
EA=1;
ET0=1;
}
void ceju(void)
{
while(!echo);
TR0=1;//开启计数 ——
while(echo); //当echo为1计数并等待
TR0=0; //关闭计数
time=TH0*256+TL0;
TH0=0;
TL0=0;
s=(time*1.7)/100; //算出来是CM
}
void zd0() interrupt 1
{
flag=1;
}
void main()
{
chushihua();
while(1)
{
TR0=1;
delay(1);
TR0=0;
ceju();
if(s<10)
{tingzhi();
delay(20);
houtui();
A:zuozhuan();
TR0=1;
delay(1);
TR0=0;
ceju();
ls=s;
if(ls<10)
{
youzhuan();
youzhuan();
TR0=1;
delay(1);
TR0=0;
ceju();
rs=s;
if(rs<10);
{zuozhuan();
houtui();
goto A;
}if((rs>10)&&(flag==1)){qianjin();}
}else if((ls>10)&&(flag==1)){qianjin();}
}else if((s>10)&&(flag==1)){qianjin();}
}
}
#include<intrins.h>
#include<reg52.h>
#define uint unsigned int
#define ulong unsigned long
sbit in1=P0^0;
sbit in2=P0^1;
sbit in3=P0^2;
sbit in4=P0^3;
sbit ena=P0^5;
sbit enb=P0^4;
sbit echo=P0^1;
sbit trig=P0^0;
bit flag=0;
ulong s,ls,rs;
uint time;
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void qianjin()
{
ena=1;enb=1;in1=1;in2=0;in3=1;in4=0;
}
void houtui()
{
ena=1;enb=1;in1=0;in2=1;in3=0;in4=1;delay(2000);
}
void zuozhuan()
{
ena=1;enb=1;in1=0;in2=1;in3=1;in4=0;delay(1000);
}
void youzhuan()
{
ena=1;enb=1;in1=1;in2=0;in3=0;in4=1;delay(1000);
}
void tingzhi()
{
ena=0;enb=0;in1=0;in2=0;in3=0;in4=0;
}
void chushihua()
{
TMOD=0x01;
TH0=0;
TL0=0;
EA=1;
ET0=1;
}
void ceju(void)
{
while(!echo);
TR0=1;//开启计数 ——
while(echo); //当echo为1计数并等待
TR0=0; //关闭计数
time=TH0*256+TL0;
TH0=0;
TL0=0;
s=(time*1.7)/100; //算出来是CM
}
void zd0() interrupt 1
{
flag=1;
}
void main()
{
chushihua();
while(1)
{
TR0=1;
delay(1);
TR0=0;
ceju();
if(s<10)
{tingzhi();
delay(20);
houtui();
A:zuozhuan();
TR0=1;
delay(1);
TR0=0;
ceju();
ls=s;
if(ls<10)
{
youzhuan();
youzhuan();
TR0=1;
delay(1);
TR0=0;
ceju();
rs=s;
if(rs<10);
{zuozhuan();
houtui();
goto A;
}if((rs>10)&&(flag==1)){qianjin();}
}else if((ls>10)&&(flag==1)){qianjin();}
}else if((s>10)&&(flag==1)){qianjin();}
}
}
p0口是类似于集电极开路结构需要上拉电阻才能输出高低电平
程序很不规范,也没有详细注释,程序构架一时看不明白,但明显错误是I/O口被重复定义。
sbit in1=P0^0;
sbit in2=P0^1;
sbit in3=P0^2;
sbit in4=P0^3;
sbit ena=P0^5;
sbit enb=P0^4;
sbit echo=P0^1;
sbit trig=P0^0;
P0^0和P0^1重复定义了吧
同意
醉了,你看不明白,就不要说人家,这是电机驱动模块,en是使能信号
嗯那我也感觉是,
超声波模块你要好好看看说明,io口最好用1.2.3,0口要加1k的上拉电阻
我用的是开发板
里面有1k电阻
里面有1k电阻
第一行
