Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Manejo de Pulsadores PDF
Manejo de Pulsadores PDF
9 CONEXIÓN DE PULSADORES
Todos los ejercicios realizados, hasta aquí, los puertos del PIC se han utilizado
como salidas. A continuación se utilizaran como entradas. Se conectan pulsadores para
cambiar los niveles de tensión en los pines del puerto.
La figura 2.35, muestra las conexiones para manejar pulsadores. Con esta
conexión los pines del puerto (RD0 y RD1), están directamente en estado lógico de 1.
Por consiguiente, el accionamiento del pulsador determina que pasen los puertos
indicados a bajo.
PROGRAMA:
#include <18f4550.h> //Librería para usar el PIC18F4550.
#fuses INTRC_IO,WDT,NOPROTECT,PUT, NOPBADEN //Configuración 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> //Librería para usar el PIC18F4550.
#fuses INTRC_IO,WDT,NOPROTECT,PUT, NOPBADEN //Configuración de fusibles.
#use delay (clock=4000000) //FOSC =4MHz
#use standard_io(B) //Usa librería estándar para el puerto B.
#use standard_io(D) //Usa librería estándar para el puerto D.
PROGRAMA:
#include <18f4550.h> //Librería para usar el PIC18F4550.
#fuses INTRC_IO,WDT,NOPROTECT,PUT, NOPBADEN //Configuración 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> //Librería para usar el PIC18F4550.
#fuses INTRC_IO,WDT,NOPROTECT,PUT, NOPBADEN //Configuración 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(); //Función 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 función “antirebote”, para que de mantenerse
en este estado no realice ninguna acción hasta que el pulsador este inactivo. La
instrucción usada para el efecto es while(pulsador == 0) { }. Una vez que el pulsador
este inactivo, de la función retornará (por return) al programa a siguiente instrucción
desde donde fue llamado a seguir ejecutando el programa.
EJERCICIOS
PROGRAMA:
#include <18f4550.h> //Librería para usar el PIC18F4550.
#fuses INTRC_IO,WDT,NOPROTECT,PUT, NOPBADEN //Configuración de fusibles.
#use delay (clock=4000000) //FOSC =4MHz
#byte tris_b = 0xF93 //Identificador para el registro TRIS B en la localidad 0xF93.
void main() { //Función principal main.
set_tris_b(0xFF); //Fija el Puerto B como salida.
port_b_pullups(TRUE); //Habilitación 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.