Tema: Memoria de PROGRAMAS Introducción Como es habitual en todos los µprocesadores y µcontroladores el programa que se ejecutará, se encuentra grabado en una memoria no volátil, estando este programa formado por diferentes instrucciones del repertorio del micro. A diferencia de otros microcontroladores en los cuales una instrucción se puede componer de varios códigos de operación, y ser diferentes en tamaño, en los PIC las instrucciones solo poseen un único código de operación (CO), siendo el ancho de las mismas único. 2 El tipo de memoria que poseen los microcontroladores 16F87X es tipo FLASH, pudiendo tener una capacidad de 4K u 8K palabras de 14 bits Como se puede deducir el ancho de las instrucciones de los PIC 16F87X es de 14 bits. El orden de ejecución de las instrucciones es secuencial, comenzando desde la dirección mas baja. El formato de las diferentes instrucciones es el mostrado en la siguiente transparencia . 3 Formato de las instrucciones 4 El elemento que almacena la dirección de próxima instrucción a ejecutar es el CONTADOR DE PROGRAMAS (PC) Todos los microcontroladores PIC de la gama media poseen un contador de programas de 13 bits, pudiendo direccionar 8Kx14 bits. Los PIC 16F876/7 poseen una memoria FLASH de 8Kx14 bits, mientras que los PIC 16F873/4 poseen una memoria de 4Kx14 bits. DPE DESARROLLO DE PROYECTOS 5 Organización de la memoria en los PIC 16F77/876 El contador de Programas El contador de programas PC se forma por la unión de 2 registros de 8 bits cada uno llamados PCH y PCL. PCL se encuentra en la dirección 02h (banco 0) y replicado en las direcciones 82h (banco 1), 102h (banco 2) y 182h (banco 3). Los cinco bits de mayor peso (PC 12:8), están alojados en el registro PCH, sobre este registro no se puede leer ni escribir, pero se puede acceder indirectamente a ellos DPE DESARROLLO DE PROYECTOS 7 mediante los 5 bits de menor peso del PCLATCH, implementado en la dirección 0Ah de RAM y replicado en las direcciones 8Ah, 10Ah y 18Ah. ¾ En las instrucciones de ruptura de secuencia (GOTO y CALL), los 11 bits de menor peso corresponden al código de operación, mientras que los 2 bits de mayor peso, los suministran respectivamente los bits 4 y 3 del PCLATCH, que están direccionando una de las 4 posibles páginas de la memoria de programas. Así pues es labor del programador posicionar los bits 4 y 3 del PCLATCH si se desea salir de la página actual. Recuérdese que cada página consta de 2k. El contador de Programas Ejemplo de llamada a una subrutina que se encuentra en la página 1 desde la página 0, este ejemplo asume que el PCLATCH se salva y se restaura por el programa de atención a la interrupción (si se usan las interrupciones) ORG 0x500 BCF PCLATH,4 BSF PCLATH,3 ;Selecciona pagina 1 (800h-FFFh) CALL SUB1_P1 ;llamada a la subrutina en ;pagina 1 (800h-FFFh) DPE DESARROLLO DE PROYECTOS 10 ORG 0x900 ;pagina 1 (800h-FFFh) SUB1_P1: . ;subrutina en pagina 1 (800h-FFFh) . . . RETURN ;retorno de llamada a subrutina ;de pagina 0 (000h-7FFh) DPE DESARROLLO DE PROYECTOS 11 Reset y Vector de Interrupciones El RESET del microcontrolador hace que el valor del PC pase a valer 0000h, y será la instrucción que haya en esta dirección la primera que se ejecute. El VECTOR DE INTERRUPCIONES; Un detalle importante de la memoria de programas, es que tiene reservada la dirección 04h para él. Este vector es único, y sirve para atender a todas la interrupciones. Debido a esto, en la dirección 0h deberemos incluir una instrucción de salto hasta la dirección 05h, que es donde deberá comenzar el programa de usuario. DPE DESARROLLO DE PROYECTOS 12 LA PILA La pila que poseen los PIC no es accesible al programador, es una pila tipo LIFO, con 8 niveles de anidamiento que funciona automáticamente. Con la instrucción CALL y con las interrupciones, el valor del PC se salva en el nivel superior. DPE DESARROLLO DE PROYECTOS 13 Por el contrario con las instrucciones RETURN, RETFIE y RETLW el valor contenido en el nivel superior se carga en el PC. La pila funciona como un buffer circular. Es labor del programador verificar que el nivel de anidamiento no supere la capacidad de la pila ya que no existe ningún flag que nos lo indique. DPE DESARROLLO DE PROYECTOS 14 PALABRAS DE IDENTIFICACIÓN Los PIC de la gama media disponen de 4 posiciones de memoria situadas en las posiciones 2000h a 2003h, reservadas para las palabras de identificación ID. Estas palabras se escriben durante el proceso de grabación, empleándose sólo los 4 bits de menor peso, y se utilizan para indicar el código del dispositivo, el número de serie, la versión del programa etc. DPE DESARROLLO DE PROYECTOS 15 PALABRA DE CONFIGURACIÓN Los PIC de la gama media tienen una posición de memoria de programa reservada ( 2007h), dicha posición se escribirá durante el proceso de grabación. La información está contenida tal y como muestra la figura. DPE DESARROLLO DE PROYECTOS 16 Según los valores escritos en los bits 13-12 y 5-4, se protegerán determinadas zonas de código y de acuerdo a la siguiente tabla: DPE DESARROLLO DE PROYECTOS 17 Bit 11 Debug: Modo depurador en circuito 1= Desactivado RB6 y RB7 actúan como líneas de E/S 0 = Activado el modo depurador; RB6 y RB7 están dedicadas al depurador, la depuración se puede hacer desde el MPLAB Bit 10: Bit no implementado su lectura da “1” DPE DESARROLLO DE PROYECTOS 18 Bit 9 WRT: Permiso de escritura en la memoria FLASH 1= Se puede escribir en la parte de memoria FLASH no protegida 0= Prohibición de escritura DPE DESARROLLO DE PROYECTOS 19 Bit 8 CPD: Código de protección de la memoria EEPRM de datos: 1= No hay protección en la EEPROM 0= Protección de código en la EEPRM DPE DESARROLLO DE PROYECTOS 20 Bit 7 LVP: Bit de permiso para programación en bajo voltaje: 1= RB3/PGM tiene permitida la grabación en bajo voltaje 0= RB3/PGM funciona como E/S digital DPE DESARROLLO DE PROYECTOS 21 Bit 6 BODEM: Bit de permiso para el reset por caída de tensión: 1= BOR activado 0= BOR desactivado DPE DESARROLLO DE PROYECTOS 22 Bit 3 PWRTE: Bit de permiso para el timer de conexión de alimentación: 1= PWRT desactivado 0= PWRT activado DPE DESARROLLO DE PROYECTOS 23 Bit 2 WDTE: Bit de permiso para el timer del perro guardián: 1= WDTE activado 0= WDTE desactivado DPE DESARROLLO DE PROYECTOS 24 Bits 1-0: tipo de oscilador 00 Tipo LP (baja potencia) de 35 a 200 Hz. 01 Tipo XT (cristal de 100 KHz a 4 MHz) 10 Tipo HS (Alta velocidad > 4MHz) 11 Tipo RC (resistencia condensador) DPE DESARROLLO DE PROYECTOS 25 Notas: Habilitando BOR automáticamente se habilita POWER-up Timer, asegúrese que siempre que POWER-up está habilitado, lo está también Bronw-out Reset. DPE DESARROLLO DE PROYECTOS 26 PALABRA DE CONFIGURACIÓN La palabra de configuración se escribe en el momento de grabar el programa, y en el caso de utilizar el IC-PROG para programarla, bastará con validar las casillas que aparecen en la ventana de dicha aplicación: DPE DESARROLLO DE PROYECTOS 27 PALABRA DE CONFIGURACIÓN Bits 0-1 •Bits 13-12 5-4 protección de código DPE DESARROLLO DE PROYECTOS 28