Está en la página 1de 9

Lenguaje Ensamblador sobre PIC 16F84

Roberto Vargas Toledo Ivn Figueroa Monsalve


El presente trabajo se nos muestra la programacin de ensamblador orientada a la programacin de PIC 16F84, microcontrolador utilizado en diversas aplicaciones como la robtica, o aplicaciones cotidianas tanto para ingenieros como estudiantes o aficionados al tema. Profesor: Keber Flores

Resumen: Un microcontrolador es un circuito integrado programable que contiene los elementos necesarios para controlar un sistema. PCI significa Peripheral Interface Controler es decir un controlador de perifricos. Cuando hablamos de un circuito integrado programable que controla perifricos, estamos hablando de un sistema que contiene entre otras cosas una unidad aritmtico-lgica, unas memorias de datos y programas, unos puertos de entrada y salida, es decir estamos hablando de un pequeo ordenador diseado para realizar unas funciones especficas. Podemos encontrar microcontroladores en lavadoras, teclados, telfonos mviles, ratones etc. Hay multitud de microcontroladores con ms memoria, entradas y salidas, frecuencia de trabajo, coste, subsistemas integrados y un largo etc. dependiendo de cada tipo de microcontrolador. El presente informe est basado en el popular microcontrolador PIC 16F84 del fabricante Microchip Technology Inc. ya que es un sistema sencillo, barato y potente para muchas aplicaciones electrnicas.

pequeo tamao, gran calidad, fiabilidad y abundancia de la informacin. Esto lo convierte en un dispositivo fcil, cmodo y rpido de usar. Todas estas caractersticas permiten la amplia aplicacin del PIC 16F84 en diferentes actividades. Como
tema central, se analizar el PIC 16F84 sobre el lenguaje ensamblador, el cual tiene sus ventajas al programar la PIC, debido a que ste es el lenguaje ms optimo para programar dispositivos PIC.

II Estructura del PIC 16F84 El PIC 16F84 esta encapsulado en un DIL (Dual in line o Doble en lnea) de 18 pines, o En encapsulado SOIC para montaje superficial SMD, una tecnologa de mayor integracin que ocupa muy poco espacio, pero con un proceso de soldadura tambin mas difcil. Tambin puede presentarse de otras formas dependiendo del fabricante.

I Introduccin En los ltimos aos, el microcontrolador PIC 16F84 ha sido uno de los que ha tenido mayor aceptacin por parte de los usuarios debido a sus buenas caractersticas, bajo precio, reducido consumo,
_________________________________ Diagrama ejemplo de un Microcontrolador PIC 16F84 donde se detallan los 18 pines que la componen

III Caractersticas de la PIC 16F84 Alimentacin: Normalmente el microcontrolador PIC 16F84 se alimenta con 5 voltios aplicados entre los pines VDD (+) y VSS (-) que son la alimentacin y la masa del chip respectivamente. El consumo del circuito depende de las cargas en los puertos y de la frecuencia de trabajo. Circuitera Bsica: El PIC se compone de los siguientes elementos que son claves para el PIC pueda funcionar:

Frecuencia de trabajo: Los PICs 16F84 necesitan de un reloj oscilador que marcar la frecuencia de trabajo. Estos osciladores pueden ser del tipo: RC formado por una resistencia y un condensador, HS: se utiliza un cristal de cuarzo o resonador cermico (hasta 10 MHz), XT: cristal o resonador (hasta 4 MHz), LP: bajo consumo (hasta 200 KHz). Los osciladores se colocan entre las patillas OSC1 y OSC2.

R1: Resistencia 100 R2: Resistencia 10k C1 y C2: Condensadores cermicos D1: Diodo 1N4148 XTAL: Cristal de cuarzo 4 MHz SW1: Pulsador NA Puertos de Entrada y Salida: El microcontrolador se comunica con el exterior a travs de puertos, estos funcionan entre 0 y 5 voltios, se pueden ocupar como entradas de datos o bien como salidas de los mismos para gobernar otros dispositivos externos. El PIC16F84 se compone bsicamente de dos puertos Puerto A: con 5 lneas, pines RA0 a RA4, y un Puerto B: con 8 lneas, de RB0 a RB7. Cabe destacar que da lnea puede ser configurada de forma independiente segn la necesidad del programador.

