En este artículo, analizaremos los bucles en AVR y las instrucciones de bifurcación, tanto condicionales como incondicionales.
Bucle en AVR:
una operación repetida o un conjunto de instrucciones se conoce como un bucle en la programación. Es una de las técnicas más fundamentales que resulta muy útil al escribir código. Una forma de ejecutar un bucle en AVR es escribir un conjunto de instrucciones repetidamente.
Ejemplo –
Por ejemplo:
LDI R20, 0 LDI R21, 1 ADD R20, R21 ADD R20, R21 ADD R20, R21 ADD R20, R21 ADD R20, R21 ADD R20, R21
Como podemos ver, esta forma de ejecutar un código es muy ineficiente y ocupa mucho espacio de código. Por lo tanto, usamos instrucciones de bifurcación (Condicional e Incondicional) para hacer que el ciclo sea más simple y eficiente en cuanto al espacio.
Instrucciones de Rama Condicional:
Hemos discutido las Instrucciones de Rama Condicional en detalle en este artículo . Lo discutiremos brevemente aquí.
La siguiente tabla muestra diferentes instrucciones de bifurcación condicional junto con su explicación.
INSTRUCCIÓN | EXPLICACIÓN | ESTADO DE BANDERA |
---|---|---|
BREQ | Rama si es igual | Rama si Z = 1 |
BRNE | Rama si no es igual | Rama si Z = 0 |
BRSH | Sucursal si es igual o superior | Rama si C = 0 |
BRLO | Rama si es más baja | Rama si C = 1 |
BRLT | Sucursal si es menor que (firmado) | Rama si S = 1 |
BRGE | Rama si es mayor o igual (con signo) | Rama si S = 0 |
BRVS | Rama si se establece el indicador de desbordamiento | Rama si V = 1 |
BRVC | Rama si el indicador de desbordamiento está claro | Rama si V = 0 |
Bucle usando BRNE:
la instrucción BRNE (bifurcación si no es igual) usa el indicador Z en el registro de estado.
Ejemplo:
escriba un programa para sumar 5 a R20 20 veces y envíe la suma a PORTC usando la instrucción BRNE.
LDI R16, 20; counter register LDI R20, 0 LDI R21, 5 LOOP: ADD R20, R21 DEC R16; decrement the counter BRNE LOOP; repeat until counter = 0 OUT PORTC, R20
Todas las ramas condicionales son saltos cortos: esto significa que la dirección del destino debe estar dentro de los 64 bytes del contador del programa.
Instrucciones de bifurcación incondicional:
la bifurcación incondicional es un salto en el que el control se transfiere incondicionalmente a la dirección de destino. En AVR, hay 3 instrucciones de bifurcación incondicionales: JMP, RJMP e IJMP. El uso de qué instrucción depende de la dirección de destino.
- JMP (salto largo):
JMP es un salto incondicional que puede ir a cualquier ubicación de memoria en el espacio de direcciones de 4M (palabras) del AVR. Es una instrucción de 4 bytes en la que se utilizan 10 bits para el código de operación y los otros 22 bits representan la dirección de 22 bits de la ubicación de destino. - RJMP (salto relativo):
en esta instrucción de 2 bytes, los primeros 4 bits se usan para el código de operación y el resto de los bits se usan para la dirección relativa de la ubicación de destino. El rango relativo de direcciones de 000-$FFF se divide en saltos hacia adelante y hacia atrás, es decir, entre -2048 y +2047 de memoria en relación con la dirección del contador del programa actual. - IJMP (salto indirecto) –
Es una instrucción de 2 bytes. Cuando se ejecuta, el contador de programa se carga con el contenido del registro Z, por lo que salta a la dirección proporcionada por el registro Z. IJMP puede saltar dentro de las 64K palabras más bajas de la memoria del programa.
Publicación traducida automáticamente
Artículo escrito por kunalsg18elec y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA