11 instrucciones de salto de los atmega

29
[email protected] 1 INSTRUCCIONES DE SALTO EN LOS MICROCONTOLADORES ATmega Elaborado por: Ing. Jaime E. Velarde

Upload: jaime-e-velarde

Post on 01-Jul-2015

3.709 views

Category:

Education


4 download

DESCRIPTION

Descripción de las instrucciones de salto de los microcontroladores ATmega

TRANSCRIPT

Page 1: 11  Instrucciones de Salto  de los Atmega

[email protected] 1

INSTRUCCIONES DE SALTO

EN LOS

MICROCONTOLADORES

ATmega

Elaborado por: Ing. Jaime E. Velarde

Page 2: 11  Instrucciones de Salto  de los Atmega

[email protected] 2

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

Page 3: 11  Instrucciones de Salto  de los Atmega

[email protected] 3

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

Page 4: 11  Instrucciones de Salto  de los Atmega

[email protected] 4

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

Page 5: 11  Instrucciones de Salto  de los Atmega

[email protected] 5

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

Page 6: 11  Instrucciones de Salto  de los Atmega

[email protected] 6

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

Page 7: 11  Instrucciones de Salto  de los Atmega

[email protected] 7

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

Page 8: 11  Instrucciones de Salto  de los Atmega

[email protected] 8

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

Page 9: 11  Instrucciones de Salto  de los Atmega

[email protected] 9

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

Page 10: 11  Instrucciones de Salto  de los Atmega

[email protected] 10

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

Page 11: 11  Instrucciones de Salto  de los Atmega

[email protected] 11

DIAGRAMA DE COMPARAR Y

OMITIR SI SON IGUALES

ES Rd = Rr ?

SIGUIENTE

INSTRUCCIÓN

NO

SI

CPSE

Page 12: 11  Instrucciones de Salto  de los Atmega

[email protected] 12

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

Page 13: 11  Instrucciones de Salto  de los Atmega

[email protected] 13

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

Page 14: 11  Instrucciones de Salto  de los Atmega

[email protected] 14

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

Page 15: 11  Instrucciones de Salto  de los Atmega

[email protected] 15

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

Page 16: 11  Instrucciones de Salto  de los Atmega

[email protected] 16

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

Page 17: 11  Instrucciones de Salto  de los Atmega

[email protected] 17

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

Page 18: 11  Instrucciones de Salto  de los Atmega

[email protected] 18

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

Page 19: 11  Instrucciones de Salto  de los Atmega

[email protected] 19

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

Page 20: 11  Instrucciones de Salto  de los Atmega

[email protected] 20

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

Page 21: 11  Instrucciones de Salto  de los Atmega

[email protected] 21

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

Page 22: 11  Instrucciones de Salto  de los Atmega

[email protected] 22

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

Page 23: 11  Instrucciones de Salto  de los Atmega

[email protected] 23

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

Page 24: 11  Instrucciones de Salto  de los Atmega

[email protected] 24

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

Page 25: 11  Instrucciones de Salto  de los Atmega

[email protected] 25

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

Page 26: 11  Instrucciones de Salto  de los Atmega

[email protected] 26

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

Page 27: 11  Instrucciones de Salto  de los Atmega

[email protected] 27

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

Page 28: 11  Instrucciones de Salto  de los Atmega

[email protected] 28

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

Page 29: 11  Instrucciones de Salto  de los Atmega

[email protected] 29

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