Practica 3. Secuenciador de LEDS usando el PIC16F877A PDF

Title Practica 3. Secuenciador de LEDS usando el PIC16F877A
Course Microcontroladores
Institution Instituto Tecnológico de Tijuana
Pages 22
File Size 1.6 MB
File Type PDF
Total Downloads 14
Total Views 593

Summary

Tecnológico Nacional de MéxicoInstituto Tecnológico de TijuanaIngeniería BiomédicaMicrocontroladoresPractica 3 de Leds usando el PIC 16F877ACalvillo Lopez Alejandro - 16212214 Sanchez Saavedra Eduardo Francisco - 16212267MARZO 2019ObjetivoRelizar un programa en lenguaje ensamblador para el microcont...


Description

Tecnológico Nacional de México Instituto Tecnológico de Tijuana

Ingeniería Biomédica

Microcontroladores

Practica 3.Secuenciador de Leds usando el PIC 16F877A

Calvillo Lopez Alejandro - 16212214 Sanchez Saavedra Eduardo Francisco - 16212267

MARZO 2019

Objetivo Relizar un programa en lenguaje ensamblador para el microcontrolador 16F877A que realice una secuencia de led de izquierda a derecha (encender bit más significativo hasta el bit menos significativo apagando el anterior, repetir indefinidamente).

Marco Teórico Introducción al PIC 16F877A El PIC 16F877A es un microncontrolador que consta cuarenta pines con un encapsulado PDIP (Plastic Dual-In-Line Package), empleado usualmente para aplicaciones vinculadas con proyectos embebidos. Dentro de sus parámetros indicados en la hoja de datos técnicos correspondiente se encuentra:      

          

Manejo de solo 35 instrucciones de una sola palabra Velocidad de operación de 4MHz a 40MHz Hasta 8k x 14 palabras de memoria Flash Hasta 368 x 8-bytes de memoria RAM Hasta 256 x 8-bytes de memoria EEPROM Consta de tres timers: o Timer 0: timer/counter de 8-bits con preescalador o Timer 1: timer/counter de 16-bits con preescalador, el cual puede ser incrementado durante el modo Sleep por medio de un cristal o una señal de clock externa o Timer 2: timer/counter de 8-bits con un periodo de registro de 8-bits, preescalador y postescalador Consta de tres puertos (PORTA, PORTB, PORTC, PORTD, PORTE) Modulador de Amplitud de Pulso con resolución de 200ns Puerto síncrono serial (SSP) con modo maestro y maestro-esclavo USART con detector de direcciones de 9-bits Puerto esclavo paralelo (PSP) de 8-bits Hasta 10 canales de 8-bits de ADC Retención de datos en la EEPROM de hasta 40 años Autoreprogramable Ofrece protección del código Memoria de Programa de 14.3k bytes y 8192 instrucciones 33 pines de entradas/salidas.

Para las conexiones del PIC 16F877A, es necesario:   

Pin 1 (MCLR) a 5V por medio de una resistencia, generalmente de 10kΩ Pin 11 y 32, bajo la etiqueta Vdd, alimentándose a +5V Pin 12 y 31, bajo la etiqueta Vss, a GND



