Realizar operaciones lógicas en PINS de puertos en el ensamblaje

1

Estoy tratando de hacer lo siguiente siguiendo las operaciones en PINS, pero no estoy seguro de cómo hacer la no operación en un puerto, ¿xor ..etc? ¿Alguien me mostraría un código de psesuod?

    
pregunta andre ahmed

1 respuesta

0

Después de mirar esto he entendido lo suficiente como para mostrar cómo \ Se pueden hacer $ \ text {LED} _0 \ $ y \ $ \ text {LED} _1 \ $ , que deben mostrarse lo suficiente como para que los pueda implementar. los otros dos.

Como puede ver, \ $ \ text {LED} _0 \ $ depende de tres bits, la solución más sencilla sería usar registros temporales mientras manipula los datos de \ $ \ text {PA} \ $ y luego establezca \ $ \ text {LED} _0 \ $ una vez que haya terminado.

Aquí hay una solución para los dos primeros bits, no es eficiente / optimizada, pero hará que usted entienda lo que estoy haciendo. Escribiré PA = Puerto A ya que eso es lo que ha escrito en los comentarios a su pregunta.

MOV TRA,PA // Copy contents from Port A into a Temporary Register A
MOV TRB,PA // Copy contents from Port A into a Temporary Register B
MOV TRC,PA // Copy contents from Port A into a Temporary Register C

LSR TRA //Move all bits once to the right in TRA, so bit1 in TRA is now in bit0

LSR TRB 
LSR TRB //Move all bits twice to the right in TRB, so bit2 in TRB is now in bit0

LSR TRC 
LSR TRC //Move all bits three times to the right in TRC,
LSR TRC //so bit3 in TRC is now in bit0


AND TRA,TRB //AND TRA and TRB together, bit by bit and save the result in TRA
OR TRA, TRC //OR the new TRA with TRC and store the information in TRA

ANDI TRA,1 //AND TRA with 0b00000001, in other words, remove the mess in other bits
MOV LED,TRA //copy TRA into your LED register

//Now, you're ready for the second bit for your LED register
//As you can see, It's PA1, PA2 and PA3 again, PA2 is still in TRB and 
//PA3 is still in TRC, PA1 is demolished, so we need to update TRA again

MOV TRA,PA // Copy contents from Port A into a Temporary Register A

LSR TRA //Move all bits once to the right in TRA, so bit1 in TRA is now in bit0

COM TRB //Make TRB into NOT TRB
OR TRA,TRB //OR TRA with the inverted TRB
AND TRA,TRC //AND the new TRA with TRC

ANDI TRA,1 //AND TRA with 0b00000001, in other words, remove the mess in other bits
LSL TRA //Move all bits in TRA one bit to the left
OR LED,TRA //Move whatever information is in bit1 in TRA into LED at bit1

//Now you're ready for the other two bits

Definitivamente esto debería empezar.

Recuerde que probablemente desee que PA sea PIN_A, PIN_A normalmente corresponde en el lenguaje del ensamblador a la entrada de PORT_A.

Si desea optimizar el código, nunca mueva las cosas a TRB y TRC y haga que TRA se mueva, debería llevar a un código más eficiente y usar la multiplicación por \ $ 2 ^ n \ $ para copiar datos en el registro de multiplicación y rotar \ $ n \ $ a la izquierda.
Así que simplemente gire inteligentemente con la multiplicación y mire el byte superior del registro de multiplicación y tendrá su información rotada allí.

    
respondido por el Harry Svensson

Lea otras preguntas en las etiquetas