Está en la página 1de 6

Laboratorio 2: Puertos de Entrada y Salida. 2.1 Objetivo.

Familiarizarse con los Puertos de Entrada y Salida mediante la implementacin prctica del ejemplo LED y Botones y el ejemplo Pantalla LCD. 2.2 Introduccin. En casi todos los proyectos es necesario leer alguna entrada de tipo digital conectada a pulsadores, interruptores, sensores digitales o similares; tambin es necesario escribir datos por medio de una salida de tipo digital conectada a LED, pantallas LCD, display de siete segmentos o similares. Este laboratorio trata de explicar cmo realizar la configuracin de los puertos del PIC para utilizarlos como entradas o salidas digitales. 2.3 Puertos de Entradas/Salidas. Los Microcontroladores PIC tienen terminales de entrada/salida (I/O, Input/Output) divididos en puertos, que se encuentras nombrados alfabticamente A, B, C, D, etc. Cada puerto puede tener hasta 8 terminales que se pueden comportar como una I/O digital. El PIC16F887 tiene hasta 35 I/O digitales de propsito general, y en dependencia de la configuracin de sus perifricos pueden estar disponibles como I/O de propsito general. Por lo tanto, si un perifrico es habilitado, el pin asociado no ser utilizado como I/O de propsito general. 2.3.1 Lectura del puerto. La siguiente funcin configura el puerto como entrada y realiza su lectura:

input_x( )

2.3.2 Lectura del pin de Entrada La siguiente funcin configura el PIN como entrada y realiza su lectura: input( )

2.3.3 Escritura del puerto. La siguiente funcin configura el puerto como salida y realiza su escritura:

2.3.4 Escritura de un pin. Las siguientes funciones configuran el pin como salida y realizan su escritura: output_low( ), output_high( ) y output_bit( ) Sintaxis output_low(pin ) output_high(pin) output_bit(pin,value) Pone a 0 el pin Pone a 1 el pin Le da el valor de value al pin.

2.3.5 Configuracin rpida de los pines I/O. Una configuracin rpida genera cdigo ms eficiente, ya que el compilador asume que los pines de I/O sern cambiados solo si es especificado por el usuario. A continuacin se muestra la funcin para decidir si los pines de un puerto son de entrada o salida: set_tris_x( )

Al utilizar la funcin anterior siempre es necesario utilizar la siguiente directiva: #USE FAST_IO

2.4 Procedimiento. 2.4.1 LED y Botones. 1. Crear un Proyecto en CCS y guardar con el nombre de LED_Botones. 2. Copiar el Cdigo LED_Botones. 3. Compilar el proyecto. 4. Crear el circuito en Proteus. Para ello ser necesario buscar mediante la caja de bsqueda en la ventana PICK DEVICE el PIC16F877, el LOGICSTATE y el LOGICPROBE. 5. Cargar el Archivo fuente Led_Botones.cof y Realizar la simulacin.

2.4.2 Pantalla LCD. 1. Crear un Proyecto en CCS y guardar con el nombre de LED_Botones. 2. Copiar el Cdigo LCD_HolaMundo. 3. Compilar el proyecto.