`Pin 13 y 14, siendo estos los pines correspondientes al oscilador 1 y 2, conectados al oscilador de cristal y capacitores a GND

Figura 1. Diagrama de pines del PIC 16F877A

La memoria del programa y la memoria de datos poseen buses separados para accesar a la información simultáneamente. La memoria de datos se encuentra dividida en cuatro bancos de datos, los cuales se integran de registros de uso general y registros de funciones especiales. Los bits RP1 (STATUS bit 6) y RP0 (STATUS bit 5) permiten seleccionar el banco de datos sobre el cual se realizara una operación. RP1:RP0 Bancos 00 0 01 1 10 2 11 3 Cada banco de datos está conformado por 128 bytes. Las locaciones de memoria para cada banco se encuentran reservadas para los registros de funciones especiales, implementadas en la memoria estática RAM. Si bien todos los bancos poseen registros de funciones especiales, algunos frecuentemente usan los registros de funciones especiales de otros bancos con la finalidad de reducir y, por tanto, simplificar la codificación, conllevando a un incremento de velocidad para accesar a los datos.

Figura 2. Bancos de registros del PIC 16F877A

Uso de puertos Un puerto (Port) es un circuito que forma parte del microcontrolador y sirve de interfaz con algún dispositivo externo o periférico, como son los switches, LEDs, reles, teclados matriciales, displays, ADC, DAC, motores, entre otros. Desde el punto de vista de su programación, los puertos se identifican por sus direcciones, ubicadas por lo general en la memoria de datos. Para hacer referencia a los datos que entran o salen por un puerto, se necesita al menos una dirección. El manejo de las señales de control puede requerir algunos bits adicionales, repartidos en una o dos direcciones más. En los microcontroladores PIC, el acceso a los puertos se realiza a través de los registros de funciones especiales de la memoria de datos. Para manipular los puertos paralelos, hay dos registros de funciones especiales por cada uno de los puertos, que se denominan PORT y TRIS. Los registros PORT almacenan el dato de salida del puerto mientras que los registros TRIS sirven para programar cada línea del puerto correspondiente como entrada o salida. El PIC 16F877A consta de cinco puertos:     

PORT A. Consta del pin 2 al 7, etiquetados como RA0 a RA5, donde RA0 es el bit LSB y RA5 es el MSB PORT B. Consta del pin 33 al 40, etiquetados como RB0 a RB7, donde RB0 es el bit LSB y RB7 es el MSB PORT C. Consta del pin 15 al 18 y del 23 al 26 PORT D. Consta del pin 19 al 22 y del 27 al 30 PORT E. Consta del pin 8 al 10, etiquetados como RE0 a RE2, donde RE0 es el bit LSB y RE2 es el MSB

Figura 3. Visualización de los puertos del PIC 16F877A

Algunos pines de entradas-salidas se encuentran multiplexados con funciones alternativas correspondientes a funciones periféricas del dispositivo. Por tanto, si la función periférica se encuentra habilitada, entonces el pin no actuara como un pin general de entradas-salidas. Al conectar dispositivos a los terminales de los puertos, hay que tener en cuenta las limitaciones de potencia eléctrica del microcontrolador. Cada pin de entrada-salida puede suministrar o drenar una corriente máxima, generalmente no mayor a 25mA. Como el PORT A es un puerto bidireccional de 6-bits, el registro de direcciones de datos correspondiente es el TRISA, el cual, estando en un nivel alto (TRISA=1) generara que el PORT A sea de entrada debido a que el output driver correspondiente estará en modo de alta impedancia, mientras que si se encuentra en un nivel bajo (TRISA=0), el pin correspondiente del PORT A actuara como una salida debido al latch del pin seleccionado.

Figura 4. Diagrama de Bloques del PORT A. Pin RA3:RA0 izquierda, pin RA4 derecha

Figura 5. Diagrama de Bloques del PORT A. pin RA5

Siendo PORT B un puerto bidireccional de 8-bits, el registro de direcciones de datos correspondiente es el TRISB, el cual, estando en un nivel alto (TRISB=1) generara que el PORT B sea de entrada debido a que el output driver correspondiente estará en modo de alta impedancia, mientras que si se limpia TRISB (TRISB=0), el pin correspondiente del PORT B actuara como una salida debido al latch del pin seleccionado. Cada uno de los pines del PORT B constan de un débil pull-up interno, en donde un único bit (RBPU u OPTION_REG bit 7) controla todos los pull-ups. El pull-up se apaga cuando el pin correspondiente se establece como un pin de salida. Los pines de entradas RP7:RP4 se comparan con los valores anteriores del latch de la última lectura del PORT B. El cambio de las salidas de RB7:RB4 entran a una compuerta OR para generar el cambio del puerto RB, actuando como una bandera de interrupción del bit RBIF (INTCON bit 0). Dicha interrupción puede despertar al equipo de un periodo de bajo consumo. El pin RB0 también sirve para aceptar una solicitud de interrupción externa, por flancos. Dicha interrupción queda reportada mediante el bit INTF del registro INTCON bit-0, y se habilita o inhabilita mediante el bit INTE del mismo registro (bit-4).

Figura 6. Diagramas de Bloques del PORT B. Pin RB3:RB0 a la izquierda, pin RB7:RB4 a la derecha

El PORT C es un puerto bidireccional de 8-bits, el registro de direcciones de datos correspondiente es el TRISC, el cual, estando en un nivel alto (TRISC=1) generara que el PORT C sea de entrada debido a que el output driver correspondiente estará en modo de alta impedancia, mientras que si se encuentra en un nivel bajo (TRISC=0), el pin correspondiente del PORT C actuara como una salida debido al latch del pin seleccionado. El PORT C se encuentra multiplexado con múltiples funciones periféricas. Cuando el modulo maestro-esclavo está habilitado, entonces los pines 4 y 3 pueden ser configurados con niveles de maestro-esclavo o SMBus. Los terminales del PORT C comparten funciones con otros dispositivos de entrada y salida tales como el timer1, el módulo CCP (Compare/Capture/PWM) y los puertos SSP, MSSP y USART.

Figura 7. Diagrama de Bloques del PORT C. Pin RB7:RB5 y RB2:RB0 a la izquierda, pin RB4:RB3 a la derecha

El PORT D es un puerto de 8-bits con una entrada de buffers Schmitt Trigger, Cada uno de los pines es individualmente configurable como entrada o como salida. El PORT D puede ser configurado como un microprocesador de puerto esclavo paralelo estableciendo en ser el bit PSPMODE, es decir, TRISE bit-4. Cabe resaltar que en este modo de operación, los buffers de entrada operan bajo los parámetros TTL.

Figura 8. Diagrama de Bloques del PORT D

El PORT E consta de tres pines (RE0/RD/AND, RE1/WR/AN6 y RE2/CS/AND7), los cuales pueden ser individualmente configurables como entradas o como salidas, constando de un buffer de entrada Schmitt Trigger. Los pines del PORT E se convierten entradas del microprocesador cuando se pone en set el bit PSPMODE. En este modo, el usuario debe de asegurarse que los pines TRISE 2:0 sean entradas digitales. Además de ello, es preciso asegurarse que ADCON1 este configurado para entradas y salidas digitales.

Figura 9. Diagrama de Bloques del PORT E

Introducción a MPLAB MPLAB X IDE es un software ejecutable en computadores, compatible con los sistemas operativos Windows, OS y Linux, desarrollado por Microchip Technology por aplicaciones embebidas de PIC Y dsPIC microcontroladores y controladores de señales digitales. MPLAB es una plataforma de desarrollo integrado, con múltiples prestaciones, permitiendo así escribir el programa para los PIC en assembler o en C, crear proyectos, ensamblar o compilar, simular un programa y pro gramar el circuito integrado.

Depuración mediante MPLAB Debugger Le permite al usuario efectuar una prueba de depuración de errores del código fuente del programa a ejecutar, antes de traspasarse y programarse en el circuito integrado. Select tool Son un conjunto de herramientas que le permiten al usuario la verificación del programa durante el desarrollo de la codificación. MPLAM SIM La herramienta MPLAM SIM provee al usuario una forma de visualizar las modificaciones, escrituras o lecturas de los registros de la memoria en tiempo real.

Procedimiento Se abre el software MPLAB X IDE

Figura 10. Pantalla de Inicio de MPLAB X IDE

Se hace click en la pestaña File->New Project

Figura 11. Creación de nuevo proyecto

En la ventana de Choose Project se selecciona la opción de Standalone Project

Figura 12. Selección del tipo de proyecto

En la ventana Select Device se indica el circuito integrado con el que se va a trabajar, para fines de la práctica presente, será el PIC16F877A

Figura 13. Selección del dispositivo

En la ventana Select Tool se hace click en la opción Simulator

Figura 14. Selección de herramienta opcional

En la ventana Select Compilier se selecciona el compilador mpasm, el cual permite debuggear y compilar archivos de tipo Assembler Source Module ASM.

Figura 15. Selección del compilador MPSAM

Se determina el nombre del proyecto y la carpeta dentro de la unidad de memoria en la cual se resguardara

Figura 16. Nombramiento del proyecto

Una vez creado el proyecto, en el apartado de Source Files se le da click derecho, New>AssemblyFile.asm

Figura 17. Creación del archivo de código fuente

En la ventana Name and Location se nombra el archivo de código fuente tipo .asm

Figura 18. Nombramiento del código fuente

En el archivo Practica3Micros SourceCode.asm se ingresó el siguiente código

__CONFIG _WDT_OFF&_PWRTE_OFF&_XT_OSC&_LVP_OFF&_CP_OFF;Configuración para el programa LIST

p=16F877A

INCLUDE

;Include file correspondiente al PIC 16F877A

ORG

0x00;Inicio de

programa

GOTO Inicio N

EQU

0x00

cont1

EQU

0x20

cont2

EQU

0x21

;---------------Sección Principal del Programa--------------ORG

0x05

Inicio BCF STATUS,RP0 ;Accede a banco 0 BCF STATUS,RP1 CLRF PORTB ;Limpia PORTB BSF STATUS,RP0 ;Accede a banco 1 CLRF TRISB ;Configura todas las terminales del PORTB como salidas BCF STATUS,RP0 ;Regresa a banco 0 EncenderLed CALL Retardo ;Llamada a la rutina de retardo CALL Retardo BSF PORTB,7;Enciende el LED BCF PORTB,0 Corrimiento CALL Retardo;Llamada a la rutina de retardo CALL Retardo RRF PORTB,1 BTFSC PORTB,0 GOTO EncenderLed GOTO Corrimiento;Va a la etiqueta Corrimiento ;---------------Subrutin de retardo--------------Retardo ;Inicio de Subrutina MOVLW N MOVWF cont1 Repite1 MOVLW N

MOVWF cont2 Repite2 DECFSZ cont2,1 GOTO Repite2 DECFSZ cont1,1 GOTO Repite1 RETURN END

;Retorno a la llamada

de rutina de retardo.

;Fin de programa

Una vez listo el código, si no presenta un error en su codificación, se podrá exportar el archivo .hex para programar el PIC

Figura 19. Exportación del archivo .hex

En el software de Proteus se realiza la simulación del circuito correspondiente a la práctica.

Figura 20. Simulación en Proteus

Se presiona click derecho sobre el PIC, y se selecciona Edit Properties.

Figura 21. Edit Properties

Se busca la carpeta que aloja el archivo .hex y se carga en la simulación en Proteus

Figura 22. Cargado del archivo .hex en Proteus

Ejecución

Figura 23. Compilación del programa

Desarrollo Primeramente, mediante la directiva CONFIG se establece la configuración preliminar del PIC, es decir, el WatchDog Timer apagado, el Pulse Width Modulation apagado, un oscilador tipo XT de cristal de 4MHz, la programación de baja potencia apagada. Con la directiva INCLUDE se añade al proyecto el archivo correspondiente , independientemente de su ubicación o localidad en la memoria. Con la directiva ORG indica a partir de que localidad de memoria se actuara, mientras que con la directiva EQU se dice que las variables N, cont1 y cont2 equivalen a las localidades de memoria indicadas, es decir, 0x00, 0x20 y 0x21, respectivamente. En la subrutina Inicio, con las líneas BCF STATUS, RP0 y BCS STATUS, RP1 se accede al banco 0 con el fin de que, gracias a la línea CLRF PORTB se limpie el contenido del PORTB. Luego, con la línea BSF STATUS, RP0 se accede al banco 1, y con CLRF TRISB se configuran todos los pines del puerto B como las salidas del sistema. Finalmente, la línea BCF STATUS, RP0 vuelve a dejar en clear el bit RP0 y se accesa el banco 0. En la subrutina EncenderLed, que es una modificación de la subrutina prevista en la práctica anterior, se efectúan dos llamadas a la subrutina de Retardo, la cual consta de mover la literal N (00) al registro de trabajo W y luego a los registros cont1 y cont2, decrementándolos en 1 hasta que vuelvan a 00. Posteriormente se ejecuta la línea BSF PORTB, 7 que pone en 1 el bit más significativo, y la línea BCF PORTB, 0 que limpia el bit menos significativo. En la subrutina Corrimiento se vuelve a llamar dos veces a la subrutina Retardo, con la instrucción RRF se hace un registro de corrimiento hacia la derecha, con la instrucción BTFSC se verifica si es 1 el bit menos significativo, si no lo es entonces se vuelve a ejecutar la subrutina de Corrimiento, caso contrario, se ejecuta la subrutina EncenderLed.

Observaciones y conclusiones En la práctica presente se tuvo la oportunidad de familiarizarse mejor que la interfaz que provee el software MPLAB X IDE y con las instrucciones propias del lenguaje ensamblador. Para ello, se modificó el contenido presentado en la práctica anterior con la finalidad de que, en lugar de tratarse de un prendido y apagado de un led posicionado en el bit menos significativo del puerto B, se realizara un registro de recorrimiento a la derecha desde el bit más significativo hasta el bit menos significativo, dejando prendido solamente un led para un instante dado, y en caso de que fuese el bit

menos significativo el que se encontrase en nivel alto, entonces regresar a poner en estado alto el bit más significativo y un estado bajo el menos significativo. La mayor dificultad con la práctica recayó en el factor del retardo para que no fuese muy lento debido a que en el datasheet del PIC16F877A explican la ejecución de los registros de desplazamiento, tanto hacia la izquierda como hacia la derecha.

Referencias Introduction to PIC16F877A. Disponible en: https://www.theengineeringprojects.com/2017/06/pic16f877a.html PIC 16F87XA Datasheet. Disponible en: http://ww1.microchip.com/downloads/en/devicedoc/39582b.pdf MPLAB X IDE User´s Guide. Disponible en: http://ww1.microchip.com/downloads/en/DeviceDoc/50002027D.pdf Valdez, Pallas, “Microcontroladores. Fundamentos y aplicaciones con PIC”, Alfaomega, 2007...


Similar Free PDFs