/*功能:寻迹小车使用芯片:AT89S52或者STC89C52或AT89S51STC89C51晶振:12MHZ编译环境:Keil作者:MH~*/#includereg51.h//引用标准库的头文件#includeintrins.h#defineucharunsignedchar#defineuintunsignedint//=================电机驱动=====================sbitdianji_r=P3^0;//右边电机控制口,低电平转?sbitdianji_l=P3^7;//左边电机控制口,低电平转//=============循迹感应接口======================sbitxjmk_r=P3^2;//右边寻迹模块检测口INT0sbitxjmk_l=P3^3;//左边寻迹模块检测口INT1voidcheck_righet();//右边时候检测到黑线测试程序voidcheck_left();//左边时候检测到黑线测试程序voiddelay_50us(uintt);voiddelayms(uintMs);ucharr_count;//右边传感器检测到的次数计数单元ucharl_count;uinttime;//***********************主程序******************************main(){time=50;dianji_r=0;//上电时右侧电机运行dianji_l=0;//上电时左侧电机运行EA=1;EX1=1;EX0=1;IT1=0;IT0=0;xjmk_r=1;//置IO为1,准备读取数据xjmk_l=1;_nop_();r_count=0;l_count=0;while(1){_nop_();//check_righet();//调用右边寻迹检测传感器//check_left();//if(r_count=1){delayms(time);dianji_r=0;dianji_l=0;r_count=0;_nop_();}if(l_count=1){delayms(time);dianji_r=0;dianji_l=0;l_count=0;_nop_();}}}voidinit0int()interrupt2{l_count=5;dianji_l=1;dianji_r=0;if(r_count0){EX0=0;delayms(20);if(time=20)time-=19;EX0=0;}return;}voidinit1int()interrupt0{r_count=5;dianji_r=1;dianji_l=0;if(l_count0){EX1=0;delayms(20);if(time=20)time-=19;EX1=1;}return;}//*******************************************************************************//函数名称://功能:左边边时候检测到黑线测试程序voidcheck_left(){if(xjmk_l==0)//检测右边的传感器是否感应到黑线{delay_50us(1);//延时,去除机械振动_nop_();if(xjmk_l==0)//再次检测{delay_50us(1);//延时,去除机械振动if(xjmk_l==0){l_count++;xjmk_l=1;}}}}//*******************************************************************************//函数名称://功能:右边时候检测到黑线测试程序voidcheck_righet(){if(xjmk_r==0)//检测右边的传感器是否感应到黑线{delay_50us(1);//延时,去除机械振动if(xjmk_r==0)//再次检测{delay_50us(1);//延时,去除机械振动if(xjmk_r==0){r_count++;xjmk_r=1;}}}}//*******************************************************************************//函数名称:voiddelay_50US(unsignedintt)//功能:延时50*t(us)voiddelay_50us(uintt){ucharj;for(;t0;t--){for(j=19;j0;j--);}}/*====================================================================设定延时时间:x*1ms====================================================================*/voiddelayms(uintMs){uinti,TempCyc;for(i=0;iMs;i++){TempCyc=70;while(TempCyc--);}}