Вы находитесь на странице: 1из 7

ESCUELA SUPERIOR POLITECNICA DE CHIMBORAZO FACULTAD DE INFORMATICA Y ELECTRONICA ESCUELA DE INGENIERIA ELECTRONICA ELECTRONICA APLICADA VICTOR MONTES 210064

TONY FLORES 210126

Modos de direccionamiento Direccionamiento de la memoria de datos (RAM)


La memoria interna se direcciona en forma directa por medio de los 5 bits "f" contenidos en las instrucciones que operan sobre registros. De esta manera se puede direccionar cualquier posicin desde la 00 a la 1F. Como se vi en el captulo correspondiente a los mapas de memoria, las direcciones 10 a 1F corresponden a los bancos de registros, por lo tanto, en los microcontroladores que tengan ms de un banco, antes de acceder a alguna variable que se encuentre en esta zona, el programador deber asegurarse de haber programado los bits de seleccin de banco en el registro FSR. Los registros especiales y de uso general de la posicin 00 a la 0f estn presentes en todos los PIC16C5X, al igual que el banco 0 de registros. Los bancos 1, 2 y 3 de registros estn presentes solo en el 16C57. El registro FSR, adems de servir para seleccionar el banco activo, sirve como puntero para direccionamiento indirecto. La posicin 00 del mapa de RAM es la llamada direccin indirecta. S en cualquier instruccin se opera con la direccin 00, en realidad se estar operando con la direccin a donde apunte el contenido del FSR. Por ejemplo si el FSR contiene el valor 14, una instruccin que opere sobre la direccin 0, operara en realidad sobre la direccin 14. Se puede decir en este ejemplo que la posicin 14 de memoria fue direccionada en forma indirecta a travs del puntero FSR.

Ejemplo :
Esta porcin de programa borra 5 posiciones de memoria a partir de la direccin 12 FSR equ 04 ;(definicin al comienzo del programa) ..................................... ..................................... movlw 5 ;prepara para repetir 5 veces movwf 08 ;(el registro 08 es el contador del loop) movlw 12h ;apunta a la direccin 12h movwf FSR ; loop: clrf 0 ;borra una posicin de memoria incf FSR ;apunta a la siguiente decfsz 08 ;si todava no borra todas goto loop ;sige borrando ..................................... .....................................

El direccionamiento indirecto es muy til para el procesamiento de posiciones consecutivas de memoria, como en el ejemplo, o para el direccionamiento de datos en subrutinas.

Direccionamiento de la memoria de programa (EPROM, OTP)


La instruccin GOTO dispone solo de 9 bits en el cdigo de operacin para especificar la direccin de destino del salto. Al ejecutar una instruccin GOTO el microprocesador toma los dos bits que restan para completar la direccin de 11 bits, de los bits 5 y 6 de la palabra de estado. Estos ltimos son llamados bits de seleccin de pgina (PA0 y PA1). El programador deber asegurarse de que estos dos bits tengan el valor correcto antes de toda instruccin GOTO. Ver figura 1

FIG 1 Direccionamiento directo con instruccin GOTO

Deber tenerse en cuenta adems que es posible avanzar de una pgina a otra en forma automtica cuando el PC se incrementa. Esto ocurre si el programa empieza en una pgina y sigue en la siguiente. Sin embargo, al incrementarse el PC desde la ltima posicin de una pgina a la primera de la siguiente, los bits PA0 y PA1 no se modifican, y por lo tanto s se ejecuta una instruccin GOTO, CALL o alguna que acte sobre el PC, esta producir un salto a la pgina anterior, a menos que el programador tenga la precaucin de actualizar el valor de dichos bits. Por este motivo es conveniente dividir el programa en mdulos o rutinas que estn confinados a una pgina. En el caso de la instruccin CALL, el direccionamiento se complica un poco ms, ya que la misma solo dispone de 8 bits para especificar la direccin de destino salto. En este caso tambin se utilizan los mismos bits de seleccin de pgina para completar los bits dcimo y decimoprimero de la direccin, pero falta el noveno bit. En estas instrucciones este bit se carga siempre con 0, lo que implica que solo se pueden realizar saltos a subrutina a las mitades inferiores de cada pgina. En este caso tambin el programador deber asegurarse que el estado de los bits PA0 y PA1 sea el correcto al momento de ejecutarse la instruccin. Ver figura 2

