|
我采用的是這種方法關閉定時器,但是小車不能運行了,麻煩大神幫忙修改一下
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit xsign1=P0^0; //中間循跡探頭
sbit xsign2=P0^1; //右邊循跡探頭
sbit xsign3=P0^2; //左邊循跡探頭
sbit RX1=P3^0;
sbit TX1=P3^1;
sbit IN1=P2^0;
sbit IN2=P2^1;
sbit IN3=P2^2;
sbit IN4=P2^3;
sbit IN5=P2^6;
sbit IN6=P2^7;
sbit IN7=P2^4;
sbit IN8=P2^5;
sbit ENA=P1^0;
sbit ENB=P1^3;
sbit ENC=P1^1;
sbit END=P1^2;
int t=0;
bit flag=0,a=0;
uchar R1=0;
uchar L1=0;
uchar R2=0;
uchar L2=0;
unsigned int time=0;
unsigned int timer=0;
unsigned long S1=0;
void conut1();
void TimerConfiguration();
void delay_1ms(unsigned char x);
void mit();
void go();
void down();
void left();
void right();
void stop();
void main()
{
ENA=0;
ENB=0;
ENC=0;
END=0;
mit();
TimerConfiguration();
while(1)
{
TX1=1;
delay_1ms(1);
TX1=0;
conut1();
if(S1<=20)
{
stop();
}
if((S1>20)&&(xsign3==1)&&(xsign1==0)&&(xsign2==1))
{
go();
}
if((S1>20)&&(xsign3==0)&&(xsign2==1))
{
left();
}
if((S1>20)&&(xsign3==1)&&(xsign2==0))
{
right();
}
}
}
void mit()
{
TMOD=0x11;
TH0=0;
TL0=0;
TH1=(65535-50)/256;
TL1=(65535-50)%256;
ET0=1;
ET1=1;
TR1=1;
EA=1;
}
void TimerConfiguration()
{
RCAP2H=0xb8;
RCAP2L=0x00;
ET2=1; // 允許T2定時器中斷
EA=1; // 打開總中斷
TR2=1;
}
void conut1()
{
/* if(flag==1)
{
IN3=~IN3;
flag=0;
}*/
while(!RX1);
TR0=1;
while(a)
a=RX1&&flag;
TR0=0;
flag=0;
time=TH0*256+TL0;
TH0=0;
TL0=0;
S1= (long)(time*0.017);
}
void Timer1() interrupt 3
{
TH1=0x70;
TL1=0x00;
t++;
if(t< L1)
ENA=1;
else
ENA=0;
if(t< R1)
ENB=1;
else
ENB=0;
if(t< L2)
ENC=1;
else
ENC=0;
if(t< R2)
END=1;
else
END=0;
if(t==100)
t=0;
}
void Timer2() interrupt 5
{
flag=1;
TF2=0;
}
void delay_1ms(unsigned char x)
{
unsigned char i;
while(x--)
for(i=124;i>0;i--);
}
void go()
{
IN1=1;
IN2=0;
L1=25;
IN3=0;
IN4=1;
R1=25;
IN5=1;
IN6=0;
L2=25;
IN7=0;
IN8=1;
R2=25;
}
void down()
{
IN1=0;
IN2=1;
L1=30;
IN3=1;
IN4=0;
R1=30;
IN5=0;
IN6=1;
L2=30;
IN7=1;
IN8=0;
R2=30;
}
void left()
{
IN1=0;
IN2=1;
L1=40;
IN3=0;
IN4=1;
R1=40;
IN5=0;
IN6=1;
L2=30;
IN7=0;
IN8=0;
R2=0;
}
void right()
{
IN1=1;
IN2=0;
L1=40;
IN3=1;
IN4=0;
R1=40;
IN5=0;
IN6=0;
L2=0;
IN7=1;
IN8=0;
R2=30;
}
|
|