Manejo de Pulsadores
Manejo de Pulsadores
Manejo de Pulsadores
9 CONEXIN DE PULSADORES
Todos los ejercicios realizados, hasta aqu, los puertos del PIC se han utilizado
como salidas. A continuacin se utilizaran como entradas. Se conectan pulsadores para
cambiar los niveles de tensin en los pines del puerto.
La figura 2.35, muestra las conexiones para manejar pulsadores. Con esta
conexin los pines del puerto (RD0 y RD1), estn directamente en estado lgico de 1.
Por consiguiente, el accionamiento del pulsador determina que pasen los puertos
indicados a bajo.
PROGRAMA:
#include <18f4550.h> //Librera para usar el PIC18F4550.
#fuses INTRC_IO,WDT,NOPROTECT,PUT, NOPBADEN //Configuracin de fusibles.
#use delay (clock=4000000) // FOSC =4MHz.
#BYTE port_b= 0xF81 //Identificador para el puerto b en la localidad 0xF81
#BYTE port_d= 0xF83 //Identificador para el puerto d en la localidad 0xF83.
#define prender bit_test(port_d,0) //Define el pin RD0 para prender.
#define apagar bit_test(port_d,1) //Define el pin RD1 para apagar.
PROGRAMA:
#include <18f4550.h> //Librera para usar el PIC18F4550.
#fuses INTRC_IO,WDT,NOPROTECT,PUT, NOPBADEN //Configuracin de fusibles.
#use delay (clock=4000000) //FOSC =4MHz
#use standard_io(B) //Usa librera estndar para el puerto B.
#use standard_io(D) //Usa librera estndar para el puerto D.
PROGRAMA:
#include <18f4550.h> //Librera para usar el PIC18F4550.
#fuses INTRC_IO,WDT,NOPROTECT,PUT, NOPBADEN //Configuracin de fusibles.
#use delay (clock=4000000) // FOSC =4MHz.
#use fast_io(b) //Directivas de i/o para puerto b.
#use fast_io(d) //Directivas de i/o para puerto d.
#BYTE port_b= 0xF81 //Identificador para el puerto b en la localidad 0xF81.
#BYTE port_d= 0xF83 //Identificador para el puerto b en la localidad 0xF83.
#define pulsador bit_test(port_d,0); //Define el pin RD0 para prender.
int k; //Variable k para determinar el estado del LED.
{
set_tris_b(0x00); //Fija el puerto B como salida.
set_tris_d(0xff); //Fija el puerto D como entrada.
disable_interrupts(GLOBAL); //Todas las interrupciones desactivadas.
port_b = 0; //Port =0.
k= 0; //k=0.
while(TRUE){ //Inicio del bucle.
if (pulsador== 0 && k==0) //Si pulsador = 0 y k = 0, realiza.
{
k= 1; //k=1.
bit_set(port_b,0); //LED on.
}
if (pulsador==0 && k==1) //Si pulsador = 0 y k = 1, realiza..
{
k=0; //k=0.
bit_clear(port_b,0); //LED off.
}
} //Bucle infinito.
} //Fin del main.
PROGRAMA:
#include <18f4550.h> //Librera para usar el PIC18F4550.
#fuses INTRC_IO,WDT,NOPROTECT,PUT, NOPBADEN //Configuracin de fusibles.
#use delay (clock=4000000) // FOSC =4MHz.
#use fast_io(b) //Directivas de i/o para puerto b.
#use fast_io(d) //Directivas de i/o para puerto d.
#BYTE port_b= 0xF81 //Identificador para el puerto b en la localidad 0xF81.
#BYTE port_d= 0xF83 //Identificador para el puerto b en la localidad 0xF83.
#define pulsador bit_test(port_d,0); //Define el pin RD0 para prender.
int k; //Variable k para determinar el estado del LED.
void antirebote(); //Funcin antirrebote
{
set_tris_b(0x00); //Fija el puerto B como salida.
set_tris_d(0xff); //Fija el puerto D como entrada.
disable_interrupts(GLOBAL); //Todas las interrupciones desactivadas.
port_b = 0; //Port =0.
k= 0; //k=0.
while(TRUE){ //Inicio del bucle.
if (pulsador== 0 && k==0) //Si pulsador = 0 y k = 0, realiza.
{
antirebote(); //Si el pulsador = 0 llama a subrutina anti rebote.
k= 1; //k=1.
bit_set(port_b,0); //LED on.
}
if (pulsador==0 && k==1) //Si pulsador = 0 y k = 1, realiza..
{
antirebote(); //Si el pulsador = 0 llama a subrutina anti rebote.
k=0; //k=0.
bit_clear(port_b,0); //LED off.
}
} //Bucle infinito.
} //Fin del main.
Cada vez que se accione un pulsador se averigua si el estado del puerto sigue
siendo 0, de ser afirmativo se llama a una funcin antirebote, para que de mantenerse
en este estado no realice ninguna accin hasta que el pulsador este inactivo. La
instruccin usada para el efecto es while(pulsador == 0) { }. Una vez que el pulsador
este inactivo, de la funcin retornar (por return) al programa a siguiente instruccin
desde donde fue llamado a seguir ejecutando el programa.
EJERCICIOS
PROGRAMA:
#include <18f4550.h> //Librera para usar el PIC18F4550.
#fuses INTRC_IO,WDT,NOPROTECT,PUT, NOPBADEN //Configuracin de fusibles.
#use delay (clock=4000000) //FOSC =4MHz
#byte tris_b = 0xF93 //Identificador para el registro TRIS B en la localidad 0xF93.
void main() { //Funcin principal main.
set_tris_b(0xFF); //Fija el Puerto B como salida.
port_b_pullups(TRUE); //Habilitacin del Pull-up.
while(TRUE){ //Bucle Infinito.
if (input(PIN_B3) == 0) //Detecta si se accionado el pulsador P1.
output_high(PIN_D0); //.y activa al LED.
else //caso contrario..
output_low(PIN_D0); //.el LED permanece apagado.
} //Fin del bucle infinito.
} //Fin del main.