Está en la página 1de 6

MANEJO DE PUERTOS

• Ejemplo: parpadeo de todos los leds, que están conectados en


PB.
#include <16F877.h> //Librería para usar el PIC16F877
#fuses HS,NOWDT,NOPROTECT,PUT //Configuración de fusibles
#use delay (clock=8000000) // FOSC =8MHz
#byte tris_b = 0x86 //Define el registro trisb en la localidad 0x86
#byte port_b= 0x06 //Define el registro portb en la localidad
0x06
void main() //Función principal main
{
tris_b = 0x00; // Configura el puerto B como salida
port_b = 0x00; // Asigna a todo el Puerto B cero (0)
while (TRUE){ //Bucle infinito
port_b = 0xFF; //Coloca todo el puerto B en 1
delay_ms( 500 ); //Retardo de 500 ms
port_b = 0x00; //Coloca todo el puerto B en 0
delay_ms(500); //Retardo de 500 ms
} //Fin del bucle infinito
} //Fin del bucle main
Ing. Amparo Meythaler N.
MANEJO DE PUERTOS
• Ejemplo: Secuencia de leds conectados en PB.

Ing. Amparo Meythaler N.


MANEJO DE PUERTOS
#include <16F877.h> //Librería para usar el PIC16F877
#fuses HS,NOWDT,NOPROTECT,PUT //Configuración de fusibles
#use delay (clock=8000000) // FOSC =8MHz
#BYTE port_b= 0x06 //Identificador para el puerto b en la localidad 0x06
int i; //Variable i tipo int para el bucle FOR
void main(void) { //Función principal main
set_tris_b(0x00); //Puerto B como salida
disable_interrupts(GLOBAL); //Todas las interrupciones desactivadas
while(TRUE) //Bucle infinito
{ //Inicio del bucle
port_b=0x01; //Puerto RB0 = 1
for (i=1;i<=8;++i) //Realiza el bucle para i = 0 hasta que sea menor o igual 8 en
//incrementos de 1
{
delay_ms(100); //Retardo de 100 ms
port_b= port_b<<1; //Desplaza el valor del puerto a la izquierda en 1
}
port_b= 128; //port_b = 128
for (i=1;i<=8;++i) //Realiza el bucle para i = 0 hasta que sea menor o igual
//8 en incrementos de 1
{
delay_ms(100); //Retardo de 100 ms
port_b= port_b>>1; //Desplaza el valor del puerto a la derecha en 1
}
} //Fin del bucle infinito
} //Fin del bucle main Ing. Amparo Meythaler N.
MANEJO DE PUERTOS
Ejemplo: Contador del 0 al 9 para un display.
#include <16F877.h> //Librería para usar el PIC16F877
#fuses HS,NOWDT,NOPROTECT,PUT //Configuración de fusibles
#use delay (clock=8000000) // FOSC =8MHz
#BYTE port_d= 0x08 //Identificador para el puerto d en la localidad 0x08
int i; //Variable i, contador para el bucle FOR
const int x[]= {64,121,36,48,25,18,2,120,0,16}; //Tabla de datos decodificados a 7 segmentos
void main(void) //Función principal main.
{
set_tris_d(0x00); //Identificador para el puerto d como salida
disable_interrupts(GLOBAL); //Todas las interrupciones desactivadas
port_d = 64; //Asigna el valor de 64 al Puerto para ver el número 0
while(TRUE) //Bucle infinito
{ //Inicio del bucle
for (i=0; i<=9;++i) //Repite mientras i sea menor o igual a 9
{
delay_ms(500); //Retardo de 500 ms. Necesario para mantener el dato en el
// puerto
port_d= x[i]; //Asigna al puerto el valor apuntado por la variable i en el
//array x
}
} //Fin del bucle infinito
} //Fin del main
Ing. Amparo Meythaler N.
MANEJO DE PUERTOS
Ejemplo: Manejo de 2 displays por multiplexación (Dec externo).
#include <16F877.h> //Librería para usar el PIC16F877
#fuses HS,NOWDT,NOPROTECT,PUT //Configuración de fusibles
#use delay (clock=8000000) // FOSC =8MHz
#BYTE port_b= 0x06 //Identificador para el puerto b en la localidad 0x06
#BYTE port_d= 0x08 //Identificador para el puerto d en la localidad 0x08
int unidad, decena, x; //Variables

void display() //Función display. Muestra los datos en los display y genera un
//retardo de 1 segundo
{
{
for (x= 1; x<= 25; ++x){ //Repite 25 veces
port_d = 1; //Habilita display unidad y apaga display decena
port_b= unidad; //Asigna al Puerto b el dato de unidad
delay_ms(20); //El dato de unidad permanece el Puerto b 20 ms
port_d = 2; //Habilita el display decena y apaga display unidad
port_b= decena; //Asigna al Puerto b el dato de decena
delay_ms(20); //El dato de decena permanece el Puerto b 20 ms
}
Ing. Amparo Meythaler N.
MANEJO DE PUERTOS
return; //Retorna al programa principal
}

void main(void) //Función principal main


{
set_tris_b(0x00); //Define port_b como salida
set_tris_d(0x00); //Identificador para el puerto d como salida
disable_interrupts(GLOBAL); //Todas las interrupciones desactivadas
port_b = 0; //Puerto b =0
while(TRUE){
for (decena=0; decena<=9;++decena){ //Datos para el display decena 0 a 9
for (unidad=0; unidad<=9;++unidad){ //Datos para el display unidad 0 a 9
display(); //Función display
}
}
} //Fin del bucle infinito
} //Fin del bucle main

Ing. Amparo Meythaler N.

También podría gustarte