FIG. 2 Direccionamiento directo con instruccin CALL

Las instrucciones que operan sobre el PC como registro y alteran su contenido provocando un salto, responden a un mecanismo muy similar al de las instrucciones CALL para la formacin de la direccin de destino. En este caso los bits 0 a 7 son el resultado de la instruccin, el bit 8 es 0 y los bits restantes se toman de PA0 y PA1. Este mecanismo se llama paginado, y a pesar de que representa una complicacin bastante molesta para el programador, resulta muy til ya que permite ampliar la capacidad de direccionamiento de memoria de programa para las instrucciones de salto.

Registros internos
A continuacin se explican todos los registros de configuracin y control de la memoria RAM. Estos registros se usan para controlar los pines del PIC, consultar los resultados de las operaciones de la ALU (unidad aritmtica lgica), cambiar de banco de memoria... entre otras cosas. BANCO "0" INDF (direccionamiento indirecto): Direccin 00h, sirve para ver el dato de la direccin a la que apunta el registro FSR (dir. 04h) que veremos mas adelante. TMR0 (Timer/contador): Direccin 01h, Aqu se puede ver el valor en tiempo real del Timer/contador. Tambin se puede introducir un valor y alterar as el conteo. Este conteo puede ser interno (cuenta ciclos de reloj) o externo (cuneta inpulsos introducidos por RA4). PCL (Parte baja del contador de programa): Direccin 02h, Modificando este registro se modifica el contador de programa, este contador de programa es el que seala al pic en que direccin (de EEPROM) tiene que leer la siguiente instruccin. Esto se utiliza mucho para consultar tablas. STATUS: Direccin 03h, este es uno de los registros mas importantes y el que mas vas a utilizar. Hay que analizar el funcionamiento de este registro bit a bit. CARRY, Direccin STATUS,0 (bit 0): bit de desbordamiento. Este bit se pone a "1" cuando la operacin anterior ha rebasado la capacidad de un byte. Por ejemplo, si sumo dos nmeros y el resultado no cabe en 8 bit el CARRY se pone a "1", Pasa lo mismo cuando resto dos nmeros y el resultado es un nmero negativo. Se puede usar para saber si un nmero es mayor que otro (restndolos, si hay acarreo es que el segundo era mayor que el primero). Una vez que este bit se pone a "1" no se baja solo (a"0"), hay que hacerlo por programa si queremos volverlo a utilizar. DC (digit carry), Direccin STATUS,1 (bit 1): lo mismo que el anterior pero esta vez nos avisa si el nmero no cabe en cuatro bits. Z (zero), Direccin STATUS,2 (bit 2): Se pone a "1" si la operacin anterior ha sido cero. Y pasa a "0" si la operacin anterior no ha sido cero. Se usa para comprobar la igualdad entre dos nmeros (restndolos, si el resultado es cero ambos nmeros son iguales) PD (Power - Down bit), Direccin STATUS,3 (bit3) se pone a "0" despus de ejecutar la instruccin SLEEP*, se pone a "1" despus de ejecutar la instruccin CLRWDT* o despus de un power-up*. TO (Timer Up), Direccin STATUS,4 (bit4) se pone a "0" cuando se acaba el tiempo del WATCHDOG*, Se pone a "1" despues de ejecutar las instrucciones, CLRWDT* o SLEEP* o despues de un power-up*. RP0 y RP1 (seleccin de banco), Direccin STATUS,5 y STATUS,6. Como el PIC16F84 solo tiene dos bancos de memoria el RP1 no se usa para

nada, la seleccin del banco se hace mediante RP0 (STATUS,5), si est a "0" nos encontramos en el banco 0, y si est a "1" nos encontramos en el banco 1. IRP, Direccin STATUS,7, En este PIC no se usa para nada.

