Convertir Binaire-Décimal PIC 16fxxx
Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

Convertir Binaire-Décimal PIC 16fxxx



  1. #1
    yazeero

    Convertir Binaire-Décimal PIC 16fxxx


    ------

    Bonjour tout le monde.

    J'ai posté dernièrement des problèmes sur le traitement de 16 bits pour le pic16fxxx. J'ai compris la démarche je prend deux registre un "High" et l'autre "Low".


    j'ai réalisé déjà une fonction de division de 8 bits où je peux isoler les unités, les dizaines et les centaines dans 3 cases mémoires. Je les converti en ASCII pour l'afficher sur LCD, ça marche.

    Mais pour cet exemple de 16 bits, je ne sais pas comment je vais obtenir 1 0 2 4 pour l'afficher.
    exemple:
    Hi=0x03 et Lo=0xff.

    J'ai vraiment besoin d'un coup de main SVP!!!!

    Merci d'avance.

    -----

  2. #2
    gcortex

    Re : Convertir Binaire-Décimal PIC 16fxxx

    pourtant c'est beaucoup plus facile qu'une division !

    tant que >1000 : soustrait 1000 et incrémente milliers
    tant que >100 : soustrait 100 et incrémente centaines
    tant que >10 : soustrait 10 et incrémente dizaines

  3. #3
    freepicbasic

    Re : Convertir Binaire-Décimal PIC 16fxxx

    tu soustrais de ton chiffre n fois 10 000 puis n fois 1000 et n fois 100.
    en incrémentant à chaque fois un octet différent.
    Pour faire de l'ASCII il suffit d'ajouté 0x30 sur chaque octet pour avoir un chiffre entre 0 et 9 (0x30-0x39)

    Code:
    ; conversion d'un octet binaire en 3 chiffres decimales
    clrf cent
    clrf deci
    clrf unit
    
    movf MyBin,w
    
    loop100:
    movf MyBin,w
    sublw 100
    btfss STATUS,C
    goto loop10
    movwf MyBin
    incf cent,f
    goto loop100
    
    loop10:
    movf MyBin,w
    sublw 10
    btfss STATUS,C
    goto diz
    movwf MyBin
    incf deci,f
    goto loop10
    
    diz:
    movf MyBin,w
    movwf unit
    
    movlw 0x30
    ADDWF cent,f
    ADDWF diz,f
    ADDWF unit,f
    A+, pat

  4. #4
    paulfjujo

    Re : Convertir Binaire-Décimal PIC 16fxxx

    bonsoir,

    la meme , mais pour aller jusqu' 65535.
    Choix_Out est un simple aiguillage vers LCD ou RS232 suivant l'etat du bit Drapeau,4

    nota : 1024 => Hi=0x04 Lo=0x00 sinon 3FF c'est 1023

    Code:
    
    	cblock     0x20
    
    bdixmil
    bmille
    bcent
    bdix
    bun
    btmp
    Drapeau
    
    ;Drapeau:7= signe mesure temp 1=negatif 0=positif pour DS1624
    ;Drapeau:6= Elligibilite de stockage mesure
    ;Drapeau:5 =test si saisie binaire ou BCD
    ;Drapeau:4= choix format 1=999   0=65535 pour bcd53 (5 ou 3 digits)
    ;Drapeau:3= choix format 1=XX    0=XXX pour bcd3
    ;Drapeau:2= choix output 1=Rs232 0=LCD
    ;Drapeau:1= choix format 1=XXXX.X  0=XXXXX pour bcd5
    ;Drapeau:0= pour effacer zero inutile
    
    	endc
    
    
        VARIABLES ZONE COMMUNE inter bank 0,1,2
    ; Zone de 16 bytes
    
    	cblock 0x70
    val1:2      ; reservation de 2 octets !!
    val2:2
    valx:2
    	endc
    
    
    
    ; affichage word --> decimal 3 ou 5 digits
    ; si Drapeau,4=1 -> 000 a 999 sinon -> 0000 … 65535
    ; en entree val1 et val1+1  contiennent  le mot de 16 bits à afficher
    ; valx sert à sauvegarder cette valeur,qui est modifié dans le sous programme
    ; puis restituee en sortie de programme
    ; les variables intermediares bmille, bcent,bdix,bun servent à decortiquer la valeur en elements decimaux
    ; au passage on met le resultat en ascii
    
    bcd53
    	movf	val1,w
    	movwf	valx
    	movf	val1+1,w
    	movwf	valx+1
    	swapf  val1,w
    	iorlw  0xf0
    	movwf  bmille
    	addwf  bmille,f
    	addlw  0xE2
    
    	movwf  bcent
    	addlw  0x32
    	movwf  bun
    	movf   val1,w
    	andlw  0x0F
    	addwf  bcent,f
    	addwf  bcent,f
    	addwf  bun,f
    	addlw  0xE9
    
    	movwf  bdix
    	addwf  bdix,f
    	addwf  bdix,f
    	swapf  val1+1,w
    	andlw  0x0F
    	addwf  bdix,f
    	addwf  bun,f
    	rlf    bdix,f
    	rlf    bun,f
    	comf   bun,f
    	rlf    bun,f
    	movf   val1+1,w
    	andlw  0x0F
    	addwf  bun,f
    	rlf    bmille,f
    	movlw  0x07
    	movwf  bdixmil
        movlw  0x0A
    Lb1:
     	addwf  bun,f
    	decf   bdix,f
    	btfss  STATUS,C
    	goto   Lb1
    Lb2:
    	addwf  bdix,f
    	decf   bcent,f
    	btfss  STATUS,C
    	goto   Lb2
    Lb3:
        addwf  bcent,f
    	decf   bmille,f
    	btfss  STATUS,C
    	goto   Lb3
    Lb4:
    	addwf  bmille,f
        decf   bdixmil,f
    	btfss  STATUS,C
        goto   Lb4
        btfsc Drapeau,4
    	goto Lb5
    	movf   bdixmil,w
      	addlw  '0'
    	call Choix_Out	; envoi diz de milliers sur LCD ou RS232
    	movf   bmille,w
    	addlw  '0'
    	call Choix_Out	; envoi milliers sur LCD ou RS232
    Lb5:
    	bcf Drapeau,4
    	movf   bcent,w
      	addlw  '0'
    	call Choix_Out	;envoi centaines sur LCD ou RS232
    	movf   bdix,w
      	addlw  '0'
    	call Choix_Out	;envoi dizaines sur LCD ou RS232
    	movf   bun,w
    	addlw  '0'
     	call Choix_Out 	;envoi unites sur LCD ou RS232
    	movf valx,w
    	movwf val1
    	movf valx+1,w
    	movwf	val1+1
    	return

  5. A voir en vidéo sur Futura
  6. #5
    yazeero

    Re : Convertir Binaire-Décimal PIC 16fxxx

    Je vous remercie pour vos réponses. j'ai biens compris maintenant le cas d'un octet, malheureusement pour les 16 bits les choses sont encore flou.

    je ne vois pas encore comment je vais soustraire 1000 ou 10 000 de mon mot Hi=0x04, Lo=0x00 .(1024)

  7. #6
    Seb.26

    Re : Convertir Binaire-Décimal PIC 16fxxx

    Citation Envoyé par gcortex Voir le message
    pourtant c'est beaucoup plus facile qu'une division !

    tant que >1000 : soustrait 1000 et incrémente milliers
    tant que >100 : soustrait 100 et incrémente centaines
    tant que >10 : soustrait 10 et incrémente dizaines
    Si je peux me permettre, ce serait mieux comme ceci :
    Code:
    tant que >=1000 : soustrait 1000 et incrémente milliers
    tant que >=100 : soustrait 100 et incrémente centaines
    tant que >=10 : soustrait 10 et incrémente dizaines
    Et si c'est sur 16b, il faut aussi faire pour 10000 (2^16=65536)

    ;o)
    Dernière modification par Seb.26 ; 12/01/2013 à 16h47.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  8. #7
    gcortex

    Re : Convertir Binaire-Décimal PIC 16fxxx

    Le = était sous entendu

  9. #8
    Seb.26

    Re : Convertir Binaire-Décimal PIC 16fxxx

    Citation Envoyé par gcortex Voir le message
    Le = était sous entendu
    Mon compilo n'aime pas les sous entendus
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  10. #9
    RISC

    Re : Convertir Binaire-Décimal PIC 16fxxx

    Salut,

    Es-tu aller voir du coté de Bigonoff ?
    Il me semble qu'il a des bibliothèques toutes faites ?

    Moi je prendrais un compilateur C et...je récupèrerais l'ASM ;=)

    a+

  11. #10
    freepicbasic

    Re : Convertir Binaire-Décimal PIC 16fxxx

    code complet qui fonctionne sous forme .lst;

    Code:
    01F5                              00605 CONVVAL
                                    M 00606         BNK1
    01F5 1683       0003 05         M 00607         BSF     STATUS,RP0
    01F6 1303       0003 06         M 00608         BCF     STATUS,RP1
                                      00609 
    01F7 01BE       003E              00610         CLRF    DIGIT1
    01F8 01BF       003F              00611         CLRF    DIGIT2
    01F9 01C0       0040              00612         CLRF    DIGIT3
    01FA 01C1       0041              00613         CLRF    DIGIT4
    01FB 01C2       0042              00614         CLRF    DIGIT5
    01FC 083A       003A 00           00615         MOVF    TEMP16,W
    01FD 00B8       0038              00616         MOVWF   MYVAL
    01FE 083B       003B 00           00617         MOVF    TEMP16_@1,W
    
    01ff 00b9       0039              00618         movwf   MYVAL_@1
    0200                              00619 DIXMILLE
                                    M 00620         BNK1
    0200 1683       0003 05         M 00621         BSF     STATUS,RP0
    0201 1303       0003 06         M 00622         BCF     STATUS,RP1
                                      00623 
    0202 0838       0038 00           00624         MOVF    MYVAL,W
    0203 00BC       003C              00625         MOVWF   SVG16
    0204 0839       0039 00           00626         MOVF    MYVAL_@1,W
    0205 00BD       003D              00627         MOVWF   SVG16_@1
    0206 3010       0010              00628         MOVLW   D'16'
    0207 02B8       0038 01           00629         SUBWF   MYVAL,F
    0208 1C03       0003 00           00630         BTFSS   STATUS,C
    0209 03B9       0039 01           00631         DECF    MYVAL_@1,F
    020A 3027       0027              00632         MOVLW   D'39'
    020B 02B9       0039 01           00633         SUBWF   MYVAL_@1,F
    020C 3027       0027              00634         MOVLW   D'39'
    020D 0239       0039 00           00635         SUBWF   MYVAL_@1,W
    020E 1C03       0003 00           00636         BTFSS   STATUS,CY
    020F 2a18       0218              00637         GOTO    PB_LAB31
    0210 1D03       0003 02           00638         BTFSS   STATUS,Z
    0211 2a18       0218              00639         GOTO    PB_LAB31
    0212 3010       0010              00640         MOVLW   D'16'
    0213 0238       0038 00           00641         SUBWF   MYVAL,W
    0214 1803       0003 00           00642         BTFSC   STATUS,CY
    0215 2a18       0218              00643         GOTO    PB_LAB31
    0216 0ABE       003E 01           00644         INCF    DIGIT1,F
    0217 2A00       0200              00645         GOTO    DIXMILLE
    0218                              00646 PB_LAB31
                                    M 00647         BNK1
    0218 1683       0003 05         M 00648         BSF     STATUS,RP0
    0219 1303       0003 06         M 00649         BCF     STATUS,RP1
                                      00650 
    021A 083C       003C 00           00651         MOVF    SVG16,W
    021B 00B8       0038              00652         MOVWF   MYVAL
    021C 083D       003D 00           00653         MOVF    SVG16_@1,W
    021D 00B9       0039              00654         MOVWF   MYVAL_@1
    021E                              00655 MILLE
                                    M 00656         BNK1
    021E 1683       0003 05         M 00657         BSF     STATUS,RP0
    021F 1303       0003 06         M 00658         BCF     STATUS,RP1
                                      00659 
    0220 0838       0038 00           00660         MOVF    MYVAL,W
    0221 00BC       003C              00661         MOVWF   SVG16
    0222 0839       0039 00           00662         MOVF    MYVAL_@1,W
    0223 00BD       003D              00663         MOVWF   SVG16_@1
    0224 30E8       00E8              00664         MOVLW   D'232'
    0225 02B8       0038 01           00665         SUBWF   MYVAL,F
    0226 1C03       0003 00           00666         BTFSS   STATUS,C
    0227 03B9       0039 01           00667         DECF    MYVAL_@1,F
    0228 3003       0003              00668         MOVLW   D'3'
    0229 02B9       0039 01           00669         SUBWF   MYVAL_@1,F
    022A 3003       0003              00670         MOVLW   D'3'
    022B 0239       0039 00           00671         SUBWF   MYVAL_@1,W
    022C 1C03       0003 00           00672         BTFSS   STATUS,CY
    022D 2a36       0236              00673         GOTO    PB_LAB32
    022E 1D03       0003 02           00674         BTFSS   STATUS,Z
    022F 2a36       0236              00675         GOTO    PB_LAB32
    0230 30E8       00E8              00676         MOVLW   D'232'
    0231 0238       0038 00           00677         SUBWF   MYVAL,W
    0232 1803       0003 00           00678         BTFSC   STATUS,CY
    0233 2a36       0236              00679         GOTO    PB_LAB32
    
    0234 0abf       003f 01           00680         incf    DIGIT2,F
    0235 2A1E       021E              00681         GOTO    MILLE
    0236                              00682 PB_LAB32
                                    M 00683         BNK1
    0236 1683       0003 05         M 00684         BSF     STATUS,RP0
    0237 1303       0003 06         M 00685         BCF     STATUS,RP1
                                      00686 
    0238 083C       003C 00           00687         MOVF    SVG16,W
    0239 00B8       0038              00688         MOVWF   MYVAL
    023A 083D       003D 00           00689         MOVF    SVG16_@1,W
    023B 00B9       0039              00690         MOVWF   MYVAL_@1
    023C                              00691 CENT
                                    M 00692         BNK1
    023C 1683       0003 05         M 00693         BSF     STATUS,RP0
    023D 1303       0003 06         M 00694         BCF     STATUS,RP1
                                      00695 
    023E 0838       0038 00           00696         MOVF    MYVAL,W
    023F 00BC       003C              00697         MOVWF   SVG16
    0240 0839       0039 00           00698         MOVF    MYVAL_@1,W
    0241 00BD       003D              00699         MOVWF   SVG16_@1
    0242 3010       0010              00700         MOVLW   D'16'
    0243 02B8       0038 01           00701         SUBWF   MYVAL,F
    0244 1C03       0003 00           00702         BTFSS   STATUS,C
    0245 03B9       0039 01           00703         DECF    MYVAL_@1,F
    0246 3027       0027              00704         MOVLW   D'39'
    0247 02B9       0039 01           00705         SUBWF   MYVAL_@1,F
    0248 3027       0027              00706         MOVLW   D'39'
    0249 0239       0039 00           00707         SUBWF   MYVAL_@1,W
    024A 1C03       0003 00           00708         BTFSS   STATUS,CY
    024B 2a54       0254              00709         GOTO    PB_LAB33
    024C 1D03       0003 02           00710         BTFSS   STATUS,Z
    024D 2a54       0254              00711         GOTO    PB_LAB33
    024E 3010       0010              00712         MOVLW   D'16'
    024F 0238       0038 00           00713         SUBWF   MYVAL,W
    0250 1803       0003 00           00714         BTFSC   STATUS,CY
    0251 2a54       0254              00715         GOTO    PB_LAB33
    0252 0AC0       0040 01           00716         INCF    DIGIT3,F
    0253 2A3C       023C              00717         GOTO    CENT
    0254                              00718 PB_LAB33
                                    M 00719         BNK1
    0254 1683       0003 05         M 00720         BSF     STATUS,RP0
    0255 1303       0003 06         M 00721         BCF     STATUS,RP1
                                      00722 
    0256 083C       003C 00           00723         MOVF    SVG16,W
    0257 00B8       0038              00724         MOVWF   MYVAL
    0258 083D       003D 00           00725         MOVF    SVG16_@1,W
    0259 00B9       0039              00726         MOVWF   MYVAL_@1
    025A                              00727 DIX
                                    M 00728         BNK1
    025A 1683       0003 05         M 00729         BSF     STATUS,RP0
    025B 1303       0003 06         M 00730         BCF     STATUS,RP1
                                      00731 
    025C 0838       0038 00           00732         MOVF    MYVAL,W
    025D 00BC       003C              00733         MOVWF   SVG16
    025E 0839       0039 00           00734         MOVF    MYVAL_@1,W
    025F 00BD       003D              00735         MOVWF   SVG16_@1
    0260 300A       000A              00736         MOVLW   D'10'
    0261 02B8       0038 01           00737         SUBWF   MYVAL,F
    0262 1C03       0003 00           00738         BTFSS   STATUS,C
    0263 03B9       0039 01           00739         DECF    MYVAL_@1,F
    0264 3027       0027              00740         MOVLW   D'39'
    0265 0239       0039 00           00741         SUBWF   MYVAL_@1,W
    
    0266 1c03       0003 00           00742         btfss   STATUS,CY
    0267 2a70       0270              00743         GOTO    PB_LAB34
    0268 1D03       0003 02           00744         BTFSS   STATUS,Z
    0269 2a70       0270              00745         GOTO    PB_LAB34
    026A 3010       0010              00746         MOVLW   D'16'
    026B 0238       0038 00           00747         SUBWF   MYVAL,W
    026C 1803       0003 00           00748         BTFSC   STATUS,CY
    026D 2a70       0270              00749         GOTO    PB_LAB34
    026E 0AC1       0041 01           00750         INCF    DIGIT4,F
    026F 2A5A       025A              00751         GOTO    DIX
    0270                              00752 PB_LAB34
                                    M 00753         BNK1
    0270 1683       0003 05         M 00754         BSF     STATUS,RP0
    0271 1303       0003 06         M 00755         BCF     STATUS,RP1
                                      00756 
    0272 083C       003C 00           00757         MOVF    SVG16,W
    0273 00B8       0038              00758         MOVWF   MYVAL
    0274 083D       003D 00           00759         MOVF    SVG16_@1,W
    0275 00B9       0039              00760         MOVWF   MYVAL_@1
    0276 0838       0038 00           00761         MOVF    MYVAL,W
    0277 00C2       0042              00762         MOVWF   DIGIT5
    A+, pat

  12. #11
    freepicbasic

    Re : Convertir Binaire-Décimal PIC 16fxxx

    MYVAL poids fort
    MYVAL_@1 poids faible

    on sousstrait de Myval qui est un int16 les 10 000, 1000, 100
    D'39'=27h D'16'=10h = 2710h = 10000d
    D'3'=3h D'232'=E8h =03E8h = 1000d
    d'0'=0h D'100' = 0064h = 100d

    a chaque etape on sauve avant de faire la soustraction dans svg16
    s'il y a depassement la valeur inférieur au seuil est celle sauvé
    on increment le digit si c est encore supérieur


    une erreur sur le code 100 d'0'=0h D'100' = 0064h = 100d
    et non pas 10 000 comme sur le dernier post


    Code:
    01AE                              00534 CONVVAL
                                    M 00535         BNK0
    01AE 1283       0003 05         M 00536         BCF     STATUS,RP0
    01AF 1303       0003 06         M 00537         BCF     STATUS,RP1
                                      00538 
    01B0 01CF       004F              00539         CLRF    DIGIT1
    01B1 1683       0003 05           00540         BSF     STATUS,RP0      ; BANK 1
    01B2 01A0       0020              00541         CLRF    DIGIT2
    01B3 01A1       0021              00542         CLRF    DIGIT3
    01B4 01A2       0022              00543         CLRF    DIGIT4
    01B5 01A3       0023              00544         CLRF    DIGIT5
    01B6 1283       0003 05           00545         BCF     STATUS,RP0      ; BANK 0
    01B7 084B       004B 00           00546         MOVF    TEMP16,W
    01B8 00C9       0049              00547         MOVWF   MYVAL
    01B9 084C       004C 00           00548         MOVF    TEMP16_@1,W
    01BA 00CA       004A              00549         MOVWF   MYVAL_@1
    01BB                              00550 DIXMILLE
                                    M 00551         BNK0
    01BB 1283       0003 05         M 00552         BCF     STATUS,RP0
    01BC 1303       0003 06         M 00553         BCF     STATUS,RP1
                                      00554 
    01BD 0849       0049 00           00555         MOVF    MYVAL,W
    ASMPIC C:\PIC\PICBASIC\LCDNJU3.ASM RELEASED          PICASM.EXE VERSION 2.02 (WIN32 CONSOLE)  DU 16/05/2008
      Sat Jan 12 19:42:51 2013 Page 10
    
    01be 00cd       004d              00556         movwf   SVG16
    01BF 084A       004A 00           00557         MOVF    MYVAL_@1,W
    01C0 00CE       004E              00558         MOVWF   SVG16_@1
    01C1 3010       0010              00559         MOVLW   D'16'
    01C2 02C9       0049 01           00560         SUBWF   MYVAL,F
    01C3 1C03       0003 00           00561         BTFSS   STATUS,C
    01C4 03CA       004A 01           00562         DECF    MYVAL_@1,F
    01C5 3027       0027              00563         MOVLW   D'39'
    01C6 02CA       004A 01           00564         SUBWF   MYVAL_@1,F
    01C7 3027       0027              00565         MOVLW   D'39'
    01C8 024A       004A 00           00566         SUBWF   MYVAL_@1,W
    01C9 1C03       0003 00           00567         BTFSS   STATUS,CY
    01CA 29d3       01d3              00568         GOTO    PB_LAB31
    01CB 1D03       0003 02           00569         BTFSS   STATUS,Z
    01CC 29d3       01d3              00570         GOTO    PB_LAB31
    01CD 3010       0010              00571         MOVLW   D'16'
    01CE 0249       0049 00           00572         SUBWF   MYVAL,W
    01CF 1803       0003 00           00573         BTFSC   STATUS,CY
    01D0 29d3       01d3              00574         GOTO    PB_LAB31
    01D1 0ACF       004F 01           00575         INCF    DIGIT1,F
    01D2 29BB       01BB              00576         GOTO    DIXMILLE
    01D3                              00577 PB_LAB31
                                    M 00578         BNK0
    01D3 1283       0003 05         M 00579         BCF     STATUS,RP0
    01D4 1303       0003 06         M 00580         BCF     STATUS,RP1
                                      00581 
    01D5 084D       004D 00           00582         MOVF    SVG16,W
    01D6 00C9       0049              00583         MOVWF   MYVAL
    01D7 084E       004E 00           00584         MOVF    SVG16_@1,W
    01D8 00CA       004A              00585         MOVWF   MYVAL_@1
    01D9                              00586 MILLE
                                    M 00587         BNK0
    01D9 1283       0003 05         M 00588         BCF     STATUS,RP0
    01DA 1303       0003 06         M 00589         BCF     STATUS,RP1
                                      00590 
    01DB 0849       0049 00           00591         MOVF    MYVAL,W
    01DC 00CD       004D              00592         MOVWF   SVG16
    01DD 084A       004A 00           00593         MOVF    MYVAL_@1,W
    01DE 00CE       004E              00594         MOVWF   SVG16_@1
    01DF 30E8       00E8              00595         MOVLW   D'232'
    01E0 02C9       0049 01           00596         SUBWF   MYVAL,F
    01E1 1C03       0003 00           00597         BTFSS   STATUS,C
    01E2 03CA       004A 01           00598         DECF    MYVAL_@1,F
    01E3 3003       0003              00599         MOVLW   D'3'
    01E4 02CA       004A 01           00600         SUBWF   MYVAL_@1,F
    01E5 3003       0003              00601         MOVLW   D'3'
    01E6 024A       004A 00           00602         SUBWF   MYVAL_@1,W
    01E7 1C03       0003 00           00603         BTFSS   STATUS,CY
    01E8 29f2       01f2              00604         GOTO    PB_LAB32
    01E9 1D03       0003 02           00605         BTFSS   STATUS,Z
    01EA 29f2       01f2              00606         GOTO    PB_LAB32
    01EB 30E8       00E8              00607         MOVLW   D'232'
    01EC 0249       0049 00           00608         SUBWF   MYVAL,W
    01ED 1803       0003 00           00609         BTFSC   STATUS,CY
    01EE 29f2       01f2              00610         GOTO    PB_LAB32
    01EF 1683       0003 05           00611         BSF     STATUS,RP0      ; BANK 1
    01F0 0AA0       0020 01           00612         INCF    DIGIT2,F
    01F1 29D9       01D9              00613         GOTO    MILLE
    01F2                              00614 PB_LAB32
                                    M 00615         BNK0
    01F2 1283       0003 05         M 00616         BCF     STATUS,RP0
    01F3 1303       0003 06         M 00617         BCF     STATUS,RP1
    ASMPIC C:\PIC\PICBASIC\LCDNJU3.ASM RELEASED          PICASM.EXE VERSION 2.02 (WIN32 CONSOLE)  DU 16/05/2008
      Sat Jan 12 19:42:51 2013 Page 11
    
                                      00618 
    01F4 084D       004D 00           00619         MOVF    SVG16,W
    01F5 00C9       0049              00620         MOVWF   MYVAL
    01F6 084E       004E 00           00621         MOVF    SVG16_@1,W
    01F7 00CA       004A              00622         MOVWF   MYVAL_@1
    01F8                              00623 CENT
                                    M 00624         BNK0
    01F8 1283       0003 05         M 00625         BCF     STATUS,RP0
    01F9 1303       0003 06         M 00626         BCF     STATUS,RP1
                                      00627 
    01FA 0849       0049 00           00628         MOVF    MYVAL,W
    01FB 00CD       004D              00629         MOVWF   SVG16
    01FC 084A       004A 00           00630         MOVF    MYVAL_@1,W
    01FD 00CE       004E              00631         MOVWF   SVG16_@1
    01FE 3064       0064              00632         MOVLW   D'100'
    01FF 02C9       0049 01           00633         SUBWF   MYVAL,F
    0200 1C03       0003 00           00634         BTFSS   STATUS,C
    0201 03CA       004A 01           00635         DECF    MYVAL_@1,F
    0202 3000       0000              00636         MOVLW   D'0'
    0203 024A       004A 00           00637         SUBWF   MYVAL_@1,W
    0204 1C03       0003 00           00638         BTFSS   STATUS,CY
    0205 2a0f       020f              00639         GOTO    PB_LAB33
    0206 1D03       0003 02           00640         BTFSS   STATUS,Z
    0207 2a0f       020f              00641         GOTO    PB_LAB33
    0208 3064       0064              00642         MOVLW   D'100'
    0209 0249       0049 00           00643         SUBWF   MYVAL,W
    020A 1803       0003 00           00644         BTFSC   STATUS,CY
    020B 2a0f       020f              00645         GOTO    PB_LAB33
    020C 1683       0003 05           00646         BSF     STATUS,RP0      ; BANK 1
    020D 0AA1       0021 01           00647         INCF    DIGIT3,F
    020E 29F8       01F8              00648         GOTO    CENT
    020F                              00649 PB_LAB33
                                    M 00650         BNK0
    020F 1283       0003 05         M 00651         BCF     STATUS,RP0
    0210 1303       0003 06         M 00652         BCF     STATUS,RP1
                                      00653 
    0211 084D       004D 00           00654         MOVF    SVG16,W
    0212 00C9       0049              00655         MOVWF   MYVAL
    0213 084E       004E 00           00656         MOVF    SVG16_@1,W
    0214 00CA       004A              00657         MOVWF   MYVAL_@1
    0215                              00658 DIX
                                    M 00659         BNK0
    0215 1283       0003 05         M 00660         BCF     STATUS,RP0
    0216 1303       0003 06         M 00661         BCF     STATUS,RP1
                                      00662 
    0217 0849       0049 00           00663         MOVF    MYVAL,W
    0218 00CD       004D              00664         MOVWF   SVG16
    0219 084A       004A 00           00665         MOVF    MYVAL_@1,W
    021A 00CE       004E              00666         MOVWF   SVG16_@1
    021B 300A       000A              00667         MOVLW   D'10'
    021C 02C9       0049 01           00668         SUBWF   MYVAL,F
    021D 1C03       0003 00           00669         BTFSS   STATUS,C
    021E 03CA       004A 01           00670         DECF    MYVAL_@1,F
    021F 3027       0027              00671         MOVLW   D'39'
    0220 024A       004A 00           00672         SUBWF   MYVAL_@1,W
    0221 1C03       0003 00           00673         BTFSS   STATUS,CY
    0222 2a2c       022c              00674         GOTO    PB_LAB34
    0223 1D03       0003 02           00675         BTFSS   STATUS,Z
    0224 2a2c       022c              00676         GOTO    PB_LAB34
    0225 3010       0010              00677         MOVLW   D'16'
    0226 0249       0049 00           00678         SUBWF   MYVAL,W
    0227 1803       0003 00           00679         BTFSC   STATUS,CY
    ASMPIC C:\PIC\PICBASIC\LCDNJU3.ASM RELEASED          PICASM.EXE VERSION 2.02 (WIN32 CONSOLE)  DU 16/05/2008
      Sat Jan 12 19:42:51 2013 Page 12
    
    0228 2a2c       022c              00680         goto    pb_lab34
    0229 1683       0003 05           00681         BSF     STATUS,RP0      ; BANK 1
    022A 0AA2       0022 01           00682         INCF    DIGIT4,F
    022B 2A15       0215              00683         GOTO    DIX
    022C                              00684 PB_LAB34
                                    M 00685         BNK0
    022C 1283       0003 05         M 00686         BCF     STATUS,RP0
    022D 1303       0003 06         M 00687         BCF     STATUS,RP1
                                      00688 
    022E 084D       004D 00           00689         MOVF    SVG16,W
    022F 00C9       0049              00690         MOVWF   MYVAL
    0230 084E       004E 00           00691         MOVF    SVG16_@1,W
    0231 00CA       004A              00692         MOVWF   MYVAL_@1
    0232 0849       0049 00           00693         MOVF    MYVAL,W
    0233 1683       0003 05           00694         BSF     STATUS,RP0      ; BANK 1
    0234 00A3       0023              00695         MOVWF   DIGIT5
    A+, pat

  13. #12
    yazeero

    Re : Convertir Binaire-Décimal PIC 16fxxx

    Je vous remercie encore une fois pour tout ça.

    J'essaie de comprendre l'algorithme.

    Merci encore une fois.

  14. #13
    freepicbasic

    Re : Convertir Binaire-Décimal PIC 16fxxx

    code sans le lst de la partie mille et cent
    normalement le code ne devait jamais aller dans la partie sublw 0 , donc la suprimée
    Donc , simplification du test 100 sur 1 byte au lieu de 2.

    Et le test >= et remplacé par un > , la partie bugguée est en commentaire avec des ;

    MILLE
    ; TEST 1000
    ; BNK0
    BCF STATUS,RP0
    BCF STATUS,RP1

    ; sauve Myval dans SV16
    MOVF MYVAL,W
    MOVWF SVG16
    MOVF MYVAL_@1,W
    MOVWF SVG16_@1

    ; soustrait 1000
    MOVLW D'232'
    SUBWF MYVAL,F
    ; retenue si dépassement
    BTFSS STATUS,C
    DECF MYVAL_@1,F
    MOVLW D'3'
    SUBWF MYVAL_@1,F

    ; test si > 1000
    ; poids fort >
    MOVLW D'3'
    SUBWF MYVAL_@1,W
    BTFSS STATUS,CY
    GOTO PB_LAB32 ; oui alors fin

    ;bug
    ;La comparaison doit être > et non pas >=
    ; si =0 c est egal alors fin
    ; BTFSS STATUS,Z
    ; GOTO PB_LAB32

    ; non alors continue le test sur le poids faible
    MOVLW D'232'
    SUBWF MYVAL,W
    ; si dépassement alors fin
    BTFSC STATUS,CY
    GOTO PB_LAB32
    ; +1 sur le digit mille
    BSF STATUS,RP0 ; BANK 1
    INCF DIGIT2,F
    GOTO MILLE
    PB_LAB32






    ; une operation byte - byte est suffisante maintenant
    ; puisqu on ne dépasse plus les 100


    ; restore la dernière valeur superieur à 100

    MOVF SVG16,W
    MOVWF MYVAL

    CENT
    ; bnk0
    BCF STATUS,RP0 ; BANK 1

    ; sauve avant la soustraction
    MOVF MYVAL,W
    MOVWF SVG16
    ; soustrait 100
    MOVLW D'100'
    SUBWF MYVAL,F
    ; dépassement ?
    BTFSS STATUS,C
    GOTO PB_LAB33 ' oui!
    ; non soustraire
    BSF STATUS,RP0 ; BANK 1
    INCF DIGIT3,F
    GOTO CENT
    PB_LAB33

    ; SVG16 contient l'unité !!!!!
    Dernière modification par freepicbasic ; 13/01/2013 à 09h03.
    A+, pat

  15. #14
    yazeero

    Re : Convertir Binaire-Décimal PIC 16fxxx

    Bonsoir et merci pour cette fonction.

    J'ai trouvé des méthodes de conversion pour les 4 bits et 8 bits:

    http://www.johnloomis.org/ece314/not...in_to_bcd.html

  16. #15
    yazeero

    Re : Convertir Binaire-Décimal PIC 16fxxx

    Je pose souvent cette question; comment le compilateur sait que les valeurs de l'octet High sont supérieures à 255? c'est compliqué non?

  17. #16
    freepicbasic

    Re : Convertir Binaire-Décimal PIC 16fxxx

    Lorsqu'on fait une opération et qu'elle depasse le type, alors le flag carry se positionne.
    A priori si on ne fait pas de contrôle , le compilateur ne sait pas, et alors le carry est perdu et le résultat risque d'être inférieur dans le cas d'une adition.

    Si l'on fait une addition en 2 temps d'un int consitué de 2 octets, lors de l addition du poids faible le carry se positionne et l'on doit incrémenter l'octe de poids fort , puis faire l'addition des poids forts.

    Dans les pics les soustractions ont un carry inverse , il est a 0 si retenue et 1 si pas de retenue.
    A+, pat

  18. #17
    yazeero

    Re : Convertir Binaire-Décimal PIC 16fxxx

    je te remercie mr freepicbasic pour votre explication. il est difficile ce problème (pour moi).

Discussions similaires

  1. Décimal/Binaire et erreur
    Par invitef3f3826f dans le forum Programmation et langages, Algorithmique
    Réponses: 10
    Dernier message: 01/10/2012, 20h06
  2. Programme PIC, convertir une valeur Héxadécimal en Décimal
    Par invite75cef98f dans le forum Électronique
    Réponses: 13
    Dernier message: 17/05/2010, 18h05
  3. Conversion décimal -> binaire
    Par invite2ee4bcad dans le forum Mathématiques du collège et du lycée
    Réponses: 1
    Dernier message: 10/05/2010, 19h50
  4. Conversion de binaire à décimal
    Par invitee50a1bfa dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 09/02/2008, 22h11
  5. Compteur binaire/decimal?
    Par invitea250c65c dans le forum Électronique
    Réponses: 10
    Dernier message: 14/07/2006, 10h37
Découvrez nos comparatifs produits sur l'informatique et les technologies.