Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola de nuevo!!
Estoy intentando hacer un contador en AVR, y el tema es que cuento cantidades de 2 bytes.
Los 2 bytes los tengo almacenados en memoria, pero no se como recogerlos para ir decrementando el número y avanzar así el contador, ya que todos los registros son de 1 byte.
¿Se puede decrementar directamente un número de 2 bytes sobre memoria SRAM?
A ver si me podeis echar una mano.
Gracias!!
¿Qué lenguaje estás usando? Si usas uno de alto nivel (como C) se supone que debería incluir variables de varios tamaños.
Si lo estás haciendo en lenguaje ensamblador en una arquitectura en la que los registros son de 8 bits y no hay ninguna instrucción que trabaje sobre registros de más de 8 bits, entonces lo que puedes hacer es decrementar el byte de menor peso, después comprobar si se desbordó, y en el caso de que se haya desbordado entonces decrementas el byte de mayor peso.
Hola!
No conozco mucho de los AVR, pero creo recordar que tienen registros de 16 bits que permiten operaciones de incremento y decremento en ensamblador, en concreto los punteros de datos indirectos (registros X, Y y Z). Normalmente se utilizan para apuntar a datos en SRAM, es decir guardando una direccion de 16 bits, pero se pueden modificar con los registros XH y XL (byte alto y bajo del registro respectivamente).
En el antiguo 8051 solo habia uno o dos y podias incrementar y decrementarlo haciendo algo como
inc DPTR
dec DPTR
en los AVR se que puedes acceder a datos de la SRAM con instrucciones que incrementan o decrementan el puntero automáticamente, pero no recuerdo si soportan la instruccion inc o dec...
Salu2! 😉
Muchas gracias a todos!!
Finalmente lo que haré es cargar directamente el contador en un registro de 16 bits (X,Y oZ) y decrementar o incrementar con las funciones ADIW o SBIW, ya que las de INC y DEC no valen para este tipo de registros.
Gracias y saludos!!