lab 6 puertos de entrada y salida

6
Laboratorio 2: Puertos de Entrada y Salida. 2.1 Objetivo. Familiarizarse con los Puertos de Entrada y Salida mediante la implementación práctica del ejemplo LED y Botones y el ejemplo Pantalla LCD. 2.2 Introducción. En casi todos los proyectos es necesario leer alguna entrada de tipo digital conectada a pulsadores, interruptores, sensores digitales o similares; también 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 cómo realizar la configuración 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 alfabéticamente 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 propósito general, y en dependencia de la configuración de sus periféricos pueden estar disponibles como I/O de propósito general. Por lo tanto, si un periférico es habilitado, el pin asociado no será utilizado como I/O de propósito general. 2.3.1 Lectura del puerto. La siguiente función configura el puerto como entrada y realiza su lectura: input_x( ) 2.3.2 Lectura del pin de Entrada La siguiente función configura el PIN como entrada y realiza su lectura: input( )

Upload: carlox-ortega

Post on 05-Jul-2015

1.223 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Lab 6 Puertos de Entrada y Salida

Laboratorio 2: Puertos de Entrada y Salida.

2.1 Objetivo.

Familiarizarse con los Puertos de Entrada y Salida mediante la implementación práctica del ejemplo

LED y Botones y el ejemplo Pantalla LCD.

2.2 Introducción.

En casi todos los proyectos es necesario leer alguna entrada de tipo digital conectada a pulsadores,

interruptores, sensores digitales o similares; también 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 cómo realizar la configuración 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 alfabéticamente 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 propósito general, y en dependencia de la

configuración de sus periféricos pueden estar disponibles como I/O de propósito general. Por lo

tanto, si un periférico es habilitado, el pin asociado no será utilizado como I/O de propósito

general.

2.3.1 Lectura del puerto.

La siguiente función configura el puerto como entrada y realiza su lectura:

input_x( )

2.3.2 Lectura del pin de Entrada La siguiente función configura el PIN como entrada y realiza su lectura:

input( )

Page 2: Lab 6 Puertos de Entrada y Salida

2.3.3 Escritura del puerto.

La siguiente función 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 ) Pone a 0 el pin

output_high(pin) Pone a 1 el pin

output_bit(pin,value) Le da el valor de value al pin.

2.3.5 Configuración rápida de los pines I/O.

Una configuración rápida genera código más eficiente, ya que el compilador asume que los pines de

I/O serán cambiados solo si es especificado por el usuario. A continuación se muestra la función

para decidir si los pines de un puerto son de entrada o salida:

set_tris_x( )

Al utilizar la función anterior siempre es necesario utilizar la siguiente directiva:

#USE FAST_IO

Page 3: Lab 6 Puertos de Entrada y Salida

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 Código LED_Botones.

3. Compilar el proyecto.

4. Crear el circuito en Proteus. Para ello será necesario buscar mediante la caja de búsqueda en la

ventana PICK DEVICE el PIC16F877, el LOGICSTATE y el LOGICPROBE.

5. Cargar el Archivo fuente Led_Botones.cof y Realizar la simulación.

2.4.2 Pantalla LCD.

1. Crear un Proyecto en CCS y guardar con el nombre de LED_Botones.

2. Copiar el Código LCD_HolaMundo.

3. Compilar el proyecto.

Page 4: Lab 6 Puertos de Entrada y Salida

6. Crear el circuito en Proteus. Para ello será necesario buscar mediante la caja de búsqueda en la

ventana PICK DEVICE el PIC16F877 y el LM016L.

7. Cargar el Archivo fuente LCD_HolaMundo.cof y Realizar la simulación.

2.5 Códigos.

2.5.1 Código LED_Botones.

A continuación se muestra un código que hace que el LED conectado al pin RB0 se encienda

cuando se presiones el botón 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> // Librería 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

Page 5: Lab 6 Puertos de Entrada y Salida

2.6 Modificaciones de los códigos.

2.6.1 Para poder cambiar los pines de salida utilizados para la conexión del lcd, es necesario agregar

las siguientes líneas de código para definir cual puerto y que pines son necesarios para dicha

conexión.

#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 Creación de un pequeño 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;

Page 6: Lab 6 Puertos de Entrada y Salida

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.

case 1:

lcd_gotoxy(4,1);

lcd_putc("Opcion 2");

break;

case 2:

lcd_gotoxy(4,1);

lcd_putc("Opcion 3");

break;

}

}

}