Memoria: Todos los programas necesitan de una memoria para su funcionamiento, en el caso de la PIC 16F84 se ocupa una memoria de tipo flash de 1 Kb (1024 posiciones) lo que permite una grabacin sencilla, y cmoda, y no voltil. y est organizada en palabras de 14 bits, as, la memoria del programa comienza en la posicin 000h (posicin inicial de reset) y llega hasta la 3FFh. Admite hasta 1000 grabaciones, y el fabricante garantiza que la informacin permanece hasta decenas de aos. Resumiendo: se pueden encontrar en un PIC 16F84 las siguientes caractersticas:
Memoria Flash de programa (1K x 14). Memoria EEPROM de datos (64 x 8). Memoria RAM (67 registros x 8). Un temporizador/contador (timer de 8 bits). Un divisor de frecuencia. Varios puertos de entrada-salida (13 pines en dos puertos, 5 pines el puerto A y 8 pines el puerto B). Manejo de interrupciones (de 4 fuentes). Perro guardin (watchdog). Bajo consumo. Frecuencia de reloj externa mxima 10MHz. (Hasta 20MHz en nuevas versiones). La frecuencia de reloj interna es un cuarto de la externa, lo que significa que con un reloj de 20Mhz, el reloj interno sera de 5Mhz y as pues se ejecutan 5 Millones de Instrucciones por Segundo (5 MIPS)

No posee conversores analgicosdigital ni digital-analgicos. Pipe-line de 2 etapas, 1 para bsqueda de instruccin y otra para la ejecucin de la instruccin (los saltos ocupan un ciclo ms). Repertorio de instrucciones reducido (RISC), con tan solo 30 instrucciones distintas. 4 tipos distintos de instrucciones, orientadas a byte, orientadas a bit, operacin entre registros, de salto.

________________________________
Detalle de la memoria del microcontrolador PIC 16F84

IV Programacin en Ensamblador Sobre PIC 16F84 Diseo de Proyecto: Ante un problema tcnico, hay que buscar soluciones de forma sencillas, eficaces y a bajo costo, los microcontroladores PIC 16F84 pueden ayudarnos en esto, a continuacin desarrollaremos un diagrama de flujo el cual nos servir de gua como diseo de proyecto con micocontroladores PIC

Compilar

MPASM

Gpasm

Lis tado .hex

Emular

Emular MIPSIM, SImuPIC, o Misim Wi nPi cmeTR + ci rcui to grabador, IC-Prog.

Gputils, Gpsim, pi kDEV, Misim pi kDev

Graba r

Programacin en Ensamblador PIC 16F84: Para programar una PIC necesitamos ante todo conocer las instrucciones para generar el cdigo fuente. Algunas de las instrucciones ms conocidas se detallan a continuacin: Manejo de registros
-clrf f: limpia el registro f, es decir, pone todos sus bits a 0. -comf f,d: complementa el registro fuente f cambia los 1 por 0 y viceversa) y el resultado lo deposita en el destino. Si d = 0 el destino es W y si d = 1, el destino es

Dependiendo el tipo de plataforma en la cual se trabaje se elaboran diferentes tipos de proyecto:


Pasos a segui r Idea r solucin Herramienta Wi ndows
Disear circuitos con programas PCB

el registro fuente f.

Manejo de bits
- bcf f,b: pone a 0 el bit b del registro f. - bsf f,b: pone a 1 el bit b del registro f.

Linux

Fi cheros

PCB

Salto
Edi tores ASCII Lis tado en .asm

Lis tar

Lis tar el progra ma con EDIT, MPLa b o cualquier edi tor ASCII

- Btfsc f, b: explora el bit b del registro f y salta si vale 0 - Btfss f, b: explora el bit b del registro f y salta si vale 1

Control y especiales
- Goto etiqueta : si ta el curs or del programa (PCL), en etiqueta

Estructuras de control
EQU: Un ejemplo de esto son las etiquetas , podemos poner un nombre a un registro de memoria , esto se ha ce mediante la i nstruccin EQU. Por ejemplo: VARIABLE1 EQU 0CH A pa rti r de ahora en luga r de es cribi r 0CH podemos es cribi r VARIABLE1 Con EQU tambin podemos poner nombre a constantes de la misma forma . #DEFINE: Otra ins truccin pa ra el ensamblador que usa remos ser la ins truccin #DEFINE. Es pa recido a EQU, solo que aqu no ponemos etiquetas a un registro, podemos ponerla a una ins trucci n entera , Por ejemplo: #DEFINE BANCO1 BSF STATUS,5 #DEFINE BANCO0 BCF STATUS,5 A pa rti r de ahora , cuando es criba mos BANCO1 se pondr a "1" el bi t de selecci n de banco y pasa remos al banco 1, al es cribi r BANCO0 pasaremos al banco 0 ORG: Indi ca al ensamblador la di reccin (de memoria de progra ma) donde se gua rda r la ins truccin que va ya a continuaci n. Por ejemplo: ORG 00H CLRF VARIABLE1 La i nstruccin CLRF es t en la di reccin de memoria de progra ma 00H (ser la pri mera ins trucci n en ser ejecutada por el pi c) END: Se es cribe al final del progra ma pa ra indi ca r que ya ha a cabado. (es obliga torio, si no da error).

