CAPÍTULO 3 - JUEGO... 3-1 CONTENIDO

Anuncio
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.
Descargar