上面是我的发射和接收电路图,附上程序代码
#include"STC12C5A60S2.h"
#include<intrins.h>
#include<stdio.h>
#include"1602.h"
#define uint unsigned int
#define uchar unsigned char
sbit TX = P3^4; //发送
sbit RX = P3^2; //接收
//sbit flag1 = P2^0; //接收
//sbit flag2 = P2^1; //接收
uint x,y;
uchar outcomeL,flag,outcomeH;
uchar s;
float distance_data;
void delay1ms(uint z)//延时子函数用于转向延时
{
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
unsigned char date[16] = 0;
TX = 0; //超声波发射端初始为低电平
init1602();
TMOD=0x11;//确定1时器工作方式
TH0 = (65536 - 1000) / 256;
TL0 = (65536 - 1000) % 256;
TH1 = 0;
TL1 = 0;
// ET1 = 1; //开定时器1中断
ET0 = 1;
EA = 1; //开总中断
EX0 = 0; //开外部0中断
IT0 = 1; //外部中断下降沿触发
TR0 = 1;
// flag = 0; //计算距离标志位
while(1)
{
if(flag == 1)
{
distance_data=outcomeH << 8 + outcomeL;
distance_data = distance_data* 340 / 2.0 / 10000; //CM
sprintf(date,"S = %.2f Cm",distance_data);
disstr(1,1,date);
flag = 0;
}
}
}
void timer0() interrupt 1
{
if(s == 0)
{
TH0 = (65536 - 1500) / 256;
TL0 = (65536 - 1500) % 256;
TX = 1;
s = 1;
// TH1 = 0;
// TL1 = 0;
}
else if(s == 1) //延时一段时间
{
TH0 = (65536 - 1000) / 256;
TL0 = (65536 - 1000) % 256;
TX = 0;
TR1 = 1;
s=2;
}
else if(s == 2)
{
TH0 = (65536 - 500) / 256;
TL0 = (65536 - 500) % 256;
s = 0;
EX0 = 1;
}
}
void INTO_() interrupt 0 // 外部中断是0号
{
TR1 = 0;
outcomeH =TH1; //取出定时器的值
outcomeL =TL1; //取出定时器的值
flag = 1; //至成功测量的标志
// EX0 = 0; //关闭外部中断
TH1 = 0;
TL1 = 0;
}
现在我的问题是 CX的7脚是一个有规律的高低电平信号,这个高低电平跟我控制发射超声波的发射与接收的信号一模一样。如果不发射超声波,7脚就一直都是高电平。现在我的这个程序就是测不出来距离,在1602上显示的一直都是0.00CM。。。请问大神们啊,我的问题出现在哪里啊???!!调了很久了!!~~
|