Besoin d'aide pour corriger des exos pour débuter sur pic16F630

Signaler
Messages postés
8
Date d'inscription
jeudi 23 décembre 2004
Statut
Membre
Dernière intervention
11 janvier 2005
-
Messages postés
87
Date d'inscription
jeudi 10 octobre 2002
Statut
Membre
Dernière intervention
4 avril 2008
-
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

4 réponses

Messages postés
8
Date d'inscription
jeudi 23 décembre 2004
Statut
Membre
Dernière intervention
11 janvier 2005

!!!! 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é.
Messages postés
87
Date d'inscription
jeudi 10 octobre 2002
Statut
Membre
Dernière intervention
4 avril 2008

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

INCF FSR,F ; FSR=FSR+1
DECFSZ POSITION,F; F=F-1
GOTO BOUCLE1

Main
call BOUCLE
goto Main
END

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

ADDLW .1 ; +1 le registre W

CALL S1
a++ jespere je suis pas tros dure :)
Messages postés
8
Date d'inscription
jeudi 23 décembre 2004
Statut
Membre
Dernière intervention
11 janvier 2005

:-) non, ca va. Je vais imprimer ceci et regarder avec attention.
On verra si j'ai compris.

Merci
Messages postés
87
Date d'inscription
jeudi 10 octobre 2002
Statut
Membre
Dernière intervention
4 avril 2008

re bonjour
tu peu regardé le cour 1 de bigonoff a cette adresse
http://www.abcelectronique.com/bigonoff/

a++