PIC18 Manejo de ensamblaje 16 bits

1

Tengo un sensor de color que es semi-funcional en este momento. Soy bastante nuevo en Assembly, especialmente en PIC, y estoy confundido en cuanto a cómo manejar una dirección "alta" y "baja" para un número. Dejame explicar.

Cuando leo desde mi sensor de color, tengo que leer desde una dirección alta y baja. Esto no es un problema, más bien mi problema es procesar este número después de que lo leí. El tutorial que seguí hace algo como esto:

colour1 = (addrH << 8) | addrL ...

Lo que tiene sentido: tenemos 16 bits, desplazamiento a la izquierda 8 para colocar los bits altos en ese momento o para manejar los bits bajos. Mi pregunta es, ¿cuál es la mejor manera de hacer esto en ensamblaje?

He intentado ignorantemente algo como esto

SHIFT_8L macro count
   rlncf    addrH
   movlw    b'11111110'
   andwf    addrH,1
   decfsz count
   bra SHIFT_8L

   movff    addrH, WREG
   iorwf    addrL, 0
   movwf    final
endm

Pero en realidad, todo lo que está haciendo es simplemente mover addrL a final . En última instancia, tendré que multiplexar para ver qué color domina y, ¿cuál es la forma más eficiente de hacerlo?

¡Gracias!

Editar 2017/02 / 21h47 Estoy usando PIC18F4620 y estoy interactuando con un TCS34725 Color Sensor .

    
pregunta mreiter

2 respuestas

1

En una máquina de 8 bits, no es necesario cambiar las cosas en 8 bits. Simplemente muévalos al byte apropiado en primer lugar.

Lo que parece que falta en el fragmento de código que muestra es que el acumulador y todos los bytes de datos tienen solo 8 bits de ancho. Si se desplaza un byte a la izquierda 8 veces, simplemente se borrará independientemente del valor original.

Para hacer el equivalente del código C que muestra:

;   In the variable definition section:
;
color1   res     2           ;reserve 2 bytes of RAM for the variable COLOR1

;   Later in executable code:
;
         movff   addrL, color1+0 ;copy addrH:addrL into color1
         movff   addrH, color1+2

El uso de color1 más tarde se haría de un byte a la vez. Para agregarlo con otro valor de 16 bits, por ejemplo: Use ADDWF para agregar los bytes bajos, almacene el resultado, Use ADDWFC para agregar los bytes altos, almacene el resultado.

    
respondido por el Olin Lathrop
0
  

Mi pregunta es, ¿cuál es la mejor manera de hacerlo en ensamblaje?

Le sugiero que retroceda y se pregunte si tiene que hacerlo en ensamblaje. el ensamblaje es mucho más difícil de usar y de portar que un lenguaje de alto nivel como C. hacerlo en C le permite concentrarse en más cosas de valor agregado (como la lógica) en lugar de las que puede manejar un compilador (matemáticas).

    
respondido por el dannyf

Lea otras preguntas en las etiquetas