CAPÍTULO 3 - JUEGO DE INSTRUCCIONES 3-1 CONTENIDO EL JUEGO COMPLETO DE INSTRUCCIONES DEL PIC18F452 SE MUESTRA EN LA ILUSTRACIÓN 3-1. EL PROPÓSITO DE ESTA CAPÍTULO ES DESCRIBIR EL SIGNIFICADO DE LOS SIMBOLOS UTILIZADOS EN LAS INSTRUCCIONES ASÍ COMO EL FUNCIONAMIENTO DE ALGUNAS DE LAS INSTRUCCIONES. 3-2 DISTINCIÓN F/W. LA MAYORÍA DE LOS MICROCONTROLADORES REALIZAN LA TRANSFERENCIA DE OPERANDOS A TRAVÉS DE UN REGISTRO ACUMULADOR. EL PIC18F452 TRATA A TODAS LAS 256 DIRECCIONES DEL “ACCESS BANK” COMO ACUMULADORES. LA MAYORIA DE LAS OPERACIONES SE PUEDEN REALIZAR CON EL OPERANDO EN SU LUGAR DE ORIGEN. CONSIDERE EL CÓDIGO PARA SUMAR DOS NÚMEROS DE 8 BITS. movf NUM2, W addwf NUM1, F ; mueva NUM2 a WREG ; NUM1 = NUN1 + NUM2 LA MISMA OPERACIÓN CON UN MICROCONTROLADOR ORIENADO AL ACUMULADOR, REQUERIRÁ DE LAS SIGUIENTES INSTRUCCIONES: movf NUM1, W addwf NUM2, W movwf NUM1 ; mueva NUM1 a WREG ; WREG = NUM1 + NUM2 ; coloca el resultado en NUM1 EL PRIMER CÓDIGO REQUIERE 33% MENOS MEMORIA Y SE EJECUTA 33% MÁS RÁPIDO. PARA UNA GRAN PARTE DE LAS INSTRUCCIONES MOSTRADAS EN LA ILUSTRACIÓN 3-1, SE INCLUYE LA OPCIÓN “F/W” COMO PARTE DEL OPERANDO. ESTO PERMITE SELECCIONAR EL DESTINO DE LA EJECUCIÓN DE LA INSTRUCCIÓN EN EL OPERANDO DE ORIGEN O EN EL REGISTRO WREG. POR EJEMPLO: decf COUNT, F DECREMENTA EL CONTENIDO DE COUNT, MIENTRAS QUE decf COUNT, W MUEVE COUNT A WREG Y DECREMENTA WREG, EL CONTENIDO DE COUNT NO CAMBIA. 3-3 LA OPCIÓN “,BANKED”. 3-4 INSTRUCCIONES “MOVE”. PARA EL MOVIMENTO DE OPERANDOS LAS CUATRO INSTRUCCIONES MÁS UTLIZADAS SON LAS SIGUIENTES: movlw, movwf, movff Y movf LA INSTRUCCIÓN movlw 5 CARGARÁ EL VALOR 5 ( VALOR ENTRE 0 Y 255 ) EN EL REGISTRO WREG. EL FORMATO DE LOS NÚMEROS PARA EL ENSAMBLADOR MICROCHIP, ES EL SIGUIENTE: 0x7f H´7f´ B´10011100´ D´32´ O´777´ A´C´ ´C´ ; hexadecimal ; hexadecimal ; binario ; decimal ; octal ; ASCII ; ASCII POR DEFECTO, EL FORMATO DE LOS NÚMEROS ES HEXADECIMAL. movlw 20 CARGARÁ 0x20 EN WREG. EL ENSAMBLADOR TRATA A UN NÚMERO SIN SIGNO COMO BINARIO SIN SIGNO. UN NÚMERO CON UN SIGNO NEGATIVO, SERÁ INTERPRETADO COMO NÚMERO EN COMPLEMENTO A DOS. POR EJEMPLO: D´128´ ES TRATADO COMO B`10000000` LA SIGUIENTE INSTRUCCIÓN movlw -2 CARGARÁ b´11111110´ EN WREG. FINALMENTE, movlw 0x1234 CARGARÁ 0x34 EN WREG. EL NÚMERO NO PUEDE SER MAYOR DE 8 BITS. PARA INICIALIZAR UNA DIRECCIÓN O UN REGISTRO, ES MUY COMÚN LA SIGUIENTE SECUENCIA DE INSTRUCCIONES: movlw movwf B´11100000´ TRISB PARA LAS SECUENCIA ANTERIOR, ES RECOMENDABLE CREAR UNA EXPRESIÓN MACRO, DE LA SIGUIENTE MANERA. MOVLF B´11100000´, TRISB COMO SERÁ MOSTRADO EN LA SECCIÓN 5-6. LAS INSTRUCCIONES movlw Y movwf SON INCORPORADAS EN LA INSTRUCCIÓN movff. ESTA INSTRUCCIÓN CONSTA DE DOS PALABRAS Y COPIA UN BYTE DE UN OPERANDO FUENTE A UN OPERANDO DESTINO. UTILIZA EL RANGO COMPLETO DE DIRECCIONES DE 12 BITS. LA INSTRUCCIÓN movff PORTB, PORTB_COPIA LEE A PORTB Y GUARDA SU VALOR EN UNA VARIABLE EN MEMORIA RAM DENOMINADA PORTB_COPIA. LA ÚLTIMA INSTRUCCIÓN “MOVE”, ES movf. ESTA ES LA ÚNICA DE LAS CUATRO QUE AFECTA EL ESTADO DE LAS BANDERAS EN EL REGISTRO STATUS. ES COMUNMENTE UTILIZADA PARA MOVER UNO DE LOS OPERANDOS DE UNA INSTRUCCIÓN DE DOS OPERANDOS AL REGISTRO WREG. LA SECUENCIA movf addwf NUM2, W NUM1, F COPIA NUM2 AL REGISTRO WREG DONDE SE LE SUMA NUM1. TAMBIÉN ES UTILIZADA PARA LUEGO VERIFICAR EL ESTADO DE LAS BANDERAS. movf COUNTL, F ESTA INSTRUCCIÓN EN EL PROCESO DE DECREMENTAR UNA VARIABLE DE DOS BYTES COUNTH : COUNTL PERMITE VERIFICAR EL ESTADO DEL BYTE MENOS SIGNIFICATIVO, SI INICIALMENTE ES CERO, AMBOS BYTES DEBEN DECREMENTARSE, DE LO CONTRARIO, SOLO EL BYTE MENOS SIGNIFICATIVO DEBERÁ DECREMENTARSE. LAS RESTANTES CINCO INSTRUCCIONES “MOVE”, REALIZAN TAREAS MUY ESPECIFICAS. LA INSTRUCCIÓN lsfr, CARGA LA DIRECCIÓN IDENTIFICADA POR UNA ETIQUEGA A UNO DE TRES PUNTEROS DE DIRECCIÓN ( FSR0, FSR1 O FSR2 ). POR EJEMPLO, lfsr 0, NUM1 CARGA FSR0 CON LA DIRECCIÓN DEL BYTE MENOS SIGNIFICATIVO DEL NÚMERO DE DOS BYTES NUM1. EN OCASIONES ES NECESARIO GUARDAR EL VALOR DE UNO DE LOS PUNTEROS PARA LUEGO RESTAURARLO. movff FSR0L, FSR0L_TEMP movff FSR0H, FSR0H_TEMP LUEGO SE RESTABLECE DE OTRA VARIABLE movff movff FSR0L_UART, FSR0L FSR0H_UART, FSR0H EL MACRO MOVLF SERÁ UTLIZADO EN LA MAYORÍA DE LAS INICIALIZACIONES, SIN EMBARGO, LA SIGUIENTE INSTRUCCIONES SON UTILIZADAS PARA REALIZAR INICIALIZACIONES ESPECIALES. clrf TEMP setf TEMP movlb 2 ; carga 0x00 en TEMP ; carga 0xff en TEMP ; carga 0x02 en BSR FINALMENTE LA INSTRUCCIÓN swapf, INTERCAMBIA LOS CUATRO BITS “NIBLE” MÁS SIGNIFICATIVOS CON LOS CUATRO BITS MENOS SIGNIFICATIVOS DE UNA VARIABLE. 3-5 INSTRUCCIONES CON UN SOLO OPERANDO. ESTAS INSTRUCCIONES PERMITEN A UN SOLO BIT DE UN OPERANDO SER ESTABLECIDO EN 1, 0 O COMPLEMENTADO MIENTRAS LOS DEMÁS BITS PERMANECEN SIN CAMBIO. POR EJEMPLO: bsf PORTB, 0 ESTABLECERÁ EN 1 EL BIT MENOS SIGNIFICATIVO DEL PUERTO B. bcf PORTB, 2 ACLARA A 0 EL BIT 2 DEL PUERTO B. CUATRO INSTRUCCIONES DE ROTACIÓN DESPLAZAN AL OPERANDO UNA POSICIÓN HACIA LA DERECHA O HACIA LA IZQUIERDA. DOS DE ELLAS rlcf Y rrcf, REALIZAN UN DESPLAZAMIENTO DE NUEVE BITS A TRAVÉS DEL BIT DE ACARREO COMO SE MUESTRA EN LA ILUSTRACIÓN 2-13. ESTAS INSTRUCCIONES SIRVEN PARA DESARROLLAR EL CÓDIGO NECESARIO PARA PROGRAMAS DE MULTIPLICACIÓN O DIVISIÓN POR 2. LAS ILUSTRACIONES 3-2 A Y 3-2B MUESTRAN LA MULTIPLACIÓN POR 2 DE UN NÚMERO DE 24 BITS. LA DIVISIÓN DE UN NÚMERO POR 2 ES MOSTRADA EN LAS ILUSTRACIONES 3-2C Y 3-2D. EN EL CASO DE UN NÚMERO EN COMPLEMENTO A DOS, ES NECESARIO MANTENER EL BIT DEL SIGNO EN LA POSICIÓN A LA IZQUIERDA DEL NÚMERO. ESTO SE LOGRA GUARDANDO EL BIT DEL SIGNO EN EL BIT DE ACARREO. LAS DOS INSTRUCCIONES rlnc Y rrncf, SE MUESTRAN EN LA ILUSTRACIÓN 3-3. ESTAS INSTRUCCIONES SON ÚTILES PARA DESPLAZAR LOS BITS DE UN OPERANDO Y ADEMÁS MANTENERLOS PARA USO POSTERIOR. LA INSTRUCCIÓN swapf TEMP, F PUEDE SER IMPLEMENTADA DE LA SIGUIENTE MANERA: rrncf rrncf rrncf rrncf TEMP,F TEMP,F TEMP,F TEMP,F LA VARIANTE swapf TEMP, W ES EQUIVALENTE A rrncf rrncf rrncf rrncf TEMP, W TEMP, W TEMP, W TEMP, W LAS INSTRUCCIONES DE UN SOLO OPERANDO REMANENTES SON incf, decf, comf Y negf. CON ELLAS, UN OPERANDO PUEDE SER INCREMENTADO, DECREMENTADO, COMPLEMENTADO O NEGADO. LA ÚLTIMA OPERACIÓN CAMBIO EL SIGNO DE UN NÚMERO REPRESENTADO EN COMPLEMENTO A DOS. LA ILUSTRACIÓN 3-4 MUESTRA LA EXTENSIÓN DE CADA UNA DE ESTAS OPERACIONES A UN NÚMERO DE TRES BYTES. 3-6 INTRUCCIONES AND, OR Y OR-EXCLUSIVO. LAS INSTRUCCIONES andlw Y andwf PERMITEN FORZAR UN BIT A CERO EN UNA VARIABLE SIN ALTERAR LOS DEMÁS BITS. POR EJEMPLO, LA SIGUIENTE INSTRUCCIÓN FUERZA LOS CUATRO BITS MÁS SIGNIFICATIVOS DE WREG A CERO: andlw B´00001111´ ; fuerza los cuatro bits más significativos a cero. LAS SIGUIENTES INSTRUCCIONES REALIZAN LA MISMA OPERACIÓN SOBRE CUALQUIER VARIABLE, movlw andwf B´00001111´ TEMP, F ; carga WREG con la máscara ; AND TEMP con mascara LAS INSTRUCCIONES iorlw E iorwf SON UTILIZADAS PARA FORZAR LOS BITS SELECCIONADOS A 1 DEJANDO LOS DEMÁS BITS INTACTOS. POR EJEMPLO, LAS SIGUIENTES INSTRUCCIONES ESTABLECERÁN LOS TRES BITS MÁS SIGNIFICATIVOS DE PORTB EN 1 DEJANDO LOS DEMÁS BITS EN SU ESTADO INICIAL. movlw iorwf B´11100000´ PORTB, F LAS INSTRUCCIONES xorlw Y xorwf CAMBIARÁN EL ESTADO DE LOS BITS SELECCIONADOS SIN VARIAR LOS DEMÁS BITS. POR LO TANTO, xorlw B´11111000´ CAMBIARÁ DE ESTADO LOS CINCO BITS MÁS SIGNIFICATIVOS DE WREG Y DEJARÁ LOS DEMÁS BITS EN SU ESTADO ORIGINAL. 3-7 INSTRUCCIONES ARITMÉTICAS. ADEMÁS DE LAS INSTRUCCIONES addlw Y addwf, PARA SUMAR DOS NÚMEROS DE UN BYTE, EL PIC18F452 TIENE INSTRUCCIONES PARA SUMA CON ACARREO COMO LO MUESTRA LA ILUSTRACIÓN 3-4. LA INSTRUCCIÓN addwfc SIMPLIFICA EL USO DEL ACARREO AL IMPLEMENTAR SUMA DE NÚMEROS CON MÚLTIPLES BYTES. EXISTEN DOS INSTRUCCIONES PARA RESTA DE DOS BYTES sublw Y subwf. TAMBÍEN ESTÁN PRESENTES INSTRUCIONES DE RESTA CON PRÉSTAMO subwfb Y subfwb. UN POSIBLE ERROR EN UN PROGAMA SE PUEDE PRESENTAR AL UTILIZAR LA SIGUIENTE INSTRUCCIÓN: sublw 2 ESTA INSTRUCCIÓN NO RESTA 2 DE WREG. LA INSTRUCCIÓN RESTA WREG DE 2. PARA RESTAR UN NÚMERO DE WREG, SE PUEDEN UTILIZAR LAS SIGUIENTES INSTRUCCIONES: movlw subwf 2 NUMBER, F NUMBER CONTIENE AL NÚMERO DEL CUAL SE VA A RESTAR 2. LA INSTRUCCIÓN daw ( AJUSTE DECIMAL A WREG ) ES UTILIZADA DURANTE LA SUMA DE NÚMEROS EMPAQUETADOS EN BCD COMO LO MUESTRA LA ILUSTRACIÓN 3-5. FINALMENTE LAS INSTRUCCIONES mullw Y mulwf, MULTIPLICAN DOS NÚMEROS SIN SIGNO DE UN BYTE. AMBAS INSTRUCCIONES ESPERAN QUE UNO DE LOS NÚMEROS SE ENCUENTRE EN WREG. SI EL OTRO NÚMERO ES UNA CONSTANTE, ESTA CONSTANTE PUEDE SER UTILIZADA COMO UN LITERAL CON LA INSTRUCCIÓN mullw. POR EJEMPLO, EL CONTENIDO DE WREG PUEDE SER MULTIPLICADO POR 10 DE LA SIGUIENTE MANERA: mullw D´10´ EL RESULTADO DE 16 BITS APARECERÁ DESPUÉS DE LA EJECUCIÓN DE LA INSTRUCCIÓN ( DE UN CICLO ) EN PRODH : PRODL. LA INSTRUCCIÓN mulwf MUTIPLICA EL CONTENIDO DE CUALQUIER VARIABLE CON WREG. EL RESULTADO ES IGUALMENTE COLOCADO EN PRODH : PRODL, LOS OPERANDOS ORIGINALES PERMANECEN INALTERADOS. 3-8 SALTOS CONDICIONALES E INCONDICIONALES. LAS SIGUIENTES INSTRUCCIONES: bc bnc bz bnz bn bnn bov bnov LLEVAN A CABO LAS PRUEBAS SOBRE LOS BITS DE ESTADO EN EL REGISTRO STATUS C Z N OV Y O SALTAN HACIA UNA DIRECCIÓN EN EL PROGRAMA ( DENTRO DE +/64 INSTRUCCIONES DE UNA PALABRA ) O CONTINUAN CON LA SIGUIENTE INSTRUCCIÓN EN LA SECUENCIA DEL PROGRAMA. SI UNA DIRECCIÓN DE SALTO ESTÁ FUERA DEL ALCANCE DE LA INSTRUCCIÓN, SE PUEDE UTILIZAR EL SIGUIENTE CÓDIGO, bnz otravez PUEDE SER REEMPLAZADO POR bz goto siguiente otra vez siguiente LA INSTRUCCIÓN bra PUEDE SER UTILIZADA PARA UN SALTO INCONDICIONAL POR EJEMPLO, LA SIGUIENTE SUBRUTINA CONTIENE EL CÓDIGO PARA EJECTUTAR “unacosa” SI C = 0 U “otracosa” SI C = 1. bc otracosa . . . bra listo unacosa otracosa . . . listo SE PUEDE CONSIDERAR EL USO DE UN PREPROCESADOR QUE REESCRIBA EL CÓDIGO DE LA SIGUIENTE MANERA IF_ .NC. . . . ( CÓDIGO PARA UNACOSA ) ELSE_ . . . ENDIF_ ( CÓDIGO PARA OTRACOSA ) ESTE TIPO DE ESTRUCTURAS SOPORTAN UN TIPO DE DISCIPLINA QUE ELININA UNO DE LOS PEORES ATRIBUTOS DE MUCHOS PROGRAMAS DESARROLLADOS EN PROGRAMA ENSAMBLADOR, “ CÓDIGO-SPAGHETTI” COMO LO MUESTRA LA ILUSTRACIÓN 3-6. 3-9 INSTRUCCIONES DE SALTO SOBRE CONDICIONALES. ADEMÁS DE PODER DETERMINAR EL ESTADO DE LOS BITS DEL REGISTRO STATUS, EL PIC18F452 TIENE DIEZ INSTRUCCIONES ADICIONALES PARA DETERMINAR EL ESTADO DE LOS BITS DE ESTADO Y SALTAR SOBRE LA SIGUIENTE INSTRUCCIÓN DE ACUERDO A CIERTA CONDICIÓN. EL SALTO PUEDE SER SOBRE INSTRUCCIONES DE UNA SOLA PALABRA O DE DOS PALABRAS. LAS MÁS UTILIZADAS SON btfsc Y btfss. ESTAS INSTRUCCIONES VERIFICAN EL ESTADO DE UN BIT EN EL OPERANDO Y SALTAN LA SIGUIENTE INSTRUCCIÓN SI SON CIERTAS LAS CONDICIONES DE LA PRUEBA. POR EJEMPLO, btfss PORTB, 2 ESTA INSTRUCCIÓN VERIFICA EL ESTADO DEL BIT 2 DE PORTB ( LOS BITS ESTÁN NUMERADOS DEL 0 AL 7 ). SI EL BIT 2 TIENE VALOR 1, LA SIGUIENTE INSTRUCCIÓN NO ES EJECUTADA. DE LO CONTRARIO, SI ES EJECUTADA. TRES INSTRUCCIONES DE SALTO COMPARAN UN VALOR BINARIO SIN SIGNO CON WREG. ESTAS INSTRUCCIONES SON cpfslt, cpfseq Y cpfsgt. LA PRIMERA SALTA LA SIGUIENTE INSTRUCCIÓN SI EL OPERANDO ES MENOR A WREG, LA SEGUNDA SALTA SI SON IGUALES, LA TERCERA SLATA SI EL OPERANDO ES MAYOR AWREG. LA INSTRUCCIÓN tstfsz SALTA LA SIGUIENTE INSTRUCCIÓN SI EL OPERANDO ES IGUAL A CERO, POR EJEMPLO: tstfsz TABLAT ESTA INSTRUCCIÓN VERIFICARÁ SI UN DATO EN MEMORIA DE PROGRAMA ES IGUAL A CERO. LAS ÚLTIMAS CUATRO INSTRUCCIONES DE SALTO INCREMENTAN O DECEMENTAN AL OPERANDO Y SALTAN LA SIGUIENTE INSTRUCCIÓN SI EL RESULTADO ES IGUAL O DIFERENTE A CERO. CONSIDERE LOS SIGUIENTES EJEMPLOS: decfsz decfsnz COUNT, F COUNT, W incfsz incfsnz COUNT, F COUNT, F ; decrementa COUNT, salta si es cero. ; copia COUNT a WREG, decrementa WREG, ; salta si no es cero. ; incrementa COUNT; salta si es cero. ; incrementa COUNT, salta si es diferente a cero 3-10 INSTRUCCIONES PARA LLAMADA Y REGRESO DE SUBRUTINAS. LA INSTRUCCIÓN rcall LLAMARÁ A UNA SUBRUTINA DENTRO DE UN RANGO DE +/- 512 INSTRUCCIONES DE UNA SOLA PALABRA. LA INSTRUCCIÓN call LLAMARÁ A UNA INSTRUCCIÓN EN CUALQUIER DIRECCIÓN DE MEMORIA DE PROGRAMA. UNA VARIANTE A LA INSTRUCCIÓN PARA REGRESO DE SUBRUTINA ES retlw. SI UNA SUBRUTINA FINALIZA CON retlw 5 EL VALOR 5 SE ENCONTARÁ EN WREG AL REGRESAR DE LA SUBRUTINA, ESTA INSTRUCCIÓN RESUME LAS SIGUIENTES DOS INSTRUCCIONES: movlw return 5 3-11 INSTRUCCIONES RESTANTES. LAS INSTRUCCIONES RESTANTES EN LA ILUSTRACIÓN 3-1 PUEDEN SER CONSIDERADAS INSTRUCCINES ESPECIALIZADAS. LAS INSTRUCCIONES push Y pop SOPORTAN EL USO DE LA PILA. LA INSTRUCCIÓN clrwdt, INICIALIZA AL CONTADOR PERRO-GUARDIAN. LA INSTRUCCIÓN sleep ES UTILIZADA PARA CONSERVAR ENERGÍA EN SISTEMAS CON BATERÍAS. LA INSTRUCCIÓN reset INICIALIZA AL CPU DE LA MISMA MANERA QUE UN NIVEL BAJO EN LA ENTRADA /MCLR. LA INSTRUCCIÓN tblwt PERMITE ESCRIBIR EN LA MEMORIA DE PROGRAMA. PROBLEMAS 3-1 DISTINCIÓN F/W. UN PROBLEMA COMÚN DURANTE EL DESARROLLO DE UN PROGRAMA PARA UN MICROCONTROLADOR PIC ES OLVIDAR COLOCAR EL DESTINO DE LA INSTRUCCIÓN. EL ENSAMBLADOR COLOCARÁ UN VALOR POR DEFECTO Y ALERTA CON UN MENSAJE “WARNING”. ¿CUÁL SERÁ LA CONSECUENCIA DE LA SIGUIENTE INSTRUCCIÓN incf COUNT SER INTERPRETADA POR EL ENSAMBLADOR COMO incf COUNT, W CUANDO LA VERDADERA FUNCIÓN DEBERÍA SER incf COUNT, F LA INSTRUCCIÓN ES UTILIZADA COMO CONTADOR EN UN LAZO QUE SE DEBE REPETIR 4 VECES ? 3-2 INSTRUCCIONES MOVE. ¿QUÉ VALOR EXPRESADO COMO NÚMERO BINARIO, SERÁ CARGADO EN EL REGISTRO WREG POR LA SIGUIENTE INSTRUCCIÓN SI SE HA ESTABLECIDO LA BASE DE NUMERACIÓN DEL ENSABLADOR A DECIMAL? movlw 10000000 ¿QUÉ RESULTADO EXTRAÑO SE OBSERVA? 3-3 INSTRUCCIONES MOVE. EN QUÉ SENTIDO LA INSTRUCCIÓN DE DOS PALABRAS movff < operando 1 > < operando 2 > EVITA MEJOR, EFECTOS COLATERALES, QUE LA SIGUIENTE SECUENCIA DE INSTRUCCIONES movf < operando 1 >, W movwf < operando 2 > 3-3 INCREMENTO A MÚLTIPLES BYTES. LAS ILUSTRACIONES 3-4 A Y 3-4B MUESTRAN UNA MANERA DE INCREMENTAR UN NÚMERO DE TRES BYTES. DESARROLLE UNA SECUENCIA DE INSTRUCCIONES ALTERNATIVA PARA INCREMENTAR AARG UTILIZANDO UNICAMENTE INSTRUCCIONES incf Y bz O bnz. ¿QUÉ ALTERNATIVA SERÍA PREFERIBLE? 3-5 MANIPULACIÓN DE BITS. ASUMA QUE TODOS LOS OCHO BITS DEL PUERTO PORTB SON ESTABLECIDOS COMO SALIDAS. TAMBIÉN ASUMA QUE EL REGISTRO WREG CONTIENE UN NÚMERO CON EL SIGUIENTE FORMATO: B´00000b2 b1 b0´ UTILICE UNA SECUENCIA DE INSTRUCCIONES CON - xorwf, andlw, xorwf – PARA ACTUALIZAR LOS TRES BITS MENOS SIGNIFICATIVOS DEL PUERTO PORTB CON LOS BITS b2 b1 b0 EN WREG DEJANDO INALTERADOS LOS CINCO BITS MÁS SIGNIFICATIVO EN EL PUERTO PORTB. NOTA: OBSERVE QUE EL RESULTADO DE UN OR EXCLUSIVO DE UN BIT CONSIGO MISMO ES CERO. 3-6 MANIPULACIÓN DE BITS. ASUMA QUE DOS BYTES DE UNA VARIABLE DE CARACTERES, SON DENOMINADOS D10 Y D1 Y QUE AMBOS CONTIENEN EL CÓDIGO ASCII DE DOS DÍGITOS. SI LOS CUATRO BITS MÁS SIGNIFICATIVOS DEL CÓDIGO ASCII SON FORZADOS A CERO, LO QUE QUEDA ES EL NÚMERO BINARIO DEL DÍGITO. MINIMIZANDO INSTRUCCIONES, ESCRIBA UN PROGRAMA QUE GENERE LA VESIÓN “BCDEMPAQUETADO” DE ESTE NÚMERO DE DOS DÍGITOS EN UNA VARIABLE LLAMADA D10_1. LA CADENA ORIGINAL DEBE QUEDAR INALTERADA. POR EJEMPLO, SI D10 = B´00110101´ ( EL CÓDIGO ASCII PARA 5 ) Y D1 = B´00111001´( CÓDIGO ASCII PARA 9 ), ENTONCES EL PROGRAMA DEBERÁ DEJAR D10 Y D1 SIN CAMBIO MIENTRAS QUE D10_1 = B´01011001´( EL CÓDIGO BCD-EMPAQUETDO PARA 59 ). 3-7 MANIPULACIÓN DE BITS. ESCRIBA UN PROGRAMA CON LA MENOR CANTIDAD DE INSTRUCCIONES POSIBLE PARA INVERTIR LA FUNCIÓN DEL PROGRAMA ANTERIOR. NOTA: LOS CUATRO BITS MÁS SIGNIFICATIVOS ( NIBBLE ) DE UN NÚMERO EN CÓDIFICACIÓN ASCII ES EL DÍGITO B´0011´. 3-8 LA INSTRUCCIÓN sublw. PARA GENERAR WREG - < valor literal > SE SUGIERE LA SIGUIENTE SECUENCIA DE INSTRUCCIONES, sublw negf < valor literal > ; crea literal - WREG WREG, F ; crea - ( literal – WREG ) ESTO FUNCIONA SI WREG CONTIENE UN NÚMERO EN COMPLEMENTO A DOS ( ENTRE + 127 Y - 128 ) Y EL VALOR LITERAL ESTA EXPRESADO EN COMPLEMENTO A DOS. SIN EMBARGO, TAMBIEN PARECE FUNCIONAR SI WREG CONTIENE A UN NÚMERO SIN SIGNO ( ENTRE 0 Y 255 ) Y EL LITERAL ES UN NÚMERO MENOR O IGUAL A WREG, DE MANERA QUE EL RESULTADO EN UN NÚMERO SIN SIGNO. PARA VERIFICAR ESTO, REALICE LAS SIGUIENTES OPERACIONES: (A) WREG = 5, LITERAL = 3, EL RESULTADO DEBERÁ SER 2. (B) WREG = 255, LITERAL = 3, EL RESULTADO DEBERÁ SER 252. 3-9 DESPLAZAMIENTO RÁPIDO. DEBIDO A SU ALTA VELOCIDAD, LA INSTRUCCIÓN DE MULTIPLICACIÓN PUEDE SER UTILIZADA COMO DESPLAZADOR DESECHANDO VALORES EN UN EXTREMO Y RELLENANDO CON CEROS EN EL OTRO EXTREMO. EL OPERANDO ES COLOCADO WREG Y MULTIPLICADO POR UNA POTENCIA DE 2 CORRESPONDIENTE A LA CANTIDAD DE DESPLAZAMIENTOS DESEADOS. POR EJEMPLO, SI EL NÚMERO B´11000101´ ES MULTIPLICADO POR 8, ENTONCES PRODH SERÁ IGUAL A B´00000110´ Y PRODL, SERÁ IGUAL A B´00101000´. OBSERVE QUE PRODH CONTIENE EL VALOR ORIGINAL DESPLAZADO HACIA LA DERECHA CINCO VECES. PRODL, CONTIENE AL VALOR ORIGINAL DESPLAZADO HACIA LA IZQUIERDA TRES VECES. EL BYTE SELECCIONADO PUEDE SER ESCRITO DE VUELTA AL OPERANDO. ( A ) ¿CUÁL ES LA REGLA GENERAL PARA DESPLAZAR UN NÚMERO HACIA LA IZQUIERDA N VECES ( DONDE 2 <= N <= 7 )? ( B ) ¿CUÁL ES LA REGLA GENERAL PARA DESPLAZAR UN NÚMERO N VECES HACIA LA DERECHA ( DONDE 2 <= N <= 7 )? ( C ) ESCRIBA UN PROGAMA PARA DESPLAZAR UNA VARIABLE DE UN BYTE DENOMINADO TEMP, TRES VECES HACIA LA IZQUIERDA UTILIZANDO LA INSTRUCCIÓN “ROTACIÓN IZQUIERDA” Y LUEGO ACLARANDO LOS TRES BITS MENOS SIGNIFICATIVOS. 3-10 INSTRUCCIONES DE SALTO CONDICIONAL. MUESTRE EL CÓDIGO QUE GENERARÍA UN PREPROCESADOR ESTRUCTURADO, CON BASE AL SIGUIENTE CÓDIGO: WHILE … , C. . . ( CÓDIGO A SER EJECUTADO ) . ENDWHILE 3-11 INSTRUCCIONES DE SALTO CONDICIONAL. MUESTRE EL CÓDIGO QUE GENERARÍA UN PREPROCESADOR ESTRUCTURADO, CON BASE AL SIGUIENTE CÓDIGO: REPEAT… . . . UNTIL … PORTB, 6 = 1 ( CÓDIGO A SER EJECUTADO ) ESTA ESTRUCTURA DEBERÁ EJECUTAR EL BLOQUE DE CÓDIGO UNA VEZ Y LUEGO CONTINUAR EJECUTANDO EL BLOQUE REPETIDAMENTE HASTA QUE FINALMENTE EL BIT 6 DE PORTB SEA IGUAL A 1.