Red de conocimiento informático - Conocimiento sistemático - Un ejemplo de programación de controladores de microcontroladores automotrices

Un ejemplo de programación de controladores de microcontroladores automotrices

Simplemente lea los comentarios usted mismo y haga correcciones. Todas las funciones están escritas, solo elimine las inútiles.

# incluir ltreg52.h gt

# incluir ltmath.h gt

#Definir carácter sin firmar uchar

#Definir uint none Símbolo entero

#Definición L_M 1

#Definición R_M 2

uchar temp2, temp1, t, m1, m2, línea roja;

sbit tr=p2^4; //onda ultrasónica

sbit ec=p2^5; //

sbit en=p2^7; //LCD EN

sbit rs=p2^6; //Terminal de selección LCD RS

//Puerto de datos LCD P0

sbit rin_1=p2^0; p>

sbit rin_2=p2^1;

sbit lin_2=p2^2;

sbit lin_1=p2^3;

sbit l_en = p1^0; //Motor izquierdo habilitado

sbit l_1=p1^1; //Control del motor izquierdo 1

sbit l_2=p1^2; //Control del motor izquierdo 2

sbit r_1=p1^3; //Control del motor derecho 1

sbit r_2=p1^4; //Control del motor derecho 2

sbit r_en=p1; ^5; //Motor derecho habilitado

Retraso nulo(uint z) //Retraso programa 1

{

uint x, y;

for(x = z; x gt0; x -)

for(y = 110; y gt0; y-);

}

Retraso no válido 1s (uchart)//Función de retraso de 1s

{

uchar a, h, I, j, k

for(a = t; a gt0;respuesta-)

{

for(h = 5;h gt0;h -)

for(I = 4;i gt0;i -)

for(j = 116;j gt0;j -)

for(k = 214;k gt0;k-);

}

}

void v _ control (número uchar, velocidad uchar)

{

if (velocidad lt100)

p >

{

si(número==1)

m1=abs(velocidad);

si (número==2)

p>

m2=abs(velocidad);

}

}

Giro a la izquierda no válido()

{

l _ 1 = 1; //Voltear hacia la izquierda //

l _ 2 = 0;

r _ 1 = 1; derecha

p>

r _ 2 = 0;

}

Giro a la derecha no válido()

{

l _ 1 = 0; //Zheng Zhuan izquierdo

l _ 2 = 1;

r _ 1 = 0 //Giro a la derecha

<; p>r _ 2 = 1;

}

void gostright()

{

l _ 1 = 0; Zuo Zheng Zhuan

l _ 2 = 1;

r _ 1 = 1; //Girar a la derecha

r _ 2 = 0; ><

p>}

void goback()

{

l _ 1 = 1 // Zuo Zheng Zhuan

l _ 2; = 0;

r _ 1 = 0; //Giro hacia adelante a la derecha

r _ 2 = 1;

}

No válido Detener()

{

l _ 1 = 1 // Detener

l _ 2 = 1

r _ 1; = 1; //Detener

r _ 2 = 1;

}

temporizador de anulación 0_int()

{

TMOD = 0x 01;

TH0 =-100/256;

TL0 =-100 256;

EA = 1;

p>

ET0 = 1

TR0 = 1

}

state_int()

{

rin_1 = 1

rin_1 = 1

Lin_1 = 1

Lin_1 =; 1;

p>

t = 0

m 1 = 50;

m2 = 50

parar(); p>

}

void main()

{

Temporizador 0 _ int()

estado _ int( );

while(1)

{

//Programa para evitar obstáculos

if((Lin _ 1 = = 1) amplificador; amplificador(Lin _ 2 = = 1) amplificador(Rin _ 1 = = 1) amplificador(Rin_2==1))

gostright();

if((Lin _ 1 = = 1) amp; amp(Lin _ 2 = = 1) amp; amp(((Rin _ 1 = = 1) amp; amp(Rin _ 2 = = 0))| |(( Rin _ 1 = = 0) amp; amp(Rin _ 2 = = 1)) |((Rin _ 1 = = 0) amp; amp(Rin_2==0))))

Gire left();

if((Rin _ 1 = = 1) amp; amp(Rin _ 2 = = 1) amp; amp(((Lin _ 1 = = 1) amp; amp(Lin _ 2 = = 0 ))| |((Lin _ 1 = = 0) amp; amp(Lin _ 2 = = 1))|((Lin _ 1 = = 0) amp; amp(Lin_2==0) )))

girar a la derecha();

if(((((Lin _ 1 = = 1) amp; amp(Lin _ 2 = = 0))| |( (Lin _ 1 = = 0) amp; amp(Lin _ 2 = = 1))|((Lin _ 1 = = 0) amp; amp(Lin _ 2 = = 0))) amp((( Rin _ 1 = = 1) amp; amp(Rin _ 2 = = 0)) |((Rin _ 1 = = 0) amp; amp(Rin _ 2 = = 1))|((Rin _ 1 =

= 0) amp; amp(Rin_2==0))))

volver();

if((Lin _ 1 = = 1) amp; amp(Lin _ 2 = = 1) amp; amp(Rin _ 1 = = 1) amp(Rin_2==1))

gostright();

if((Lin _ 1) = = 1) amperio; amperio(Lin _ 2 = = 1) amperio(((Rin _ 1 = = 1) amperio; amperio(Rin _ 2 = = 0))| |((Rin _ 1 = = 0 ) amp; amp(Rin _ 2 = = 1))|((Rin _ 1 = = 0) amp; amp(Rin_2==0))))

Gire a la izquierda (); p>

if((Rin _ 1 = = 1) amp; amp(Rin _ 2 = = 1) amp; amp(((Lin _ 1 = = 1) amp; amp(Lin _ 2 = = 0) )| |((Lin _ 1 = = 0) amp; amp(Lin_2 = = 1))|((Lin _ 1 = = 0) amp; amp(Lin_2==0))))

girar a la derecha();

if(((((Lin _ 1 = = 1) amp; amp(Lin _ 2 = = 0))| |((Lin _ 1 = = 0) amp; amp(Lin _ 2 = = 1))|((Lin _ 1 = = 0) amp; amp(Lin _ 2 = = 0))) amp(((Rin _ 1 = = 1 ) amp; amp(Rin _ 2 = = 0)) |((Rin _ 1 = = 0) amp; amp(Rin _ 2 = = 1)) |((Rin _ 1 = = 0) amp ; amp (Rin_2==0))))

volver();

}

mientras(1);

}

Temporizador 0() interrupción 1

{

TH0 =-100/256;

TL0 =-100 256;

p>

Si (t==0)

{

temp 1 = m 1;

temp2 = m2

}

if(t==temp1)

l _ EN = 0;

if(t==temp2)

r _ EN = 0;

t

si (t==50)

{

t = 0;

l _ EN = 1;

r _ EN = 1;