西安电子科技大学吧 关注:261,183贴子:5,154,589
  • 10回复贴,共1

基于51的中断函数使用遇到一个问题,寻迹避障小车的制造者

只看楼主收藏回复

我想在循迹的时候不运行避障,避障的时候不循迹,寻火可以先不管,如果能一起解决当然更好。
程序如下:
#include <reg51.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit p2_0 = P2^0; //开关 5
sbit p2_1 = P2^1; //红外检测
sbit p2_2 = P2^2;
sbit p2_3 = P2^3;
sbit p3_1 = P3^1; //壁障检测
sbit p3_2 = P3^2;
sbit p3_3 = P3^3;
sbit p3_4 = P3^4;
sbit p0_0 = P0^0; //寻火检测
sbit p0_1 = P0^1;
sbit p0_2 = P0^2;
sbit p0_3 = P0^3;
sbit p1_0 = P1^0; //电机驱动
sbit p1_1 = P1^1;
sbit p1_2 = P1^2;
sbit p1_3 = P1^3;
/***************************************
* 函 数 名 : Time1Config
* 函数功能 : 设置定时器
* 输 入 : 无
* 输 出 : 无
***************************************/
void DelayX1ms(uint count)
{ uint j;
while(count--!=0)
{ for(j=0;j<72;j++);
}
}
void ZhiXing( )
{
p1_0=0;
p1_1=0;
p1_2=0;
p1_3=0;
DelayX1ms(10);
p1_0=1;
p1_1=0;
p1_2=1;
p1_3=0;
DelayX1ms(15); }
void YouZhuan( )
{
p1_0=0;
p1_1=0;
p1_2=0;
p1_3=0;
DelayX1ms(10);
p1_0=1;
p1_1=0;
p1_2=0;
p1_3=1;
DelayX1ms(20);
}
void ZuoZhuan( )
{
p1_0=0;
p1_1=0;
p1_2=0;
p1_3=0;
DelayX1ms(10);
p1_0=0;
p1_1=1;
p1_2=1;
p1_3=0;
DelayX1ms(20);
}
void HouTui( )
{
p1_0=0;
p1_1=0;
p1_2=0;
p1_3=0;
DelayX1ms(6);
p1_0=0;
p1_1=1;
p1_2=0;
p1_3=1;
DelayX1ms(20); }
/*************xunji***********/
void xunji()
{
if( p2_1==0 && p2_2==0 && p2_3==1)
{
ZuoZhuan( );
}
else if(p2_1==1 && p2_2==0 && p2_3==0)
{
YouZhuan( );
}
else if(p2_1==0 && p2_2==1 && p2_3==0)
{ ZhiXing( );
}
else
{ ZhiXing();
} }
/*****bizhang*****/
void bizhang()
{
if( p3_1==0 && p3_2==0 && p3_3==1 || p3_4 == 1)
{
ZouZhuan( );
}
else if(p3_1==1 || p3_2==1 && p3_3==0 && p3_4 == 1)
{
YuoZhuan( );
}
else if(p3_1==1 && p3_2==1 && p3_3==1 && p3_4 == 1)
{
ZhiXing( );
}
else if(p3_1==0 && p3_2==0 && p3_3==0 && p3_4 == 0)
{
HouTui( );
}
else
{ZhiXing();
}
}
/*************xunhuo************/
void xunhuo()
{if( p0_0==0 || p0_1==0 && p0_2==1 && p0_3 == 1)
{ YouZhuan();
}
else if( p0_0==1 && p0_1==1 && p0_2==0 || p0_3 == 0)
{ ZuoZhuan();
}
else if( p0_0==1 && p0_1==1 && p0_2==1 && p0_3 == 0)
{ZhiXing();
}
else
{ZhiXing();
} }
/**********/
void Time1Config()
{
TMOD|= 0x11; //设置定时计数器工作方式1为定时器 //--定时器赋初始值,12MHZ下定时0.5ms--//
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
IT0=1;
EX0=1; //开启外部0中断
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
ET1=1; //开启定时器1中断
TR1=1; //开启定时器
while(1)
{
bizhang();
}
}
void Time1(void) interrupt 3
//3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断2 4 串口中断
{
TH0 =(65536-45872)/256; //重新赋初值
TL0 =(65536-45872)%256 ;
}
void Time2(void) interrupt 0
//3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断2 4 串口中断
{
TH1 =(65536-45872)/256; //重新赋初值
TL1 =(65536-45872)%256 ;
if(p3_1==1 && p3_2==1 && p3_3==1 && p3_4 == 1 )
{ DelayX1ms(10);
if(p3_1==1 && p3_2==1 && p3_3==1 && p3_4 == 1 )
{xunji();}
}
else if(p2_1==0 && p2_2==0 && p2_3==0)
{DelayX1ms(10);
if(p2_1==0 && p2_2==0 && p2_3==0)
{ bizhang();
}
}
}
/************************************************ 主函数 ************************************************/
void main( )
{
Time1Config();
}


1楼2015-09-20 10:52回复
    求解决


    2楼2015-09-20 11:05
    收起回复
      第一眼发现的问题是。。。右转打成了yuo...


      IP属地:陕西来自iPhone客户端6楼2015-09-20 18:28
      收起回复