Punteros indirectos Hay tres punteros indirectos: FSR0H, FSR0L FSR1H, FSR1L FSR2H, FSR2L Sus 12 bits direccionan linealmente 4 K SIN USAR BANCOS. Se pueden utilizar de 5 modos: INDFn: Sin cambio del valor del puntero. POSTINCn: Con auto-post-incremento. POSTDECn: Con auto-post-decremento. PREINCn:Con auto-pre-incremento. PLUSWn: Indexando con WREG signo. A.RAM GPRs 000 07F 080 0FF 100 . . 1FF 200 . . . . EFF F00 F7F F80 FFF GPRs GPRs A.SFRs SFRs
Memoria de programa Se pueden direccionar hasta 1 MWord = 2 MBytes. Word Byte H Byte L 0x000001 0x000000 0x000003 0x000002 0x000005 0x000004 . . . . . .
. . . . . . 0x1FFFFD 0x1FFFFC 0x1FFFFF 0x1FFFFE Instrucciones . . . . . . 0x0F 0x55 MOVLW 0x55 0xC1 0x23 MOVFF 0x123, 0x456 0xF4 0x56 0xEF 0x10 GOTO 0x086420 0xF4 0x32 0xEF 0x2B GOTO 0x123456 0xF9 0x1A . . . . . . 0x000000 0x000002 0x000004 . . .
. . . 0x1FFFFC 0x1FFFFE
Contador de programa El PC tiene 21 bits (PCU, PCH y PCL). El bit menos significativo del PC apunta a BYTEs, no a WORDs, por lo que es "0". El PC se incrementa de dos en dos. Se dispone de los correspondientes registros auxiliares PCLATU y PCLATH para actuar de forma combinada con el PC cuando éste se escribe o se lee.
PCU PCH PCL Operaciones con la pila El STACK tiene 31 niveles de profundidad x 21 bits. El "Top Of Stack" es accesible. Se puede leer y escribir (será conveniente quitar previamente las interrupciones). El STKPTR es el puntero automático (5 bits). TOSU TOSH TOSL 20 16 15 8 7 0
+ CALL + RCALL + INTERRUPT + PUSH – POP – RETURN – RETFIE – RETLW STKPTR
Dos vectores de interrupción 0x08 para alta prioridad y 0x18 para baja prioridad. GIE/GIEH & PEIE/GIEL controlan los respectivos permisos globales. Cuando se sirve una interrupción, automáticamente se quita su correspondiente permiso global. El servicio de interrupción de alta prioridad impide el servicio de baja prioridad. Cuando se ejecuta RETFIE se pone el permiso correspondiente al nivel que se está sirviendo. Cada fuente de interrupción se puede asignar de forma independiente a una u otra prioridad. Se puede forzar el modo compatible "sólo alta prioridad", mediante el bit IPEN = 0.
Los registros sombra del entorno Se puede salvar y restaurar el contenido de las variables de entorno ( WREG, STATUS y BSR ) en sus respectivos registros sombra, lo que equivale a una pila de un solo nivel. El parámetro "s" de la instrucción CALL determina si se salvan o no las variables de entorno utilizando este único nivel. Cuando se sirve una interrupción siempre se salvan las variables de entorno en los registros sombra (no hay penalización del tiempo de ejecución). El parámetro "s" de las instrucciones RETURN y RETFIE determina si se restauran o no las variables de entorno desde los registros sombra.
Operaciones con Tablas El TBLPTR es el puntero que con sus 21 (+1) bits direcciona 2(+) MBytes de memoria de programa. La instrucción TBLRD lee 8 bits desde la memoria de programa y los copia en el registro TABLAT. La instrucción TBLWR escribe en la memoria de programa los 8 bits del registro TABLAT. Memoria PROG (16 bits) TABLPTR 21(+1) bit dirección TABLAT 8 bit Datos Memoria DATOS High Byte Low Byte
Juego de instrucciones Se mantiene el conjunto de instrucciones de la gama media y de la gama alta, ampliándolo con: SUBFWB: Resta inversa con acarreo. RCALL: Llamada a rutina relativa. BRA: Salto incondicional relativo. BC, BNC, BN, BNN, BOV, BNOV, BZ y BNZ: Saltos condicionales relativos. POP y PUSH: Tiran y empujan los datos de la pila. RESET: Inicializa el sistema. Nuevas instrucciones de doble palabra. CALL: Llamada a rutina sin paginación. GOTO: Salto incondicional sin paginación. MOVFF: Movimiento de datos de memoria a memoria. LFSR: Carga un inmediato de 12 bit en uno de los "FSRs".
Instrucciones tipo BYTE . . . ADDWF f, d, a Suma WREG con FILE 1 ADDWFC f, d, a Suma WREG con FILE con acarreo 1 ADDLW k Suma WREG con literal 1 SUBWF f, d, a Resta WREG de FILE 1 SUBWFB f, d, a Resta WREG de FILE con acarreo 1 SUBFWB f, d, a Resta FILE de WREG con acarreo 1 SUBLW k Resta WREG de literal 1
MULWF f, a Multiplica WREG con FILE 1 MULLW k Multiplica WREG con literal 1
ANDWF f, d, a AND lógico WREG con FILE 1 ANDLW k AND lógico WREG con literal 1 IORWF f, d, a OR inclusivo WREG con FILE 1 IORLW k OR inclusivo WREG con literal 1 XORWF f, d, a OR exclusivo WREG con FILE 1 XORLW k OR exclusivo WREG con literal 1
. . . Instrucciones tipo BYTE . . . MOVF f, d, a Mueve FILE a destino 1 MOVWF f, a Mueve de WREG a FILE 1 MOVLW k Mueve literal a WREG 1
MOVFF fs, fd Mueve de FILE origen a FILE destino 2
SWAPF f, d, a Intercambia semi-Bytes de FILE 1
CLRF f, a Borra todos los bits de FILE 1 SETF f, a Activa todos los bits de FILE 1
COMF f, d, a Complementa los bits de FILE 1
NEGF f, a Complementa a 2 el valor de FILE 1
DAW Ajuste decimal de WREG 1
. . . Instrucciones tipo BYTE RLCF f, d, a Rota a la izda. 9 bits FILE+acarreo 1 RLNCF f, d, a Rota a la izda. 8 bits FILE 1 RRCF f, d, a Rota a la dcha. 9 bits FILE+acarreo 1 RRNCF f, d, a Rota a la dcha. 8 bits FILE 1
DECF f, d, a Decrementa FILE 1 DECFSZ f, d, a Decrementa FILE, salto si 0 1 ó 2 DCFSNZ f, d, a Decrementa FILE, salto si no 0 1 ó 2 INCF f, d, a Incrementa FILE 1 INCFSZ f, d, a Incrementa FILE, salto si 0 1 ó 2 INFSNZ f, d, a Incrementa FILE, salto si no 0 1 ó 2
CPFSEQ f, a Compara FILE con WREG, salto si = 1 ó 2 CPFSGT f, a Compara FILE con WREG, salto si > 1 ó 2 CPFSLT f, a Compara FILE con WREG, salto si < 1 ó 2
TSTFSZ f, a Prueba FILE, salta si 0 1 ó 2
Instrucciones orientadas a BIT BCF f, b, a Borra el bit b de FILE 1 BSF f, b, a Activa el bit b de FILE 1 BTG f, b, a Invierte el bit b de FILE 1
BTFSC f, b, a Prueba el bit b de FILE, salto si está "0" 1 ó 2 BTFSS f, b, a Prueba el bit b de FILE, salto si está "1" 1 ó 2
Instrucciones Control de Flujo GOTO p Salto a posición de programa p 2
BRA r Salto a posición relativa r 2 Rango: -1024 . . . +1023
BC r Bifurcación si acarreo 1 ó 2 BNC r Bifurcación si no acarreo 1 ó 2 BN r Bifurcación si negativo 1 ó 2 BNN r Bifurcación si no negativo 1 ó 2 BOV r Bifurcación si rebase 1 ó 2 BNOV r Bifurcación si no rebase 1 ó 2 BZ r Bifurcación si cero 1 ó 2 BNZ r Bifurcación si no cero 1 ó 2 Saltos relativos condicionales Rango: -128 . . . +127
Instrucciones RUTINAS & PILA CALL p, s Llamada a rutina (Posición programa p) 2
RCALL r Llamada a rutina (Posición relativa r) 2 Rango: -1024 . . . +1023
RETURN s Retorno desde rutina 2 RETFIE s Retorno desde interrupción 2 RETLW k Retorno cargando literal en WREG 2
POP Decr. el puntero de la pila STKPTR 1 PUSH Incr. STKPTR y guarda el PC en TOS 1
Instrucciones Tablas en Memoria TBLRD * Lee Byte desde tabla en memoria 2 TBLRD * + Lee tabla con post-incremento 2 TBLRD * – Lee tabla con post-decremento 2 TBLRD + * Lee tabla con pre-incremento 2 TBLWT * Escribe Byte en tabla en memoria 2 TBLWT * + Escribe tabla con post-incremento 2 TBLWT * – Escribe tabla con post-decremento 2 TBLWT + * Escribe tabla con pre-incremento 2 Instrucciones Especiales MOVLB i Mueve inmediato (4 bits) a BSR 1 LFSR n, i Carga inmediato (12 bits) a FSRn 2 NOP No operación 1 CLRWDT Borra temporizador perro guardián 1 SLEEP Modo reposo / bajo consumo 1 RESET Inicializa el sistema 1
Eficacia del compilador "C" El rendimiento del código mejorará debido a: La memoria de programa (1 MWord) se direcciona de modo lineal, sin ningún tipo de paginación. La memoria de datos (4 KBytes) está organizada en bancos de 256 Bytes. Access Bank es ideal para implementar procesos con variables globales. La instrucción MOVFF selecciona fs y fd direccionando los 4 K de la memoria de datos de forma lineal. Tres punteros indirectos con 5 modos de utilización y direccionamiento lineal de los 4 K registros. 8 Saltos condicionales. Posibilidad de acceder a la Pila para ampliarla por medio de programación.
Osciladores Múltiples configuraciones: EC, ECIO, LP, XT, HS, RC, RCIO & HS4. 4X PLL permite 10MIPS @ 10MHz. Conmutación dinámica de la fuente de oscilación. T1OSO T1OSI OSC1 OSC2 TT1P TSCLK MUX_SEL OSCCON:SCS T1OSCEN Timer CLK 4 x PLL CONFIG1H FOSC2:FOSC0 TOSC
Los puertos de entrada / salida Cada puerto dispone de tres direcciones: PORTx: Es la correspondiente a los pines del puerto. Se utiliza para leer el estado de las entradas. Por razones de compatibilidad, escribir en esta dirección equivale a hacerlo en la dirección LATx. LATx: Es la de los registros que almacenan los datos que pueden salir por los correspondientes pines de puerto. Se utiliza para escribir el estado que se desea poner en las salidas. Si se lee esta dirección, se leerá el valor que hay en los registros y no el estado de los pines. TRISx: Es la de los registros que configuran los bits del puerto, de forma individual y dinámica, como entrada o salida. Se puede escribir y leer.
Diagrama de un bit de E / S PIN (Gp:) Q D
EN<
(Gp:) D Q
>CK
(Gp:) D Q
>CK
BUS DATOS LEER LATx LEER TRISx ESCRIBIR TRISx LATx ESCRIBIR o PORTx LEER PORTx LATx PORTx TRISx
Página anterior | Volver al principio del trabajo | Página siguiente |