#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit trig = P1^0; //产生脉冲引脚
sbit echo = P3^2; //回波引脚
sbit pwm1=P1^1;
sbit pwm2=P1^2;
sbit in1=P2^3;
sbit in2=P2^2;
sbit in3=P2^1;
sbit in4=P2^0;
void delay20();
void getd();
void front();
void right();
void stop();
void delay(uint i);
void fas();
void delay_(uint xms);
int outcomeh,outcomel;
uint distan ;
uint flag;
void main( )
{ int
time,a;
trig=0;
pwm1=1;
pwm2=1;
trig=0;
TMOD=0x01;
IT0 =1; //负边沿触发
EA = 1; //开总中断
while(1)
{
getd();
if(flag==1)
{ time=outcomeh*256+outcomel ;
a=time*7/1000;
}
if(flag==0)
{
a=0;
}
if(a==0)
{
stop();
}
if(a!=0)
{
front();
stop();
}
}
}
void estern() interrupt 0
{
outcomeh=TH0;
outcomel=TL0;
flag=1;
EX0=0;
}
void front()
{
in1=1;
in2=0 ;
in3=1 ;
in4=0 ;
delay(800);
}
void right()
{
in1=1;
in2=0 ;
in3=0 ;
in4=0 ;
delay(800);
}
void stop()
{
in1=0;
in2=0 ;
in3=0 ;
in4=0 ;
delay(800);
}
void fas()
{ EA=0;
trig=1;
delay20();
trig=0;
}
void getd()
{ fas();
while(echo==0);
flag=0;
EA=1;
EX0=1;
TH0=0 ;
TL0=0 ;
TF0=0 ;
TR0=1 ;
while(TH0<30);
TR0=0;
EX0=0;
}
void delay20()
{uchar a;
for(a=0;a<100;a++);
}
void delay(uint i)
{uchar j;
while(i--)
{
for(j=0;j<115;j++) ;
}
}
貌似楼主是想用外部中断吧
void estern() interrupt 0 //外部中断是不用定时器赋值的
{
outcomeh=TH0; //如果是使用定时器,这里是不对的,应该是TH0 = 初值高
outcomel=TL0; // TL0 = 初值低
flag=1;
EX0=0;
}
外部中断初始化方法
void OutInterrupt_0_init(void)
{
EA = 1; //开总中断
EX0 = 1;//开外部外部中断0
IT0 = 1;//脉冲控制
}
void OutInterrupt_0() interrupt 0 //外部中断函数
{
Out_flag = 1;//里面直接加你想加的语句即可
}
- EA=1; //开总中断
- EX0=1; //开外部中断0
- IT0=0; //设置触发方式 0为电平 1为脉冲
- 中断服务程序
- void exter0() interrput 0 (外部中断0的中断号为0)
- {
- d1=0;
- }
复制代码一周热门 更多>