#include "reg52.h"
#include "Delay.h"
#define uchar unsigned char
#define uint unsigned int
sbit BEEP=P2^6; //蜂鸣器
sbit RUN=P2^5; //直流电机
sbit Trig=P1^5; //555使能端
sbit Echo=P1^6; //接受端
void startset(void);
unsigned char outcomeH,outcomeL,i;
bit succeed_flag;
void main (void)
{ uint distance;
startset(); //初始化
while(1)
{ EA=0;
Trig=1;
Delayus(20);
Trig=0;
while(Echo==0)
succeed_flag=0;
EX0=1; //打开外部中断
TH0=0; //定时器0清零
TL0=0; //定时器0清零
TR0=1; //启动定时器0
TF0=0;
EA=1;
if (succeed_flag==1)
{ i=outcomeH*256+outcomeL;
distance=(int)((i*0.034)/2);
}
else
{
distance=0;
}
if(distance<15)
{
RUN=0;
BEEP=1;
}
}
}
void startset(void)
{ TMOD=0x01; //方式1
TR0=1; //启动定时器0
TH0=0;
TL0=0;
BEEP=0; //关蜂鸣器
RUN=1; //开电机
EA=1; //开启外部总中断
}
//外部中断0,用做判断回波电平
INTO_() interrupt 0 //外部中断是0号
{
outcomeL=TL0;//取出定时器的值
outcomeH=TH0;
succeed_flag=1;//至成功测量的标志
EX0=0;//关闭外部中断
}
timer0() interrupt 1 // 定时器0中断是1号
{
TH0=0;
TL0=0;
}
|