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 ---
- 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 ---
Modérateur : mazertoc
conversion hexa->ascii 16bits
conversion hexa->ascii 16bits
Bonsoir maï,
Et voici
Je sais pas pourquoi ça fonctionne pas
On a gagné au niveau des octets, 48 octets en moins, avec un sous programme, si je me suis pas trompé.
je vais voir, si je peux encore le faire maigrir l'été on aime être bien mince.
A+
Et voici
Code : Tout sélectionner
decode_lcd
; "16 bits"
clrf unite
clrf dizaine
clrf centaine
clrf millieme
clrf dix_millieme
btfss res16,7
goto $+D'11'
movlw D'3' ; 32768
addwf dix_millieme,F
movlw D'2' ; 2768
addwf millieme,F
movlw D'7' ; 768
addwf centaine,F
movlw D'6' ; 68
addwf dizaine,F
movlw D'8' ; 8
addwf unite,F
btfss res16,6
goto $+D'11'
movlw D'1' ; 16384
addwf dix_millieme,F
movlw D'6' ; 6384
addwf millieme,F
movlw D'3' ; 384
addwf centaine,F
movlw D'8' ; 84
addwf dizaine,F
movlw D'4' ; 4
addwf unite,F
btfss res16,5
goto $+D'9'
movlw D'8' ; 8192
addwf millieme,F
movlw D'1' ; 192
addwf centaine,F
movlw D'9' ; 92
addwf dizaine,F
movlw D'2' ; 2
addwf unite,F
btfss res16,4
goto $+D'9'
movlw D'4' ; 4096
addwf millieme,F
movlw D'0' ; 096
addwf centaine,F
movlw D'9' ; 96
addwf dizaine,F
movlw D'6' ; 6
addwf unite,F
btfss res16,3
goto $+D'9'
movlw D'2' ; 2048
addwf millieme,F
movlw D'0' ; 048
addwf centaine,F
movlw D'4' ; 48
addwf dizaine,F
movlw D'8' ; 8
addwf unite,F
btfss res16,2
goto $+D'9'
movlw D'1' ; 1024
addwf millieme,F
movlw D'0' ; 024
addwf centaine,F
movlw D'2' ; 24
addwf dizaine,F
movlw D'4' ; 4
addwf unite,F
btfss res16,1
goto $+D'7'
movlw D'5' ; 512
addwf centaine,F
movlw D'1' ; 12
addwf dizaine,F
movlw D'2' ; 2
addwf unite,F
btfss res16,0
goto $+D'7'
movlw D'2' ; 256
addwf centaine,F
movlw D'5' ; 56
addwf dizaine,F
movlw D'6' ; 6
addwf unite,F
;**********************************************************************************************
; "8 bits"
btfss res8,7
goto $+D'7'
movlw D'1' ; 128
addwf centaine,F
movlw D'2' ; 28
addwf dizaine,F
movlw D'8' ; 8
addwf unite,F
btfss res8,6
goto $+D'5'
movlw D'6' ; 64
addwf dizaine,F
movlw D'4' ; 4
addwf unite,F
btfss res8,5
goto $+D'5'
movlw D'3' ; 32
addwf dizaine,F
movlw D'2' ; 2
addwf unite,F
btfss res8,4
goto $+D'5'
movlw D'1' ; 16
addwf dizaine,F
movlw D'6' ; 6
addwf unite,F
movlw B'00001111'
andwf res8,W
addwf unite,F
;**********************************************************************************************
total_unite
movfw unite
movwf tmps
movfw dizaine
call decompose
movwf dizaine
movfw tmps
movwf unite
total_dizaine
movfw dizaine
movwf tmps
movfw centaine
call decompose
movwf centaine
movfw tmps
movwf dizaine
total_centaine
movfw centaine
movwf tmps
movfw millieme
call decompose
movwf millieme
movfw tmps
movwf centaine
total_millieme
movfw millieme
movwf tmps
movfw dix_millieme
call decompose
movwf dix_millieme
movfw tmps
movwf millieme
movlw D'48'
addwf unite,F
addwf dizaine,F
addwf centaine,F
addwf millieme,F
addwf dix_millieme,F
fin
goto fin
;**********************************************************************************************
; sous programme
;**********************************************************************************************
decompose
movwf temps
movfw tmps
sublw D'10' ; retir 10 de W
btfsc STATUS,Z ; si le bit Z est à 1 on va à la ligne 1
goto $+D'4' ; si Z = 1 , résultat égal
btfss STATUS,C ; si le bit C est à 0 on va à la ligne 1
goto $+D'2'
goto $+D'5'
movlw D'10'
subwf tmps,F
incf temps,F
goto $-D'10'
movfw temps
return
END
Je sais pas pourquoi ça fonctionne pas
Code : Tout sélectionner
; au lieu de faire cela
clrf unité ; 1 octet
clrf dizaine ; 1 octet
clrf centaine ; 1 octet
clrf millième ; 1 octet
clrf dix_millième ; 1 octet
; autant le faire au début ça économise 5 octets
movlw D'48'
movwf unité
movwf dizaine
movwf centaine
movwf millième
movwf dix_millième
On a gagné au niveau des octets, 48 octets en moins, avec un sous programme, si je me suis pas trompé.
je vais voir, si je peux encore le faire maigrir l'été on aime être bien mince.
A+
Modifié en dernier par Temps-x le sam. 27 août 2016 19:43, modifié 2 fois.
conversion hexa->ascii 16bits
juste un petit truc qui est simple évite les $-2 ou $+9 car celui qui te relit est obligé de recompte pour voir les sauts pause un label comme ici
tient sur le meme note c'est pour du 18F c'est du hexa->BCD reste plus conversion BCD->ascii
A+
tient sur le meme note c'est pour du 18F c'est du hexa->BCD reste plus conversion BCD->ascii
Code : Tout sélectionner
;********************************************************************
; variables:
; NBHEX contient le nombre en hexa 16bits
; le resultat en BCD sur 3 octets
; 140 cycles machine pour 0xFFFF occupe 274 octets
;********************************************************************
HEXA_BCD_16
btfss NBHEX+1,7
bra ici
movlw 0x68
movwf BCD
movlw 0x27
movwf BCD1 ;32768
movlw 0x03
movwf BCD2
ici btfss NBHEX+1,6
bra ici1
movlw 0x84
addwf BCD,W
DAW
movwf BCD
movlw 0x63
addwfc BCD1,w ;16384
DAW
movwf BCD1
movlw 0x1
addwfc BCD2,F
ici1 btfss NBHEX+1,5
bra ici2
movlw 0x92
addwf BCD,W
DAW
movwf BCD
movlw 0x81
addwfc BCD1,w ;8192
DAW
movwf BCD1
movlw 0x0
addwfc BCD2,F
ici2 btfss NBHEX+1,4
bra ici3
movlw 0x96
addwf BCD,W
DAW
movwf BCD
movlw 0x40
addwfc BCD1,w ;4096
DAW
movwf BCD1
movlw 0x0
addwfc BCD2,F
ici3 btfss NBHEX+1,3
bra ici4
movlw 0x48
addwf BCD,W
DAW
movwf BCD
movlw 0x20
addwfc BCD1,w ;2048
DAW
movwf BCD1
ici4 btfss NBHEX+1,2
bra ici5
movlw 0x24
addwf BCD,W
DAW
movwf BCD
movlw 0x10
addwfc BCD1,w ;1024
DAW
movwf BCD1
ici5 btfss NBHEX+1,1
bra ici6
movlw 0x12
addwf BCD,W
DAW
movwf BCD
movlw 0x05
addwfc BCD1,w ;512
DAW
movwf BCD1
ici6 btfss NBHEX+1,0
bra ici7
movlw 0x56
addwf BCD,W
DAW
movwf BCD
movlw 0x02
addwfc BCD1,w ;256
DAW
movwf BCD1
ici7 btfss NBHEX,7
bra ici8
movlw 0x28
addwf BCD,W
DAW
movwf BCD
movlw 0x1
addwfc BCD1,w ;128
DAW
movwf BCD1
ici8 btfss NBHEX,6
bra ici9
movlw 0x64
addwf BCD,W
DAW
movwf BCD
movlw 0x0
addwfc BCD1,f ;64
ici9 btfss NBHEX,5
bra ici10
movlw 0x32
addwf BCD,W
DAW
movwf BCD
movlw 0x0
addwfc BCD1,f ;32
ici10 btfss NBHEX,4
bra ici11
movlw 0x16
addwf BCD,W ;16
DAW
movwf BCD
ici11 btfss NBHEX,3
bra ici12
movlw 0x8
addwf BCD,W ;8
DAW
movwf BCD
ici12 btfss NBHEX,2
bra ici13
movlw 0x04
addwf BCD,W ;4
DAW
movwf BCD
ici13 btfss NBHEX,1
bra ici14
movlw 0x02
addwf BCD,F ;2
ici14 btfss NBHEX,0
bra ici15
movlw 0x1
addwf BCD,F ;1
ici15 Return
A+
Modifié en dernier par Anonymous le sam. 27 août 2016 18:39, modifié 1 fois.
conversion hexa->ascii 16bits
conversion hexa->ascii 16bits
Bien vue, effectivement, j'ai fait une boulet , je sais me servir de de debug sous MPLAB, mais sa change rien au problème
le résultat reste erroné.
J'ai réparé dans le poste #33, merci de ton intervention
A+
le résultat reste erroné.
Code : Tout sélectionner
movlw D'48'
movwf unité
movwf dizaine
movwf centaine
movwf millième
movwf dix_millième
J'ai réparé dans le poste #33, merci de ton intervention
A+
Modifié en dernier par Temps-x le sam. 27 août 2016 19:42, modifié 1 fois.
conversion hexa->ascii 16bits
conversion hexa->ascii 16bits
avec ton algorithme il n'y a que 2+1 qui fonctionne, car si tu fais 49(1)+50(2) cela fait 99 et non pas 53 comme dans ma conversion HEXA->BCD elle n'est valable que pour 1+2
Je viens de comprendre ce que tu veux me dire, je suis un peu lent d'esprit, donc on est obligé de remettre les variables a zéro au départ.
je vais y réfléchir, pour supprimer c'est 5 octets
Car j'ai vue, dans ta source, que tu fais une soustraction, en retirant 0X30, qui corresponds au zéro, je trouve que c'est ingénieux.
Modifié en dernier par Temps-x le sam. 27 août 2016 19:57, modifié 3 fois.
conversion hexa->ascii 16bits
conversion hexa->ascii 16bits
conversion hexa->ascii 16bits
- Claudius
Passioné- Messages : 260
- Âge : 69
- Enregistré en : septembre 2015
- Localisation : ELANCOURT (78 - YVELINES)
- Contact :
Bonsoir,
Je ne sais plus si je vous ai déjà donné ce lien: PIC Microcontoller Radix Conversion Math Methods
avec notamment: Binary to BCD unpacked 16 bit to 5 digit
Personnellement, je fais mon marché dans ces routines que j'intègre complètement ou partiellement après un test exhaustif de tous les cas de conversions...
Cordialement, A+
--
Claudius
Je ne sais plus si je vous ai déjà donné ce lien: PIC Microcontoller Radix Conversion Math Methods
avec notamment: Binary to BCD unpacked 16 bit to 5 digit
Personnellement, je fais mon marché dans ces routines que j'intègre complètement ou partiellement après un test exhaustif de tous les cas de conversions...
Cordialement, A+
--
Claudius
Enregistreur de traces GPS & Boussole GPS parlante (PIC & Arduino)
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Google [Bot] et 47 invités