FSR (Puntero), Direccin 04h, se usa para direccionamiento indirecto en combinacin con el registro INDF (dir. 00h): se carga la direccin del registro que queremos leer indirectamente en FSR y se lee el contenido de dicho registro en INDF. PORTA (Puerto A), Direccin 05h. Con este registro se puede ver o modificar el estado de los pines del puerto A (RA0 - RA4). Si un bit de este registro est a "1" tambin lo estar el pin correspondiente a ese bit. El que un pin est a "1" quiere decir que su tensin es de 5V, si est a "0" su tensin es 0V. Correspondencia: RA0 ==> PORTA,0 RA1 ==> PORTA,1 RA2 ==> PORTA,2 RA3 ==> PORTA,3 RA4 ==> PORTA,4 PORTB (Puerto B), Direccin 06h igual que PORTA pero con el puerto B Correspondencia: RB0 ==> PORTB,0 RB1 ==> PORTB,1 RB2 ==> PORTB,2 RB3 ==> PORTB,3 RB4 ==> PORTB,4 RB5 ==> PORTB,5 RB6 ==> PORTB,6 RB7 ==> PORTB,7 Direccin 07h, No utilizada por este PIC. EEDATA, Direccin 08h. En este registro se pone el dato que se quiere grabar en la EEPROM de datos EEADR, Direccin 09h. En este registro se pone la direccin de la EEPROM de datos donde queremos almacenar el contenido de EEDATA PCLATH, Direccin 0Ah. Modifica la parte alta del contador de programa (PC), el contador de programa se compone de 13 bits, los 8 bits de menor peso se pueden modificar con PCL (dir. 02h) y los 5 bits de mayor peso se pueden modificar con PCLATH INTCON (controla las interrupciones), Direccin 0Bh. Se estudia bit a bit: RBIF (Flag de interrupcin por cambio de PORTB) Direccin INTCON,0 (bit 0) se pone a "1" cuando alguno de los pines RB4, RB5, RB6, o RB7 cambia su estado. Una vez que est a "1" no pasa a "0" por si mismo: hay que ponerlo a cero por programa.

INTF (Flag de interrupcin de RB0) Direccin INTCON,1. Si est a "1" es que ha ocurrido una interrupcin por RB0, si est a "0" es que dicha interrupcin no ha ocurrido. Este bit es una copia de RB0. TOIF (Flag de interrupcin por desbordamiento de TMR0) Direccin INTCON,2. Cuando TMR0 se desborda este Flag avisa poniendose a "1". Poner a "0" por programa. RBIE (Habilita la interrupcin por cambio de PORTB) Direccin INTCON,3. Si est a "1" las interrupciones por cambio de PORTB son posibles. INTE (Habilita la interrupcin por RB0) Direccin INTCON,4. Si lo ponemos a "1" la interrupcin por RB0 es posible TOIE (Habilita la interrupcin por desbordamiento de TMR0) Direccin INTCON,5. Si este bit esta a "1" la interrupcin por desbordamiento de TMR0 es posible. EEIE (Habilita la interrupcin por fin de escritura en la EEPROM de datos) Direccin INTCON,6. Cuando este bit est a "1" la interrupcin cuando acaba la escritura en la EEPROM de datos es posible. GIE (Habilita las interrupciones globalmente) Direccin INTCON,7. Este bit permite que cualquier interrupcin de las anteriores sea posible. Para usar alguna de las interrupciones anteriores hay que habilitarlas globalmente e individualmente.

