Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

Algorithme de transformation binaire 16 bits en nombre ASCII
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#1 Message par Temps-x » jeu. 9 mars 2023 01:56

Bonjour tout le forum,

Suite à une discussion ouvert ICI je mets à disposition cette algorithme de transformation binaire 16 bits en nombre ASCII.

Cette routine assez original, viens entièrement de moi, sans savoir qu'il exister un algorithme pour ce genre de conversion.



Ce code fonctionne pour les Pic 18Fxxxx, le code ASM a été écrit avec jens file Editor 3.95

Code : Tout sélectionner


    CBLOCK H
'20'                           
      loop5               
:1                

      temps               
:1
      tmps                
:1

      res16               
:1
      res8                
:1

      unité               
:1      
      dizaine             
:1
      centaine            
:1
      millième            
:1
      dix_millième        
:1        
    ENDC

;************************************* "conversion 16 bits" ************************************ 
conversion_ascii
           
      clrf unité                  
      clrf dizaine              
      clrf centaine             
      clrf millième             
      clrf dix_millième         

; "16 bits"

b16_7
      btfss res16
,7
      bra b16_6

      movlw D
'3'                          ; 32768  
      addwf dix_millième
,F
      movlw D
'2'                          ;  2768  
      addwf millième
,F
      movlw D
'7'                          ;   768
      addwf centaine
,F                 
      movlw D
'6'                          ;    68
      addwf dizaine
,F                 
      movlw D
'8'                          ;     8
      addwf unité
,F                 

b16_6
      btfss res16
,6
      bra b16_5

      incf dix_millième
,F
      movlw D
'6'                          ;  6384  
      addwf millième
,F
      movlw D
'3'                          ;   384
      addwf centaine
,F                 
      movlw D
'8'                          ;    84
      addwf dizaine
,F                 
      movlw D
'4'                          ;     4
      addwf unité
,F                 

b16_5
      btfss res16
,5
      bra b16_4

      movlw D
'8'                          ; 8192  
      addwf millième
,F
      incf centaine
,F                     ;   192  
      movlw D
'9'                          ;   92
      addwf dizaine
,F                 
      movlw D
'2'                          ;    2
      addwf unité
,F                 

b16_4
      btfss res16
,4
      bra b16_3            

      movlw D
'4'                          ; 4096  
      addwf millième
,F                    ;  096
      movlw D
'9'                          ;   96
      addwf dizaine
,F                 
      movlw D
'6'                          ;    6
      addwf unité
,F                 

b16_3
      btfss res16
,3
      bra b16_2

      movlw D
'2'                          ; 2048  
      addwf millième
,F                    ;  048
      movlw D
'4'                          ;   48
      addwf dizaine
,F                     ;
      movlw D'8'                          ;    8
      addwf unité
,F                 

b16_2
      btfss res16
,2
      bra b16_1
                                           
      incf millième
,F                     ; 1024
      movlw D
'2'                          ;  024
      addwf dizaine
,F                     ;   24
      movlw D
'4'                          ;    4
      addwf unité
,F                 

b16_1
      btfss res16
,1
      bra b16_0
                                            
      movlw D
'5'                           
      addwf centaine
,F                    ; 512
      incf dizaine
,F                      ;  12
      movlw D
'2'                          ;   2
      addwf unité
,F                 

b16_0
      btfss res16
,0
      bra b8_7

      movlw D
'2'                          ;  256
      addwf centaine
,F                 
      movlw D
'5'                          ;   56
      addwf dizaine
,F                 
      movlw D
'6'                          ;    6
      addwf unité
,F                 

;***********************************************************************************************

;
 "8 bits"

b8_7
      btfss res8
,7
      bra b8_6

      incf centaine
,F                     ; 128 
      movlw D
'2'                          ;
      addwf dizaine,F                     ;  28
      movlw D
'8'                          ;    
      addwf unité
,F                       ;   8 

b8_6
      btfss res8
,6
      bra b8_5            

      movlw D
'6'                          ;   64
      addwf dizaine
,F                 
      movlw D
'4'                          ;    4
      addwf unité
,F                 

b8_5
      btfss res8
,5
      bra b8_4

      movlw D
'3'                          ;   32
      addwf dizaine
,F                 
      movlw D
'2'                          ;    2
      addwf unité
,F                 

b8_4
      btfss res8
,4
      bra b8_3            

      movlw D
'1'                          ;   16
      addwf dizaine
,F                    
      movlw D
'6'                          ;    6
      addwf unité
,F                 

b8_3
      movlw B
'00001111'                   ; 8, 4, 2, 1
      andwf res8
,W    
    
      addwf unité
,F     

;***********************************************************************************************
;***********************************************************************************************
;***********************************************************************************************

      movlw D'5'                          ; 5 variables à traiter
      movwf loop5
       
      lfsr FSR0
,unité                     ; pointer à l'adresse de la variable "unité" 

tr0
      movf INDF0,W                        ; récupérer la valeur dans W 
      movwf tmps                          ; transmettre dans la variable "tmps"
 
      incf FSR0L,F                        ; variable suivante
      movf INDF0,W                        ; récupérer la valeur dans W 
      movwf temps                         ; transmettre dans la variable "temps"

;***********************************************************************************************
tr1      
      movf tmps,W
      sublw D'
10'                         ;
      btfsc STATUS,Z                      ; 
      bra tr2                             ; 
      btfss STATUS,C                      ; 
      bra tr2                             ; 
      bra tr3                             ; 
tr2
      movlw D'
10'                         ;
      subwf tmps,F                        ;
      incf temps,F                        ; 
      bra tr1                       

;*********************************************************************************************** 
tr3
      movf temps,W
      movwf INDF0                         ; nouvelle valeur à cette adresse

      decf FSR0L,F                        ; 
      movf tmps,W                         ;
      movwf INDF0                         ; nouvelle valeur à cette adresse

      movlw D'
48'                         ; convertir en format ASCII
      addwf INDF0,F                       

      incf FSR0L,F                        ; variable suivante 

      decfsz loop5,F                      ; 
      bra tr0                             ;
      
      return



==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 35 invités