11 Instrucciones de Salto de los Atmega
-
Upload
jaime-e-velarde -
Category
Education
-
view
3.711 -
download
4
description
Transcript of 11 Instrucciones de Salto de los Atmega
INSTRUCCIONES DE SALTO
EN LOS
MICROCONTOLADORES
ATmega
Elaborado por: Ing. Jaime E. Velarde
CLASIFICACIÓN DE LOS
SALTOSEXISTE DOS TIPOS DE SALTOS:
• LOS DENOMINADOS INCONDICIONALES, QUE
SON AQUELLOS QUE SE EJECUTAN SIEMPRE
QUE SE ENCUENTRA EN EL PROGRAMA
• EXISTEN TAMBIÉN, LOS CONDICIONADOS
PARA LOS CUALES EL MICROCONTROLADOR
PRIMERO EVALÚA LA CONDICIÓN QUE SE
ESPECIFICA EN LA INSTRUCCIÓN Y LUEGO SI
LA RESPUESTA ES VERDADERA, SALTA. EN
EL CASO CONTRARIO, NO SALTA Y CONTINUA EN LA SECUENCIA NORMAL DEL PROGRAMA
SALTAR DIRECTAMENTE Y EN
FORMA INCONDICIONAL• SALTA A LA LOCALIDAD DE LA FLASH CON DIRECCIÓN k (0x0000000 … 0x3FFFFF = 4 Megas)
MNEMÓNICO: JMP k [3]
OPERACIÓN: PC ← k
CÓDIGO: 1001 010k kkkk 110k
kkkk kkkk kkkk kkkk
• SALTA A UNA LOCALIDAD DE LA FLASH DISTANTE k LOCALIDADES (-2048 … 2047), DESDE DONDE SE ENCUENTRA LA INSTRUCCIÓN DEL SALTO
MNEMÓNICO: RJMP k [2]
OPERACIÓN: PC ← PC+k+1
CÓDIGO: 1100 kkkk kkkk kkkk
SALTOS INCONDICIONALES EN
FORMA DIRECTA A CUALQUIER PARTE
DEL PROGRAMA
SIGUIENTE
INSTRUCCIÓN
JMP
INSTRUCCIÓN DE
SALTO (HACIA
ADELANTE)
INSTRUCCIÓN DE
DESTINO
PC k
SIGUIENTE
INSTRUCCIÓN
INSTRUCCIÓN DE
SALTO (HACIA
ATRÁS)
PC k
INSTRUCCIÓN DE
DESTINO
SALTOS INCONDICIONALES EN FORMA
RELATIVA DENTRO DE UN RANGO DE
4KILOPALABRAS
SIGUIENTE
INSTRUCCIÓN
RJMP
INSTRUCCIÓN DE
SALTO (SI k ES
POSITIVO)
INSTRUCCIÓN DE
DESTINO
PC PC + k
SIGUIENTE
INSTRUCCIÓN
INSTRUCCIÓN DE
SALTO (SI k ES
NEGATIVO)
PC PC + k
INSTRUCCIÓN DE
DESTINO
SALTAR INDIRECTAMENTE Y
EN FORMA INCONDICIONAL
• SALTA A LA LOCALIDAD DE LA FLASH
CUYA DIRECCIÓN ES EL CONTENIDO
DEL PUNTERO Z (0x0000 … 0xFFFF = 64
Kilos)
MNEMÓNICO: IJMP [2]
OPERACIÓN: PC ← Z
CÓDIGO: 1001 0100 0000 1001
SALTOS INCONDICIONALES EN
FORMA INDIRECTA A CUALQUIER
PARTE DEL PROGRAMA
SIGUIENTE
INSTRUCCIÓN
IJMP
INSTRUCCIÓN DE
SALTO (Z MAYOR
QUE EL PC)
INSTRUCCIÓN DE
DESTINO
PC Z
SIGUIENTE
INSTRUCCIÓN
INSTRUCCIÓN DE
SALTO (Z MENOR
QUE EL PC)
PC Z
INSTRUCCIÓN DE
DESTINO
COMPARAR EL CONTENIDO DE
UN REGISTRO• COMPARA EL REGISTRO CON UN VALOR INMEDIATOMNEMÓNICO: CPI Rd,K [2]
OPERACIÓN: Rd - K
CÓDIGO: 0011 KKKK dddd KKKK
• COMPARA ENTRE DOS REGISTROSMNEMÓNICO: CP Rd,Rr [2]
OPERACIÓN: Rd - Rr
CÓDIGO: 0001 01rd dddd rrrr
• COMPARA ENTRE DOS REGISTROS Y EL LLEVOMNEMÓNICO: CPC Rd,Rr [2]
OPERACIÓN: Rd - Rr - C
CÓDIGO: 0000 01rd dddd rrrr
BANDERAS QUE SE MODIFICAN
CON LAS COMPARACIONES
LAS BANDERAS TOMAN EL VALOR DE UNO LÓGICO COMO RESULTADO DE LA RESTA O COMPARACIÓN DE LOS OPERANDOS:– C = 1 CUANDO HAY DEBO EN EL BIT MAS
SIGNIFICATIVO
– Z = 1 CUANDO TODOS LOS BITS SON CERO
– N = 1 CUANDO AL BIT MAS SIGNIFICATIVO ES UNO
– V = 1 CUANDO HAY DESBORDAMIENTO EN LA OPERACIÓN DE NÚMEROS CON SIGNO EN COMPLEMENTO DE 2
– S = 1 COMO RESULTADO DE “N OR EXCLUSIVO V”
– H = 1 CUANDO HAY DEBO ENTRE EL BIT 3 AL BIT 4
COMPARAR Y OMITIR SI SON
IGUALES
• COMPARA ENTRE DOS REGISTROS Y
OMITE LA SIGUIENTE INSTRUCCIÓN SI
SON IGUALESMNEMÓNICO: CPSE Rd,Rr [1, 2 o 3]
OPERACIÓN:
Si Rd = Rr entonces PC ← PC + 2 (o 3)
OMITE LA SIGUIENTE INSTRUCCIÓN
Si Rd ≠ Rr entonces PC ← PC + 1
CONTINUA LA SECUENCIA NORMAL
CÓDIGO: 0001 00rd dddd rrrr
DIAGRAMA DE COMPARAR Y
OMITIR SI SON IGUALES
ES Rd = Rr ?
SIGUIENTE
INSTRUCCIÓN
NO
SI
CPSE
OMITIR DE ACUERDO AL BIT
DEL REGISTRO• OMITE LA SIGUIENTE INSTRUCCIÓN SI EL BIT DEL REGISTRO ES CEROMNEMÓNICO: SBRC Rr,b [1, 2 o 3]
OPERACIÓN:
Si Rr(b) = 0 entonces PC ← PC + 2 (o 3) OMITE LA SIGUIENTE INSTRUCCIÓN
Si Rr(b) = 1 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1111 110r rrrr 0bbb
• OMITE LA SIGUIENTE INSTRUCCIÓN SI EL BIT DEL REGISTRO ES UNOMNEMÓNICO: SBRS Rr,b [1, 2 o 3]
OPERACIÓN:
Si Rr(b) = 1 entonces PC ← PC + 2 (o 3) OMITE LA SIGUIENTE INSTRUCCIÓN
Si Rr(b) = 0 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1111 111r rrrr 0bbb
DIAGRAMAS DE OMITIR DE
ACUERDO AL BIT DEL REGISTRO
ES Rr(b) = 0?
SIGUIENTE
INSTRUCCIÓN
NO
SI
ES Rr(b) = 1?
SIGUIENTE
INSTRUCCIÓN
NO
SI
SBRC SBRS
OMITIR DE ACUERDO AL BIT
DEL REGISTRO DE E/S• OMITE LA SIGUIENTE INSTRUCCIÓN SI EL BIT DEL REGISTRO DE E/S ES CEROMNEMÓNICO: SBIC A,b [1, 2 o 3]
OPERACIÓN:
Si I/O A(b) = 0 entonces PC ← PC + 2 (o 3) OMITE LA SIGUIENTE INSTRUCCIÓN
Si I/O A(b) = 1 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1001 1001 AAAA Abbb
• OMITE LA SIGUIENTE INSTRUCCIÓN SI EL BIT DEL REGISTRO DE E/S ES UNOMNEMÓNICO: SBIS A,b [1, 2 o 3]
OPERACIÓN:
Si I/O A(b) = 1 entonces PC ← PC + 2 (o 3) OMITE LA SIGUIENTE INSTRUCCIÓN
Si I/O A(b) = 0 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1001 1011 AAAA Abbb
DIAGRAMAS DE OMITIR DE
ACUERDO AL BIT DEL REG. DE E/S
ES A(b) = 0?
SIGUIENTE
INSTRUCCIÓN
NO
SI
ES A(b) = 1?
SIGUIENTE
INSTRUCCIÓN
NO
SI
SBIC SBIS
BIFURCAR DE ACUERDO AL BIT
DEL REGISTRO DE ESTADO
• BIFURCA EL PROGRAMA SI EL BIT DEL SREG ES CEROMNEMÓNICO: BRBC s,k [1 o 2]
OPERACIÓN:
Si SREG(s) = 0 entonces PC ← PC + k + 1 SALTA
Si SREG(s) = 1 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1111 01kk kkkk ksss
• BIFURCA EL PROGRAMA SI EL BIT DEL SREG ES UNOMNEMÓNICO: BRBS s,k [1 o 2]
OPERACIÓN:
Si SREG(s) = 1 entonces PC ← PC + k + 1 SALTA
Si SREG(s) = 0 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1111 00kk kkkk ksss
Nota: el salto está comprendido entre -64 y 63 localidades
DIAGRAMAS DE BIFURCAR DE
ACUERDO AL BIT DEL SREG
ES SREG(s) = 0?
SIGUIENTE
INSTRUCCIÓN
NO
SI
DESTINO
DEL SALTO
ES SREG(s) = 1?
SIGUIENTE
INSTRUCCIÓN
NO
SI
DESTINO
DEL SALTO
BRBC BRBS
BIFURCAR DE ACUERDO A LA
BANDERA C (BANDERA DEL LLEVO)
• BIFURCA EL PROGRAMA SI NO HAY LLEVO (CARRYCLEAR)MNEMÓNICO: BRCC k [1 o 2]
OPERACIÓN:
Si C = 0 entonces PC ← PC + k + 1 SALTA
Si C = 1 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1111 01kk kkkk k000
• BIFURCA EL PROGRAMA SI HAY LLEVO (CARRYSET)MNEMÓNICO: BRCS k [1 o 2]
OPERACIÓN:
Si C = 1 entonces PC ← PC + k + 1 SALTA
Si C = 0 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1111 00kk kkkk k000
BIFURCAR DE ACUERDO A LA
BANDERA Z (BANDERA DE CERO)
• BIFURCA EL PROGRAMA SI NO SON IGUALES O RESULTADO DIFERENTE DE CEROMNEMÓNICO: BRNE k [1 o 2]
OPERACIÓN:
Si Z = 0 entonces PC ← PC + k + 1 SALTA
Si Z = 1 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1111 01kk kkkk k001
• BIFURCA EL PROGRAMA SI SON IGUALES O RESULTADO CEROMNEMÓNICO: BREQ k [1 o 2]
OPERACIÓN:
Si Z = 1 entonces PC ← PC + k + 1 SALTA
Si Z = 0 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1111 00kk kkkk k001
BIFURCAR DE ACUERDO A LA
BANDERA N (BANDERA DE NEGACIÓN)
• BIFURCA EL PROGRAMA SI EL RESULTADO ES POSITIVOMNEMÓNICO: BRPL k [1 o 2]
OPERACIÓN:
Si N = 0 entonces PC ← PC + k + 1 SALTA
Si N = 1 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1111 01kk kkkk k010
• BIFURCA EL PROGRAMA SI EL RESULTADO ES NEGATIVOMNEMÓNICO: BRMI k [1 o 2]
OPERACIÓN:
Si N = 1 entonces PC ← PC + k + 1 SALTA
Si N = 0 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1111 00kk kkkk k010
BIFURCAR DE ACUERDO A LA
BANDERA V (BANDERA DE DESBORDAMIENTO)
• BIFURCA EL PROGRAMA SI NO HAY DESBORDAMIENTOMNEMÓNICO: BRVC k [1 o 2]
OPERACIÓN:
Si V = 0 entonces PC ← PC + k + 1 SALTA
Si V = 1 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1111 01kk kkkk k011
• BIFURCA EL PROGRAMA SI HAY DESBORDAMIENTOMNEMÓNICO: BRVS k [1 o 2]
OPERACIÓN:
Si V = 1 entonces PC ← PC + k + 1 SALTA
Si V = 0 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1111 00kk kkkk k011
BIFURCAR DE ACUERDO A LA
BANDERA S (BANDERA DEL SIGNO)
• BIFURCA EL PROGRAMA SI ES MAYOR O IGUALMNEMÓNICO: BRGE k [1 o 2]
OPERACIÓN:
Si S = 0 entonces PC ← PC + k + 1 SALTA
Si S = 1 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1111 01kk kkkk k100
• BIFURCA EL PROGRAMA SI ES MENORMNEMÓNICO: BRLT k [1 o 2]
OPERACIÓN:
Si S = 1 entonces PC ← PC + k + 1 SALTA
Si S = 0 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1111 00kk kkkk k100
BIFURCAR DE ACUERDO A LA
BANDERA H (BANDERA DEL LLEVO INTERMEDIO)
• BIFURCA EL PROGRAMA SI NO HAY LLEVO INTERMEDIOMNEMÓNICO: BRHC k [1 o 2]
OPERACIÓN:
Si H = 0 entonces PC ← PC + k + 1 SALTA
Si H = 1 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1111 01kk kkkk k101
• BIFURCA EL PROGRAMA SI HAY LLEVO INTERMEDIOMNEMÓNICO: BRHS k [1 o 2]
OPERACIÓN:
Si H = 1 entonces PC ← PC + k + 1 SALTA
Si H = 0 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1111 00kk kkkk k101
BIFURCAR DE ACUERDO A LA
BANDERA T
• BIFURCA EL PROGRAMA SI ES CERO LA BANDERA DE USUARIOMNEMÓNICO: BRTC k [1 o 2]
OPERACIÓN:
Si T = 0 entonces PC ← PC + k + 1 SALTA
Si T = 1 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1111 01kk kkkk k110
• BIFURCA EL PROGRAMA SI ES UNO LA BANDERA DE USUARIOMNEMÓNICO: BRTS k [1 o 2]
OPERACIÓN:
Si T = 1 entonces PC ← PC + k + 1 SALTA
Si T = 0 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1111 00kk kkkk k110
BIFURCAR DE ACUERDO A LA
BANDERA I (BANDERA DE INTERRUPCIÓN GLOBAL)
• BIFURCA EL PROGRAMA SI LAS INTERRUPCIONES ESTÁN DESHABILITADASMNEMÓNICO: BRID k [1 o 2]
OPERACIÓN:
Si I = 0 entonces PC ← PC + k + 1 SALTA
Si I = 1 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1111 01kk kkkk k111
• BIFURCA EL PROGRAMA SI LAS INTERRUPCIONES ESTÁN HABILITADASMNEMÓNICO: BRIE k [1 o 2]
OPERACIÓN:
Si I = 1 entonces PC ← PC + k + 1 SALTA
Si I = 0 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1111 00kk kkkk k111
BIFURCAR DE ACUERDO A LA
BANDERA C (NÚMEROS SIN SIGNO)
• BIFURCA EL PROGRAMA SI ES IGUAL O ESTA SOBREMNEMÓNICO: BRSH k [1 o 2]
OPERACIÓN:
Si C = 0 entonces PC ← PC + k + 1 SALTA
Si C = 1 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1111 01kk kkkk k000
• BIFURCA EL PROGRAMA SI ESTA BAJOMNEMÓNICO: BRLO k [1 o 2]
OPERACIÓN:
Si C = 1 entonces PC ← PC + k + 1 SALTA
Si C = 0 entonces PC ← PC + 1 CONTINUA
CÓDIGO: 1111 00kk kkkk k000
LLAMAR A SUBRUTINA
DIRECTAMENTE• GUARDA EN EL STACK LA DIRECCIÓN DE LA PRÓXIMA INSTRUCCIÓN Y SALTA A LA LOCALIDAD DE LA FLASH CON DIRECCIÓN k (0x0000000 … 0x3FFFFF)
MNEMÓNICO: CALL k [4]
OPERACIÓN: STACK ← PC + 2 SP ← SP - 2 PC ← k
CÓDIGO: 1001 010k kkkk 111k
kkkk kkkk kkkk kkkk
• GUARDA EN EL STACK LA DIRECCIÓN DE LA PRÓXIMA INSTRUCCIÓN Y SALTA A UNA LOCALIDAD DE LA FLASH DISTANTE k LOCALIDADES (-2048 … 2047), DESDE DONDE SE ENCUENTRA LA INSTRUCCIÓN DE LA LLAMADA
MNEMÓNICO: RCALL k [3]
OPERACIÓN: STACK ← PC + 1 SP ← SP - 2
PC ← PC + k + 1
CÓDIGO: 1101 kkkk kkkk kkkk
LLAMAR A SUBRUTINA
INDIRECTAMENTE
• GUARDA EN EL STACK LA DIRECCIÓN
DE LA SIGUIENTE DIRECCIÓN Y SALTA
A LA LOCALIDAD DE LA FLASH CUYA
DIRECCIÓN ES EL CONTENIDO DEL
PUNTERO Z (0x0000 … 0xFFFF)
MNEMÓNICO: ICALL [3]
OPERACIÓN: STACK ← PC + 1 SP ← SP – 2
PC ← Z
CÓDIGO: 1001 0101 0000 1001
RETORNAR DE LA SUBRUTINA
Y DE LA INTERRUPCIÓN• RECUPERA DESDE EL STACK LA DIRECCIÓN QUE FUE GUARDADA POR LA LLAMADA DE SUBRUTINAMNEMÓNICO: RET [4]
OPERACIÓN: PC ← STACK SP ← SP + 2
CÓDIGO: 1001 0101 0000 1000
• RECUPERA DESDE EL STACK LA DIRECCIÓN
QUE FUE GUARDADA POR LA INTERRUPCIÓNMNEMÓNICO: RETI [4]
OPERACIÓN: PC ← STACK SP ← SP + 2
I ← 1
CÓDIGO: 1101 0101 0001 1000