Mane Jode Puertos

download Mane Jode Puertos

of 7

Transcript of Mane Jode Puertos

  • 8/16/2019 Mane Jode Puertos

    1/7

    Nelson David Muñoz C. Politecnico CJIC http://mecatronica.jimdo.com/

    Nelson David Muñoz C. Politecnico CJIC http://mecatronica.jimdo.com/

    1

    1

    TUTORIAL II – parte A

    OBJETIVOS

    •  Conocer el manejo de puertos del microcontrolador 16F877A, registrosTRIS y PORT.

    •  Familiarizarse con las principales instrucciones del lenguaje y la estructurade un programa en C.

    •  Afianzar conceptos relacionados con la simulación en el MPLAB.•  Realizar la implementación en un microcontrolador por medio del uso de la

    tarjeta programadora.•  Conocer los elementos mínimos necesarios para realizar el montaje de un

    sistema microcontrolado.

    MARCO TEÓRICO

    - Puertos de entrada / salida (I/O ports):

    Una de las características de los microcontroladores es el hecho de poseerpuertos que pueden servir tanto como entradas de datos como salida de losmismos.

    Observemos el diagrama de pines del microcontrolador 16F877A:

    Los pines indicados por R más una letra y un número indican pines que puedenser usados como pines de I/O, el resto de pines son el oscilador, laalimentación y el reset (Master clear). Nótese algunos pines de I/O poseenvarios nombres (Por ejemplo RA0 / AN0) lo que indica que dicho pin puede ser

  • 8/16/2019 Mane Jode Puertos

    2/7

    Nelson David Muñoz C. Politecnico CJIC http://mecatronica.jimdo.com/

    Nelson David Muñoz C. Politecnico CJIC http://mecatronica.jimdo.com/

    2

    2

    usado como puerto de I/O (RA0) o puede ser usado por un periférico delmicrocontrolador (AN0 conversor análogo digital).

    En total el 16F877A tiene cinco puertos denominados como Puerto A al PuertoE, cada puerto está compuesto por de 3 a 8 pines de I/O de esta forma:

    RA0RA1RA2RA3RA4

    PORT A

    RA5RB0RB1RB2RB3

    RB4RB5RB6

    PORT B

    RB7

    RC0RC1RC2RC3RC4RC5RC6

    PORT C

    RC7RD0RD1

    RD2RD3RD4RD5RD6

    PORT D

    RD7

    RE0RE1PORTERE2

    CONFIGURACIÓN DE PUERTOS (Registros Tris):

    Antes de poder usar los puertos del microcontrolador debemos configurarlos yasea como una entrada de datos o como una salida de los mismos. Pararealizar esto se recurre a los registros TRIS de la siguiente forma:

    Cada puerto tiene un registro TRIS asociado, por ejemplo el PORTA seconfigura usando el registro TRISA, el PORTD se configura usando el TRISD yasí sucesivamente.

    Los TRIS son registros de 8 bits, cada uno de sus bits configura un pin de dichopuerto. Por ejemplo: en el registro TRISD el bit menos significativo (bit 0)configura el pin RD0, el bit 7 del registro TRISA configura el pin RA7 y así

    sucesivamente.Un uno en un registro TRIS indica que el pin asociado se comportará como unaentrada y un 0 indica que dicho pin se comportará como una salida.

    Ejemplos:

    TRISB= 0b10101011;Acá se está configurando a RB7, RB5, RB3, RB1 y RB0 como entradasmientras que RB6, RB4 y RB2 serán salidas. El prefijo 0b indica que los datos

    que vamos a ingresar al registro están en binario.

  • 8/16/2019 Mane Jode Puertos

    3/7

    Nelson David Muñoz C. Politecnico CJIC http://mecatronica.jimdo.com/

    Nelson David Muñoz C. Politecnico CJIC http://mecatronica.jimdo.com/

    3

    3

    TRISD=0b00001111;Se configuraron como entradas los pines RD0 a RD3 y como salidas los pinesRD4 a RD7.

    TRISC=255;Acá se configura todo el puerto C como entrada en todos sus pines, obsérveseque no se usó prefijo y por lo tanto el dato se interpreta como decimal,recuérdese que al convertir decimal a binario tenemos 255 = 0b11111111.

    TRISC=0xFF;Igualmente se configuró el puerto C como entrada todos sus pines, esta ves seutilizaron datos en formato hexadecimal (prefijo 0x). Recuérdese 255 = 0xFF.

    El compilador también nos permite configurar solamente un pin (bit) del registro

    TRIS sin modificar el resto del registro de esta forma:

    TRISC7=1;  Configura el pin RC7 como una entrada, sin modificar laconfiguración del resto de pines del puerto C.

     A tener en cuenta:- Al iniciar o resetear el microcontrolador pone todos los pines comoentradas.- Al configurar los puertos que manejan menos de 8 bits (PORTA yPORTE) debe tenerse cuidado, en el 16F877 los bits TRISE3-7 debensiempre mantenerse en cero.

    MANEJO DE LOS PUERTOS:

    Para escribir o leer a un puerto se utilizan los registros PORT, igualmente quelos TRIS existe uno para cada puerto y cada bit del registro corresponde a unpin del puerto.

    Ejemplos:PORTA=0b1110001;  Suponiendo que el puerto A está todo como salidas,se colocarán en 1 lógico (+5V) los pines RA7, RA6, RA5 y RA1, el resto irán acero lógico (0V).

    PORTB = 255;  Pone todos los pines del puerto B en alto si estosestán como salidas.

    RB7=1;  Igualmente que con los TRIS en los PORT se puedemodificar un bit sin modificar todo el registro, para ello se utiliza el nombre del

    pin.

  • 8/16/2019 Mane Jode Puertos

    4/7

    Nelson David Muñoz C. Politecnico CJIC http://mecatronica.jimdo.com/

    Nelson David Muñoz C. Politecnico CJIC http://mecatronica.jimdo.com/

    4

    4

    RB6=0;  Lleva a cero el pin 6 del puerto RB.

    PORTB = PORTD;  Suponiendo que PORTD está como entrada yPORTB está como salida se copiaría el PORTD en el PORTB.

     A tener en cuenta:- Para poder usar el puerto A como puerto de I/O se debe deshabilitar elconvertidor análogo digital que por defecto tiene los pines comoanálogos, para ello se debe agregar esta instrucción:  ADCON1=6; masdetalles veremos cuando usemos el convertidor A/D.

     APLICACIÓN: JUEGO DE LUCES 

    Como aplicación al manejo de puerto como salida de datos realizaremos elsiguiente proyecto para ser implementado usando la tarjeta programadora.

    Para esto colocaremos 8 leds en las salidas del puerto B del microcontroladorde modo que se enciendan al poner un uno lógico en dichos pines.

    Deseamos generar la siguiente secuencia de luces (las casillas en negroindican leds encendidos):

    RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

    RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

    RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

    RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

    RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

    Y se repita indefinidamente.

    A continuación se ilustra el código en C que efectúa dicha secuencia, se indicacon comentario cada línea:

    #include //Incluyo libreria con definición de registros del PIC#include "delay.h" //Incluyo libreria para manejar los retardos#include "delay.c"

  • 8/16/2019 Mane Jode Puertos

    5/7

    Nelson David Muñoz C. Politecnico CJIC http://mecatronica.jimdo.com/

    Nelson David Muñoz C. Politecnico CJIC http://mecatronica.jimdo.com/

    5

    5

     void main (void) //Indico que aca comienza mi programa{ //Configuración de puertos

    TRISB=0; //Todo el puerto B son salidas

    while(1) //Ciclo infinito para repetir la secuencia{

    PORTB=255; //Primer paso de la secuencia todos prendidosDelayMs(200); //Retardo para visualización.PORTB=0; //Todos apagadosDelayMs(200); //Retardo para visualización.RB0=1;RB7=1;DelayMs(200); //Retardo para visualización.RB1=1;RB6=1;

    DelayMs(200); //Retardo para visualización.RB5=1;RB2=1;DelayMs(200); //Retardo para visualización.

    }}

    Iguales resultados se obtendrían con el siguiente código:

    #include //Incluyo libreria con definición de registros del PIC#include "delay.h" //Incluyo libreria para manejar los retardos#include "delay.c"

    void main (void) //Indico que aca comienza mi programa{ //Configuración de puertos

    TRISB=0; //Todo el puerto B son salidas

    while(1) //Ciclo infinito para repetir la secuencia{

    PORTB=255; //Primer paso de la secuencia todos prendidosDelayMs(200); //Retardo para visualización.PORTB=0; //Todos apagadosDelayMs(200); //Retardo para visualización.PORTB=0b10000001;DelayMs(200); //Retardo para visualización.PORTB=0b11000011;DelayMs(200); //Retardo para visualización.PORTB=0b11100111;DelayMs(200); //Retardo para visualización.

    }

    }

  • 8/16/2019 Mane Jode Puertos

    6/7

    Nelson David Muñoz C. Politecnico CJIC http://mecatronica.jimdo.com/

    Nelson David Muñoz C. Politecnico CJIC http://mecatronica.jimdo.com/

    6

    6

    Retardos: Dado que la velocidad de ejecución de un microcontrolador esrelativamente rápida (1us por instrucción a 4Mhz) no podríamos observar laejecución de la secuencia, para ello utilizamos los retardos. Un retardo essimplemente un conjunto de instrucciones que se ejecutan repetitivamente paracrear un tiempo muerto en la ejecución del programa.

    El compilador PICClite en la librería Delay.h provee las funciones DelayMs() yDelayUs() las cuales generan retardos de milisegundos y microsegundosrespectivamente, el parámetro pasado a dichas funciones debe estar entre 0 y255. El cálculo de retardos en estas funciones está basado en un reloj de 4Mhzpara distintas frecuencias deben escalarse. Recordar incluir delay.h y delay.cen la carpeta del proyecto.

    LECTURA DE PUERTOS:

    A continuación se ilustra un código que hace uso de la lectura de puertos, en else verifica cada vez que va a comenzar la secuencia anterior si el pin RC0 estáen uno o no, si el pin está en uno se continua la secuencia, si no lo está no seejecuta secuencia hasta que se coloque en uno:

    #include //Incluyo libreria con definición de registros del PIC#include "delay.h" //Incluyo libreria para manejar los retardos

    void main (void) //Indico que aca comienza mi programa{ //Configuración de puertos

    TRISB=0; //Todo el puerto B son salidasTRISC0=1; //El pin RC0 es una entrada

    while(1) //Ciclo infinito para repetir la secuencia{if(RC0==1)

    {PORTB=255; //Primer paso de la secuencia todos prendidosDelayMs(200); //Retardo para visualización.

    PORTB=0; //Todos apagadosDelayMs(200); //Retardo para visualización.PORTB=0b10000001;DelayMs(200); //Retardo para visualización.PORTB=0b11000011;DelayMs(200); //Retardo para visualización.PORTB=0b11100111;DelayMs(200); //Retardo para visualización.

    }}

    }

  • 8/16/2019 Mane Jode Puertos

    7/7

    Nelson David Muñoz C. Politecnico CJIC http://mecatronica.jimdo.com/

    Nelson David Muñoz C. Politecnico CJIC http://mecatronica.jimdo.com/

    7

    7

    DIAGRAMA DE CONEXIONES:

    Obsérvese la conexión de los led y el swiche en PORTB y RC0respectivamente, además de esto está el montaje de la alimentación delmicrocontrolador, +5V en los pines 32 y 11 (Vdd) y tierra en los pines 31 y 12.El master clear se debe mantener en un nivel alto para no resetear almicrocontrolador (puede colocarse un pulsador para realizar el reset cuando sedesee) por medio de una resistencia. El oscilador (cristal) se debe conectar enlos pines 13 y 14 además se recomienda utilizar condensadores de 22pF entrelos pines del cristal y tierra para mejorar la estabilidad de este.