A continuacin se detalla una tabla con las principales instrucciones de ensamblador para microcontroladores PIC

Ejemplo de Programacin en Ensamblador: A continuacin se detalla un ejemplo de programacin en ensamblador el cual ser analizado paso a paso a fin de comprender las la programacin del PIC
Lis t p=16F84 ; Tipo de procesador include "P16F84.INC" ; Defini cin de ; Regis tros internos

Hasta aqu hemos hecho lo siguiente: Poner a 0 la puerta B para configurarla como salida, y a 1 la puerta A para configurarla como entrada. Tambin hemos puesto a 1 la las patillas B,0 y B,1 para que se conecte ambos motores y el bot camine hacia el frente.
Bucle1 cl rwdt ;Refres ca el wdt btfss PORTA,0 ;va el sensor izquierdo sobre ;la lnea blanca?

Hasta aqu solo se le ha indicado al compilador que se va a utilizar un PIC 16F84 para que lo tenga en cuenta a la hora de transformar el cdigo fuente a cdigo maquina
org 0x00 goto Ini cio org 0x05 ; Vector de reset ; guarda el vector de ; interrupcin

Hasta aqu, hemos definido cual es el vector de reset (donde comienza a ejecutarse el programa, posicin 000h de la memoria). Tambin definimos cual es la posicin de memoria a la cual debe ir el programa si se produce una interrupcin, posicin 0x05 de la memoria. De esta forma, en la direccin 0x00 ponemos un salto a la posicin etiquetada como "INICIO", y luego empezamos en la direccin 0x05 (guardando el vector de reset) con la primera instruccin del programa.

La instruccin "btfss" explora si el bit de entrada es 1 (ON) o cero (OFF), de forma que se salta la siguiente lnea del programa si es "1" (si el sensor ha detectado que contina sobre la lnea blanca, si es ON) o bien lee la siguiente lnea del programa si no detecta la lnea blanca, si es OFF o cero.
goto Bucle2 ;Si se ha salido de la l nea i r a Bucle2

sta es la lnea del programa que leera si el valor detectado fuera cero, o sea que no detectara el color blanco (cuando se sale de la trayectoria deseada). Igualmente, se la saltara si continuara sin salirse (valor "1") y pasara a la siguiente lnea.
bs f PORTB,0 ;conecta el motor izquierdo

Ini cio cl rf PORTB ;Borra los la cht de salida bsf STATUS,RP0 ;Selecciona el banco 1 cl rf TRISB ;Puerta B salida movlw b'000011111' movwf TRISA ;Puerta A entrada bcf STATUS, RP0 ;Selecciona el banco 0 bsf PORTB,0 ;Conecta motor i zquierdo bsf PORTB,1 ;Conecta motor derecho

La instruccin "bsf" pone el bit de salida a "1", es decir, encendido (ON).


btfs c PORTA,1 ; RA1=0??, detecta negro? (no ; detecta blanco) goto Bucle3 ; No ha detectado negro bs f PORTB,1 ; Conecta motor derecho

Hasta aqu el procedimiento es ms o menos el mismo (slo que al contrario), "btfsc" analiza si el bit de entrada es 0 (se sali de la lnea blanca) y por tanto se salta la siguiente lnea del programa, o bien si el valor es "1" (no se ha salido de su trayectoria) y lee la siguiente lnea del programa.
goto Bucle1 ;detecta blanco y negro, conectados ;a mbos motores

A este bucle saltbamos cuando el sensor que deba ir fuera de la lnea blanca (OFF o cero) pisaba la misma, entonces, se paraba el motor derecho para que el "bot" girara a la derecha. Tras esta operacin volvamos al bucle principal (Bucle1) y el proceso comenzaba de nuevo una y otra vez hasta que cada sensor volviera a su situacin "normal" (el izquierdo sobre la lnea blanca y el derecho sobre el fondo negro).
Stop nop nop end

Si todo va bien, volvemos al Bucle1, y vuelta a empezar... (mientras tanto el microbot sigue su camino).
Bucle2 cl rwdt Bcf PORTB,0 goto Bucle1 ;Refres ca el wdt ;Des conecta (pone a cero) el motor ;i zquierdo ;Vuel ve al bucle principal

Con estas instrucciones le decimos al compilador que el programa ha finalizado.

A este bucle saltbamos cuando el sensor que deba ir sobre la lnea blanca (ON "1") se sala de la misma, entonces, se paraba el motor izquierdo para que el "bot" girara a la izquierda. Tras esta operacin volvamos al bucle principal (Bucle1) y el proceso comenzaba de nuevo una y otra vez hasta que cada sensor volviera a su situacin "normal" (el izquierdo sobre la lnea blanca y el derecho sobre el fondo negro).
Bucle3 cl rwdt bcf PORTB,1 goto Bucle1 ;Refresca el wdt ;desconecta (pone a cero) el motor ;derecho ;Vuel ve al bucle principal

El programa completo se detalla a continuacin:


;Programa pa ra robot que consiste en segui r por la derecha una lnea blanca sobre un fondo negro ;Cons ta de dos detectores , el i zquierdo (entra da por ; RA0) sobre la l nea blanca su es tado "normal" es 1 ;el detector derecho (entra da por RA1) sobre el ;fondo negro, su estado "normal" es 0 ;El motor izquierdo tiene salida por PortB0 ;El motor derecho tiene salida por PortB1 ;-----COMIENZO DEL PROGRAMA---Lis t p=16F84 ;Tipo de procesador include "P16F84.INC" ;Defini cin de registros ;internos org 0x00 ;Vector de reset goto Ini cio org 0x05 ;Sal va el vector de interrupci n Ini cio cl rf PORTB ;Borra los la cht de salida bs f STATUS,RP0 ;Selecciona el banco 1 cl rf TRISB ;puerta B salida movl w b'000011111' movwf TRISA ;puerta A entrada bcf STATUS, RP0 ;Selecciona el banco 0 bs f PORTB,0 ;conecta motor izquierdo bs f PORTB,1 ;Conecta motor derecho Bucle1 cl rwdt ;Refres ca el wdt

btfss PORTA,0 ;Va el sensor izquierdo ;s obre la lnea blanca ? Goto Bucle2 ;Si se ha salido de la l nea i r a ;Bucle2 bs f PORTB,0 ;Conecta el motor izquierdo btfs c PORTA,1 ;RA1=0??, detecta negro? ;(no detecta blanco) goto Bucle3 ;No ha detectado negro bs f PORTB,1 ;Conecta motor derecho goto Bucle1 ;Detecta blanco y negro, ;conectados ambos motores Bucle2 cl rwdt ;Refresca el wdt bcf PORTB,0 ;des conecta (pone a cero) ;el motor izquierdo goto Bucle1 ;Vuel ve al bucle principal Bucle3 cl rwdt ;Refres ca el wdt bcf PORTB,1 ;Desconecta (pone a cero) ;el motor derecho goto Bucle1 ;Vuel ve al bucle principal Stop nop nop end

VI Referencias Se deja a exposicin una breve referencia bibliogrfica del proyecto realizado. [1] Enrique Palacios, Fernando Remiro, Lucas J. Lpez. Microcontrolador 16F84, Desarrollo de Proyectos. Primera edicin 2004, Alfaomega. [2] http://webquimera.iespana.es/ webquimera/ programacin en Ensamblador sobre PIC 16F84 [3] http://members.fortunecity.es/elect ronico/tutoriales/tutopic16f84/p6. html Programacin de Ensamblador en ficheros .hex [4] http://www.unicrom.com/Tut_ PICs3.asp Caractersticas del PIC [5] http://www.unicrom.com/Tut_ PICs4.asp Instrucciones de Ensamblador para PIC 16F84

V Conclusiones y Agradecimientos Las microcontroladoras revolucionaron gran parte de lo que es la computacin hoy en da, sin ir ms lejos, varios autores catalogan este invento como uno de los ms importantes del siglo XX. Dada su importancia en los procesos que se realizan hoy por hoy, hacen imprescindible la existencia de estos como soportes bsicos para diferentes aplicaciones en las numerosas reas de la informtica. Agradecemos en primera instancia al Profesor Keber Flores por ayudarnos en nuestro aprendizaje y formarnos como futuros Analistas en Computacin, y a nuestra universidad como institucin que nos brinda las herramientas para adquirir el conocimiento necesario.

También podría gustarte