SISTEMAS EMBEBIDOS - INTRODUCCION

25
1 SISTEMAS EMBEBIDOS PROGRAMACIÓN Y APLICACIONES DEL MICROCONTROLADOR PIC DE MICROCHIP Curso de Sistemas Embebidos con Microcontroladores PIC Introducción Autor: José Oliden Martínez

Transcript of SISTEMAS EMBEBIDOS - INTRODUCCION

Page 1: SISTEMAS EMBEBIDOS - INTRODUCCION

1

SISTEMAS EMBEBIDOS

PROGRAMACIÓN Y APLICACIONES DEL MICROCONTROLADOR PIC DE MICROCHIP

Curso de Sistemas Embebidos con

Microcontroladores PIC

Introducción

Autor: José Oliden Martínez

Page 2: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 2

Introducción a los Microcontroladores PIC Un microcontrolador es un circuito integrado programable de alta escala de integración que incorpora la mayor parte de los elementos que configuran un controlador (computador). Se dice que es “la solución en un chip” porque su reducido tamaño minimiza el número de componentes y por lo tanto el costo final del producto en desarrollo. En su memoria sólo reside un programa destinado a gobernar una aplicación determinada; sus líneas de entrada / salida soportan el conexionado de los sensores y actuadores del dispositivo a controlar. La mayoría de equipos pequeños informáticos (teclado, mouse, impresora, etc.), artefactos electrodomésticos (lavadora, microondas, cocinas, etc), y algunos equipos industriales y robots son manejados por un microcontrolador. La diferencia básica entre un microcontrolador y un microprocesador es que el microprocesador es un sistema abierto con el que puede construirse un computador con las características que desee, acoplándole los módulos necesarios. Un microcontrolador es un sistema cerrado que contiene un microcomputador completo y de prestaciones limitadas que no se pueden modificar.

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

Figura 2: El microcontrolador es un sistema cerrado

MEMORIA CONTROLADOR 1

CONTROLADOR 2

MICROPROCESADOR

BUS DE DIRECCIONES

BUS DE DATOS

BUS DE CONTROL

µµµµP

PERIFERICOS PERIFERICOS

PERIFERICOS PERIFERICOS

µµµµC

MICROCONTROLADOR

Page 3: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 3

1. Características más 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.

Figura 3: Arquitectura Harvard del microcontrolador La arquitectura Harvard permite al CPU acceder simultáneamente a las dos memorias lo cual propicia numerosas ventajas al funcionamiento del sistema como se irán describiendo. b) Técnica de segmentación (“pipe-line”) en la ejecución de las instrucciones. La segmentación permite al procesador realizar al mismo tiempo la ejecución de una instrucción y la búsqueda del código de la siguiente. De esta forma se puede ejecutar cada instrucción en un ciclo (un ciclo de instrucción equivale a cuatro ciclos de reloj).

BI3 BI2 BI1

EI3 EI2 EI3

ciclo

CLK

Fin INSTR0

Fin INSTR1

Fin INSTR2

Figura 4: Un ciclo de instrucción equivale a cuatro ciclos de reloj La segmentación permite al procesador ejecutar cada instrucción en un ciclo de instrucción equivalente a cuatro ciclos de reloj. En cada ciclo se realiza la búsqueda de una instrucción y la ejecución de la anterior. Las instrucciones de salto ocupan dos ciclos al no conocer la dirección de la siguiente instrucción hasta que no se haya completado la de bifurcación.

MEMORIA DE DATOS

MEMORIA DE INSTRUCCIONES CPU

Bus de datos Bus de Instrucciones

8 14

Page 4: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 4

Figura 5: La segmentación permite solapar en el mismo ciclo la fase de ejecución de una instrucción y la de la búsqueda 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 más las de la gama alta. Esta característica es muy ventajosa en la optimización de la memoria de instrucciones y facilita enormemente la construcción 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.) están implementados físicamente 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 más conveniente para su proyecto. g) Herramientas de soporte La empresa Microchip y otras que utilizan los PIC ponen a disposición 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, Intérpretes y Compiladores Basic, etc. Entre ellas tenemos: • Ensamblador MPASM. • Compilador de lenguaje C, MP-C. • Programador universal PICSTART PLUS • Emulador universal PIC MASTER.

