
我用hc-sr04模块测距,当左右两个模块中某一个检测到10cm处有障碍时,电机相应转动,我写了程序但就是不对 50
#include<reg52.h>#defineuintunsignedint//宏定义#defineucharunsignedcharuchart,flag;sbitt...
#include<reg52.h>
#define uint unsigned int //宏定义
#define uchar unsigned char
uchar t,flag;
sbit tx=P2^0;
sbit ex=P2^1;
void init()
{
P1=0xfa;//电机前进
t=0;
flag=0;
TMOD=0x01;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
EA=1;
ET0=1;
TR0=0;
ex=0;
}
void delay_20us()
{
int a;
a=20;
while(a>0)
a--;
}
void main()
{
init();
while(1)
{
tx=1;
delay_20us();
tx=0;
while(ex==0);
TR0=1;
while(ex==1);
TR0=0;
if(!flag)
{
P1=0xfa;
}
if(flag)
{
P1=0xf2;//电机右转
}
}}
void timer0() interrupt 1
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
if(ex==1)
{ t++;
if(t==6)
{
t=0;
flag=1;
}
}
}
但是小车一上电就右转,求某位大侠指导啊,拜托了 展开
#define uint unsigned int //宏定义
#define uchar unsigned char
uchar t,flag;
sbit tx=P2^0;
sbit ex=P2^1;
void init()
{
P1=0xfa;//电机前进
t=0;
flag=0;
TMOD=0x01;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
EA=1;
ET0=1;
TR0=0;
ex=0;
}
void delay_20us()
{
int a;
a=20;
while(a>0)
a--;
}
void main()
{
init();
while(1)
{
tx=1;
delay_20us();
tx=0;
while(ex==0);
TR0=1;
while(ex==1);
TR0=0;
if(!flag)
{
P1=0xfa;
}
if(flag)
{
P1=0xf2;//电机右转
}
}}
void timer0() interrupt 1
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
if(ex==1)
{ t++;
if(t==6)
{
t=0;
flag=1;
}
}
}
但是小车一上电就右转,求某位大侠指导啊,拜托了 展开
1个回答
展开全部
首先你这没有注释以及毫无含义的变量名的程序 看起来很令人头疼
然后看你这程序 应该是每65ms扫描一次ex也就是P2.1的状态 tx我猜应该是用来触发模块的吧 触发后你停在ex==0这个状态直到ex==1 这个时候开了定时器 t=6也就是 顶多400ms半秒不到的样子 如果这个时候恰好有个状态满足了 flag置了1 那么你的程序就会执行右转 但是执行后 你没有执行将flag清零 也就是不会出现前进这个状态了
然后看你这程序 应该是每65ms扫描一次ex也就是P2.1的状态 tx我猜应该是用来触发模块的吧 触发后你停在ex==0这个状态直到ex==1 这个时候开了定时器 t=6也就是 顶多400ms半秒不到的样子 如果这个时候恰好有个状态满足了 flag置了1 那么你的程序就会执行右转 但是执行后 你没有执行将flag清零 也就是不会出现前进这个状态了
更多追问追答
追问
那我应该怎样修改
追答
在你电机右转的命令后面对flag清零就好了 flag=0
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询