SISTEMAS ELECTRONICOS DIGITALES DIRECCIONAMIENTO INDEXADO(RELATIVO DE REGISTRO) El salto indexado(Direccionamiento) es una técnica que permite resolver problemas que puedan ser representados mediante una tabla de verdad. En el PIC16F84 se basa en la utilización de la instrucción addwf PCL,F, de este modo, la dirección del salto se consigue sumando al contador de programa (PCL, registro base) un valor de desplazamiento almacenado en el registro de trabajo W(registro indice). A este valor de desplazamiento se le denomina también offset. Al ejecutar la instrucción addwf PCL,F el registro base (PCL) debe estar cargado con la primera dirección de la tabla, apuntado de esta manera al origen de ésta. 1 EJEMPLO ; Implementar una tabla de la verdad mediante el manejo de tablas grabadas en ROM. Por ejemplo, la tabla será de 3 entradas y 6 salidas tal como la siguiente: C B A | S5 S4 S3 S2 S1 S0 -----------|--------------------------0 0 0 | 0 0 1 0 1 0 0 0 1 | 0 0 1 0 0 1 0 1 0 | 1 0 0 0 1 1 0 1 1 | 0 0 1 1 1 1 1 0 0 | 1 0 0 0 0 0 1 0 1 | 0 0 0 1 1 1 1 1 0 | 0 1 0 1 1 1 1 1 1 | 1 1 1 1 1 1 ; (Configuración 0). ; (Configuración 1). ; (Configuración 2). ; (Configuración 3). ; (Configuración 4). ; (Configuración 5). ; (Configuración 6). ; (Configuración 7). ; Las entradas C, B, A se conectarán a las líneas del puerto A: RA2 (C), RA1 (B) y RA0 (A). ; Las salidas se obtienen en el puerto B: ; RB5 (S5), RB4 (S4), RB3 (S3), RB2 (S2), RB1 (S1) y RB0 (S0). ; ; ZONA DE DATOS *********** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A INCLUDE <P16F84A.INC> ORG 0 ; El programa comienza en la dirección 0. Inicio bsf STATUS,RP0 clrf TRISB como salida. movlw b'00011111' como entrada. movwf TRISA bcf STATUS,RP0 Principal movf andlw addwf Tabla goto goto goto goto goto PORTA,W b'00000111' PCL,F ; Acceso al Banco 1. ; Las líneas del Puerto B se configuran ; Las 5 líneas del Puerto A se configuran ; Acceso al Banco 0. ; Lee el valor de las variables de entrada. ; Se queda con los tres bits de entrada. ; Salta a la configuración adecuada. Configuracion0 Configuracion1 Configuracion2 Configuracion3 Configuracion4 2 goto Configuracion5 goto Configuracion6 goto Configuracion7 Configuracion0 movlw b'00001010' goto ActivaSalida Configuracion1 movlw b'00001001' goto ActivaSalida Configuracion2 movlw b'00100011' goto ActivaSalida Configuracion3 movlw b'00001111' goto ActivaSalida Configuracion4 movlw b'00100000' goto ActivaSalida Configuracion5 movlw b'00000111' goto ActivaSalida Configuracion6 movlw b'00010111' goto ActivaSalida Configuracion7 movlw b'00111111' ActivaSalida movwf PORTB salida. goto Principal ; (Configuración 0). ; (Configuración 1). ; (Configuración 2). ; (Configuración 3). ; (Configuración 4). ; (Configuración 5). ; (Configuración 6). ; (Configuración 7). ; Visualiza por el puerto de END TABLAS DE DATOS Una tabla de datos en ROM de programa es una lista de constantes que el programa puede tomar mediante la instrucción RETLW Instrucción "retlw" la instrucción retlw (Return with Literal in W), funciona de forma similar que return, produce el retorno de una subrutina pero con un valor en el registro W. Dicha caracteristica es de suma importancia cuando se desea acceder a tablas de datos en la memoria de programa. retlw k 3 donde "k" es el valor de la constante que se carga en el registro de trabajo W. Una de las mayores aplicaciones del manejo de la tabla de datos, es la resolución de tablas de verdad grabadas en ROM. Ejemplo. 4 5 DIRECTIVA DT (DEFINE TABLA) Simplifica el uso de las instrucciones retlw, el uso repetitivo de instrucciones retlw.. Ejemplo: DT “papa”, 0x15,12 GENERA LAS INSTRUCCIONES RETLW 73 ;”P” EN ASCCI RETLW 77 ; RETLW 73 ; RETLW 77 ; RETLW 15 ; _________ RETLW 0C ; ____________ BUCLES Otra aplicación de los saltos condicionales son los bucles o lazos, que son fragmentos de progamas que se repiten un número finito o infinito de veces, se muestran los tipos principales. A) salto incondicional, (de repetición infinita) a una posición anterior del programa, sin posibilidad de tomar otro camino, utiliza la instrucción goto. Ejemplo Principal ……. ………. goto principal 6 B) lazo con condición de prueba o testeo. Aquí se usa una instrucción de prueba o testeo para controlar la ejecución del lazo, la repetición es finita, sin precisar el número de veces que se repite. Ejemplo. espera btfss porta,4 : se lee el pin 4 del puerto A Y HASTA QUE NO VALE 1, NO SALE DEL LAZO goto espera ejemplo. (diga que hacen las siguientes instrucciones, COLOQUE LOS COMENTARIOS) NOESIGUAL Movf porta,W ; Sublw 56h ; Btfss status,z Goto NOESIGUAL ES IGUAL ; C) LAZO QUE SE REPITE UN NUMERO CONOCIDO DE VECES. En combinación con goto se usan generalmente las instrucciones incfsz y decfsz, para diseñar lazos que deben repetirse una cantidad conocida de veces, decrementando o incrementando un registro hasta que se llega a un determinado valor Ejemplo: MOVLW NUMERODEVECES ; numero de veces que se repite el lazo MOVWF CONTADOR ;se carga una posición de la memoria de datos interna. LAZO ; lo que sigue se ejecuta NUMERODEVECES. …………….. ……………….; instrucciones que se ejecutan tantas veces como se cargo CONTADOR DECFSZ GOTO CONTADOR,F ; se decrementa CONTADOR hasta que llegue a 0 LAZO ; sino llega a 0, se repite el lazo 7 INSTRUCCIONES cblock, endc y #define Cblock ( define un bloque de constantes). endc (end constant block) el propósito de las instrucciones anteriores es asignar direcciones a muchas etiquetas ejemplo: CBLOCK 0c Centenas ; centenas ocupa 0c Decenas ; decenas ocupa 0d Unidades ; unidades ocupa 0e de RAM. ENDC #DEFINE Define una etiqueta en substitución de texto. Ejemplo. #DEFINE LED PORTB,4 bsf LED QUIZ 5 1.Diga cual es la posición de memoria y el banco del PCL, y cual es su función. 2. ¿Cuando se debe utilizar un display de 7 segmentos de catodo o ánodo común? 3. ¿Cuál es la diferencia entre las instrucciones RETURN y RETLW? 4.Diga cual es la diferencia entre salto incondicional y condicional 5. Proporcione un ejemplo (fragmento de progama) para cada caso de salto condicional, incondicional y repetición conocida. 6.De dos ejemplos para utilizar tablas grabadas en ROM en su actividad diaria.(las tablas) 7.CBLOCK es una______ a)etiqueta b)instrucción c)directiva d)tabla 8