IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MPLAB Discussion :

[PIC 16F877A] Conversion Minutes - Secondes


Sujet :

MPLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 32
    Points : 16
    Points
    16
    Par défaut [PIC 16F877A] Conversion Minutes - Secondes
    Bonjour,

    Voila je début en assembleur et j'ai essayé de créer une petite routine pour convertir mes minutes en secondes.
    Mais je n'ai aucun moyen de vérifier.
    J'ai essayer de commenter le code comme je le pensais.
    Merci de votre futur aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    ; --- Routine permettant de convertir les minutes en secondes
    cal_tp_res:
    		; --- Conversion minute - seconde
    		; --- On charge les minutes dans w et on sauve le tout dans resul
    		movf mind_0 , w
    		movwf resul
    		; --- Effacement de la carry
    		bcf STATUS , C
    		; --- On multiplie par 2
    		rlf resul , f
    		; --- On multiplie par 4
    		rlf resul , f
    		; --- On multiplie par 8
    		rlf resul , f
    		; --- On multiplie par 16
    		rlf resul , f
    		; --- On soustrait resul par mind_0 afin d'obtenir une multiplication par 15
    		subwf resul , f
    		; --- On multiplie par 30
    		rlf resul , f
    		; --- On multiplie par 60
    		rlf resul , f
    		; --- On stock le resul dans tp_res
    		movf resul, w
    		movwf tp_res
    		clrf resul
    		; --- Conversion dizaine de minutes - seconde
    		; --- On charge les minutes dans w et on sauve le tout dans resul
    		movf mind_1 , w
    		movwf resul
    		; --- Effacement de la carry
    		bcf STATUS , C
    		; --- On multiplie par 2
    		rlf resul , f
    		; --- On multiplie par 4
    		rlf resul , f
    		; --- On multiplie par 8
    		rlf resul , f
    		; --- On multiplie par 16
    		rlf resul , f
    		; --- On soustrait resul par mind_1 afin d'obtenir une multiplication par 15
    		subwf resul , f
    		; --- On multiplie par 30
    		rlf resul , f
    		; --- On multiplie par 60
    		rlf resul , f
    		; --- On stock le resul dans retenue
    		movf resul, w
    		movwf retenue
    		; --- Effacement de la carry
    		bcf STATUS , C
    		; --- On multiplie par 2
    		rlf retenue , f
    		; --- On multiplie par 4
    		rlf retenue , f
    		; --- On additione retenue par resul afin d'obtenir une multiplication par 5 donc par 300 car 60 * 5(= 30
    		addwf retenue , f
    		; --- On multiplie par 2 afin d'obtenir une multiplication par 600
    		rlf retenue , f
    		; --- On additione resul a tp_res afin d'obtenir la conversion totale des minutes en secondes
    		movf retenue , w
    		addwf tp_res , f
    		clrf retenue
    		clrf resul
    		; --- Il suffit maintenant d'ajouter les secondes et les dizaines de secondes afin d'avoir le temps demandé par l'utilisateur en seconde
    		; --- Ajout des secondes
    		movf secd_0 , w
    		addwf tp_res , f
    		; --- Ajout des dizaines de secondes
    		movf secd_1 , w
    		movwf resul
    		; --- Effacement de la carry
    		bcf STATUS , C
    		; --- On multiplie par 2
    		rlf resul , f
    		; --- On multiplie par 4
    		rlf resul , f
    		; --- On additione resul par secd_1 afin d'obtenir une multiplication par 5
    		addwf resul , f
    		; --- On multiplie par 2 afin d'obtenir une multiplication par 10
    		rlf resul , f
    		; --- On additione resul dans tp_res
    		movf resul , w
    		addwf tp_res , f
    		; --- On vide toutes les variables utilisés pour les calcules ainsi que w
    		clrf retenue
    		clrf resul
    		clrw
    		return

  2. #2
    Membre du Club

    Inscrit en
    Mars 2008
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 75
    Points : 66
    Points
    66
    Par défaut MPLAB
    bonsoir,

    Pour ma part, quand je code des pics, j'utilise MPLAB. Il est gratuit et il est sur le site de microchips. Aprés, tu peux tester ton code par le simulateur : tu peux visualiser tes registres, les registres du PIC et les flags C et Z.

    voici le lien ou tu peux le télécharger :

    http://http://www.microchip.com/stel...7002#P171_5058

    en bas de la page, télécharge MPLAB IDE

    Bon courage.

    elecpic

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    Bonsoir,

    Merci de ta réponse, j'ai cependant une autre question.
    J'utilise une carte easypic5 avec un pic16F877A, mes ports RA0, RA1, RA2 et RA3 sont utilisés pour mon afficheur 7 segments.
    Est il possible d'utiliser le pot RA4 afin de détecter une vibration sur un accéléromètre ce qui engendrera l'arrêt de mon main.

    Merci de votre réponse,

    Bonne soirée.

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 7
    Points : 11
    Points
    11
    Par défaut Convertir minutes en secondes
    Bonjour,
    Je ne suis pas un spécialiste, j'ai juste quelques idées, voyant que pas grand monde ne répond.
    Déjà, mets tes commentaires en bout de ligne, ce qui réduira ton programme de moitié et on saura à quelle ligne ça correspond.
    Deuxièmement, je programmerais un compteur de secondes et de minutes, partant de zéro, et je comparerais le résultat avec le nombre de minutes que tu as à convertir, j'ai l'impression que ce serait beaucoup plus court.
    Ensuite, je ne sais pas si tu te trompes ou fais des fautes de français, ton "main", on dit une main, tu n'as sans doute pas que le port A sur ton PIC qui a 28 broches, et si c'est juste pour arrêter ta main, tu dois pouvoir brancher ton accéléromètre sur une entrée analogique.
    .
    Mais Microchip recommande d'arrêter toute activité digitale du PIC quand on veut se servir des entrées analogiques, sinon il y a des parasites dans la lecture analogique. Donc tu aurais intérêt, soit à utiliser un 2e PIC dédié, ou un petit circuit externe à ampli-OP monté en comparateur, dont la sortie irait sur une broche de ton port A ou B.
    Cordialement

Discussions similaires

  1. Conversion Heure Minute Seconde
    Par TiBijou dans le forum Algorithmes et structures de données
    Réponses: 19
    Dernier message: 05/01/2010, 14h28
  2. Conversion de x secondes, en heures-minutes-secondes!
    Par metalquebec dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 09/09/2009, 18h29
  3. Réponses: 2
    Dernier message: 03/07/2008, 10h40
  4. Réponses: 1
    Dernier message: 09/06/2008, 14h34
  5. Réponses: 6
    Dernier message: 08/08/2007, 17h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo