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

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 1

CONTROLADOR 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

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 DATOS
8

CPU
14

MEMORIA DE INSTRUCCIONES

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

Introduccin

1 CICLO

1 CICLO

1 CICLO

1 CICLO

2 CICLOS

BSQUEDA 1ra

EJECUCIN 1ra BSQUEDA 2da EJECUCIN 2da BSQUEDA 3


ra

EJECUCIN 3 BSQUEDA 4

ra

1ra INS. 2da INS. 3ra INS. 4ra INS. 5ra INS.

MOVLW F5h MOVWF PORTA CALL SAL MOVLW F6h (NOP Forzado) Instr. @Direccionada de SAL

ta

(VACIO NOP) BSQUEDA SAL EJECUCIN 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.
4

Jos Oliden Martnez

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

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

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

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:

NEXT

movlw movwf clrf incf btfss goto :

0x20 FSR INDF FSR,F FSR,4 NEXT

;inicializar puntero ;a la memoria RAM ;limpiar registro INDF ;incrementar puntero ;bit 4 del FSR=1? ;no, limpiar siguiente ;si continuar programa...

CONTINUAR

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

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: movwf f: movfw k: Mueve el contenido de f al destino d. Mueve el contenido de W al destino f. Mueve el literal k a W. d = f (d puede ser W o f) f = 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: addlw k: sublw k subwf 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) Suma W y k y el resultado lo deposita en W. W = W + k. Sustrae W del literal k. Sustrae W de f. W = k - W. 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 bsf f,b btfsc f,b btfss f,b Pone a cero el bit b del registro f. Pone a uno el bit b del registro f. Si el bit b de f es 0, salta una instruccin. Si el bit b de f es 1, salta una instruccin. f(b) = 0. f(b) = 1. f(b) = 0?, Si, salta una instruccin f(b) = 1?, Si, salta una instruccin

Jos Oliden Martnez

11

Introduccin Instrucciones de Operaciones lgicas andlw k andwf f,d iorlw k iorwf f,d xorlw k xorwf f,d AND entre el literal k y W. AND entre W y f. OR inclusiva entre k y W. OR inclusiva entre W y f. OR exclusiva entre k y W. OR exclusiva entre W y f. W = W AND k. d = W AND f. (d puede ser W o f) W = W OR k. d = f OR W. (d puede ser W o f) W = W XOR k. d = f XOR W. (d puede ser W o f)

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

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

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

OPTION = W 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 ;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. <p16F877.inc> ; en este inc estn etiquetadas algunas direcciones para ; un mejor entendimiento del programa.

;Configuracin inicial de puertos bcf STATUS, RP0 bcf STATUS, RP1 clrf PORTA clrf PORTB bsf STATUS, RP0 movlw 0x06 movwf ADCON1 movlw 0xFF movwf TRISA clrf TRISB bcf STATUS, RP1 INICIO: movf addlw movwf goto END PORTA,W 0x02 PORTB INICIO

; Banco 0 ; limpiando el PORTA ; limpiando el PORTB ; Banco 1 ; configura todos los pines ; como entradas digitales ; Configuracin de pines ; PA0-PA5 como entradas ; PB0-PB7 como salidas ; Banco 0 ; W = PORTA ; W = W + 02 ; PORTB = W ; regresar a INICIO ; 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 ADDLW k ADDWF f,d ANDLW k ANDWF f,d BCF f,b BSF f,b BTFSC f,b BTFSS f,b CALL k CLRF f CLRW CLRWDT COMF f,d DECF f,d DECFSZ f,d GOTO k INCF f,d INCFSZ f,d IORLW k IORWF f,d MOVLW k MOVF f,d MOVWF f NOP OPTION RETFIE RETLW k RETURN RLF f,d RRF f,d SLEEP SUBLW k SUBWF f,d SWAPF f TRIS f XORLW k XORWF f,d Descripcin Microchip Add Literal and W Add W and f AND Literal with W AND W with f Bit Clear f Bit Set f Bit Test f, Skip if Clear Bit Test f, skip if Set Subroutine Call Clear f Clear W Register Clear Watchdog Timer Complement f Decrement f Decrement f, Skip if 0 Go to address Increment f Increment f, Skip if 0 Inclusive OR Literal with W Inclusive OR W with f Move literal to W Move f Move W to f No Operation Load Option Register Return from Interrupt Return Literal to W Return from Subroutine Rotale Left f through Carry Rotale Right f through Carry Go into Standby Mode Subtract W from Literal Subtract W from f Swap f Load TRIS Register Exclusive OR Literal with W Exclusive OR W with f Operacin equivalente W=W+k d = W + f (donde d puede ser W f) W = W AND k d = W AND f (donde d puede ser W f) f(b) = 0 f(b) = 1 f(b) = 0 ? Si, salta la siguiente instruccin f(b) = 1 ? Si, salta la siguiente instruccin Llama a la subrutina en la direccin k f=0 W=0 Watchdog timer = 0 d = not f (donde d puede ser W f) d = f -1 (donde d puede ser W f) d = f -1 (donde d puede ser W f) si d = 0 salta Salto incondicional a la direccin k d = f +1 (donde d puede ser W f) d = f +1 (donde d puede ser W f) si d = 0 salta W = W OR k d = f OR W (donde d puede ser W f) W=k d = f (donde d puede ser W f) f=W No operacin OPTION = W Retorna de una subrutina de interrupcin Retorna de una subrutina con W = k Retorna de una subrutina d = f << 1 (donde d puede ser W f) d = f >> 1 (donde d puede ser W f) Pone el PIC en standby W=kW d = f - W (donde d puede ser W f) f = Swap Intercambia los bit 0123 con 4567 de f TRIS de f = W W = W XOR k d = f XOR W (donde d puede ser W f)

Jos Oliden Martnez

25

You might also like