Académique Documents
Professionnel Documents
Culture Documents
6. Microcontroladores. PIC
Introduccin
Tecnologa Electrnica
Universidad de Oviedo
Microcontroladores
Son circuitos integrados que incorporan todos los bloques funcionales de un Sistema Microprocesador en un nico encapsulado.
6. Microcontroladores. PIC
Necesitan una tensin continua (5V, 3.3V, 2.5V, 1.5V...) y un oscilador para funcionar.
Interpretan (decodifican) combinaciones de bits (instrucciones) y generan seales digitales internas y/o externas. Ejecutan de manera continua una secuencia de instrucciones (programa) que permite controlar un sistema o subsistema electrnico.
2
Tecnologa Electrnica
Universidad de Oviedo
El sistema mnimo est basado en la estructura de von Newman. Sus bloques bsicos son los siguientes:
6. Microcontroladores. PIC
Los tres mdulos estn conectados entre s por medio de los Buses de Comunicacin. Cada bus est formado por un conjunto de conductores por los cuales se transmite la informacin digital.
Tecnologa Electrnica
Universidad de Oviedo
Microprocesadores y microcontroladores
Sistema Microprocesador (varios C.I. en una PCB)
6. Microcontroladores. PIC
Tecnologa Electrnica
Universidad de Oviedo
Microprocesadores y microcontroladores
Tarjeta de Sistema Microprocesador para control 6. Microcontroladores. PIC
C.I. Microcontrolador
Tecnologa Electrnica
Sistemas empotrados
Universidad de Oviedo
Sistemas que incorporan microcontroladores (o microprocesadores) para una tarea especfica pero que no son programables directamente por el usuario Los microcontroladores de 8 bits dominan en la mayora de las aplicaciones 6. Microcontroladores. PIC El microcontrolador es el ncleo del sistema electrnico verstil de bajo coste y reducido tamao que es capaz de detectar las seales de entrada y generar las salidas de un equipo, sistema o instrumento Por su reducido tamao y coste permiten la fcil implantacin de sistemas deinteligencia distribuida a lo largo de sistemas ms complejos Los microcontroladores son los semiconductores ms abundantes de todos en la actualidad.
Tecnologa Electrnica
Sistemas empotrados
Universidad de Oviedo
6. Microcontroladores. PIC
Microcontroladores PIC
Universidad de Oviedo
Arquitectura Harvard: buses internos separados para memoria de datos (8 bits) y de programa (12, 14 16 bits depende de la familia) Microprocesador RISC: juego de instrucciones reducido 6. Microcontroladores. PIC Estructura pipe-line: durante la ejecucin de una instruccin, se est accediendo a la memoria de programa para traer la siguiente instruccin a ejecutar. (salvo un salto o llamada a subpr.) Todas las instrucciones ocupan una posicin de memoria de programa
Todas las instrucciones se ejecutan en un ciclo de instruccin = 4 ciclos de reloj (salvo las instrucciones de salto)
Ortogonalidad de los registros: se opera entre el registro de trabajo W y cualquier otro registro, el resultado puede almacenarse en W
Tecnologa Electrnica
Universidad de Oviedo
ARQUITECTURA HARVARD
6. Microcontroladores. PIC
El tiempo de acceso se mejora respecto a la arquitectura von Neumann donde programa y datos se traen a la CPU usando el mismo bus. La arquitectura Harvard tiene memoria de programa y memoria de datos separadas y se accede a ellas a travs de buses separados.
Tecnologa Electrnica
Universidad de Oviedo
Eficiencia del cdigo: permiten gran compactacin de programas Rapidez de ejecucin: a f de 20MHz 5 millones de instr./seg. Seguridad en acceso: Separa memoria de datos y de programa 6. Microcontroladores. PIC Juego reducido de instrucciones Compatibilidad de pines y cdigo entre dispositivos (familias) Gran variedad de versiones en distintos encapsulados (8 - 84 pines) Herramientas de desarrollo software y hardware abundantes y de bajo coste
Tecnologa Electrnica
10
Familias de PIC
Familia PIC16C5X Encapsulados de 14, 18, 20 y 28 pines Instrucciones de 12 bits Juego de 33 instrucciones Es la familia base de partida de los PIC
Universidad de Oviedo
6. Microcontroladores. PIC
Familia PIC16CXXX/16FXXX Encapsulados desde 18 hasta 68 pines (DIP, SSOP, PLCC, QFP) Instrucciones de 14 bits en Memoria de Programa Juego de 35 instrucciones Gran variedad de mdulos integrados
Tecnologa Electrnica
11
Familia PIC16CXXX/16FXXX
Puertos de Entrada/Salida
Puerto Esclavo Paralelo (PSP) Temporizadores/contadores (TMR0, TMR1, TMR2) 6. Microcontroladores. PIC Captura / Comparacin / PWM (CCP1 y CCP2) Conversin Analgica / Digital (A/D) Transmisor Receptor Asncrono Sncrono Universal (USART) Puerto Serie Sncrono (BSSP MSSP) Memoria EEPROM de datos
Universidad de Oviedo
12
Familia PIC16CXXX/16FXXX
Microcontrolador PIC16F877 (gama media)
8K x 14 368 x 8
Universidad de Oviedo
6. Microcontroladores. PIC
Temporizadores
Tecnologa Electrnica
256 x 8
USART
Puertos de E/S
13
Universidad de Oviedo
Diseo software: el micro sin un programa cargado en su memoria no hace nada, cuando el micro est grabado con un programa eficiente el conjunto empezar a funcionar 6. Microcontroladores. PIC
Diseo del programa y escritura del cdigo fuente en ensamblador o en C Pruebas, verificacin y modificacin del cdigo: Simulacin del programa (puro software) o emulacin dentro del circuito de aplicacin (software y hardware) Grabacin del cdigo mquina en la memoria del microcontrolador
Emulacin o Depuracin sobre PCB Edicin del cdigo, 1 depuracin y Tecnologa Electrnica simulacin
14
Universidad de Oviedo
6. Microcontroladores. PIC
Copyright ATE
Tecnologa Electrnica
15
Organizacin de la memoria
El PIC16F877 dispone de tres tipos de memoria:
Universidad de Oviedo
Consta de 8192 posiciones (8Kwords) y contiene el programa con las instrucciones que gobiernan la aplicacin. Es no voltil.
6. Microcontroladores. PIC
Memoria de programa
Guarda las variables y datos. Est formada por registros de 8 bits. Es voltil.
Es una pequea rea de memoria de datos de lectura y escritura no voltil que permite garantizar que determinada informacin estar siempre disponible al reiniciar el programa.
Tecnologa Electrnica
16
Memoria
Memoria de programa
Universidad de Oviedo
6. Microcontroladores. PIC
Memoria EEPROM
Tecnologa Electrnica
EEPROM
156 X 8
17
Memoria de programa
La informacin contenida en esta memoria se graba previamente mediante un equipo (programador o grabador).
Universidad de Oviedo
Almacena todas las instrucciones del programa en ejecucin, y queda grabada de forma permanente.
6. Microcontroladores. PIC
En el PIC16F877 esta memoria es no voltil del tipo ROM Flash y admite unas 1000 grabaciones. Est organizada en palabras de 14 bits cada una. Todas las instrucciones ocupan una posicin de memoria de programa A la posicin 0 se accede tras un RESET y a la posicin 4 tras una interrupcin.
Tecnologa Electrnica
18
Universidad de Oviedo
Para acceder a la memoria de programa de los PIC16FXXX se utiliza un registro de 13 bits que acta como puntero de la instruccin que se debe ejecutar en el siguiente ciclo de instruccin. Este registro es el Contador de Programa PC que permite direccionar 8K posiciones de memoria de 14 bits (recordar que cada posicin corresponde a una instruccin) por tanto, el PC es capaz de direccionar 8K instrucciones. Resulta fcil saber si un PIC tiene memoria de programa suficiente para una determinada aplicacin.
19
6. Microcontroladores. PIC
Tecnologa Electrnica
Universidad de Oviedo
6. Microcontroladores. PIC
Tecnologa Electrnica
20
Universidad de Oviedo
6. Microcontroladores. PIC
21
Universidad de Oviedo
CONTADOR DE PROGRAMA El contador de programa (PC) es un registro de 13 bits que se descompone en 2 registros: PCH y PCL El byte bajo PC<0:7> se denomina PCL y est disponible en la memoria de datos. Es un registro que se puede leer y escribir directamente desde el programa. El cuasibyte alto PC<12:8> se denomina PCH y no est disponible en la memoria de datos. Este registro no se puede leer ni escribir directamente. La escritura debe realizarse usando como registro intermedio el registro PCLATH que s es un registro de 8 bits accesible en la memoria de datos del microcontrolador. El contenido del registro PCLATH se transfiere a la parte alta del PC en el momento en que se escribe en el registro PCL. Tambin aporta dos bits al PC en los saltos o llamadas a subprogramas.
Tecnologa Electrnica
6. Microcontroladores. PIC
22
Universidad de Oviedo
La pila
La pila permite almacenar las direcciones a donde debe retornar el programa cuando se finaliza una llamada a una subrutina o cuando se finaliza la ejecucin de una rutina de interrupcin. Los microcontroladores de la familia PIC16 tienen una pila de 8 niveles x 13 bits, que por tanto permite como mximo 8 llamadas a subrutinas (CALLs) o ejecuciones de rutinas de interrupcin (salto a 0004h). El espacio de memoria para la pila no forma parte de la memoria de programa ni de la memoria de datos que tiene el microcontrolador. Es un espacio de memoria totalmente independiente. El puntero de pila no se puede leer ni escribir. La pila es gestionada por el hardware.
Tecnologa Electrnica
6. Microcontroladores. PIC
23
Universidad de Oviedo
6. Microcontroladores. PIC
La memoria de datos est distribuida en 4 posibles bancos de 128 bytes cada uno. Por tanto, la mxima cantidad de memoria disponible en los microcontroladores PIC16 es de 512 bytes. No obstante, no estn implementadas todas las posiciones de memoria en todos los bancos. Por ejemplo, un PIC16F876 slo tiene implementadas 368 posiciones de memoria de datos. A cada posicin de memoria se le denomina registro. La memoria de datos se organiza en bancos de 128 bytes porque cuando se indica una direccin de operando fuente, slo se pueden incluir 7 bits en la codificacin: 27=128 bytes
Tecnologa Electrnica
24
Universidad de Oviedo
Registros de funciones especiales: Son los primeros registros. Cada uno de ellos cumple un propsito especial en el control del PIC. 6. Microcontroladores. PIC Registros de propsito general: Se pueden usar para guardar datos temporales. El PIC16F877 dispone de 368. Cuenta con cuatro bancos de memoria: Bancos 0, 1, 2 y 3. Los registros de funciones especiales aparecen de la direccin 00h a 1Fh del Banco 0, de 80h a 9Fh del Banco 1, de 100h a 10F en el Banco 2 y de 180h a 18Fh del Banco 3. Algunos son accesibles desde dos o ms bancos. Los registros de propsito general ocupan 368 posiciones de memoria.
Tecnologa Electrnica
25
STATUS
La memoria de datos
STATUS STATUS PORTB
Universidad de Oviedo
STATUS
PORTB
6. Microcontroladores. PIC
Tecnologa Electrnica
26
Memoria de datos
Universidad de Oviedo
MODOS DE DIRECCIONAMIENTO
La memoria de datos est distribuida en 4 posibles bancos de 128 bytes cada uno. Existen 2 modos de direccionamiento para acceder a cualquiera de las posiciones de la memoria de datos: Direccionamiento directo Direccionamiento indirecto Direccionamiento directo: La posicin de memoria con la que se trabaja viene directamente definida en el cdigo de la instruccin. Direccionamiento indirecto: La posicin de memoria con la que se trabaja viene definida por el contenido del registro FSR (Posicin 04h, 84h, 104h o 184h), es decir, el registro FSR acta como puntero de la posicin de memoria con la que se pretende operar.
6. Microcontroladores. PIC
Tecnologa Electrnica
27
Universidad de Oviedo
DIRECCIONAMIENTO DIRECTO
6. Microcontroladores. PIC
BANCO 0 1 RP1:RP0 00 01
2
3
10
11
Tecnologa Electrnica
28
Direccionamiento indirecto
1) 2)
Universidad de Oviedo
SE LEE EL REGISTRO CONTENIDO EN EL CODIGO DE LA INSTRUCCIN. SI EL REGISTRO ES DISTINTO DEL CORRESPONDIENTE A INDF (00h,80h,100h 180h) LA INSTRUCCIN SE EJECUTA SOBRE EL REGISTRO INDICADO EN LA INSTRUCCIN COMPLEMENTADO CON LOS BITS RP1:RP0 DEL REGISTRO STATUS (DIRECCIONAMIENTO DIRECTO) SI EL REGISTRO CORRESPONDE A LA POSICION DE INDF (00h,80h,100h 180h), LA INSTRUCCIN SE EJECUTA SOBRE EL REGISTRO INDICADO EN EL REGISTRO FSR COMPLEMENTADO CON EL BIT IRP DEL REGISTRO STATUS
6. Microcontroladores. PIC
3)
Sencillo ejemplo de direccionamiento indirecto donde se limpian las posiciones de memoria de datos comprendidas entre la posicin 20h y la 2Fh (ambas incluidas)
Tecnologa Electrnica
NEXT
BCF STATUS, IRP MOVLW 0x20 MOVWF FSR CLRF INDF INCF FSR,F BTFSS FSR,4 GOTO NEXT :
CONTINUE
; dir. Indirecto, bancos 0/1 ; Inicializa puntero a RAM ; ; limpia registro INDF ; Inc puntero ; Todo limpio? ; NO, limpia siguiente ; ; SI, continua
29
Registro de estado
Universidad de Oviedo
6. Microcontroladores. PIC
Tecnologa Electrnica
30
Registro option
Universidad de Oviedo
6. Microcontroladores. PIC
Tecnologa Electrnica
31
Registro intcon
Universidad de Oviedo
6. Microcontroladores. PIC
Tecnologa Electrnica
32
PIE1
Universidad de Oviedo
6. Microcontroladores. PIC
Tecnologa Electrnica
33
PIR1
Universidad de Oviedo
6. Microcontroladores. PIC
Tecnologa Electrnica
34
Universidad de Oviedo
6. Microcontroladores. PIC
Tecnologa Electrnica
35
Universidad de Oviedo
6. Microcontroladores. PIC
Resets y Watchdog: seguridad en el arranque, reinicio y autovigilancia Sleep: modo de bajo consumo para aplicaciones con bateras Interrupciones: lgica de mscaras y eventos y posicin comn del PTI Proteccin de cdigo: para evitar la copia de programas grabados ICSP e ICSP LVP: (In-Circuit Serial Programming) programacin en serie ya en la tarjeta de la aplicacin y a baja tensin (Low Voltage Program) Modo depuracin ICD: (In-Circuit Debugger) modo especial que permite depurar el cdigo pero ya con el MCU conectado con el resto del circuito.
Tecnologa Electrnica
36
PALABRA DE CONFIGURACIN
Todos los microcontroladores PIC tienen una posicin de memoria denominada palabra de configuracin en la que cada bit tiene un significado y configura las caractersticas especiales. Los bits de configuracin estn fuera del espacio de memoria de programa de usuario por lo que slo son accesibles durante la programacin del micro y no durante la ejecucin de un programa. Las herramientas que ofrece MICROCHIP nos dan dos alternativas para fijar los valores de estos bits de configuracin: a travs del men Configure > Configuration_Bits del entorno MPLAB mediante la inclusin de una directiva de configuracin en el cdigo del programa.
Universidad de Oviedo
6. Microcontroladores. PIC
Tecnologa Electrnica
37
OSCILADOR
Universidad de Oviedo
6. Microcontroladores. PIC
Los PIC16F87X pueden funcionar con 4 modos distintos de oscilador. El usuario puede programar dos bits de configuracin para seleccionar uno de estos 4 modos: LP Low Power Crystal (cristal de cuarzo resonador cermico hasta 200KHz) XT Crystal/Resonator (cristal de cuarzo resonador cermico hasta 4MHz) HS High Speed Crystal/Resonator (cristal de cuarzo entre 4MHz y 20MHz) RC Resistor/Capacitor (red RC externa hasta 4MHz)
Tecnologa Electrnica
38
CICLO DE INSTRUCCIN
Universidad de Oviedo
6. Microcontroladores. PIC
Un ciclo de instruccin es el tiempo que se tarda en ejecutar una instruccin (salvo saltos) en el microcontrolador. En los PIC16, un ciclo de instruccin dura 4 ciclos de reloj (Q1, Q2, Q3, Q4). En una primera etapa, la instruccin es trada a la CPU. Esto lleva un ciclo de instruccin. En la segunda etapa se ejecuta la instruccin. Esto lleva otro. No obstante, debido al solapamiento (pipelining) de traer la instruccin actual y ejecucin de la instruccin previa, una instruccin se trae y otra se ejecuta cada ciclo de instruccin. Se produce un ciclo de instruccin de retardo si el resultado de ejecutar la instruccin anterior modifica el contenido del Contador de Programa (Ej: GOTO CALL).
Tecnologa Electrnica
39
MODO SLEEP
Universidad de Oviedo
6. Microcontroladores. PIC
Los microcontroladores PIC pueden trabajar en dos modos distintos: Modo Normal: ejecutando las instrucciones Modo Dormido o de bajo consumo: se suspende la ejecucin El consumo de un microcontrolador depende de su frecuencia de trabajo, a ms frecuencia ms consumo. El modo dormido supone un ahorro de consumo porque el oscilador del microcontrolador deja de oscilar, por tanto no se ejecutan instrucciones. En este modo dormido se entra por software cuando se ejecuta la instruccin SLEEP
Tecnologa Electrnica
40
MODO SLEEP
Universidad de Oviedo
Al entrar en modo dormido, el bit PD (STATUS<3>) se pone a 0 y el bit TO (STATUS<4>) se pone a 1, estos bits indican que se entr en ese modo para conocimiento posterior en tiempo de ejecucin. A continuacin el oscilador deja de oscilar. Los pines asociados a Puertos de Entrada/Salida mantienen el valor previo a la ejecucin de la instruccin SLEEP. Si est habilitado el WATCHDOG (en la palabra de configuracin), su temporizador se pondr a cero al ejecutar la instruccin SLEEP, pero se mantendr corriendo y podra desbordar ya que el Watchdog tiene un oscilador RC independiente del propio del microcontrolador. El microcontrolador puede salir del modo de bajo consumo por alguno de los siguientes motivos: 1. Un RESET externo provocado en el pin MCLR. 2. Desbordamiento del WATCHDOG. 3. Interrupcin provocada por algn evento de los perifricos que pueden generarlos sin la presencia del oscilador.
6. Microcontroladores. PIC
Tecnologa Electrnica
41
Universidad de Oviedo
6. Microcontroladores. PIC
Power-on Reset (POR) -> Reset de Alimentacin del Microcontrolador MCLR Reset durante funcionamiento normal -> Activacin del pin de Reset en modo normal MCLR Reset durante SLEEP -> Activacin del pin de Reset en modo de bajo consumo WDT Reset (durante funcionamiento normal) -> Desbordamiento del Watchdog en modo normal WDT Wake-up (durante SLEEP) -> Desbordamiento del Watchdog en modo de bajo consumo Brown-out Reset (BOR) -> Reset por cada temporal de la alimentacin La mayora de los registros del mapa de memoria de datos no se ven afectados por ningn tipo de RESET. No obstante, hay muchos otros registros que son reseteados a un valor determinado si se produce un POR, un MCLR Reset WDT Reset durante funcionamiento normal, un MCLR Reset durante SLEEP un BOR.
Tecnologa Electrnica
42
Universidad de Oviedo
El temporizador Watchdog es un temporizador existente en el microcontrolador basado en un oscilador RC interno, independiente del oscilador del microcontrolador Este oscilador RC interno no tiene nada que ver con un posible oscilador RC externo conectado a la patilla OSC1/CLKI. Si est activo, durante el funcionamiento normal del microcontrolador, un desbordamiento ( time-out) del Watchdog provoca un Reset del microcontrolador (Watchdog Timer Reset). Para que no se desborde, cada cierto tiempo y antes de que llegue al lmite, se debe ejecutar una instruccin CLRWDT que limpia el Watchdog y le hace comenzar una nueva cuenta desde cero.
6. Microcontroladores. PIC
Si el dispositivo est en modo dormido, un desbordamiento del watchdog provoca que el micro despierte y continue con el funcionamiento normal (Watchdog Timer Wake-Up) con la instruccin que sigue a SLEEP.
El bit TO del registro STATUS se pone a cero tras un desbordamiento del Watchdog.
Tecnologa Electrnica
43
Universidad de Oviedo
Un preescaler es un divisor de frecuencia que puede hacer que se cuente antes el nmero de desbordamientos del WDT y hacer as que el tiempo que tarda en resetear al microcontrolador sea ms largo. Ese divisor de frecuencia est compartido con el TMR0 y por tanto, si se usa para el TMR0 no se puede usar para el WATCHDOG y viceversa. El divisor de frecuencia del WATCHDOG viene definido por unos bits del registro OPTION: PSA: a quin se le asigna el divisor. PS2-PS1-PS0: cul es el factor de divisin de la frecuencia:
000: 001: 010: 011: 1:2 para TMR0 / 1:1 para WDT. 1:4 para TMR0/ 1:2 para WDT. 1:8 para TMR0 / 1:4 para WDT. 1:16 para TMR0 / 1:8 para WDT. 100: 101: 110: 111: 1:32 para TMR0 / 1:16 para WDT. 1:64 para TMR0 / 1:32 para WDT. 1:128 para TMR0 / 1:64 para WDT. 1:256 para TMR0 / 1:128 para WDT.
6. Microcontroladores. PIC
Tecnologa Electrnica
44
INTERRUPCIONES
Universidad de Oviedo
6. Microcontroladores. PIC
Los PIC16F87XA tienen hasta 15 posibles fuentes de interrupcin, entre otras: Escritura o lectura del puerto esclavo paralelo (PSPIF) Desbordamiento del TMR0 Desbordamiento del TMR1 Desbordamiento del TMR2 Captura de un mdulo CCP (CCPxIF). Comparacion del modulo CCP en modo disparo de evento especial. Mdulo SSP al detectar un bit de START STOP Mdulo SSP al transmitir o recibir en modo esclavo Mdulo USART al RX o TX (modo sncrono) (RCIF TXIF). Al finalizar una conversin A/D Al completar una escritura en EEPROM (EEIF). Al modificarse el estado de salida de alguno de los comparadores (CMIF). Interrupcin externa por flanco en el pin RB0/INT (INTF). Interrupcin por cambio en los valores de los pines RB4 a RB7 del PORTB (RBIF).
Tecnologa Electrnica
45
INTERRUPCIONES
Universidad de Oviedo
Se dispone de un bit de habilitacin de interrupciones global GIE (INTCON<7>) que permite deshabilitar todas las interrupciones (si est a 0). Cuando el bit GIE est a 1, si una interrupcin tiene su flag a 1 y sus bits de habilitacin a 1, el microcontrolador terminar la instruccin que se est ejecutando en ese instante y, a continuacin, pasar a ejecutar la posicin 4 de la memoria de programa que corresponde a la posicin del vector de interrupcin y que es el mismo para todas las interrupciones. Las fuentes de interrupcin pueden deshabilitarse individualmente utilizando sus mscaras o bits de habilitacin (bits acabados en E). El bit GIE se pone a 0 tras un RESET. Por tanto, al principio las interrupciones estn desactivadas. Al producirse el salto a la rutina o programa de tratamiento de la interrupcin, el bit GIE se pone a 0 deshabilitando el resto de interrupciones, salvo que por software se vuelva a poner a 1 ese bit GIE. El retorno del programa de tratamiento de interrupcin (RETFIE) coloca en la mscara global GIE el valor 1, adems de recuperar el PC de la pila hardware. Los bits de flags pueden ponerse a 1 independientemente de que sus bits de habilitacin estn o no a 1, ya que indican eventos.
Tecnologa Electrnica
6. Microcontroladores. PIC
46
Lgica de interrupciones
Universidad de Oviedo
6. Microcontroladores. PIC
Tecnologa Electrnica
47
SALVANDO EL CONTEXTO
Universidad de Oviedo
Cuando se produce una interrupcin slo se guarda en la pila hardware interna el valor del PC. Normalmente, se debern salvar algunos otros registros para no perder su contenido al regresar al programa principal y tras haber pasado por la rutina de interrupcin, mxime cuando se ignora cundo se va a producir el salto a ese programa de tratamiento de la interrupcin (PTI) desde el programa principal. Estos registros son al menos el W y el STATUS
6. Microcontroladores. PIC
Tambin puede resultar interesante guardar el registro PCLATH, especialmente si en la rutina de interrupcin se cambia de pgina de memoria de programa.
Como no hay pila en RAM, hay que reservar posiciones de memoria en RAM que habitualmente denominaremos W_TEMP, STATUS_TEMP y PCLATH_TEMP donde se guardan los valores de W, STATUS y PCLATH al entrar en la rutina de interrupcin para luego recuperarlos al salir.
Tecnologa Electrnica
48
Universidad de Oviedo
Siempre se debe hacer as o de una manera similar (si se guardan ms registros) al principio de un PTI
;Para salvar el contexto no podemos emplear la instruccin MOVF ;ya que afecta al registro STATUS (al bit Z), para evitarlo ;empleamos la instruccin SWAPF movwf W_tmp swapf STATUS,W bcf STATUS,RP0 bcf STATUS,RP1 movwf STATUS_tmp movf PCLATH,W movwf PCLATH_tmp ;Salvamos el registro W ; y el registro STATUS "girado" en W ;Aseguramos el paso al banco 0 ;poniendo a 0 los dos bits de seleccin de ;banco ;Guardamos en el banco 0 STATUS girado ;Salvamos tambin PCLATH en W ;y ahora en una posicin auxiliar del ;banco 0
6. Microcontroladores. PIC
Tecnologa Electrnica
49
Universidad de Oviedo
;Para recuperar los registros salvados no podemos usar MOVF ;porque modifica a STATUS, para evitarlo usamos la instruccin ;SWAPF movf PCLATH_tmp,W movwf PCLATH swapf STATUS_tmp,W ;Recuperamos PCLATH ;directamente ;Recuperamos el registro STATUS con ;un SWAPF ;ahora estamos en el banco de partida ;Recuperamos tambin el W con dos ;SWAPF ;para evitar la instruccin MOVF
6. Microcontroladores. PIC
retfie
Tecnologa Electrnica
50
Universidad de Oviedo
Programacin en ensamblador
6. Microcontroladores. PIC
Copyright ATE
Tecnologa Electrnica
51
Ensamblador
Universidad de Oviedo
El lenguaje ensamblador expresa las instrucciones de una forma ms natural al hombre que el lenguaje mquina (0 y 1) a la vez que muy cercana al microcontrolador, ya que cada una de esas instrucciones se corresponde con otra en cdigo mquina. El lenguaje ensamblador trabaja con nemnicos, que son grupos de caracteres alfanumricos que simbolizan las rdenes o tareas a realizar. La traduccin de los nemnicos a cdigo mquina la realiza un programa ensamblador: MPASM. El programa escrito en lenguaje ensamblador se denomina cdigo fuente (*.asm). El programa ensamblador proporciona a partir de este fichero el correspondiente cdigo mquina, que suele tener la extensin *.hex.
6. Microcontroladores. PIC
Tecnologa Electrnica
52
Cdigo fuente
Universidad de Oviedo
6. Microcontroladores. PIC
Est compuesto por una sucesin de lneas de texto. Cada lnea puede estructurarse en hasta cuatro campos o columnas separados por uno o ms espacios o tabulaciones entre s. Campo de etiquetas. Expresiones alfanumricas escogidas por el usuario para identificar una determinada lnea. Todas las etiquetas tienen asignado el valor de la posicin de memoria en la que se encuentra el cdigo al que acompaan. Campo de cdigo. Corresponde al nemnico de una instruccin, de una directiva o de una llamada a macro. Campo de operandos y datos. Contiene los operandos que precisa el nemnico utilizado. Segn el cdigo puede haber dos, uno o ningn operando. Campo de comentarios. Dentro de una lnea, todo lo que se encuentre a continuacin de un punto y coma (;) ser ignorado por el programa ensamblador y considerado como comentario.
Tecnologa Electrnica
53
Campo de cdigo
Puede estar ocupado por:
Universidad de Oviedo
Instrucciones: son aquellos nemnicos que son convertidos por el ensamblador en cdigo mquina que puede ejecutar el microcontrolador. Cada nemnico se convierte en una palabra en la memoria de programa.
6. Microcontroladores. PIC
Directivas: Pseudoinstrucciones que controlan el proceso de ensamblado del programa, pero no son parte del cdigo. Son indicaciones al programa ensamblador de cmo tiene que generar el cdigo mquina.
Macros: Secuencia de nemnicos que pueden insertarse en el cdigo fuente del ensamblador de una manera abreviada mediante una simple llamada.
Tecnologa Electrnica
54
Universidad de Oviedo
Decimal
.<valor>
0x<valor> . o<valor> b<valor>
6. Microcontroladores. PIC
Hexadecimal Octal
Binario
ASCII Cadena
a<carcter> <cadena>
<carcter>
Las constantes hexadecimales que empiecen por una letra deben ir precedidas de un cero para no confundirlas con una etiqueta.
Tecnologa Electrnica
55
Juego de instrucciones
Universidad de Oviedo
6. Microcontroladores. PIC
Instrucciones de CARGA
NEMNICO DESCRIPCIN FLAGS AFECTADOS
clrf clrw
00 (f) 00 (W)
Z Z
movf
movlw
f,d
k
(f) (destino)
k (W)
Z
Ninguno
movwf
(W) (f)
Ninguno 56
Tecnologa Electrnica
Juego de instrucciones
Instrucciones de BIT
NEMNICO DESCRIPCIN
Universidad de Oviedo
FLAGS AFECTADOS
f,b f,b
Pone a 0 el bit b del registro f Pone a 1 el bit b del registro f Instrucciones ARITMTICAS
DESCRIPCIN
Ninguno Ninguno
FLAGS AFECTADOS
NEMNICO
(W) + k (W) (W) + (f) (destino) (f) - 1 (destino) (f) + 1 (destino) K - (W) (W) (f) - (W) (destino)
C DC - Z C DC - Z Z Z C DC - Z C DC - Z
Tecnologa Electrnica
57
Juego de instrucciones
Instrucciones LGICAS
NEMNICO DESCRIPCIN
Universidad de Oviedo
FLAGS AFECTADOS
andlw andwf 6. Microcontroladores. PIC comf iorlw iorwf rlf rrf swap xorlw xorwf
(W) AND k (W) (W) AND (f) (destino) (/f) (destino) (W) OR k (W) (W) OR (f) (destino) Rota (f) a izquierda (destino) Rota (f) a derecha (destino) Intercambia nibbles (f) (destino) (W) XOR k (W) (W) XOR (f) (destino)
Z Z Z Z Z C C Ninguno Z Z
Tecnologa Electrnica
58
Juego de instrucciones
Instrucciones de SALTO
6. Microcontroladores. PIC
NEMNICO DESCRIPCIN
Universidad de Oviedo
FLAGS AFECTADOS
Salta si el bit b de f es 0 Salta si el bit b de f es 1 (f) - 1 (destino) y salta si es 0 (f) + 1 (destino) y salta si es 0 Salta a la direccin k
Tecnologa Electrnica
59
Juego de instrucciones
Universidad de Oviedo
k k
Llamada a subrutina Retorno de una interrupcin Retorno con un literal en (W) Retorno de una subrutina
Tecnologa Electrnica
60
Juego de instrucciones
Universidad de Oviedo
clrwdt
nop sleep
/TO - /PD
Ninguno /TO - /PD
Tecnologa Electrnica
61
Directivas
Universidad de Oviedo
Controlan el proceso de ensamblado del programa, pero no son parte del mismo (tambin se conocen como pseudoinstrucciones). Hay ms de 50 directivas reconocidas por MPASM. A continuacin veremos algunas de las ms utilizadas.
6. Microcontroladores. PIC
END Es la nica directiva obligatoria. Indica al ensamblador dnde debe detener el proceso. Debe colocarse en la ltima lnea del programa. <etiqueta> EQU <expresin> El valor <expresin> es asignado a <etiqueta>. Estas directivas se suelen colocar al principio del programa y habitualmente se usan para definir constantes y direcciones de memoria.
[<etiqueta>] ORG <expresin> Las instrucciones del cdigo fuente que siguen a esta directiva se ensamblan a partir de la posicin indicada por <expresin>.
Tecnologa Electrnica
62
Directivas
LIST P=16F877 Indica el tipo de microcontrolador utilizado.
Universidad de Oviedo
__CONFIG <expresin> [& <expresin> & ... & <expresin>] Permite indicar la configuracin elegida para la grabacin del PIC. Ejemplo: __CONFIG _CP_OFF & _WDT_OFF & _XT_OSC
6. Microcontroladores. PIC
INCLUDE <p16F877.inc> o INCLUDE p16F877.inc Incluye en el programa un fichero donde se definen las etiquetas con las que se nombra a los diferentes registros y sus bits. Este fichero se encuentra en el directorio principal del programa ensamblador. Puede usarse esta directiva para incluir cualquier otro fichero (El fichero de inclusin no puede terminar con una directiva END).
Tecnologa Electrnica
63
Universidad de Oviedo
6. Microcontroladores. PIC
Luca Marcos
Tecnologa Electrnica
64
Universidad de Oviedo
6. Microcontroladores. PIC
PORTA PORTB PORTC PORTD PORTE TMR0 STATUS (en los dos bancos) INTCON (en los dos bancos) PCLATH (en los dos bancos)
Banco 1:
65
Inicializacin
Universidad de Oviedo
La secuencia a seguir en el inicio es: LIST P=16F877 ;Tipo de procesador include P16F877.INC ;incluye fichero de smbolos y etiquetas
6. Microcontroladores. PIC
;se pueden incluir otros ficheros ;aqu reservamos las posiciones de memoria de datos que necesitemos a partir ;de la posicin 0x20 org 0x00 ;inicio en el vector de Reset (posicin 0 de la ;memoria de programa) goto Inicio ;va a la primera instruccin del programa ; si se van a producir interrupciones, debemos tener en cuenta que el vector de ; interrupcin se encuentra en la posicin 4 de la memoria de programa, por lo ; que habr que aadir: org 0x04 ; vector de interrupcin goto trata_interrupcin ; va al programa de tratamiento de la ;interrupcin
Tecnologa Electrnica
66
Universidad de Oviedo
Los puertos (que estn en el banco 0) tienen unos registros asociados, TRIS (en el banco 1) que permiten configurar cada una de sus patillas como entrada o salida. Despus del RESET de encendido, estos registros TRIS tienen todos sus bits a 1 (los puertos correspondientes estn configurados como entradas).
6. Microcontroladores. PIC
Ejemplo: Queremos que los bits del puerto A <7:5> sean salidas y los bits <4:0> sean entradas bsf movlw movwf STATUS,RP0 b'00011111' TRISA ;pasamos al banco 1 ;configuramos PORTA<7:5> como ;salidas y PORTA<4:0> como entradas,
Tecnologa Electrnica
67
Universidad de Oviedo
Todas las operaciones con literales se realizan con el registro W. Para cargar, sumar, etc. un registro F con un literal se debe hacer en dos pasos: 1- Se realiza la operacin con W 2- Se carga W en el registro F.
6. Microcontroladores. PIC
Ejemplo 1: cargar el registro OPTION_REG con 0000 0110. movlw b'00000110' ;cargamos el registro option_reg... movwf OPTION_REG ;...con el valor indicado Ejemplo 2: sumar dos valores inmediatos (p.e. los decimales 12 y 7) movlw 0x0C ;carga el 1er. sumando en W addlw 0x07 ;le sumamos el 2 sumando movwf Resultado ;guardamos el resultado ;antes hemos reservado una posicin de memoria RAM para el resultado, a partir de la 0X20
(banco 0 en este caso) con la directiva EQU o bien con la directiva CBLOK. ; con EQU: Resultado EQU 0x20 ;con CBLOK:
CBLOK 0x20 Resultado ENDC
Tecnologa Electrnica
68
Universidad de Oviedo
6. Microcontroladores. PIC
MOVF ANDLW
REG, W 0xF0
;pasamos el contenido del registro a W ;hacemos la AND con F0 para obtener la parte alta
Otra forma:
MOVLW ANDWF 0xF0 REG, 0 ;cargamos W con el literal F0 ;hacemos la AND entre W y REG y dejamos el
;resultado en W
Tecnologa Electrnica
69
Universidad de Oviedo
Se utiliza la instruccin XORWF, por lo que se hace la XOR entre W y uno de los registros. Ejemplo: saber si el registro CONTADOR que es un registro que se inicializa a 0 y se va incrementando es igual al registro FIN, en cuyo caso se termina el programa; si no, incrementamos CONTADOR.
6. Microcontroladores. PIC
MOVF CONTADOR,W ; cargamos W con el contenido de CONTADOR XORWF FIN ; hacemos la XOR entre W y FIN BTFSS STATUS,Z ; miramos si el resultado ha sido cero; INCF CONTADOR ; si no, se incrementa CONTADOR GOTO END ; si s, salta la siguiente instruccin y va a GOTO END Otra opcin es restar ambos registros utilizando el registro W; en este ejemplo slo nos interesa saber si son o no son iguales. MOVF CONTADOR, W ;cargamos W con el valor de CONTADOR SUBWF FIN, W ; restamos FIN-CONTADOR y lo dejamos en W BTFSC STATUS,Z ; si Z=0, salta ya que no son iguales GOTO Iguales ; s, son iguales GOTO NoIguales ; no son iguales En este caso hemos utilizado la instruccin BTFSC.
Si la comparacin es entre un registro y un literal, se cargara W con el contenido del registro y se hara la XOR entre W y el literal con la instruccin XORLW
Tecnologa Electrnica
70
Interrupciones
Universidad de Oviedo
En las interrupciones el proceso que se sigue es el que muestra la figura. Cuando se origina una interrupcin el bit GIE (habilitacin global de interrupciones) del registro INTCON es puesto a 0, lo que impide cualquier otra interrupcin. El bit de flag correspondiente se pone a 1 y debe borrarse por
6. Microcontroladores. PIC
software.
La habilitacin de una determinada interrupcin exige poner a 1 el bit GIE y el correspondiente bit de habilitacin de la interrupcin particular; ambos se encuentran en el registro INTCON. La instruccin RETFIE vuelve a poner GIE a 1. El registro INTCON est en el banco 0 y el 1 Tecnologa Electrnica
71
Interrupciones
Universidad de Oviedo
Hay que tener en cuenta que al principio de la interrupcin hay que salvaguardar los registros W y STATUS, a veces tambin el PCLATH. movwf W_tmp swapf STATUS,W bcf STATUS,RP0 bcf STATUS,RP1 movwf STATUS_tmp movf PCLATH,W movwf PCLATH_tmp ;Salvamos el registro W ; y el registro STATUS "girado" en W ;Aseguramos el paso al banco 0 ;poniendo a 0 los dos bits de seleccin de banco ;Guardamos en el banco 0 STATUS girado ;Salvamos tambin PCLATH en W ;y ahora en una posicin auxiliar del banco 0
PTI
6. Microcontroladores. PIC
movf PCLATH_tmp,W movwf PCLATH swapf STATUS_tmp,W movwf STATUS swapf W_tmp,F swapf W_tmp,W retfie
Tecnologa Electrnica
72
TMR0
Universidad de Oviedo
6. Microcontroladores. PIC
Es un registro que se encuentra en el banco 0 de la RAM. Es un temporizador que se incrementa con cada pulso del oscilador interno o con un reloj externo que se selecciona mediante el bit T0CS del registro OPTION_REG que se encuentra en el banco 1: T0CS =0 para el reloj interno. Tambin tiene la posibilidad de aplicarle un divisor de frecuencia (prescaler) de 8 bits que comparte con el WDT. El bit PSA (OPTION_REG <3>) a 0 le asigna el prescaler al TMR0 y los bits PS2-PS0 seleccionan por cunto se divide la frecuencia. Se puede leer y escribir en TMR0 y cuando se desborda puede producir una interrupcin. Ejemplo: Se pretende que cada 200ms. se produzca un determinado evento por interrupcin del TMR0 utilizando el oscilador interno de 4 MHz y sabiendo que cada ciclo de instruccin dura 4 ciclos del oscilador. Como un solo desbordamiento del TMR0 slo permite una temporizacin de aproximadamente 65ms tendremos que hacer que se desborde varias veces. Vamos a hacer que se desborde 20 veces para lo que tenemos que precargar el TMR0 para que se desborde a los 10ms
temp TMR0 = [(256 carga) PS + 2] Tinstr Elegimos PS=128 Carga = 180
Hay que cargar el reg. OPTION_REG con el binario: 00000110 Para permitir las interrupciones el registro INTCON debe cargarse con el binario 10100000. (Mirar la configuracin de ambos registros)
Tecnologa Electrnica
73
Interrupcin RBI
Universidad de Oviedo
Interrupcin RBI es una interrupcin producida por el cambio de estado en alguna de las lneas RB4, RB5, RB6 o RB7. Hay que configurar esas lneas como entradas y cargar el INTCON para permitir la interrupcin. Ejemplo: Vamos a utilizar la interrupcin RBI para encender unos LEDs conectados a los bits RB0, RB1, RB2 y RB3
6. Microcontroladores. PIC
BSF STATUS, RP0 ;pasamos al banco 1 para configurar el puerto B MOVLW 0XF0 ;RB<4,7> entradas, RB<0,3> salidas MOVWF TRISB BCF STATUS, RP0 ;volvemos al banco 0 CLRF PORTB ;para inicializar el puerto (LEDs apagados) MOVLW b10001000 ;habilitamos las interrupciones generales MOVWF INTCON ;y la particular poniendo GIE y RBIE a 1 Como en todas las interrupciones al principio del programa hay que poner: ORG 0x04 GOTO PTI Al principio del PTI hay que salvar los registros W y STATUS y al final del mismo hay que recuperarlos y borrar el flag RBIF
Tecnologa Electrnica
74
Universidad de Oviedo
;Escribir un programa que sume dos valores inmediatos (p.e. los decimales 12 y 7) List include p=16F877 P16F877.INC equ 0x00 Inicio 0x05 0x20 ;tipo de procesador ;incluye fichero de smbolos y
6. Microcontroladores. PIC
Resultado org goto org Inicio Stop movlw addlw movwf nop end
;interrupcin ;carga el 1er. sumando en W ;le sumamos el 2 sumando ;guardamos el resultado ;ponemos punto de parada ;fin del programa fuente
Tecnologa Electrnica
75