Besoin d'aide pour corriger des exos pour débuter sur pic16F630
cs_MTHOMAS
Messages postés8Date d'inscriptionjeudi 23 décembre 2004StatutMembreDernière intervention11 janvier 2005
-
24 déc. 2004 à 01:01
phenojeff
Messages postés87Date d'inscriptionjeudi 10 octobre 2002StatutMembreDernière intervention 4 avril 2008
-
24 déc. 2004 à 16:29
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
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
cs_MTHOMAS
Messages postés8Date d'inscriptionjeudi 23 décembre 2004StatutMembreDernière intervention11 janvier 2005 24 déc. 2004 à 01:07
!!!! les retraits n'ont pas été pris en compte lorsque j'ai posé mes questions. Il y a des boucles et des sous prog plus ou moins bien placés. Désolée pour le manque de clarté.
phenojeff
Messages postés87Date d'inscriptionjeudi 10 octobre 2002StatutMembreDernière intervention 4 avril 2008 24 déc. 2004 à 03:39
allo tu peu quand meme faire le test dans MPLAB
je te corige le premier je tes rajouter ce quil te faut pour faire le test dans mplab mais il te manque quelque configuration encore
jai pas tros compris pourquoi tu marque $ pour une adresse
LIST p=16F630 ; Définition de processeur
#include ; fichier include
POSITION EQU 0x20
ORG 0x000
GOTO Main
BOUCLE
MOVLW 0x50 ; W=h50
MOVWF FSR ; FSR contient l'adresse h50
MOVLW .15; W=15
MOVWF POSITION; F à l'adresse 0x20 contient la valeur 15.
BOUCLE1
COMF INDF,W; complementer le contenu du registre
; qui se trouve à l'adresse contenu
; dans FSR, et le mettre sur W
dans le prochain tu marque BOUCLE2 MOVLW $500; W=$500
tu ne peu aller plus haut que 255 ou FF
BOUCLE2
MOVLW $500; W=$500 <- Erreur TOP .255
MOVWF COUNT; W dans count
BOUCLE
erreur->DECFZ COUNT,1; COUNT=COUNT-1 DECFSZ COUNT,F
BTFSC COUNT; Si COUNT == 0 ?
GOTO BOUCLE ; non
COMF PORTC,0; oui complementer le bit 0 du portC
GOTO BOUCLE2
CARRY EQU STATUS,C <- Erreur
ce que tu veux est avoire le mot CARRY pour le bit C de STATUS
#DEFINE CARRY STATUS,0 un peu mieux
FSR EQU $00 <- place le FSR a 0 CLRF FSR dans ton asm
MOVLW 0x20; W=h20
MOVWF FSR; FSR contient l'adresse $20
MOVLW .08; W=8
MOVWF 0x25; W dans F à l'adresse $25
; F=8
CLRW ; W=0
ceci je comprend pas mais ca ne peu etre bon
BTFSS INDF,CARRY; CARRY A 1 A L'ADRESSE POINTEE
pourquoi le Cary du STATUS serait a 1 a ladresse pointé du FSR
comprend pas
; PAR FSR ?
CALL S1
CALL S2
S1
RLF INDF,F; rotation à gauche de la valeur contenue à
; l'adresse pointée par FSR
DECFSZ 0x25,F; F=F-1
BTFSS INDF,CARRY; CARRY A 1? pour maitre le CARRY a 1
BSF CARRY ; du bit STATUS
GOTO S1 ; carry à 0, donc tourner et tester à nouveau.
CALL S2 ; carry à 1, donc tourner et ajouter 1 dans W
S2
RLF INDF,F; rotation à gauche savé dans le registre
DECFSZ 0x25,F; F=F-1
INCF W,W ; W=W+1 <- erreur ici ont ne peu le faire