BÚSQUEDA 1ra

BÚSQUEDA 2da

BÚSQUEDA 3ra

EJECUCIÓN 1ra

EJECUCIÓN 2da

BÚSQUEDA 4ta

EJECUCIÓN 3ra

BÚSQUEDA SAL

(VACIO NOP)

EJECUCIÓN SAL

1 CICLO 1 CICLO 1 CICLO 1 CICLO 2 CICLOS

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

BÚSQUEDA SAL+1

Page 5: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 5

• 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 filosofía, 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 más costosos para las de mucha envergadura. La mayoría de los sistemas de control incrustados requieren CPU, memoria de datos, memoria de instrucciones, líneas de E/S, y diversas funciones auxiliares como temporizadores, comunicación serie y otras. La capacidad y el tipo de las memorias, el número de líneas de E/S y el de temporizadores, así como circuitos auxiliares, son parámetros que dependen exclusivamente de la aplicación y varían 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 número de líneas de E/S y las funciones auxiliares precisas. Sin embargo, todas las versiones están construidas alrededor de una arquitectura común, un repertorio mínimo de instrucciones y un conjunto de opciones muy apreciadas, como el bajo consumo y el amplio margen del voltaje de alimentación.

PIC16C5XOTP/EPROM/EEPROM

PIC12CXXOTP

Gama Baja

PIC16CXXXOTP/EPROMGama Media

PIC17CXXOTP/

EPROMGama Alta

Figura 5: Las tres gamas de Microcontroladores PIC

Las características específicas de los microcontroladores se encuentran en su hoja técnica de datos. Aquí se muestra un tabla con las principales características de la familia PIC16F87X. La hoja técnica se puede encontrar en el CD de microchip (de distribución gratuita) o en su página web www.microchip.com

Page 6: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 6

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). Además otra característica es la técnica de Segmentación pípe-line, que como se observó brinda un paralelismo implícito, 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 máscara, 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 código OP de la instrucción o indirectamente a través de un registro denominado FSR (Registro de Selección del Banco). La memoria de programa (o de instrucciones) tiene una capacidad de 8k de 14 bits. Durante la fase de búsqueda, la dirección de la instrucción la proporciona el PC, el cual normalmente se autoincrementa en la mayoría 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 código con una capacidad de hasta 8k palabras de 14 bits cada una. La memoria se organiza en paginas de 2k de tamaño. El byte de menos peso del PC se corresponde con el contenido del registro PCL ubicado en la posición 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 posición 0Ah del banco 0. Los bits de mas peso del PC solos se pueden escribir a través 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>.

Page 7: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 7

En las instrucciones GOTO y CALL los 11 bits de menos peso del PC se suministran desde el código 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 posición la seleccionan los 11 bits de menos peso, mientras que con los 2 bits de mas peso del PC se elige la página.

Figura 8: Carga del PC en situaciones diferentes

Un reset pone a 0 todos los bits del PCL y PCLATH, obligando a que la dirección 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 instrucción 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 código OP de la propia instrucción. Cuando el área de programa es superior a las 2k posiciones, los 2 bits de más 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 ejecución, guardan en la Pila el valor del PC inicial incrementado una unidad. Dicho valor se restituye al PC cuando se ejecuta la instrucción de retorno cuyo mnemónico es RETLW. 4º. Cuando el PC apunta la última posición de una página y se autoincrementa pasa a direccionar a la siguiente instrucción que estará situada en la primera posición de la página siguiente. Cuando se produce un cambio de página, se deben actualizar los bits PA1 y PA0 del Registro de Estado porque, en caso contrario, cuando se ejecute una instrucción de salto, éste seguirá controlando la página en la que se halla esta instrucción 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 tamaño 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 propósito especial y propósito general. En la figura 9 se presenta la organización de la memoria compuesta por cuatro bancos. Se indican los nombres de los registros específicos en las primeras posiciones del banco 0.

