You are on page 1of 25

SISTEMAS EMBEBIDOS

PROGRAMACIN Y APLICACIONES DEL


MICROCONTROLADOR PIC DE MICROCHIP

Curso de Sistemas Embebidos con

Microcontroladores PIC

Introduccin

Autor: Jos Oliden Martnez

1
Introduccin

Introduccin a los Microcontroladores PIC

Un microcontrolador es un circuito integrado programable de alta escala de integracin que incorpora


la mayor parte de los elementos que configuran un controlador (computador). Se dice que es la
solucin en un chip porque su reducido tamao minimiza el nmero de componentes y por lo tanto
el costo final del producto en desarrollo. En su memoria slo reside un programa destinado a
gobernar una aplicacin determinada; sus lneas de entrada / salida soportan el conexionado de los
sensores y actuadores del dispositivo a controlar.

La mayora de equipos pequeos informticos (teclado, mouse, impresora, etc.), artefactos


electrodomsticos (lavadora, microondas, cocinas, etc), y algunos equipos industriales y robots son
manejados por un microcontrolador.

La diferencia bsica entre un microcontrolador y un microprocesador es que el microprocesador es un


sistema abierto con el que puede construirse un computador con las caractersticas que desee,
acoplndole los mdulos necesarios. Un microcontrolador es un sistema cerrado que contiene un
microcomputador completo y de prestaciones limitadas que no se pueden modificar.

MICROPROCESADOR

BUS DE DIRECCIONES

BUS DE DATOS
P
BUS DE CONTROL

MEMORIA CONTROLADOR CONTROLADOR


1 2

PERIFERICOS PERIFERICOS

Figura 1: Estructura de un sistema abierto basado en un microprocesador

MICROCONTROLADOR

PERIFERICOS PERIFERICOS

Figura 2: El microcontrolador es un sistema cerrado

Jos Oliden Martnez 2


Introduccin

1. Caractersticas ms representativas de los microcontroladores PIC.

a) La arquitectura del procesador sigue el modelo Harvard

En esta arquitectura, el CPU se conecta de forma independiente y con buses distintos con la memoria
de instrucciones y con la de datos.

Bus de datos Bus de Instrucciones

MEMORIA DE MEMORIA DE
DATOS CPU INSTRUCCIONES
8 14

Figura 3: Arquitectura Harvard del microcontrolador

La arquitectura Harvard permite al CPU acceder simultneamente a las dos memorias lo cual propicia
numerosas ventajas al funcionamiento del sistema como se irn describiendo.

b) Tcnica de segmentacin (pipe-line) en la ejecucin de las instrucciones.

La segmentacin permite al procesador realizar al mismo tiempo la ejecucin de una instruccin y la


bsqueda del cdigo de la siguiente. De esta forma se puede ejecutar cada instruccin en un ciclo (un
ciclo de instruccin equivale a cuatro ciclos de reloj).

CLK

ciclo

BI3 BI2 BI1

EI3 EI2 EI3

Fin INSTR0

Fin INSTR1

Fin INSTR2

Figura 4: Un ciclo de instruccin equivale a cuatro ciclos de reloj

La segmentacin permite al procesador ejecutar cada instruccin en un ciclo de instruccin


equivalente a cuatro ciclos de reloj. En cada ciclo se realiza la bsqueda de una instruccin y la
ejecucin de la anterior.

Las instrucciones de salto ocupan dos ciclos al no conocer la direccin de la siguiente instruccin
hasta que no se haya completado la de bifurcacin.

Jos Oliden Martnez 3


Introduccin

1 CICLO 1 CICLO 1 CICLO 1 CICLO 2 CICLOS

BSQUEDA 1ra EJECUCIN 1ra

BSQUEDA 2da EJECUCIN 2da

ra ra
BSQUEDA 3 EJECUCIN 3

1ra INS. MOVLW F5h ta


BSQUEDA 4 (VACIO NOP)
2da INS. MOVWF PORTA
3ra INS. CALL SAL
4ra INS. MOVLW F6h (NOP Forzado) BSQUEDA SAL EJECUCIN SAL
5ra INS. Instr. @Direccionada de SAL
BSQUEDA SAL+1

Figura 5: La segmentacin permite solapar en el mismo ciclo la fase de ejecucin de una instruccin y la de la bsqueda de la
siguiente, excepto en las instrucciones de salto.

c) Formato de las instrucciones con la misma longitud

Todas las instrucciones de los microcontroladores de la gama baja tienen una longitud de 12 bits. Las
de la gama media tienen 14 bits y ms las de la gama alta. Esta caracterstica es muy ventajosa en la
optimizacin de la memoria de instrucciones y facilita enormemente la construccin de
ensambladores y compiladores.

d) Procesador RISC (Procesador con conjunto reducido de instrucciones)

Los modelos de la gama baja disponen de un repertorio de 33 instrucciones, 35 los de la gama media
y casi 60 los de la alta.

e) Arquitectura basada en un banco de registros

Esto significa que todos los objetos del sistema (puertos de E/S, temporizadores, posiciones de
memoria, etc.) estn implementados fsicamente como registros.

f) Diversidad de modelos de microcontroladores

La gran variedad de modelos de microcontroladores PIC con prestaciones y recursos diferentes


permite que el usuario pueda seleccionar el ms conveniente para su proyecto.

g) Herramientas de soporte

La empresa Microchip y otras que utilizan los PIC ponen a disposicin de los usuarios numerosas
herramientas para desarrollar hardware y software. Son muy abundantes los programadores, los
simuladores software, los emuladores en tiempo real, ensambladores, Compiladores C, Intrpretes y
Compiladores Basic, etc. Entre ellas tenemos:

Ensamblador MPASM.
Compilador de lenguaje C, MP-C.
Programador universal PICSTART PLUS
Emulador universal PIC MASTER.

Jos Oliden Martnez 4


Introduccin

Entorno de Desarrollo Integrado MPLAB


2. Las tres gamas de Microcontroladores PIC

Para resolver aplicaciones sencillas se precisan pocos recursos; en cambio, las aplicaciones grandes
requieren numerosos y potentes recursos. Siguiendo esta filosofa, Microchip construye diversos
modelos de microcontroladores orientados a cubrir, de forma, las necesidades de cada proyecto. As,
hay disponibles microcontroladores sencillos y baratos para atender las aplicaciones simples y otros
complejos y ms costosos para las de mucha envergadura.
La mayora de los sistemas de control incrustados requieren CPU, memoria de datos, memoria de
instrucciones, lneas de E/S, y diversas funciones auxiliares como temporizadores, comunicacin
serie y otras. La capacidad y el tipo de las memorias, el nmero de lneas de E/S y el de
temporizadores, as como circuitos auxiliares, son parmetros que dependen exclusivamente de la
aplicacin y varan mucho de unas situaciones a otras. Para adaptarse de forma ptima a las
necesidades de los usuarios, Microchip oferta tres gamas de microcontroladores de 8 bits
Con las tres gamas de PIC se dispone de gran diversidad de modelos y encapsulados, pudiendo
seleccionar el que mejor se acople a las necesidades de acuerdo con el tipo y capacidad de las
memorias, el nmero de lneas de E/S y las funciones auxiliares precisas. Sin embargo, todas las
versiones estn construidas alrededor de una arquitectura comn, un repertorio mnimo de
instrucciones y un conjunto de opciones muy apreciadas, como el bajo consumo y el amplio margen
del voltaje de alimentacin.

PIC17CXX
OTP/
EPROM
Gama Alta

PIC16CXXX
OTP/EPROM
Gama Media

PIC16C5X
OTP/EPROM/EEPROM
PIC12CXX
OTP
Gama Baja
Figura 5: Las tres gamas de Microcontroladores PIC

Las caractersticas especficas de los microcontroladores se encuentran en su hoja tcnica de datos.


Aqu se muestra un tabla con las principales caractersticas de la familia PIC16F87X. La hoja tcnica
se puede encontrar en el CD de microchip (de distribucin gratuita) o en su pgina web
www.microchip.com

Jos Oliden Martnez 5


Introduccin

3. Arquitectura Interna

3.1 Procesador:

El procesador de los microcontroladores corresponde a la Arquitectura Harvard (estudiada


anteriormente) y RISC (Computadores de Juego de Instrucciones Reducido). Adems otra
caracterstica es la tcnica de Segmentacin ppe-line, que como se observ brinda un paralelismo
implcito, trabajando con 2 instrucciones a la vez.

3.2 Memoria de Programa (Instrucciones)

Aqu se almacenan todas las instrucciones del programa de control. No se pueden utilizar memorias
externas. Los tipos existentes son: ROM con mscara, EPROM, OTP (Programable una vez),
EEPROM y FLASH.
La memoria de programa siempre est direccionada desde el Contador de Programa (PC), mientras
que la memoria de datos puede direccionarse directamente desde parte del cdigo OP de la
instruccin o indirectamente a travs de un registro denominado FSR (Registro de Seleccin del
Banco).
La memoria de programa (o de instrucciones) tiene una capacidad de 8k de 14 bits. Durante la fase
de bsqueda, la direccin de la instruccin la proporciona el PC, el cual normalmente se
autoincrementa en la mayora de las instrucciones, excepto en las de salto. Con las instrucciones de
salto se carga la Pila con el valor inicial del PC incrementado una unidad. Posteriormente, las
instrucciones de retorno, situadas al final de las rutinas, devuelven el valor almacenado en la Pila al
PC.

Figura 7: Mapa de Memoria de Programa

3.2.1 El PC. Direccionamiento del Programa

El PC consta de 13 bits con los que se puede direccionar una memoria de cdigo con una capacidad
de hasta 8k palabras de 14 bits cada una. La memoria se organiza en paginas de 2k de tamao.
El byte de menos peso del PC se corresponde con el contenido del registro PCL ubicado en la
posicin 02h del banco 0. Los 5 bits de mas peso del PC se corresponden con los 5 bits de menos
peso del registro PCLATH en la posicin 0Ah del banco 0. Los bits de mas peso del PC solos se
pueden escribir a travs del registro PCLATH.
En las instrucciones de salto relativo, el resultado de la misma afecta solo a los 8 bits de menos peso
del PC. Los 5 bits de mas peso se suministran desde PCLATH<4:0>.
Jos Oliden Martnez 6
Introduccin

En las instrucciones GOTO y CALL los 11 bits de menos peso del PC se suministran desde el cdigo
OP. Los dos bits de mas peso del PC se cargan con los bits <4:3> del registro PCLATH. Como la
memoria de programa se organiza en paginas de 2k, la posicin la seleccionan los 11 bits de menos
peso, mientras que con los 2 bits de mas peso del PC se elige la pgina.

Figura 8: Carga del PC en situaciones diferentes

Un reset pone a 0 todos los bits del PCL y PCLATH, obligando a que la direccin de reinicio sea
0000h.

El comportamiento del PC para las diversas instrucciones del repertorio es el siguiente:

1. Para todas las instrucciones menos los saltos del programa, el PC se autoincrementa para
apuntar la siguiente instruccin a la que se est ejecutando.

2. Las instrucciones de salto GOTO cargan en el PC directamente los 11 bits de menos peso desde
el cdigo OP de la propia instruccin. Cuando el rea de programa es superior a las 2k posiciones,
los 2 bits de ms peso del PC (Al0 y A9) se cargan con el valor de los bits PA1 y PA0 del Registro de
Estado.

3. Las instrucciones CALL, antes de su ejecucin, guardan en la Pila el valor del PC inicial
incrementado una unidad. Dicho valor se restituye al PC cuando se ejecuta la instruccin de retorno
cuyo mnemnico es RETLW.

4. Cuando el PC apunta la ltima posicin de una pgina y se autoincrementa pasa a direccionar a la


siguiente instruccin que estar situada en la primera posicin de la pgina siguiente. Cuando se
produce un cambio de pgina, se deben actualizar los bits PA1 y PA0 del Registro de Estado porque,
en caso contrario, cuando se ejecute una instruccin de salto, ste seguir controlando la pgina en
la que se halla esta instruccin de salto.

3.3 Memoria de Datos

Las posiciones de la memoria de datos tienen 8 bits de longitud. La memoria de datos se organiza en
"bancos" (4). Los bancos tienen un tamao de 128 bytes cada uno.
La memoria de datos funciona de forma similar al "banco de registros" de un procesador por lo cual
sus posiciones implementan registros de propsito especial y propsito general.
En la figura 9 se presenta la organizacin de la memoria compuesta por cuatro bancos. Se indican los
nombres de los registros especficos en las primeras posiciones del banco 0.

Jos Oliden Martnez 7


Introduccin

Figura 9: Organizacin de la memoria de datos

3.3.1 Modos de direccionamiento


Para direccionar la memoria de datos que contiene los registros de propsito especifico y los de
propsito general, existen dos modos:

1. Direccionamiento directo
Aqu se utilizan los 7 bits de menos peso del cdigo OP de la instruccin para apuntar cualquiera de
las 128 posiciones del banco 0. Si el dato no se halla en el banco 0, se usa un sistema de paginacin
para seleccionar el banco adecuado se emplean los bits RP1 y RP0 del Registro de estado <6:5>,
seleccionan el banco.

2. Direccionamiento indirecto
En este caso el operando de la instruccin hace referencia al registro INDF, que ocupa la posicin 0
del rea de datos (00h del banco 0). Se accede a la posicin que apunta el registro FSR, que se halla
situado en la posicin 04h del banco 0. Los 7 bits de menos peso de FSR seleccionan la posicin y su
bit de mas peso junto con el bit IRP del Registro de estado <7>, seleccionan el banco. El registro

Jos Oliden Martnez 8


Introduccin

INDF no se halla implementado fsicamente. Cada vez que se le referencia, se utiliza el contenido del
registro FSR para direccionar al operando.

Cualquier instruccin usando el registro INDF hace referencia al registro apuntado por FSR.

Figura 10: Modos de direccionamiento

Un ejemplo de direccionamiento indirecto en el cual limpiamos las direcciones 20h a al 2Fh de la


RAM es el siguiente:

movlw 0x20 ;inicializar puntero


movwf FSR ;a la memoria RAM
NEXT clrf INDF ;limpiar registro INDF
incf FSR,F ;incrementar puntero
btfss FSR,4 ;bit 4 del FSR=1?
goto NEXT ;no, limpiar siguiente
CONTINUAR
: ;si continuar programa...

4. Lneas de entrada y salida para los controladores de perifricos.

A excepcin de las 2 patitas de alimentacin, las del cristal del reloj (para regular la frecuencia de
trabajo) y la del reset, las restantes patitas del microcontrolador sirven para controlar o comunicarse
con perifricos externos. Las lneas de E/S que se adaptan con los perifricos manejando informacin
entre ellos se agrupan en conjuntos de 8 y reciben el nombre de puertos o puertas. As para el PIC
16F877 tenemos 5 puertos: Puerto A, B, C, D y E, a cada uno de ellos podemos acceder en forma
paralela (control de bit) o utilizar funciones preestablecidas de comunicacin o control (canal de
2
comunicaciones sncrono SSP con modo I C y SPI, canal USART/SCI, control PWM, conversores AD
de 10 bits). Las descripcin de las patitas y sus funciones estn en la hoja tcnica, en la figura 11 se
muestra esta en forma resumida.

Jos Oliden Martnez 9


Introduccin

Figura 11: Diagrama de pines y funciones

5. Recursos Auxiliares

Segn las aplicaciones cada modelo de microcontrolador incorpora una diversidad de complementos
que refuerzan su potencia y flexibilidad. Entre los recursos ms comunes se citan los siguientes:

a) Circuito de reloj, encargado de generar los impulsos que sincronizan el funcionamiento de


todo el sistema.
b) Temporizadores, orientados a controlar tiempos.
c) Perro Guardian (watchdog), destinado a provocar una reinicializacin cuando el programa
queda bloqueado o colgado.
d) Conversores AD y DA, para poder recibir y enviar seales analgicas.
e) Comparadores analgicos, para verificar los valores de seales analgicas.
f) Sistema de proteccin ante fallos de alimentacin.
g) Estado de reposo sleep, en el que el sistema queda congelado y el consumo de energa
se reduce al mnimo.

Jos Oliden Martnez 10


Introduccin

Programacin I

Vamos a comenzar a familiarizarnos con las instrucciones de manejo de bytes y bits del microPIC.

Instruccin mov

Transfiere el contenido de un registro <<fuente>> a un registro <<destino>>. En los


microcontroladores PIC todos los datos residen en posiciones de la memoria de datos, y solo el
registro de trabajo W se salva de esta regla. Esto significa que mov puede mover tres tipos de
operandos fundamentales:
1. El contenido del registro w.
2. El contenido de una posicin de la memoria de datos o registro.
3. Un literal o valor inmediato que se incluye en el cdigo mquina de la propia instruccin.

movf f,d: Mueve el contenido de f al destino d. d = f (d puede ser W o f)


movwf f: Mueve el contenido de W al destino f. f = W.
movfw k: Mueve el literal k a W. W = k.

En la prctica se utiliza:

movfw f: Mueve el contenido de f al destino W. W = f.


(no existe, pero el compilador lo acepta y lo transforma a movf f,0)

Instrucciones aritmticas

addwf f,d: Suma W y f. d=W+f


(i d = 0 entonces la suma va a W, y si es 1, la suma va a f)
addlw k: Suma W y k y el resultado lo deposita en W. W = W + k.

sublw k Sustrae W del literal k. W = k - W.


subwf f,d Sustrae W de f. d = f - W.
(d puede ser W o f)

En la primera y 4 ltimas instrucciones vistas, funciona el sealizador FZ(bit 2 del registro STATUS),
que se pone a 1 cuando el resultado de la operacin/instruccin es cero. Adems en las dos ltimas
funcionan los sealizadores FC (acarreo de suma de los dos bits de mas peso de los operandos, bit
0) y el FDC (que es 1 cuando ocurre acarreo al sumar los bit que ocupan el 4to lugar de los
operandos, bit 1). Este ltimo es til cuando se trabaja con dgitos BCD.
Estos sealizadores o banderas tambin funcionan con las instrucciones lgicas.

Instrucciones de manejo de bit

bcf f,b Pone a cero el bit b del registro f. f(b) = 0.


bsf f,b Pone a uno el bit b del registro f. f(b) = 1.
btfsc f,b Si el bit b de f es 0, salta una instruccin. f(b) = 0?,
Si, salta una instruccin
btfss f,b Si el bit b de f es 1, salta una instruccin. f(b) = 1?,
Si, salta una instruccin

Jos Oliden Martnez 11


Introduccin

Instrucciones de Operaciones lgicas

andlw k AND entre el literal k y W. W = W AND k.


andwf f,d AND entre W y f. d = W AND f.
(d puede ser W o f)
iorlw k OR inclusiva entre k y W. W = W OR k.
iorwf f,d OR inclusiva entre W y f. d = f OR W.
(d puede ser W o f)
xorlw k OR exclusiva entre k y W. W = W XOR k.
xorwf f,d OR exclusiva entre W y f. d = f XOR W.
(d puede ser W o f)

Instrucciones de manejo de byte

clrf f Pone a cero el registro f. f = 0.


comf f,d Complemento de f. d = NOT(f).
(d puede ser W o f)
decf f,d Decremento de f. d = f 1.
(d puede ser W o f)
incf f,d Incremento de f. d = f + 1.
(d puede ser W o f)
rlf f,d Corre los bits de f a la izquierda una posicin d = f << 1.
(d puede ser W o f)
rrf f,d Corre los bits de f a la derecha una posicin d = f >> 1.
(d puede ser W o f)
swapf f Intercambia los MSB con los LSB f = f(45670123)

Instrucciones condicionales, de salto y retorno

decfsz f,d Decrementa f y salta si es cero. d = f - 1. Si d = 0, salta.


(d puede ser W o f)
incfsz f ,d Incrementa f y salta si es cero. d = f + 1. Si d = 0, salta.
(d puede ser W o f)
call k Llamada a subrutina en la direccin k
goto k Va a la direccin k
retfie Retorna de la subrutina de interrupcin
retlw k Retorna de la subrutina con W = k
return Retorna de una subrutina.

Instrucciones especiales

clrw Pone a cero W. W = 0.


clrwdt Pone a cero el Watchdog timer. Watchdog = 0
nop No realiza ninguna operacin.
sleep Pone al PIC en standby.
option Carga el registro OPTION con W. OPTION = W
tris f Carga el registro tris de f. TRIS de f = W

Estas son todas las instrucciones que se utilizarn en la programacin del microcontrolador.

Registros Especiales

Adems de las instrucciones vamos a ver los registros especiales que se deben configurar para el
trabajo con los PICs. Aqu vamos a realizar una descripcin muy breve de los ms importantes.

Jos Oliden Martnez 12


Introduccin

