J'ai fait les exos suivants pour m'entrainer à un exam. Je n'ai pas de corrigé, et je ne peux pas verifier sur le pic16F630.
Si quelqu'un peut me conseiller, je le remercie d'avance.
1) Enoncé: "Complementer à 1 le contenu des registres localisés entre les adresses $50 et $5F":
FSR EQU $00
MOVLW $50 ; W=$50
MOVWF FSR ; FSR contient l'adresse $50
MOVLW $15; w=$15
MOVWF $20; F à l'adresse $20 contient la valeur 15.
BOUCLE COMF INDF,0; complementer le contenu du registre
; qui se trouve à l'adresse contenu
; dans FSR, et le mettre dans W
INCF FSR,1 ; FSR=FSR+1
DECFZ $20,1; F=F-1
GOTO BOUCLE
2) Enoncé: "En supposant que la frequence de l'horloge du microprocesseur est de 1mhz, écrire un programme qui complemente le bit 0 du port C toutes les 500 usec".
BOUCLE2 MOVLW $500; W=$500
MOVWF COUNT; W dans count
BOUCLE DECFZ COUNT,1; COUNT=COUNT-1
BTFSC COUNT; COUNT à 0 ?
GOTO BOUCLE
COMF PORTC,0; complementer le bit 0 du portC
GOTO BOUCLE2
3)Enoncé: "Calculer et mettre dans W le nombre de bits à 1 du registre pointé par FSR".
CARRY EQU STATUS,C
FSR EQU $00
MOVLW $20; W=20
MOVWF FSR; FSR contient l'adresse $20
MOVLW $08; W=8
MOVWF $25; W dans F à l'adresse $25
; F=8
CLRW ; W=0
BTFSS INDF,CARRY; CARRY A 1 A L'ADRESSE POINTEE
; PAR FSR ?
CALL S1
CALL S2
S1 RLF INDF; rotation à gauche de la valeur contenue à
; l'adresse pointée par FSR
DECFZ $25,1; F=F-1
BTFSS INDF,CARRY; CARRY A 1?
GOTO S1 ; carry à 0, donc tourner et tester à nouveau.
CALL S2 ; carry à 1, donc tourner et ajouter 1 dans W
S2 RLF INDF; rotation à gauche
DECFZ $25,1; F=F-1
INCF 1,0 ; W=W+1
CALL S1