仪器社区

这个51单片机HC-SR04超声波测距程序哪里错了

布洛克02 2016-01-25
//晶振11.0592MHz #include #define uchar unsigned char #define uint unsigned int sbit trig=P0^2; sbit echo=P3^3; float dis=0; uint irtime=0; void delay_20us() { uchar bt ; for(bt=0;bt<100;bt++); } void TI... //晶振11.0592MHz #include #define uchar unsigned char #define uint unsigned int sbit trig=P0^2; sbit echo=P3^3; float dis=0; uint irtime=0; void delay_20us() { uchar bt ; for(bt=0;bt<100;bt++); } void TIM1init(void)//定时器1初始化 { TMOD=0x22;//定时器1工作方式2,TH1是重装值,TL1是初值 TH1=0xd2; //重载值 溢出一次约50us TL1=0xd2; //初始化值 ET1=1; //开中断 } void EX1init(void) //外部中断1初始化 { IT1 = 1; //指定外部中断0下降沿触发,INT1 (P3.3) EA = 1; //开总中断 } /*------------------------------------------------ 定时器1中断处理 ------------------------------------------------*/ void tim1_isr (void) interrupt 3 { irtime++; //用于计数2个下降沿之间的时间 } /*------------------------------------------------ 外部中断1中断处理 ------------------------------------------------*/ void EX1_ISR (void) interrupt 2 //外部中断1服务函数 { dis=340*(irtime/2.0)*50/10000; irtime=0; TR1=0; EX1=0; } void test(void) { trig=1; delay_20us(); trig=0; EX1=1; while(!echo); TR1=1; } void main(void) { TIM1init(); EX1init(); while(1) { test(); display(dis); } } 主函数调用test,然后在数码管上显示(显示函数略过),测试的时候,在数码管上显示的距离明显不对,还各种不稳定,有时就个位数上显示一个1或2,不知道怎么回事
评论
全部评论
圣1478913592
//晶振11.0592MHz
#include
#define uchar unsigned char
#define uint unsigned int
sbit trig = P0^2;
sbit echo = P3^3;
float dis = 0;
void delay_20us()
{
uchar bt ;
for(bt = 0;bt<10;bt++); //此处100太大改为10即可
}
void TIM1init(void)//定时器1初始化
{

TMOD=0x11;//定时器1工作方式2,TH1是重装值,TL1是初值
TH1=0x00; //重载值 溢出一次约50us
TL1=0x00; //初始化值
}
void test(void)
{
//因为超声波Z大测量4m当计时器计满时
//实际距离已经超过4m了所以此处不要用中断
TH1 = 0X00;
TL1 = 0X00;
trig = 1;
delay_20us();
trig = 0;
EX1 = 1;
while(!echo);
TR1 = 1;
//Z好不要用下降沿中断检测高电平时间,
//因为在进中断函数之前会产生很多压栈
//动作会产生比较大的误差
while(echo);
TR1 = 0;

//下面计算的是米,单位自己换算一下就行了
dis = (TH1 * 256 + TL1) * 0.17f; //(TH1 * 256 + TL1) * 340 / 2 / 1000
}

void main(void)
{
TIM1init();
while(1)
{
test();
//你没有给是什么显示此处计算出来dis单位为米
//要显示厘米需要自己换算
//display(dis);
}
}

/***********************************************************************************************
此处给你改了许多,不知道你是不是刚入门,源程序有好多问题,已经帮你修改好了
不过我没做具体测试,你需要要测试一下,好久没弄过超声波了,凭记忆帮你改的,
希望对你有帮助。
************************************************************************************************/
8 0 2016-08-26 0条评论 回复
mJDnaQWH386
都没程序,还哪里错了
17 0 2016-01-26 0条评论 回复
您可能感兴趣的社区主题
加载中...
发布 评论