STATUS (03h)
Los bits de este registro tienen tres misiones distintas:
1. Se encargan de avisar las incidencias del resultado de la ALU (C, DC y Z)
2. Indican el estado de Reset (TO# y PD#)
3. Seleccionan el banco a acceder en la memoria de datos (IRP, RP0 y RP1)

La figura 12 muestra los bits de STATUS y sus funciones.

Figura 12: Registro STATUS (Direcciones 03h, 83h, 103h, 183h)

OPTION_REG (81h)
La misin principal de este registro es controlar el TMR0 (temporizador) y el divisor de frecuencia.
Adems configura la interrupcin externa INT y las resistencias pull-ups del puerto B.
La figura 13 muestra la descripcin de los bits del registro OPTION.

Jos Oliden Martnez 13


Introduccin

Figura 13: Registro OPTIONREG (Direcciones 81h, 181h)

INTCON (0Bh)
La mayor parte de los sealizadores y bits de permiso de las fuentes de interrupcin en los
PIC16X8XX estn implementados sobre los bits de este registro que ocupa la direccin 0Bh del
banco 0 y se encuentra duplicado en los dems bancos.

Figura 14: Registro INTCON (Direcciones 0Bh, 8Bh, 10B, 18B)

En la figura 14 encontramos el nombre de cada bit y en la 15 encontramos las funciones de cada uno.

Jos Oliden Martnez 14


Introduccin

Figura 15: Descripcin de funciones de los pines del registro INTCON

PORTA
Algunos de los puertos de E/S son multiplexados para algunas otras funciones. Los registros de los
puertos en el banco 1 (TRIS) son para configurar los puertos.

Figura 16: Funciones del PORTA

Los registros asociados con el PORTA son los que se muestran en la figura 17

Figura 17: Registros asociados con el PORTA


Vamos a ver un ejemplo de configuracin del PORTA y PORTB para utilizarlos como puertos de
salida.

Jos Oliden Martnez 15


Introduccin

list p=16F877 ; Indica el modelo de PIC que se usa

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC & _WRT_ENABLE_ON & _LVP_OFF

;Zona de include macros

include <p16F877.inc> ; en este inc estn etiquetadas algunas direcciones para


; un mejor entendimiento del programa.
;Zona de etiquetas

org 0x05 ; inicio del programa, comando que indica al Ensamblador


; la direccin de la memoria de programa donde situar
; la siguiente instruccin.

;Configuracin inicial de puertos


bcf STATUS, RP0
bcf STATUS, RP1 ; Banco 0
clrf PORTA ; limpiando el PORTA
clrf PORTB ; limpiando el PORTB
bsf STATUS, RP0 ; Banco 1
movlw 0x06 ; configura todos los pines
movwf ADCON1 ; como entradas digitales
movlw 0xFF ; Configuracin de pines
movwf TRISA ; PA0-PA5 como entradas
clrf TRISB ; PB0-PB7 como salidas
bcf STATUS, RP1 ; Banco 0

INICIO:
movf PORTA,W ; W = PORTA
addlw 0x02 ; W = W + 02
movwf PORTB ; PORTB = W
goto INICIO ; regresar a INICIO

END ; Directiva de fin de programa

PORTB

Figura 18: Funciones del PORTB

Figura 19: Registros asociados con el PORTB

Jos Oliden Martnez 16


Introduccin

PORTC

Figura 20: Funciones del PORTC

Figura 21: Registros asociados con el PORTC

PORTD

Figura 22: Funciones del PORTD

Figura 23: Registros asociados con el PORTD

Jos Oliden Martnez 17


Introduccin

PORTE

Figura 24: Funciones del PORTE

Figura 25: Registros asociados con el PORTD

Ahora si vamos a analizar un programa de ejemplo para familiarizarnos con la estructura de


programacin.

Jos Oliden Martnez 18


Introduccin

Escritura y compilacin de un programa en Assembler

Como cualquier microprocesador, es necesario preparar un programa que le permita desarrollar su


trabajo. Un programa esta constituido por una lista de instrucciones en secuencia, cada una de las
cuales identifican unvocamente las funciones de base que los PIC estn en grado de desarrollar.
Cada instruccin esta representada por un cdigo operativo (en ingls operation code o ms
brevemente opcode ) a 14 bit y es memorizada en una posicin de memoria EEPROM. Un ejemplo
de opcode en anotacin binaria y Hexadecimal viene reportado enseguida.

00 0001 0000 0000B 0100H CLRW

El mismo valor puede ser representado en assembler con la notacin 0x100 derivada del lenguaje C
o H0100. Estos cdigos, completamente privados de sentido para un ser humano, son los nicos
que el PIC est en grado de entender. Para facilitar la tarea al programador, se recurre a algunos
instrumentos y convenciones para hacer las instrucciones ms comprensibles. La primera convencin
es aquella de asociar a cada opcode una sigla mnemnica es decir, una sigla que ayude a recordar
el significado de la instruccin. Por ejemplo el opcode 0100H corresponde a la instruccin mnemnica
CLRW que ya hemos visto. Otras convenciones permiten de definir las variables, las constantes, las
etiquetas (label) de referencia a las direcciones de memoria, etc. El conjunto de estas convenciones
para facilitar la escritura de un programa para los PIC es el llamado lenguaje assembler. Un
programa escrito en lenguaje assembler puede ser escrito en un PC utilizando cualquier procesador
de palabra o editor en grado de generar archivos de tipo ASCII. Un archivo ASCII o, mejor dicho, un
archivo de texto que contenga un programa en assembler es llamado source o fuente assembler.
Una vez preparado nuestro source assembler (veremos mas adelante como), es necesario un
programa en grado de traducir las instrucciones mnemnicas y todas las otras formas convencionales
con las cuales fue escrito nuestro source en una serie de nmeros (los opcode) reconocibles
directamente por el PIC. Este programa se llama compilador assembler o assemblador. En la
figura 26 viene esquematizado el flujo de operaciones y el archivo (file) que se genera para pasar de
un source assembler a un PIC programado. Como se dijo la primera operacin a efectuar es escribir
el source assembler y su memorizacin en un archivo (file) de texto con extensin .ASM. Para hacer
esto vamos a utilizar el editor del MPLAB (se puede utilizar cualquiera como por ejemplo el
NOTEPAD.EXE de Windows o el EDIT.EXE de MS/DOS).

Editor

.ASM .INC Figura 26: Flujo de operaciones al programar un PIC

Compilador

PIC
.COD .LST .ERR .HEX 16F877

Programador

Jos Oliden Martnez 19


Introduccin

El software utilizaremos es el MPLAB. Al abrirlo visualizaremos la siguiente pantalla de escritorio.

Para utilizar el MPLAB se tiene que crear un proyecto (sobre el cual se trabajar) de la siguiente
manera.
Vamos a Project>New Project y damos un nombre a nuestro proyecto dentro de un directorio en el
formulario que muestra la figura 27.

Figura 27: Creacin de un nuevo Project

Cuando deseemos setear algunas caractersticas del sistema debemos ir a Configure>Settings....

Jos Oliden Martnez 20


Introduccin

Luego debemos seleccionar el dispositivo a utilizar en Configure>Select Device

Seleccionamos luego el Tool de Herramienta de Microchip en Project>Set Language Tool locations.


Hacemos clic en MPASM Assembler (mpasmwin.exe).

Jos Oliden Martnez 21


Introduccin

Luego seleccionamos el lenguaje toolsuite que usaremos. Entramos a Project>Set Language Toolsuit
y seleccionamos Microchip MPASM Toolsuit.

Luego de haber creado un Project, abrimos o creamos un archivo .asm, vamos a File y luego a
New, como mostramos en la figura 28.

Figura 28: Creacin del .asm

Ponemos un nombre a nuestro archivo y lo que a continuacin viene es conectar nuestro Project con
el archivo .asm. Seleccionamos Project>Add Files to Project, la pantalla que veremos la mostramos
en la figura 29, y escogemos el archivo .asm que hemos creado, y listo!, a comenzar a trabajar.

Jos Oliden Martnez 22


Introduccin

Figura 29: Adicionando el .asm al Project

Una vez creado nuestro programa en el editor (como ejemplo puede tipearse el programa de
configuracin de los puertos A y B), paso sucesivo es la compilacin del source es decir, la
transformacin en opcode de los cdigos mnemnicos o instrucciones assembler en los contenidos.

El compilador assembler que utilizaremos es el MPASMWIN.EXE del entorno MPLAB. Los pasos de
la compilacin son simples. Una vez revisado nuestro programa lo compilamos, este proceso lo
hacemos seleccionando Project y luego Make project o directamente presionando la tecla F10. El
compilador nos muestra las advertencias (warning) y los errores (error) de nuestro programa,
indicando en qu lnea se ha cometido este falla. Si nuestro programa es correcto el mensaje sera el
siguiente:

Building <nombre>.HEX...

Compiling <nombre>.ASM:
Command line: "C:\ARCHIV~1\MPLAB\MPASMWIN.EXE /e+ /l+ /x- /c+ /p16F877 /q C:\ARCHIV~1\MPLAB\<nombre>.ASM"

Build completed successfully.

A pesar que puedan existir Warning, el programa se compila satisfactoriamente. No ocurriendo lo


mismo con los error

Durante la compilacin del source, el compilador assembler genera una serie de archivos con nombre
idntico a la source pero con extensin distinta:

.HEX es el archivo que contiene los cdigos operativos para enviar al PIC a travs del
programador.
.LST es un archivo de texto el cual contiene todo el source assembler y la correspondiente
traduccin en opcode. No es utilizable para la programacin del PIC pero es extremadamente
til para verificar los procesos de compilacin realizados por el compilador.
.ERR contiene la lista de los errores de compilacin encontrados y el numero de lnea en el
interno del source assembler en la cual se encontraron.

Los archivos .LST, .ERR vienen utilizados para el control de lo realizado en la compilacin. Solo el
archivo .HEX viene utilizado realmente para programar el PIC. El archivo .HEX no es un archivo en
formato binario y no corresponden directamente al contenido que deber tener la EEPROM del PIC.
Pero su formato si corresponde directamente a cuanto ser transferido al PIC en forma legible y con
unas instrucciones de ms.
Jos Oliden Martnez 23
Introduccin

Adems de nuestro source con extensin .ASM es necesario entregar al compilador un segundo
archivo producido por Microchip con extensin .INC diferente segn el tipo de PIC que estemos
utilizando. En nuestro caso el archivo es el PIC16F877.INC. Esta source contiene algunas
definiciones dependientes del chip utilizado.

Jos Oliden Martnez 24


Introduccin

Set de instrucciones del PIC16F87X


JOSE OLIDEN MARTINEZ

Sintaxis Descripcin Microchip Operacin equivalente

ADDLW k Add Literal and W W=W+k

ADDWF f,d Add W and f d = W + f (donde d puede ser W f)

ANDLW k AND Literal with W W = W AND k

ANDWF f,d AND W with f d = W AND f (donde d puede ser W f)

BCF f,b Bit Clear f f(b) = 0

BSF f,b Bit Set f f(b) = 1

BTFSC f,b Bit Test f, Skip if Clear f(b) = 0 ? Si, salta la siguiente instruccin

BTFSS f,b Bit Test f, skip if Set f(b) = 1 ? Si, salta la siguiente instruccin

CALL k Subroutine Call Llama a la subrutina en la direccin k

CLRF f Clear f f=0

CLRW Clear W Register W=0

CLRWDT Clear Watchdog Timer Watchdog timer = 0

COMF f,d Complement f d = not f (donde d puede ser W f)

DECF f,d Decrement f d = f -1 (donde d puede ser W f)

DECFSZ f,d Decrement f, Skip if 0 d = f -1 (donde d puede ser W f) si d = 0 salta

GOTO k Go to address Salto incondicional a la direccin k

INCF f,d Increment f d = f +1 (donde d puede ser W f)

INCFSZ f,d Increment f, Skip if 0 d = f +1 (donde d puede ser W f) si d = 0 salta

IORLW k Inclusive OR Literal with W W = W OR k

IORWF f,d Inclusive OR W with f d = f OR W (donde d puede ser W f)

MOVLW k Move literal to W W=k

MOVF f,d Move f d = f (donde d puede ser W f)

MOVWF f Move W to f f=W

NOP No Operation No operacin

OPTION Load Option Register OPTION = W

RETFIE Return from Interrupt Retorna de una subrutina de interrupcin

RETLW k Return Literal to W Retorna de una subrutina con W = k

RETURN Return from Subroutine Retorna de una subrutina

RLF f,d Rotale Left f through Carry d = f << 1 (donde d puede ser W f)

RRF f,d Rotale Right f through Carry d = f >> 1 (donde d puede ser W f)

SLEEP Go into Standby Mode Pone el PIC en standby

SUBLW k Subtract W from Literal W=kW

SUBWF f,d Subtract W from f d = f - W (donde d puede ser W f)

SWAPF f Swap f f = Swap Intercambia los bit 0123 con 4567 de f

TRIS f Load TRIS Register TRIS de f = W

XORLW k Exclusive OR Literal with W W = W XOR k

XORWF f,d Exclusive OR W with f d = f XOR W (donde d puede ser W f)

Jos Oliden Martnez 25

You might also like