MICROCONTROLADORES

MICROCONTROLADORES
MICROCONTROLADORES

Corrimiento de led´s por el puerto B

Este es el segundo ejemplo que tengo para ustedes se trata de realizar un corrimiento de led´s por el puerto B del PIC 16f84. En este ejemplo se usan dos funciones las cuales son creadas por el usuario (la persona que este programando), este es un tip que ayuda demasiado en caso de que la programación se vuelva muy extensa.


El código es el siguiente:

#include <16f84a.h> //Pic a programar

#USE DELAY( CLOCK=4000000 ) //Oscilador

#FUSES XT,NOWDT,NOPROTECT,NOPUT//Ordenes para el programador

///////////////////DECLARACIONES DE FUNCIONES//////////////////

void derecha(void); //ilumina led's derecha a izquierda.Se declara la función derecha

void izquierda(void); //ilumina led's izquierda a derecha.Se declara la función izquierda

////////PROGRAMA PRINCIPAL///////

void main(void)

{

set_tris_b(0x00); //portb como salida

output_b(0x00);//pone en ceros el puerto b para iniciar con los led´s apagados

while(TRUE)//ciclo

{

derecha(); //Mandamos llamar a la función derecha

izquierda(); //Mandamos llamar la función izquierda

}

}
/////////////////////////////////////////////////////////////////////////


////////FUNCION DERECHA/////

void derecha(void)

{

output_high(PIN_B0); //Ponemos un 1 en el pin 0 del puerto B

delay_ms(300);//Esperamos 300 ms

output_low(PIN_B0); // Ponemos un 0 en el pin 0 del puerto B

output_high(PIN_B1); // Ponemos un 1 en el pin 1 del puerto B

delay_ms(300); // Esperamos 300 ms

output_low(PIN_B1);// Ponemos un 0 en el pin 1 del puerto B

output_high(PIN_B2);//Ponemos un 1 en el pin 2 del puerto B

delay_ms(300); // Esperamos 300 ms

output_low(PIN_B2); //Ponemos un 0 en el pin 2 del puerto B

output_high(PIN_B3); // Ponemos un 1 en el pin 3 del puerto B

delay_ms(300); //Esperamos 300 ms
}
/////////////////////////////////////////////////////////////////////////////

///////////////////////////////FUNCION IZQUIERDA//////////////////
void izquierda(void)

{

output_low(PIN_B3);// Ponemos un 0 en el pin 3 del puerto B

output_high(PIN_B2);// Ponemos un 1 en el pin 2 del puerto B

delay_ms(300); //Esperamos 300 ms

output_low(PIN_B2);// Ponemos un 0 en el pin 2 del puerto B

output_high(PIN_B1); //Ponemos un 1 en el pin 1 del puerto B

delay_ms(300); //Esperamos 300 ms

output_low(PIN_B1); //Ponemos un 0 en el pin 1 del puerto B

}
////////////////////////////////////////////////////////////////////////////////

Como vemos, en el código declaramos dos funciones (derecha e izquierda) después de las órdenes para el programador. Ocupamos un void en cada función ya que esto nos indica que al terminar de realizar la función no se regresa ningún dato.

El ocupar funciones es de gran ayuda por que dentro de nuestro programa principal se reduce el código y solo basta con mandar a llamar la función, otra ventaja de las funciones es que si nuestro código es muy extenso y además la función se necesita en varios puntos de nuestra programación solo se manda a llamar y no se tiene que estar escribiendo cada que se necesite.

Una vez escrito el programa en CCS solo basta compilarlo y ver que no tenga ningún error así como armar el circuito en Proteus y cargar el .HEX (Véase el primer ejercicio publicado en este blog).