TEMA 5 LA MEMORIA DE DATOS MEMORIA RAM D.P.E. DESARROLLO DE PROYECTOS 1 Estructura De La Memoria Ram (1) La memoria de datos RAM está dividida en dos partes diferenciadas: 1.- Zona SFR o zona de Registros de Funciones eSpeciales 2.- Zona de Registros de Propósito General o zona GPR Ambas partes están organizadas en dos bancos de registros de 128 bytes cada uno aunque solo los primeros 80 bytes se encuentran implementados. Todos los registros tienen un tamaño de 1 byte D.P.E. DESARROLLO DE PROYECTOS 2 Estructura De La Memoria Ram (2) Los Bancos De Registros ¾ En la fig. podemos observar la disposición de los dos bancos de memoria, el primero va desde la dirección 0h hasta la 7Fh, mientras que le segundo lo hace desde la 80h hasta FFh. ¾ Dentro de cada uno de los bancos, y en las posiciones mas bajas se encuentran los SFR, en el banco 0, desde la dirección 0h hasta la 0Bh, y en el banco 1 desde la 80h hasta 8Bh. Estructura De La Memoria Ram (3) Los Bancos De Registros ¾ Como se puede verificar, la zona SFR posee un total de 24 registros, aunque dos no son accesibles (dir 07h y 87h), y algunos se encuentran duplicados en ambos bancos. ¾ La zona de GPR implementada dentro del banco 0 va desde 0Ch hasta 4Fh, que hace un total de 68 registros, ¾ La zona GPR del banco 1 está mapeada sobre el banco 0 por lo que , cuando se apunta a un registro general de este banco, se accede al mismo registro pero del banco 0. ¾ Para seleccionar el banco activo hay que programar el bit RP0 del registro de STATUS. RP0 = 0 ⇒ banco 0; D.P.E. DESARROLLO DE PROYECTOS RP0 = 1 ⇒ banco 1 4 Estructura De La Memoria Ram (4) Los Registros SFR del Banco 0 En la figura que sigue se dan los registros del banco 0 que componen su zona SFR. El registro cuya dirección es 07H no está implementado. Mientras que los siguientes están duplicados en el banco 1: INDF, PCL, STATUS, FSR, PCLATCH, INTCON. D.P.E. DESARROLLO DE PROYECTOS 5 Estructura De La Memoria Ram (4) Los Registros SFR del Banco 1 En la figura que sigue se dan los registros del banco 1 que componen su zona SFR. El registro cuya dirección es 87h no está implementado. Mientras que los siguientes están duplicados en el banco 0: INDF, PCL, STATUS, FSR, PCLATCH, INTCON. D.P.E. DESARROLLO DE PROYECTOS 6 Los Registros SFR (1) Seguidamente damos una descripción de los registros SFR mas utilizados, el resto de los registros se irán explicando según se haga preciso. Las claves utilizadas para los valores de los bits son: R Bit de lectura W Bit de escritura Valores tras un reset: - No implementado se lee 0 X Desconocido u No se modifica, mantiene el valor anterior q Su valor depende de cual fué la causa del reset D.P.E. DESARROLLO DE PROYECTOS 7 Los Registros SFR (2) Registro de STATUS (1) El registro STATUS, es un registro, que contiene una serie de banderas que indican si una cierta condición se ha producido tras la ejecución de la última instrucción y otras informaciones que se detallan a continuación. Dirección: 03h del banco 0 y 83h del banco1 Bit 0: C flag de acarreo en el octavo bit (R, W, X) 1: Acarreo en la suma y no se “debe” en la resta. 0: No acarreo en la suma y se debe en la resta Bit 1: DC flag de acarreo en el cuarto bit (R, W, X) 1: Acarreo en la suma 0: No acarreo en la suma En la resta al contrario, se utiliza en operaciones en BCD Los Registros SFR (3) Registro de STATUS (2) Bit 2: Z flag de cero (R, W, X) 1: El resultado de la última operación lógica o aritmética fue 0. 0: El resultado de la última operación fue <> de 0. Bit 3: PD flag Power Down (R, 1) 1: Tras conectar VDD, o al ejecutar CLRWDT 0: Al ejecutar la instrucción SLEEP Bit 4: TO flag Timer Out (R, 1) 1: Tras conectar VDD o ejecutar CLRWDT o SLEEP 0: Al desbordarse el timer del WDT Los Registros SFR (4) Registro de STATUS (3) Bit 5: RP0 Selección del direccionamiento directo (R,W, 0) banco para 0 ⇒ Banco 0 (00h-7Fh); 1 ⇒ Banco 1 (80h-FFh) Bit 6 : RP1 En este µ no se utiliza. Bit 7 : IRP En este µ no se utiliza. Tanto RP1 como IRP no deben usarse como bits de uso general para garantizar la compatibilidad con futuros PIC. D.P.E. DESARROLLO DE PROYECTOS 10 Los Registros SFR (5) Registro INTCON • Dirección: 0Bh del banco 0 y 8Bh del banco1 El registro INTCON, es un registro de lectura escritura, que contiene las habilitaciones para las diferentes fuentes de interrupción, así como las banderas que indican que una cierta causa de interrupción se ha producido. Tras un reset todas las interrupciones se prohíben. Bit 7: GIE Activación global de interrupciones (R, W, 0) 1: Permite todas las interrupciones no enmascaradas. 0: Todas las interrupciones están prohibidas. El resto de los bits de este registro se explicarán en el tema de interrupciones. Los Registros SFR (6) Registros INDF y FSR (1) • Dirección: INDF 0h del banco 0 y 80h del banco1 • Dirección: FSR 04h del banco 0 y 84h del banco1 El registro INDF, no es un registro físico, direccionando INDF, realmente se señala al registro cuya dirección está contenida en el registro FSR; FSR es un puntero. Ambos registros se utilizan en conjunto para realizar direccionamientos indirectos. Al no estar implementado INDF, su lectura dará todo 0. El valor de FSR tras el Power On Reset (POR) es XXh, mientras que para las otras causa de reset no modifica su valor. Los Registros SFR (7) Registros INDF y FSR (2) Ejemplo de direccionamiento indirecto facilitado por Microchip. Este programa pone a cero lo registros entre 20h y 2FH. ........ movlw 0x20 ;inicializo FSR que actuará de puntero OTRO movwf FSR ;el valor inicial de FSR=20h clrf INDF ;pon a 0 el registro señalado por FSR incf FSR ;FSR señala a la siguiente posición btfss FSR,4 ;control para ver si se ha llegado a 2Fh goto OTRO ; si no he llegado a 2Fh vete a OTRO ............. Los Registros SFR (8) Registros PCL y PCLATCH (1) • Dirección: PCL 02h del banco 0 y 82h del banco1 • Dirección: PCLATH 0Ah del banco 0 y 8Ah del banco1 Como ya se indicó en el tema de memoria de programas, su unión forma el Contador de Programas. PCL es un registro de lectura\escritura y su valor tras el reset es 00h. PCLATH solo tiene implementados los 5 bits de menor peso, siendo un registro esclavo del PC <12:8>, el contenido de PCLATH puede ser transferido al byte alto del PC, pero nunca al contrario. Su valor tras el reset es de todo 0. Los Registros SFR (9) Registros PORTA y TRISA (1) • Dirección: PORTA 05h del banco 0 • Dirección: TRISA 85h del banco 1 TRISA es el registro de configuración del PUERTO A. Poniendo en cualquier bit de TRISA un 1, hacemos que el bit correspondiente del PUERTO A quede configurado como una entrada. Poniendo a 0 un bit de TRISA, se configura el pin correspondiente como salida. Como el PORTA, TRISA solo tiene implementados los cinco bits de menor peso. Tras el reset TRISA toma el valor 1Fh, por lo que el puerto queda configurado con todos sus pines como entradas. Los Registros SFR (10) Registros PORTA y TRISA (2) PORTA es un registro que solo tiene implementados los cinco bits de menos peso. Y es el latch donde se escribe el valor que se desea enviar a los pines del PUERTO A. Cuando se lee del PUERTO A, se lee el estado de cada uno de los pines de dicho puerto, siempre y cuando estuviesen configurados como entradas. Cuando se escribe en el puerto, se escribe en el latch y hay que tener en cuenta que son escrituras del tipo “readmodify-write”. Tras el reset POR, el valor del PORTA es indeterminado, mientras que cualquier otro reset hace que no se modifique su valor D.P.E. DESARROLLO DE PROYECTOS 16 Los Registros SFR (11) Registros PORTB y TRISB (1) • Dirección: PORTB 06h del banco 0 • Dirección: TRISB 86h del banco 1 TRISB es el registro de configuración del PUERTO B, poniendo en cualquier bit de TRISB un 1, hacemos que el bit correspondiente del PUERTO B quede configurado como una entrada. Poniendo a 0 un bit de TRISB se configura el pin correspondiente del PORB como salida. Tanto el PORTB, como TRISB tienen un ancho de 8 bits. Tras el reset TRISB toma el valor FFh, por lo que el puerto queda configurado con todos sus pines como entradas. D.P.E. DESARROLLO DE PROYECTOS 17 Los Registros SFR (12) Registros PORTB y TRISB (2) PORTB es un registro de 8 bits. Y es el latch donde se escribe el valor que se desea enviar a los pines del PUERTO B. Cuando se lee del PUERTO B se lee el estado de cada uno de los pines de dicho puerto, siempre y cuando estuviesen configurados como entradas Tras el reset POR, el valor del PORTB es indeterminado, mientras que cualquier otro reset hace que no se modifique su valor D.P.E. DESARROLLO DE PROYECTOS 18 Los Registros SFR (13) Registro OPTION (1) • Dirección: 81h del banco1 El registro OPTION, es un registro de lectura escritura, que contiene bits de control para configurar el preescaler de TIMER0/WDT , la interrupción externa, el TIMER0 y las resistencias de pull-up del PORTB Independientemente de la causa del reset adquiere siempre el valor FFh. Bit 7: RBPU#: Bit de habilitación de las resistencias de Pull Up del puerto B (W, R, 1). 1: Desactiva las resistencias de pull-up (valor de reset) 0: Activa las resistencias de pull-up. Los Registros SFR (14) Registro OPTION (2) Bit 6: INTEDG: Bit de selección de flanco activo para las interrupciones externas RB0/INT (W, R, 1). 1: Flanco de subida (valor por defecto). 0: flanco de bajada". Bit 5: TOCS: Bit de selección de los impulsos a contar por TMR0 (contador/temporizador) (W, R, 1). 1: Pulsos introducidos a través de RA4/TOCKI (contador, valor por defecto) 0: Pulsos del reloj interno Fosc/4 (temporizador). D.P.E. DESARROLLO DE PROYECTOS 20 Los Registros SFR (15) Registro OPTION (3) Bit 4: TOSE: Bit de selección de flanco activo para RA4/TOCKI (TMR0 como contador). 1: Flanco de subida (valor por defecto). 0: flanco de bajada". Bit 3: PSA: Asignación del divisor del preescaler (W, R, 1). 1: El divisor de frecuencia (preescaler) se asigna a WDT (valor tras el reset). 0: El divisor de frecuencia se asigna a TMR0. Cuando el preescaler está asignado a WDT, el preescaler para TMR0 es 1:1. D.P.E. DESARROLLO DE PROYECTOS 21 Los Registros SFR (16) Registro OPTION (4) Bit 2:0 PS2, PS1, PS0: Bits de selección del rango con el que actúa el preescaler PS2 PS1 PS0 rango para TMR0 rango para WDT 0 0 0 1:2 1:1 0 0 1 1:4 1:2 0 1:8 1:4 0 1 0 1 1 1:16 1:8 1 0 0 1:32 1:16 1 0 1 1:64 1:32 1 1 0 1:128 1:64 1 1 1 1:256 1:128 Los Registros SFR (18) Registros EEDATA, EEADR, EECON1 y EECON2 La memoria EEPROM de datos, que incorpora el 16F84 es una memoria de lectura/escritura de 64 bytes y direcciones de la 0 a 3fh, Esta memoria no está mapeada en el espacio de registros especiales. Para operar en ella, es necesario utilizar los registros especiales: EECON1, EECON2, EEDATA y EEADR Dichos registros así como la memoria EEPROM se describirán con mas profundidad en un tema específico 23