6
Practica #2 (Secuencia de 8 Leds) *Forma 1 -En este programa haremos que 8 leds prendan consecutivamente y se apaguen de la misma forma, este programa se puede hacer de dos formas diferentes que a continuación las explicaremos. 1. Iniciamos indicando que micro vamos a trabajar y el valor del cristal a utilizar. #include <18f2550.h> #use delay(clock=8000000) 2. Seguimos con la función principal que ya conocemos. Le recuerdo que no se debe olvidar abrir y cerrar los corchetes. #include <18f2550.h> #use delay(clock=8000000) void main (void) { } 3. Ahora empezamos a escribir nuestro programa, es muy sencillo y muy parecido al anterior lo único que tenemos que hacer es repetir el encendido y apagado 8 veces sin olvidar los retardos; pero no podemos conectar todos los led al mismo pin, por lo tanto tenemos que conectar cada led en un pin diferente, por este motivo vamos a necesitar todo el puerto B. Como recordaremos un led se enciende y apaga de la siguiente manera: output_high(pin_b0); delay_ms(1000); outout_low(pin_b0); delay_ms(1000); Pero nosotros necesitamos hacerlo 8 veces y lo único que vamos a cambiar es el pin, por ejemplo: pin_b0, pin_b1, pin_b2….. y esto lo haremos hasta llegar al pin b7. -Por lo tanto esto quedaría así: #include <18f2550.h> #use delay(clock=8000000) void main (void) { output_high(pin_b0); delay_ms(1000); outout_low(pin_b0); delay_ms(1000); output_high(pin_b1); delay_ms(1000); outout_low(pin_b1); delay_ms(1000); output_high(pin_b2); delay_ms(1000); outout_low(pin_b2); delay_ms(1000);

enc 8 leds

Embed Size (px)

DESCRIPTION

Documento donde se realiza el programa de encender 8 leds

Citation preview

Page 1: enc 8 leds

Practica #2 (Secuencia de 8 Leds)

*Forma 1 -En este programa haremos que 8 leds prendan consecutivamente y se apaguen de la misma

forma, este programa se puede hacer de dos formas diferentes que a continuación las

explicaremos.

1. Iniciamos indicando que micro vamos a trabajar y el valor del cristal a utilizar.

#include <18f2550.h>

#use delay(clock=8000000)

2. Seguimos con la función principal que ya conocemos. Le recuerdo que no se debe olvidar

abrir y cerrar los corchetes.

#include <18f2550.h>

#use delay(clock=8000000)

void main (void)

{

}

3. Ahora empezamos a escribir nuestro programa, es muy sencillo y muy parecido al anterior lo

único que tenemos que hacer es repetir el encendido y apagado 8 veces sin olvidar los

retardos; pero no podemos conectar todos los led al mismo pin, por lo tanto tenemos que

conectar cada led en un pin diferente, por este motivo vamos a necesitar todo el puerto B.

Como recordaremos un led se enciende y apaga de la siguiente manera:

output_high(pin_b0);

delay_ms(1000);

outout_low(pin_b0);

delay_ms(1000);

Pero nosotros necesitamos hacerlo 8 veces y lo único que vamos a cambiar es el pin, por

ejemplo: pin_b0, pin_b1, pin_b2….. y esto lo haremos hasta llegar al pin b7.

-Por lo tanto esto quedaría así:

#include <18f2550.h>

#use delay(clock=8000000)

void main (void)

{

output_high(pin_b0);

delay_ms(1000);

outout_low(pin_b0);

delay_ms(1000);

output_high(pin_b1);

delay_ms(1000);

outout_low(pin_b1);

delay_ms(1000);

output_high(pin_b2);

delay_ms(1000);

outout_low(pin_b2);

delay_ms(1000);

Page 2: enc 8 leds

output_high(pin_b3);

delay_ms(1000);

outout_low(pin_b3);

delay_ms(1000);

output_high(pin_b4);

delay_ms(1000);

outout_low(pin_b4);

delay_ms(1000);

output_high(pin_b5);

delay_ms(1000);

outout_low(pin_b5);

delay_ms(1000);

output_high(pin_b6);

delay_ms(1000);

outout_low(pin_b6);

delay_ms(1000);

output_high(pin_b7);

delay_ms(1000);

outout_low(pin_b7);

delay_ms(1000);

}

