打印

请教关于超声波编程的问题

[复制链接]
3156|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
做了一个走迷宫的小车,计划在小车的左右两边各安装一对超声波传感器,用超声波进行避障。
系统芯片用的是stc89c51,用P1.0口发射40khz的超声波,发射超声波的同时定时器t0t1开始计数(TMOD=0X11),当左侧超声波传感器接收到回波时,外部中断0产生中断,定时器t0停止计数,当右侧超声波传感器接收到回波时,外部中断1产生中断,定时器t1停止计数。用两个变量time1和time2分别表示左侧和右侧距离障碍物的距离,写的程序如下,调试了一天了,仍然无法实现。请大家看看程序哪里有问题。小弟感激涕零。。。
#include<REG51.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
extern void cs_t(void);  //extern表示函数在别的文件中
extern void delay(uint);
data uchar testok1;
data uchar testok2;
sbit led1=P2^4;
sbit led2=P2^5;
/*主程序*/
void main(void)
{
data ulong time1;
data ulong time2;
P0=0xff;
P2=0xfb;
TMOD=0x11;    /*定时计数器t0和t1均工作于方式1(16位)*/
EA=1;    /*开总中断(EA=1)*/
while(1)
{
   cs_t(); //发射超声波
   delay(1);
   testok1=0;
   testok2=0;
   EX0=1;    /*外部中断0的中断允许控制位*/
   ET0=1;   /*定时计数器t0的中断允许控制位(溢出中断)*/
   EX1=1;    //外部中断1的中断允许控制位
   ET1=1;  //定时器t1的中断允许控制位   
   if(1==testok1)
   {
    time1=TH0;
    time1=(time1<<8) | TL0;   //按位或
    time1=time1*170/10000;  //所测得的距离,单位(cm)
    if(time1<50)
    led1=0;     //使led1灯亮
   }
   if(1==testok2)
    {
      time2=TH1;
      time2=(time2<<8)|TL1;
      time2=time2*170/10000;
      if(time2<50)
      led2=0;  //是led2灯亮
    }
  }
}   
/*超声波接收程序(外中断0)*/
void cs_r0(void) interrupt 0  //外中断0的中断号为0
{
TR0=0;     /*停止计数*/
ET0=0;
EX0=0;
testok1=1;
}
/*超声波接受程序(外中断1)*/
void cs_r1(void) interrupt 2 //外部中断1的中断号为2
{
   TR1=0;  //停止计数
   ET1=0;
   EX1=0;
   testok2=1;
}
/*超时清除程序(内中断0)*/
void overtime1(void) interrupt 1  //定时器t0的中断号为1
{
EX0=0;
TR0=0;
ET0=0;
testok1=2;
}
/*超时清除程序(内中断1)*/
void overtime2(void) interrupt 3  //定时器t1的中断号为3
{
   EX1=0;
   TR1=0;
   ET0=0;
   testok2=2;
}
这是超声波发射程序:
CS_T:      PUSH          ACC
               MOV           TH0,#00H
               MOV           TL0,#00H
               mov           th1,#00h
               mov           tl1,#00h
               MOV           A,#6D    /*发射脉冲个数*/
               SETB          TR0        /*t0启动计数*/
               SETB          TR1        /*T1启动计数*/
CS_T1:    CPL           P1.0
               NOP
               NOP
               NOP
               NOP
               NOP
               NOP
               NOP
               NOP
               NOP
               NOP
               NOP
               NOP
               NOP
               DJNZ          ACC,CS_T1  /*减1不为0跳转*/
               POP           ACC
               RET
               END

相关帖子

沙发
goldenriver|  楼主 | 2011-4-24 13:03 | 只看该作者
没有人呀!唉。。。。

使用特权

评论回复
板凳
goldenriver|  楼主 | 2011-4-24 13:04 | 只看该作者
看过的麻烦指点一下了。。。
小弟不胜感激。。

使用特权

评论回复
地板
goldenriver|  楼主 | 2011-4-27 21:59 | 只看该作者
这是原理图,请赐教。。

1.png (25.34 KB )

1.png

使用特权

评论回复
5
lorkey_email| | 2011-5-11 23:53 | 只看该作者
我晕, 你比我强, 照着网上的电路抄一个就拿来用了.
我的接收用的LM324放大, 发射用的5V供电, 距离太近。

你这个电路如果VCC没上12V 距离超近. 你测试远了肯定收不到回波信号了.

另外谁有5V供电距离在8m距离(反射型, 非对射型)的超声波接收发射电路拿出来看看, 哈哈!!! 估计没人给.

使用特权

评论回复
6
xingaiking| | 2011-5-13 22:31 | 只看该作者
楼下帮我回答吧~~~LZ V5

使用特权

评论回复
7
流霞老道长| | 2011-5-15 12:14 | 只看该作者
可以把“超声坡”改为“红外线”。

使用特权

评论回复
8
liu121| | 2011-5-15 16:03 | 只看该作者
路过

使用特权

评论回复
9
jjsn89| | 2011-6-2 13:18 | 只看该作者
我也在找啊

使用特权

评论回复
10
wadezyb| | 2011-6-12 02:14 | 只看该作者
建议先用示波器和函数发生器调

使用特权

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

本版积分规则

个人签名:贵有恒

0

主题

116

帖子

1

粉丝