Ahora vamos con el banco 1, los registros del banco 0 y los del banco 1 tienen direcciones distintas, en realidad podemos utilizar las mismas direcciones para referirnos a registros que estn en uno u otro banco. El PIC las diferenciar sin problemas gracias al bit de seleccin de banco (RP0). Por ejemplo, la direccin 05h se refiere a PORTA si estamos en el banco 0 y a TRISA si estamos en el banco 2. Sabiendo esto vamos con los registros del BANCO 1: INDF, Direccin 00h, Igual que en el Banco 0 OPTION, Direccin 01h, (configuracin del prescaler, Timer, y alguna cosa mas) Se estudia bit a bit PS0, PS1 y PS2 (Bits del 0 al 2) Configuracin del preescaler: El preescaler es un divisor de pulsos que est a la entrada del Timer-contador. El prescaler divide el nmero de pulsos que le entran al timer-contador o al Wachtdog. El factor de divisin es el siguiente (segn los valores de PS2, PS1 y PS0 respectivamente

PSA, Direccin OPTION,3. Bit de asignacin de prescaler: si est a "1" el prescaler se asigna a WDT (Wachtdog), si est a "0" se asigna al TMR0 TOSE, Direccin OPTION,4. Bit de seleccin del tipo de flanco para TMR0. A "1" se incrementa TMR0 por flanco descendente de RA4, a "0" se incrementa TMR0 por flanco ascendente de RA4. TOCS, Direccin OPTION,5. Selecciona la entrada de reloj de TMR0. A "1" la entrada de reloj de TMR0 es por flanco de la patilla RA4, a "0" la entrada de reloj de TMR0 es por ciclo de reloj interno. INTEDG, Direccin OPTION,6. Tipo de flanco para la interrupcin por RB0: A "1" la interrupcin ser por flanco ascendente, a "0" la interrupcin ser por flanco decendente. RBPU, direccin OPTION,7. Carga Pull-Up en puerto B. A "0" todas las salidas del puerto B tendrn una carga de pull-Up interna.

PCL, Direccin 02h, igual que en el banco 0 STATUS, Direccin 03h, Igual que en el banco 0 FSR, Direccin 04h, Igual que en el banco 0 TRISA, Direccin 05h, Configura el puerto A como entrada o salida. Si un bit de este registro se pone a "0" el pin correspondiente en el puerto A ser una salida, por el contrario, si se pone a "1" el pin correspondiente en el puerto A ser una entrada. TRISB, Direccin 06h, Igual que el anterior pero con el puerto B Direccin 07h, No usada en este pic EECON1, Direccin 08h, Controla la lecturo y escritura en la EEPROM de datos. Se estudia bit a bit: RD, Direccin EECON1,0 (bit 0) A "1" iniciamos el ciclo de lectura, cuando acaba el ciclo se pone a "0" el solito WR, Direccin EECON1,1 (bit 1) A "1" indicamos que comienza el ciclo de escritura, cuando acaba el ciclo se pone a "0" l solito WREN, Direccin EECON1,2 (bit 2) si lo ponemos a "1" se permite la escritura, a "0" no se permite.

WRERR, Direccin EECON1,3 (bit 3) error de escritura, si est a "1" indica que no se ha terminado el ciclo de escritura. EEIF, Direccin EECON1,4 (bit 4) interrupcin de ciclo de escritura de la EEPROM, si est a "1" indica que el ciclo de escritura ha terminado, hay que ponerlo a "0" por programa. Bits del 5 al 7 no se utilizan.

EECON2, Direccin 09h, Se utiliza para la escritura en la EEPROM de datos como medida de seguridad: para poder guardar algo en la EEPROM hay que cargar el valor 55h en este registro. PCLATH, Direccin 0Ah, Igual que en el banco 0 INTCON, Direccin 0Bh, Igual que en el banco 1 BIBLIOGRAFIA
http://www.unicrom.com/Tut_PICs3.asp http://www.iearobotics.com/proyectos/cuadernos/ct4/ct4.html http://www.monografias.com/trabajos12/decibin/decibin.shtml http://usuarios.lycos.es/sfriswolker/pic/cinco/cincouno.htm http://perso.wanadoo.es/chyryes/tutoriales/pic4.htm http://perso.wanadoo.es/chyryes/tutoriales/pic5.htm http://www.terra.es/personal/fremiro/arquitectura.htm http://members.fortunecity.es/electronico/tutoriales/tutopic16f84/p5.html

Вам также может понравиться