4. Ya esta listo el programa solo que tenemos el mismo problema que se nos presento en el

programa pasado, y como recordaremos solo le tenemos que agregar un “while” y se soluciona

este problema.

#include <18f2550.h>

#use delay(clock=8000000)

void main (void)

{

While(true)

{

output_high(pin_b0);

delay_ms(1000);

outout_low(pin_b0);

delay_ms(1000);

output_high(pin_b1);

delay_ms(1000);

outout_low(pin_b1);

delay_ms(1000);

output_high(pin_b2);

delay_ms(1000);

outout_low(pin_b2);

delay_ms(1000);

Page 3: enc 8 leds

output_high(pin_b3);

delay_ms(1000);

outout_low(pin_b3);

delay_ms(1000);

output_high(pin_b4);

delay_ms(1000);

outout_low(pin_b4);

delay_ms(1000);

output_high(pin_b5);

delay_ms(1000);

outout_low(pin_b5);

delay_ms(1000);

output_high(pin_b6);

delay_ms(1000);

outout_low(pin_b6);

delay_ms(1000);

output_high(pin_b7);

delay_ms(1000);

outout_low(pin_b7);

delay_ms(1000);

}

}

Nota:

-Recordamos que este es un ejemplo de cómo prender y apagar varios leds, pero se puede

hacer cualquier tipo de secuencia todo es cuestión de creatividad.

*Esa es una forma de realizar una secuencia de leds ahora vamos a aprender otra forma de

hacer la misma secuencia.

*Forma 2

1. Iniciamos de la misma forma que siempre:

#include <18f2550.h>

#use delay(clock=8000000)

2. Antes de empezar a escribir la función principal tenemos que declarar las variables que

vamos a usar, pero antes vamos a definir que es una variable:

-Una variable es donde podemos almacenar ciertos valores que a medida que el programa

avance estos van a ir cambiando su valor, una variable se puede llamar de cualquier forma,

existen varios tipos de variables, de 8 bits, de 16 bits, y variables decimales; estas variables se

declaran de la siguiente forma:

*int xxxx; (esta es una variable de 8 bits).

*int16 xxxx; (esta es una variable de 16 bits).

*float xxxx; (esta es la única variable que trabaja con números decimales, aunque también

puede trabajar con números enteros, y trabaja cualquier cantidad de bits).

Page 4: enc 8 leds

Si se requiere trabajar con mas de una variable se agrega enseguida de la otra separadas de

una coma y al final se debe poner un punto y coma ( ; ), ejemplo: int x,y,z; donde -x- es una

variable -y- es otra y -z- otra variable.

Ya que tenemos claro que es una variable seguimos con el programa, nosotros utilizaremos 2

variables ( x y aux ), pero las vamos a escribir de la siguiente forma:

int x=1,aux[15];

Una variable automáticamente no tiene inicio, puede empezar desde cualquier numero por este

motivo se recomienda iniciarla desde 0 o 1 para que no haya problemas en el programa,

aunque le podemos dar cualquier valor de inicio pero en este caso la iniciamos en 1.

La otra variable aux utiliza vectores en este caso son 14 vectores que se van a usar pero

tenemos que escribir una mas (15) para que el programa no marque error.

Nuestro programa va de la siguiente forma:

#include <18f2550.h>

#use delay(clock=8000000)

int x=1,aux[15];

3. Empezamos a escribir la función principal y la iniciamos escribiendo el valor de cada uno de

los vectores de la variable aux y se puede hacer de dos formas:

aux[1]=0b00000001; (esta es la forma binaria, se identifica porque el código empieza por 0b

que significa que el código esta escrito en binario, recordemos que es una variable de 8 bits por

lo tanto solo podemos tener 8 “números”).

aux[1]=0x01; (esta es la forma hexa, se identifica porque empiezan por 0x que significa que el

código esta escrito en hexadecimal).

Entre las llaves se escribe el numero del vector, en nuestro caso son 14 vectores por lo tanto

van a haber 14 combinaciones diferentes.