6. Crear el circuito en Proteus. Para ello ser necesario buscar mediante la caja de bsqueda en la ventana PICK DEVICE el PIC16F877 y el LM016L. 7. Cargar el Archivo fuente LCD_HolaMundo.cof y Realizar la simulacin. 2.5 Cdigos. 2.5.1 Cdigo LED_Botones. A continuacin se muestra un cdigo que hace que el LED conectado al pin RB0 se encienda cuando se presiones el botn conectado a RB1.
#include <16f877a.h> //PIC utilizado #fuses HS,NOWDT,NOPROTECT,PUT //Configuramos los fuses #use delay (clock=8M) //Oscilador a 8Mhz #use fast_io(b) //Optimizamos E/S del PORTB //------Programa principal----void main(void) { set_tris_b(0xFE); //Salida RB0 como salida, el resto como entrada. do{ if(input(PIN_B1)){ //Si elpulsador esta en alto... output_high(PIN_B0); } //enciendo el LED. else { //Caso contrario... output_low(PIN_B0); } //lo apago. }while(TRUE); //Repito el bucle } //////////////////////////////////////////////////////////////////////////////// ////////////// Practica 2 ////////////////////// ////////////// practica que escribe en una LCD ////////////////////// //////////////////////////////////////////////////////////////////////////////// #include <16F877A.h> /// libreria para el manejo del pic16f877a #use delay(clock=8000000) /// declara la frecuencia del cristal #fuses HS,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT,NOPROTECT #include <lcd.c> // Librera para el manejo del lcd para ver las conexiones // abran el archivo C:\Archivos de programa\PICC\Drivers\lcd.c // y ahi les muestra. //////////////////////////////////////////////////////////////////////////////// // D0 enable // D1 rs // D2 rw // D4 D4 // D5 D5 // D6 D6 // D7 D7 //////////////////////////////////////////////////////////////////////////////// void main(void) { lcd_init(); // Antes de usar el lcd,hay que inicializarlo lcd_putc("HOLA MUNDO"); // Escribes en la lcd } // fin de programa

2.6 Modificaciones de los cdigos. 2.6.1 Para poder cambiar los pines de salida utilizados para la conexin del lcd, es necesario agregar las siguientes lneas de cdigo para definir cual puerto y que pines son necesarios para dicha conexin. #define LCD_ENABLE_PIN PIN_B5 #define LCD_RS_PIN PIN_B4 #define LCD_RW_PIN PIN_B6 #define LCD_DATA4 PIN_B0 #define LCD_DATA5 PIN_B1 #define LCD_DATA6 PIN_B2 #define LCD_DATA7 PIN_B3 2.6.2 Conociendo los cambios a realizar en el codigo fuente, ahora utilice el puerto B como salida para el LCD. 2.6.3 Creacin de un pequeo menu
#include <16F877A.h> #fuses noprotect,nowdt,nowrt,nolvp,HS #use delay(clock=8M) #define #define LCD_ENABLE_PIN PIN_C5 #define LCD_RS_PIN PIN_C6 #define LCD_RW_PIN PIN_C7 #define LCD_DATA4_PIN PIN_D4 #define LCD_DATA5_PIN PIN_D5 #define LCD_DATA6_PIN PIN_D6 #define LCD_DATA7_PIN PIN_D7 #include <lcd.c> //#include <Puertos.c> #use fast_io(A) int item; void main(void) { lcd_init(); while(true) { if(input(PIN_A0)==0) { item++; delay_ms(300); } switch(item) { case 0: lcd_gotoxy(4,1); lcd_putc("Opcion 1"); break;

case 1: lcd_gotoxy(4,1); lcd_putc("Opcion 2"); break; case 2: lcd_gotoxy(4,1); lcd_putc("Opcion 3"); break; } } }

2.7 Trabajo a Entregar (Reporte) 2.7.1 Realizar el siguiente ejercicio de programacion: Despues de conocer la creacion de un menu con las intrucciones case. Ahora genere un menu el cual presente los encabezados. Electronica Electrica Computacion Estos encabezados seran cambiados cada vez que se presione un pulsador, es decir que solo va existir un unico pulsador que cada vez que se pulse cambiara la visualizacion en el LCD. Estando en una opcion del menu se utilizara otro pulsador para encender un LED correspondiente a cada carrera, es decir si en el LCD estoy visualizando la carrera de Computacion con otro pulsador encendere un LED correspondiente a esa carrera. 2.7.2 Enviar todas las simulaciones (Proteus) planteadas en el laboratorio en conjunto con los archivos generados por el programa CCS. Cada archivo y simulacion ponerlos en carpetas separadas y mandarlas de manera comprimida a mi correo.

También podría gustarte