请教大神 这个程序有啥问题吗?
|TRIG接 P0.1 ECH0 接P0.2|
L298N接线:
|1A1----P2.5 |1A2-----P2.6|
|2A1----P2.3 |2A2-----P2.2|
#include <reg52.h> //器件配置文件
#include <intrins.h>
sbit RX=P0^1; //接受端口
sbit TX=P0^0; //发射端口
//驱动引脚定义
sbit IN1=P2^6;//M2
sbit IN2=P2^5;
sbit IN3=P2^3;//M1
sbit IN4=P2^2;
unsigned int time=0;
unsigned long S=0,num=0;
bit flag =0;
int m=0;
uS延时函数大致延时
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*---------------------------------
mS延时函数
---------------------------------*/
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
void delay(void)//
{
DelayMs(200);DelayMs(200);
DelayMs(200);DelayMs(200);
DelayMs(200);DelayMs(200);
}
/*********驱动模块********************/
forword()//前进
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
turn_left()//左拐
{
IN1=1;
IN2=0;
IN3=0;
IN4=0;
}
/*turn_right()//右拐
{
IN1=0;
IN2=0;
IN3=1;
IN4=0;
} */
stop()//停止
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
}
/*****T0中断用来计数器溢出,超过测距范围******/
void zd0() interrupt 1
{
flag=1; //中断溢出标志
}
/*********启动超生波模块*****************/
void StartModule()
{
TX=1; //启动一次模块
DelayUs2x(8); //延时大概20us
TX=0;
while(!RX); //当RX为零时等待
TR0=1; //开启计数
while(RX); //当RX为1计数并等待
TR0=0; //关闭计数
}
unsigned int count()
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*1.7)/100; //算出来是CM
if((S>=30)||flag==1) //超出测量范围
{
flag=0;S=1;
}
else S=0;
DelayMs(80);//80MS
return S;
}
//定时器T1溢出中断一定时间启动一次测距模块
void time1() interrupt 3
{
ET1=0;TR1=0;
TH1=(65536-15536)/256;
TL1=(65536-15536)%256;
StartModule();
num=count();
switch (S)
{
case 1:{ turn_left();
delay();
delay();
stop();
m=1;
break;
}
case 0: { m=2;
break;
}
}
ET1=1;TR1=1;
}
/**************主函数*********************/
void main()
{
unsigned int i=0;
TMOD=0x11; //设T0为方式1,GATE=1;
TH0=0;
TL0=0;
ET0=1; //允许T0中断
TH1=(65536-15536)/256;
TL1=(65536-15536)%256;
ET1=1; //允许T1中断
TR1=1;
EA=1; //开启总中
forword();
while(1)
{
if(m==1) {
m=0;
ET1=1;TR1=1;
}
if(m==2) { m=0;
forword();
ET1=1;TR1=1; }
}
}
是编译出错还是功能无法实现啊?
报错是啥?要说清楚呀
运行不出来效果呀,没障碍也躲,转转的就停了
运行不出来效果呀,没障碍也躲,转转的就停了
。