Práctica 2 Miuva Pro: Pulsador y leds

En esta práctica encenderemos los leds de Miuva Pro mediante los pulsadores, asociando cada led a un pulsador diferente y enmascarando el estado de los pulsadores.

Lo primero será definir el puerto J como salida (leds) y el puerto D como entrada (pulsadores):

set_tris_J(0x00);                         //Puerto J como salida
set_tris_D(0xFF);                         //Puerto D como entrada

Asignaremos los pulsadores y leds de la siguiente forma:

Pulsador -> Led

D1 -> J4

D2 -> J3

D3 -> J2

D4 -> J1

Crearemos ciclos de condición para el caso de cada pulsador, en cada ciclo primero leeremos el valor del puerto D (pulsadores), posteriormente según el pin que estemos analizando decidiremos si encender o apagar el led correspondiente, cabe resaltar que los pulsadores son de tipo normalmente cerrado, por lo tanto al presionarlos nos envían un “0” lógico y cuando no se presionan nos envían un “1” lógico, esto se puede realizar de la siguiente forma para analizar el pin D4:

1. Leemos el valor del puerto D

2. Lo multiplicamos por 0x10 (con esto eliminamos la información que no nos interesa de los demás pines)

3. Si lo que nos resulta de la multiplicación es igual a 0, quiere decir que el pulsador está presionado, por lo tanto guarda la información actual y se enciende el led.

4. Si lo que resulta es diferente de 0, quiere decir que el pulsador no está presionado, por lo tanto apagamos el led correspondiente.

Por ejemplo, si presionamos el pulsador D4:

1. PortD = XXX0XXXX

2. PortD * 0x10 = 00000000

Como la multiplicación nos da 0, significa que el pulsador está presionado.

PuertoJ = J + 0x02 = XXXXXX1X (Encendimos el led J1)

if ((input_d() & 0x10) == 0x00){       //Enmascaramiento de entrada para D4
   output_j(input_j() | 2);            //Enmascaramiento de salida para led J1
}
else{
   output_j(input_j() & ~2);
}

Un procedimiento similar utilizaremos para los demás pulsadores y leds, resultando el siguiente código:

#include <18F87J50.h>
#fuses HSPLL, NOWDT, NOPROTECT, NODEBUG, PLL2
#use delay (clock=24M)           
#use standard_io(J)              //Predefine el puerto J
#use standard_io(D)              //Predefine el puerti D   

void main(){
   set_tris_J(0x00);                         //Puerto J como salida
   set_tris_D(0xFF);                         //Puerto D como entrada
   while(true){                              //Bucle infinito
      if ((input_d() & 0x10) == 0x00){       //Enmascaramiento de entrada para D4
         output_j(input_j() | 2);            //Enmascaramiento de salida para led J1
      }
      else{
         output_j(input_j() & ~2);
      }
      
      if ((input_d() & 0x08) == 0x00){       //Enmascaramiento de entrada para D3
         output_j(input_j() | 4);            //Enmascaramiento de salida para led J2
      }
      else{
         output_j(input_j() & ~4);
      }
      
      if ((input_d() & 0x04) == 0x00){       //Enmascaramiento de entrada para D2
         output_j(input_j() | 8);            //Enmascaramiento de salida para led J3
      }
      else{
         output_j(input_j() & ~8);
      }
      
      if ((input_d() & 0x02) == 0x00){       //Enmascaramiento de entrada para D1
         output_j(input_j() | 16);           //Enmascaramiento de salida para led J4
      }
      else{
         output_j(input_j() & ~16);
      }
   }
}

 

Observa el video demostrativo

…PROXIMAMENTE…

Menú