Una vez terminadas las prácticas anteriores, ahora para dejar el código 'perfecto' podéis definir dos funciones, una que ilumine en secuencia los LEDS a una velocidad y otra más despacio. Aquí puedes ver un video de lo que debería suceder:
---------------------------------------
sfr P0=0x80; sfr P1=0x90; sfr P2=0xA0; sfr P3=0xB0;
int i; int tiempo1= 1500; int tiempo2= 500;
void retardar(long int retardo){
while(retardo--);}
void secuencia1(void){
int i=0;
unsigned char leds=0xFF;
for (i=0;i<=8;i++) { P0=leds; P1=leds; P2=leds; P3=leds; retardar(tiempo1);leds=leds>>1; }
}
void secuencia2(void){
int i=0;
unsigned char leds=0xFF;
for (i=0;i<=8;i++) { P0=leds; P1=leds; P2=leds; P3=leds; retardar(tiempo2);leds=leds>>1; }
}
void main (void)
{
secuencia1(); secuencia2();
}
---------------------------------------
Las funciones se definen antes del programa principal mail, hay tres, a saber: 'retardar', 'secuencia1' y 'secuencia2'. Observa también que se han definido dos variables 'tiempo1' y 'tiempo2' para los retardos de cada secuencia.
Propuesta: En principio ambas se mueven en la misma dirección, se propone cambiar la dirección de una de ellas.
Pregunta: ¿Podría haber definido las variables 'tiempo1' y 'tiempo2' como char? ¿Cuál sería la consecuencia?
Nota: Observa que no hay ningún bucle en el programa principal main y sin embargo el programa no para de ejecutarse en la placa, recuerda lo que comentamos: "en un microcontrolador una vez grabado el programa, se ejecuta para siempre aunque no haya un bucle". Para asegurarte incluye un bucle con while(1).
No hay comentarios:
Publicar un comentario