打印
[51单片机]

关于超声波测距求大神知道

[复制链接]
1433|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yyz2015|  楼主 | 2013-12-31 22:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下是本屌的利用超声波测距的小程序,求大神指导怎样利用中断进行完善,使其超出63MS时数码管不灭还可进行下一次测量?

#include <reg52.h>
#include<intrins.h>
unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3
    0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};//
sbit TX=P3^2;
sbit RX=P3^3;
unsigned char s,flag;
unsigned int time;
/*延时函数*/
void delay(unsigned char n)
{
unsigned int i;
for(i=0;i<n;i++)
{
_nop_();
_nop_();
}
}
/*让超声波模块启动函数*/
void Csb_Start()
{
TX=1;
delay(15);
TX=0;
}
/*超声波计算加显示函数*/
void Count()
{

time=TH0*256+TL0;//字节转换成十进制数
TH0=0;
TL0=0;
s=time/58;
P2=0xdf;
P0=dis_code[s/100];
delay(50);
P2=0xff;
P2=0xbf;
P0=dis_code[(s%100)/10];
delay(50);
P2=0xff;
//delay(5);
P2=0x7f;
P0=dis_code[(s%100)%10];
delay(50);
P2=0xff;
P2=0xdf;
P0=dis_code[10];
delay(50);
P2=0xff;
delay(50);
}
void main()
        {
                TMOD=0x01;
                TH0=0;
                TL0=0;
       while(1)
           {
             Csb_Start();
           while(!RX);
            TR0=1;
                while(RX);
                TR0=0;               
                Count();
                delay(20);
           }
        }
        

相关帖子

沙发
as564335sa| | 2014-1-1 08:39 | 只看该作者
两种方法,一,数码管放中断中去扫描,每一到两毫秒扫描显示一位数码管。二,超声波用中断接收,思路是,发超声波信号~开定时器开中断~外部中断收到回来的信号产生中断后关定时器取计时数计算时间。然后你懂

使用特权

评论回复
板凳
yyz2015|  楼主 | 2014-1-1 09:22 | 只看该作者
as564335sa 发表于 2014-1-1 08:39
两种方法,一,数码管放中断中去扫描,每一到两毫秒扫描显示一位数码管。二,超声波用中断接收,思路是,发 ...

我知道你的意思我用第二种方法做的但显示的是0,也就是说可能没有进入中断。。

使用特权

评论回复
地板
as564335sa| | 2014-1-1 10:04 | 只看该作者
yyz2015 发表于 2014-1-1 09:22
我知道你的意思我用第二种方法做的但显示的是0,也就是说可能没有进入中断。。 ...

接收端接外部中断了吗,中断开没开,下降沿还是低电平触发设置了吗

使用特权

评论回复
5
as564335sa| | 2014-1-1 10:11 | 只看该作者
yyz2015 发表于 2014-1-1 09:22
我知道你的意思我用第二种方法做的但显示的是0,也就是说可能没有进入中断。。 ...

你这个程序来看压根没用外部中断,而是一直在扫描IO管脚

使用特权

评论回复
6
yyz2015|  楼主 | 2014-1-1 10:50 | 只看该作者
as564335sa 发表于 2014-1-1 10:11
你这个程序来看压根没用外部中断,而是一直在扫描IO管脚

是这样的,我以前用了但是老出错,如果不用的话障碍物一直在前方还能测,如果一移开数码管就不显示了,所以肯定大神赐教利用外部中断的做法。。不知道是不是我理解有问题

使用特权

评论回复
7
as564335sa| | 2014-1-1 10:58 | 只看该作者
yyz2015 发表于 2014-1-1 10:50
是这样的,我以前用了但是老出错,如果不用的话障碍物一直在前方还能测,如果一移开数码管就不显示了,所 ...

数码管不显示是因为你程序里有while(RX)这种的语句,条件不满足程序就死了在这了,这样的程序估计是从教材里学来的。用中断的思路已经挺明白了,如果你懂什么是中断知道怎么用中断就很简单了,如果不知道,那自己去查查资料好好学学,自己解决问题,这样比别人直接给你程序收获的多

使用特权

评论回复
8
yyz2015|  楼主 | 2014-1-1 11:02 | 只看该作者
as564335sa 发表于 2014-1-1 10:58
数码管不显示是因为你程序里有while(RX)这种的语句,条件不满足程序就死了在这了,这样的程序估计是从 ...

多谢。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

13

帖子

0

粉丝