Page 8: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 8

Figura 9: Organización de la memoria de datos 3.3.1 Modos de direccionamiento Para direccionar la memoria de datos que contiene los registros de propósito especifico y los de propósito general, existen dos modos: 1ª. Direccionamiento directo Aquí se utilizan los 7 bits de menos peso del código OP de la instrucción 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 paginación 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 instrucción hace referencia al registro INDF, que ocupa la posición 0 del área de datos (00h del banco 0). Se accede a la posición que apunta el registro FSR, que se halla situado en la posición 04h del banco 0. Los 7 bits de menos peso de FSR seleccionan la posición y su bit de mas peso junto con el bit IRP del Registro de estado <7>, seleccionan el banco. El registro

Page 9: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 9

INDF no se halla implementado físicamente. Cada vez que se le referencia, se utiliza el contenido del registro FSR para direccionar al operando. Cualquier instrucción 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:

4. Líneas de entrada y salida para los controladores de periféricos. A excepción de las 2 patitas de alimentación, 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 periféricos externos. Las líneas de E/S que se adaptan con los periféricos manejando información 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 comunicación o control (canal de comunicaciones síncrono SSP con modo I2C y SPI, canal USART/SCI, control PWM, conversores AD de 10 bits). Las descripción de las patitas y sus funciones están en la hoja técnica, en la figura 11 se muestra esta en forma resumida.

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

Page 10: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 10

Figura 11: Diagrama de pines y funciones 5. Recursos Auxiliares Según las aplicaciones cada modelo de microcontrolador incorpora una diversidad de complementos que refuerzan su potencia y flexibilidad. Entre los recursos más 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 reinicialización cuando el programa

queda bloqueado o “colgado”. d) Conversores AD y DA, para poder recibir y enviar señales analógicas. e) Comparadores analógicos, para verificar los valores de señales analógicas. f) Sistema de protección ante fallos de alimentación. g) Estado de reposo “sleep”, en el que el sistema queda “congelado” y el consumo de energía

se reduce al mínimo.

Page 11: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 11

Programación I Vamos a comenzar a familiarizarnos con las instrucciones de manejo de bytes y bits del microPIC. Instrucción “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 posición de la memoria de datos o registro. 3. Un literal o valor inmediato que se incluye en el código máquina de la propia instrucción.

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 práctica 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 aritméticas 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 señalizador FZ(bit 2 del registro STATUS), que se pone a 1 cuando el resultado de la operación/instrucción es cero. Además en las dos últimas funcionan los señalizadores 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 dígitos BCD. Estos señalizadores o banderas también funcionan con las instrucciones lógicas. 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 instrucción. f(b) = 0?,

Si, salta una instrucción btfss f,b Si el bit “b” de f es 1, salta una instrucción. f(b) = 1?,

Si, salta una instrucción

Page 12: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 12

Instrucciones de Operaciones lógicas 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 posición d = f << 1.

(d puede ser W o f) rrf f,d Corre los bits de f a la derecha una posición 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 dirección k goto k Va a la dirección k retfie Retorna de la subrutina de interrupción 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 operación. 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 utilizarán en la programación del microcontrolador. Registros Especiales Además de las instrucciones vamos a ver los registros especiales que se deben configurar para el trabajo con los PICs. Aquí vamos a realizar una descripción muy breve de los más importantes.

Page 13: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 13

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 misión principal de este registro es controlar el TMR0 (temporizador) y el divisor de frecuencia. Además configura la interrupción externa INT y las resistencias pull-ups del puerto B. La figura 13 muestra la descripción de los bits del registro OPTION.

Page 14: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 14

