各位大侠请看一下我写的US-100超声波的测距程序有什么问题。 他总是测完第一次之后就不再测 了。 20
不知是不是程序卡死在while(rx==0)这里。请你们帮帮我。#include<reg52.h>#defineuintunsignedint#defineucharun...
不知是不是程序卡死在while(rx==0)这里。请你们帮帮我。
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit gnd1=P1^0;
sbit gnd2=P1^1;
sbit rx=P1^2;
sbit tx=P1^3;
sbit vcc=P1^4;
uchar k;num;
void delay_short(uchar x)
{
uint i;
for(i=x;i>0;i--);
}
void init()
{
gnd1=0;
gnd2=0;
vcc=1;
}
void dscx()
{
TMOD=0x01; //重装初值
TH0=(65536-1000)/256;
TL0=(65526-1
000)%256;
EA=0;
ET0=0;
TR0=0;
}
void T0_time() interrupt 1 //中断程序
{
TH0=(65536-1000)/256; //1ms
TL0=(65526-1000)%256;
num++;
}
void cjcx()
{
tx=1;
delay_short(12);
tx=0;
while(rx==0)
{
P2=0x7f;
}
EA=1;
ET0=1;
TR0=1;
while(rx==1)
{
P2=0xfe;
}
EA=0;
ET0=0;
TR0=0;
k=(num*340.0)/2; //单位mm
if(k<1500)
P2=0xf; //00001111
if(k>1500)
P2=0xf0; //11110000
num=0;
delay_long(1000);
}
void main()
{
dscx();
init();
while(1)
{
cjcx();
}
} 展开
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit gnd1=P1^0;
sbit gnd2=P1^1;
sbit rx=P1^2;
sbit tx=P1^3;
sbit vcc=P1^4;
uchar k;num;
void delay_short(uchar x)
{
uint i;
for(i=x;i>0;i--);
}
void init()
{
gnd1=0;
gnd2=0;
vcc=1;
}
void dscx()
{
TMOD=0x01; //重装初值
TH0=(65536-1000)/256;
TL0=(65526-1
000)%256;
EA=0;
ET0=0;
TR0=0;
}
void T0_time() interrupt 1 //中断程序
{
TH0=(65536-1000)/256; //1ms
TL0=(65526-1000)%256;
num++;
}
void cjcx()
{
tx=1;
delay_short(12);
tx=0;
while(rx==0)
{
P2=0x7f;
}
EA=1;
ET0=1;
TR0=1;
while(rx==1)
{
P2=0xfe;
}
EA=0;
ET0=0;
TR0=0;
k=(num*340.0)/2; //单位mm
if(k<1500)
P2=0xf; //00001111
if(k>1500)
P2=0xf0; //11110000
num=0;
delay_long(1000);
}
void main()
{
dscx();
init();
while(1)
{
cjcx();
}
} 展开
4个回答
展开全部
楼主,你的问题解决了吗? 我最近也在做这个,遇到的问题跟你的一样,求解释,求方法啊.
追问
解决了,就是num类型弄错了char范围只有0-255,改为int类型就可以int范围是2^16。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
千万别别担心,有技术的自然好操作的
嘉俺威993和159和86
具体的定马上处理
嘉俺威993和159和86
具体的定马上处理
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是不是没有一个循环?
追问
你再看看吧,我干才复制的程序没复制全。呵呵,不好意思。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询