Duda banderas, Registro status, pic 16f877a

#1
buenas noches...

estoy haciendo un programa en .asm


escribo ya q tengo una duda en cuanto a las instrucciones q afectan algunas banderas...

necesito utilizar la instrucción subwf y verificar la bandera Z, para comparar q dos numeros sean iguales...

la subrutina dond está el subwf empieza con un incremento (incf) y luego viene un movf, y luego es q viene el subwf...

estas 3 instrucciones casualmente son las q afectan la bandera Z...

el incremento se hará hasta 16, (segun lo que leí: la bandera Z se ve afectada con esta instruccion cuando el incremento produce acarreo), por lo q si se afecta la bandera z...

mi pregunta es...de q manera puedo volver a hacer igual a cero los bits del registro status (una vez q fueron afectados por el incremento) para q luego de hacer la resta con el subwf me de un resultado correcto....es decir, haga la funcion correcta segun el valor de Z arrojado por el subwf?

no se si basta con poner movlw 00 movwf status, pq asi lo hice pero en la simulacuion del mplab no sale el registro status como 00000000


gracias por sus ayudas y respuestas!

la subrutina tiene
 

Vick

Moderador
#2
Vamos por partes, puedes escribir en cualquier momento en el registro STATUS, pero hay dos bits en él que son solo de lectura TO y PD, por lo que no puedes escribir en ellos, por eso no te sale como 00000000...

No tienes que borrar el bit Z (aunque puedes hacerlo si quieres), cada instrucción lo pone a cero o uno según el resultado, por ejemplo movf lo pondrá a cero o uno dependiendo del registro que muevas, cuando llega a subwf entonces el bit Z se pondrá a cero si el resultado es diferente de cero y a uno si fue cero, por lo que al testear este bit en la siguiente instrucción el programa funcionará correctamente sin necesidad de escribir Z.

En otras palabras no importa como fue afectado Z en las instrucciones anteriores...

Espero haberme explicado.
 

Temas similares

Arriba