Voici un petit programme à tester dans le simulateur de MPLABX en mode pas à pas. Mais avant essayez de deviner le contenu de STATUS après chaque opération suivie du commentaire STATUS=?. Si vous répondez correctement à chaque étape votre compréhension du fonctionnement interne du CPU est excellente.
include p10f200.inc
__config _WDTE_OFF
radix dec
org 0
main_loop
bsf STATUS,0 ; set C bit
bsf STATUS,1 ; set DC bit
bsf STATUS,2 ; set Z bit
clrf STATUS ; Q1, STATUS=?
bsf STATUS,7 ; Q2, STATUS=?
movfw STATUS ; Q3, STATUS=? W=?
movlw 0x78
addwf STATUS,F ; Q4, STATUS=?
movfw STATUS ; Q5, STATUS=? W=?
xorwf STATUS,F ; Q6, STATUS=?
goto main_loop
end
Pour vous aidez dans votre réflexion voici une représentation du registre STATUS des PIC10F20X.
Réponses et explications
- STATUS=0x1F. Pensiez-vous que le contenu de STATUS serais mis à zéro? Erreur car certains bits sont en lecture seule : ~TO et ~PD. De plus Z est mis à 1 car l'instruction CLRF affecte ce bit en le mettant à 1. L'ajustement des bits Z,DC et C se fait à la fin de l'opération et l'opération CLRF ne change pas l'état des indicateurs DC et C. Ces deux là était à 1 donc ils le reste. Donc si vous voulez mettre à zéro les 3 indicateurs ne faites pas un CLRF STATUS mais plutôt:
BCF STATUS,Z BCF STATUS,DC BCF STATUS,C
- STATUS=0x9F. Ce bit est R/W donc il es mis à 1 tel que prévu par l'opération. Les autres bits ne sont pas affectés.
- STATUS=0x9B et W=0x9F. C'est normal puisque l'instruction MOVFW affecte la valeur de l'indicateur Z. Celui-ci a été mis à zéro puisque la valeur transféré dans W n'était pas nulle.
- STATUS=0x1B. L'addition a bien donnée le résultat escomptée sauf que les indicateurs Z, DC et C ont été ajusté en conséquence de l'addition. Comme toujours les bit en lecture seule de STATUS n'ont pas été modifiés par le résultat et les 3 indicateurs ont écrasés les bit 0-2 du résultat. Si vous voulez vérifier que l'addition donne le résultat escompté remplacé addwf STATUS, F par addwf STATUS, W et vérifier le résultat dans W.
- STATUS=0x1B et W=0x1B. Cette fois-ci STATUS n'a pas été modifié par l'opération MOVFW puisque Z était déjà à zéro.
- STATUS=0x1F. l'opération XORWF n'affecte que le bit Z. Ici on a fait une opération xor de la valeur de STATUS avec elle-même. Le résultat d'une telle opération est zéro. Donc le bit Z a été mis à 1. les bits DC et C ne sont pas altérés. Encore une fois les 3 indicateurs écrase les bits 0-2 du résultat. Le bit 4 (~PD) était à 1 et le reste puisqu'il est en lecture seule.
Aucun commentaire:
Publier un commentaire
Remarque : Seuls les membres de ce blogue sont autorisés à publier des commentaires.