En lo personal prefiero el código binario ya que se puede ver la secuencia que uno este

realizando.

Nosotros vamos a encender del led 1 al 8 y los apagaremos del 8 al 1; nuestros vectores

quedan de la siguiente forma:

aux[1]=0b00000001;

aux[2]=0b00000010;

aux[3]=0b00000100;

aux[4]=0b00001000;

aux[5]=0b00010000;

aux[6]=0b00100000;

aux[7]=0b01000000;

aux[8]=0b10000000;

aux[9]=0b01000000;

aux[10]=0b00100000;

aux[11]=0b00010000;

aux[12]=0b00001000;

aux[13]=0b00000100;

aux[14]=0b000000010;

Aclaro que un 1 significa un alto y un 0 un bajo.

Page 5: enc 8 leds

Por ahora nuestro programa va de la siguiente forma:

#include <18f2550.h>

#use delay (clock=8000000)

int x=1,aux[15];

void main (void)

{

aux[1]=0b00000001;

aux[2]=0b00000010;

aux[3]=0b00000100;

aux[4]=0b00001000;

aux[5]=0b00010000;

aux[6]=0b00100000;

aux[7]=0b01000000;

aux[8]=0b10000000;

aux[9]=0b01000000;

aux[10]=0b00100000;

aux[11]=0b00010000;

aux[12]=0b00001000;

aux[13]=0b00000100;

aux[14]=0b000000010;

}

4. Seguimos el programa con un “while” para evitar el desborde o pérdida del micro ahora

vamos a utilizar un “for”, for es un condicional que nos sirve para realizar una secuencia

determinada las veces que nosotros le indiquemos al for y luego continúe con el programa, por

ejemplo podemos hacer que cada led se prenda y apague 5 veces y luego hacer una

secuencia; en palabras resumidas podemos decir que el for es un contador.

En un for debemos indicar en que numero iniciamos la “cuenta”, hasta que numero debe

contar, y si queremos aumentar o disminuir. Recordemos que estos números debemos

almacenarlos en una variable.

Vamos a iniciar el for en 1, que cuente hasta 14 y que aumente; esto queda así:

for (x=1;x<=14;++x)

{

}

El x<=14 es una condición: si x es menor o igual a 14 se hace lo que este dentro del for si no

cumple esa condición se sale del for.

Continuemos completando el for, ahora vamos a escribir la secuencia que tiene que seguir el

for:

for (x=1;x<=14;++x)

{

output_b(aux[x]);

delay_ms(1000);

}

Aquí utilizamos nuestro aux, le indicamos al programa que a la salida del puerto B ponga el

valor del vector y el valor del vector esta determinado por la variable x, por lo tanto cada ves

que se repita un for la x va aumentando de uno en uno y cada repetición va siendo un vector

diferente ya que cada ves la x va a tener un valor diferente y siempre la salida al puerto B va

cambiando prendiendo y apagando los leds indicados.

Se inicio con el vector 1 (aux[1]=0b00000001;) al x cambiar de valor pasamos al segundo

vector (aux[2]=0b00000010;) así hasta llegar al 14, cuando ya haya llegado al 14 acaba el for y

Page 6: enc 8 leds

sigue a la siguiente instrucción; pero nosotros no tenemos mas instrucciones por ese motivo

fue que colocamos el while antes del for, por lo tanto cuando el for llegue a 14 este vuelve y se

reinicia colocando la x en 1 y repitiendo la secuencia.

Y el programa final es el siguiente:

#include <18f2550.h>

#use delay (clock=8000000)

#define retardo delay_ms (10)

int x=1,aux[15];

void main (void)

{

aux[1]=0b00000001;

aux[2]=0b00000010;

aux[3]=0b00000100;

aux[4]=0b00001000;

aux[5]=0b00010000;

aux[6]=0b00100000;

aux[7]=0b01000000;

aux[8]=0b10000000;

aux[9]=0b01000000;

aux[10]=0b00100000;

aux[11]=0b00010000;

aux[12]=0b00001000;

aux[13]=0b00000100;

aux[14]=0b000000010;

while (true)

{

for (x=1;x<=14;++x)

{

output_b(aux[x]);

delay_ms(1000);

}

}

}