Sei sulla pagina 1di 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.

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.

Circuitera Bsica:
El PIC se compone de los siguientes
elementos que son claves para el PIC
pueda funcionar:

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.

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.

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)

________________________________
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

Emular

Emular
MIPSIM,
SImuPIC, o
Misim

Gputils,
Gpsim,
pi kDEV,
Misim

Graba r

Wi nPi cmeTR + ci rcui to


grabador,

pi kDev

Lis tado
.hex

IC-Prog.

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:

el registro fuente f.

Manejo de bits

Pasos a

Herramienta

segui r

Wi ndows

Idea r

Disear
circuitos con
programas
PCB

PCB

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

Edi tores

Lis tado

- Btfsc f, b: explora el bit b del registro f y salta

ASCII

en .asm

si vale 0

solucin

Lis tar

edi tor ASCII

Linux

Fi cheros

- bcf f,b: pone a 0 el bit b del registro f.


- bsf f,b: pone a 1 el bit b del registro f.

Salto

- 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 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.

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?

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

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

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

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

Con estas instrucciones le decimos al


compilador que el programa ha finalizado.

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

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.

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

Potrebbero piacerti anche