一個用超聲波和紅外做的跟蹤小車,不知道哪里的問題麻煩大神看下
TX是超聲波上的Trio
RX是超聲上的Erio
R、L、C是紅外傳感器的out口
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
**it RX = P1 ^ 1;
**it TX = P1 ^ 2;
**it o1 = P2 ^ 6;
**it o2 = P2 ^ 5;
**it o3 = P1 ^ 4;
**it o4 = P1 ^ 3;
**it R=P3^3;
**it C=P3^4;
**it L=P3^5;
unsigned int time=0;
unsigned int timer=0;
float S=0;
bit flag=0;
void Ceju(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*1.7)/100;
if(flag==1)
{
flag=0;
}
if (S >=30&&S<=100)
o1 = 1, o2 = 0, o3 = 1, o4 = 0;
if(S<30)
o1=1,o2=1,o3=1,o4=1;
}
void delayms(unsigned int ms)
{
unsigned char i=100,j;
for(;ms;ms--)
{
while(--i)
{
j=10;
while(--j);
}
}
}
void zd0() interrupt 1
{
flag=1;
}
void StartModule()
{
TX=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
void Left()
{o1=0;o2=0;o3=1;o4=0;}
void Right()
{o1=1;o2=0;o3=0;o4=0;}
void Stop()
{o1=1;o2=1;o3=1;o4=1;}
void main(void)
{
o1=0;
o2=0;
o3=0;
o4=0;
TMOD = 0x21;
SCON = 0x50;
TH1 = 0xFD;
TL1 = 0xFD;
TH0 = 0;
TL0 = 0;
TR0 = 1;
ET0 = 1;
TR1 = 1;
TI = 1;
EA = 1;
while (1)
{
StartModule();
while (!RX);
TR0 = 1;
while (RX);
TR0 = 0;
Ceju();
delayms(11);
if (C == 1 && L == 1 && R == 1)
{
Ceju();
delayms(100);
}
if (R == 0)
{
Right();
delayms(100);
}
if (L == 0)
{
Left();
delayms(100);
}
if (C == 0)
{
Stop();
delayms(100);
}
}
}
|