Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Invité régulier
    Inscrit en
    octobre 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : octobre 2005
    Messages : 32
    Points : 5
    Points
    5

    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 :
    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
    Nouveau Membre du Club
    Inscrit en
    mars 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : mars 2008
    Messages : 62
    Points : 35
    Points
    35

    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
    Invité régulier
    Inscrit en
    octobre 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : octobre 2005
    Messages : 32
    Points : 5
    Points
    5

    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
    Candidat au titre de Membre du Club
    Inscrit en
    mai 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : mai 2009
    Messages : 7
    Points : 10
    Points
    10

    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •