void chaoshengbo()
{
TRIG=0;
DelayUs2x(10);
TRIG=1;//触发信号是高电平脉冲,宽度大于10us
DelayUs2x(200);
TRIG=0;
flag=1;
while((!ECHO)&&(flag));//等待高电平
TR0=1;
while(ECHO&&flag);//等待低电平
TR0=0;
S=TH0*256+TL0;//取出定时器值高8位和低8位合并
S=S/58; //为什么除以58等于厘米, Y米=(X秒*344)/2
// X秒=( 2*Y米)/344 -> X秒=0.0058*Y米 -> 厘米=微秒/58
if(S>=15)
{n=1;}
if(S<15)
{n=0;}
TH0=0;
TL0=0;//清除定时器0寄存器中的值
}
void ChaoShengBo_BiZhang()
{
while(IrValue[2])
{
BiZPlay();
chaoshengbo();
DelayM(20);
GoRUN();
DelayM(20);
if(n==1)//如果大于一定距离
{GoRUN();}//前进
if(n==0)//如果小于一定距离
{
GoStop();}
void Time1Config()
{
TMOD = 0x11; //设置定时计数器工作方式1为定时器
//--定时器赋初始值,12MHZ下定时0.5ms--//
TH1 = 0xFE;
TL1 = 0x0C;
TH0=0x00;
TL0=0x00;
EX0=1;
ET0=1;
ET1 = 1; //开启定时器1中断
EA = 1;
TR1 = 1; //开启定时器
IP = 0x02;
}
void Time0_0(void) interrupt 1
{
TR0=0;
flag=0;
ECHO=0;
}
这些是涉及到的程序!求解脱!弄了几天了
有没有用过超声波模块做蔽障的朋友啊!
单片机控制超声波做蔽障程序总是卡死为何!运行后电机动一下就,程序就跑飞了
答案:3 悬赏:60 手机版
解决时间 2021-03-03 06:02
- 提问者网友:伴风望海
- 2021-03-03 03:09
最佳答案
- 五星知识达人网友:冷風如刀
- 2021-03-03 03:56
几个地方你先看一下:
(1)、硬件部分:供电模块,首先你看一下电机工作以后,对单片机供电相关的电源有多大影响,也就是对比电机不转和转起来这些电源的压降以及纹波,看是否在spec之内;
(2)、软件部分。你可以单步调试,看程序跑到哪里跑飞了。具体方法可以用指示灯方式,比如LED或者数码管显示。最好的用串口工具打印信息。
如还有其他问题,再联系!
(1)、硬件部分:供电模块,首先你看一下电机工作以后,对单片机供电相关的电源有多大影响,也就是对比电机不转和转起来这些电源的压降以及纹波,看是否在spec之内;
(2)、软件部分。你可以单步调试,看程序跑到哪里跑飞了。具体方法可以用指示灯方式,比如LED或者数码管显示。最好的用串口工具打印信息。
如还有其他问题,再联系!
全部回答
- 1楼网友:拾荒鲤
- 2021-03-03 06:58
运行后电机动一下就,程序就跑飞了
----
电机、单片机,应该,分别用两个电源供电。
- 2楼网友:动情书生
- 2021-03-03 05:24
time=th1*256+tl1;
这是用定时器t1做计数,time=th1*256+tl1; 这是根据定时器/计数器t1的计数值计算时间,th1是计数器的高8位,计数结果当然要乘256倍了,再加上低8位的值tl1。
th1=0;
tl1=0;
是计算完了,重新写0,准备下一次计数。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