Figura 13: Registro OPTIONREG (Direcciones 81h, 181h) INTCON (0Bh) La mayor parte de los señalizadores y bits de permiso de las fuentes de interrupción en los PIC16X8XX están implementados sobre los bits de este registro que ocupa la dirección 0Bh del banco 0 y se encuentra duplicado en los demás 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.

Page 15: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 15

Figura 15: Descripción 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 configuración del PORTA y PORTB para utilizarlos como puertos de salida.

Page 16: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 16

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 están etiquetadas algunas direcciones para ; un mejor entendimiento del programa. ;Zona de etiquetas org 0x05 ; inicio del programa, comando que indica al Ensamblador ; la dirección de la memoria de programa donde situará ; la siguiente instrucción. ;Configuración 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 ; Configuración 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

Page 17: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 17

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

Page 18: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 18

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 programación.

Page 19: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 19

Escritura y compilación 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 unívocamente las funciones de base que los PIC están en grado de desarrollar. Cada instrucción esta representada por un código operativo (en inglés operation code o más brevemente opcode ) a 14 bit y es memorizada en una posición de memoria EEPROM. Un ejemplo de opcode en anotación binaria y Hexadecimal viene reportado enseguida.

00 0001 0000 0000B 0100H CLRW

El mismo valor puede ser representado en assembler con la notación 0x100 derivada del lenguaje C o H´0100´. Estos códigos, 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 más comprensibles. La primera convención es aquella de asociar a cada opcode una sigla mnemónica es decir, una sigla que ayude a recordar el significado de la instrucción. Por ejemplo el opcode 0100H corresponde a la instrucción mnemónica 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 mnemónicas y todas las otras formas convencionales con las cuales fue escrito nuestro source en una serie de números (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 operación a efectuar es escribir el source assembler y su memorización en un archivo (file) de texto con extensión .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©).

Figura 26: Flujo de operaciones al programar un PIC

Editor

.ASM .INC

Compilador

.COD .LST .ERR .HEX

Programador

PIC

16F877

Page 20: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 20

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: Creación de un nuevo Project Cuando deseemos setear algunas características del sistema debemos ir a Configure>Settings....

Page 21: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 21

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

Page 22: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 22

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: Creación del .asm Ponemos un nombre a nuestro archivo y lo que a continuación 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.

Page 23: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 23

Figura 29: Adicionando el .asm al Project Una vez creado nuestro programa en el editor (como ejemplo puede tipearse el programa de configuración de los puertos A y B), paso sucesivo es la compilación del source es decir, la transformación en opcode de los códigos mnemónicos o instrucciones assembler en los contenidos.

El compilador assembler que utilizaremos es el MPASMWIN.EXE del entorno MPLAB. Los pasos de la compilación 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é línea se ha cometido este falla. Si nuestro programa es correcto el mensaje sería 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 compilación del source, el compilador assembler genera una serie de archivos con nombre idéntico a la source pero con extensión distinta:

• .HEX es el archivo que contiene los códigos operativos para enviar al PIC a través del programador.

• .LST es un archivo de texto el cual contiene todo el source assembler y la correspondiente traducción en opcode. No es utilizable para la programación del PIC pero es extremadamente útil para verificar los procesos de compilación realizados por el compilador.

• .ERR contiene la lista de los errores de compilación encontrados y el numero de línea 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 compilación. 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 más.

Page 24: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 24

Además de nuestro source con extensión .ASM es necesario entregar al compilador un segundo archivo producido por Microchip con extensión .INC diferente según 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.

Page 25: SISTEMAS EMBEBIDOS - INTRODUCCION

Introducción

José Oliden Martínez 25

Set de instrucciones del PIC16F87X

JOSE OLIDEN MARTINEZ

Sintaxis Descripción Microchip Operación 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 instrucción

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

CALL k Subroutine Call Llama a la subrutina en la dirección 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 dirección 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 operación

OPTION Load Option Register OPTION = W

RETFIE Return from Interrupt Retorna de una subrutina de interrupción

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 = k – W

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)