Besoin d'aide pour une conversion ascii/hexa en assembleur

Signaler
Messages postés
8
Date d'inscription
jeudi 23 décembre 2004
Statut
Membre
Dernière intervention
11 janvier 2005
-
Messages postés
24
Date d'inscription
jeudi 2 décembre 2004
Statut
Membre
Dernière intervention
28 avril 2008
-
Salut,

Je voudrais faire une conversion Ascii vers hexa en assembleur (pic 16F630):
le paramètre d'entrée (déposé dans w) est un nombre hexadecimal codé
en ascii, le parametre de sortie (w egalement) est ce même nombre codé
en hexadecimal.

Ascii: $30 - $31 - $32 ....... $45 - $46
hexa: 0 - 1 - 2 ........ E - F

Je n'ai pas d'idée pour ce programme, un coup de main ne serait pas de refus.

merci d'avance

8 réponses

Messages postés
311
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
15 décembre 2006
1
Salut Mr MTHOMAS

si <=9 (0..9)addlw 0x30 $30 "0"
movwf tonASCII pour 0...9

et si >9 (A..F)addlw 0x41 $41 "A"
movwf tonASCII pour A..F

a+
ryl...
Messages postés
8
Date d'inscription
jeudi 23 décembre 2004
Statut
Membre
Dernière intervention
11 janvier 2005

Salut,

Merci pour le prog, mais comment faire un "si" en assembleur ?
Tu utilises Btsfcs sur chaques bits?

A+
Messages postés
24
Date d'inscription
jeudi 2 décembre 2004
Statut
Membre
Dernière intervention
28 avril 2008
1
n'hesitez pas à me mailer red.wings@voila.fr
salut, j'ai depose un programme complet, où on peut afficher la table ascii complete et en code hexadecimal
clique sur mon profil puis xx sources sur tout cs et tu trouvera
Messages postés
311
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
15 décembre 2006
1
Je ne sais pas si j'ai bien compris mais bon.!.!
et comme ça:


;;Attention ! sans tester si ascii entrant compris
entre h30..h39=0..9 , h41..h46=A..F.!


movfw MonASCII ; ton w entrant ASCII
sublw 0x39 ; test si > h39(9)
btfss STATUS,C ; alors forcement tranche (h41..h46=A..F)
goto conv_AF ; aller vers tranche (h41..h46=A..F)
conv_09
movfw MonASCII ; si ok ressort la val de ton w entrant ASCII
xorlw 0x30 ; soustraire h30 pour correspond..
;(h30=0 ,h31=1 ...h39=9)
movwf MonHEX ; et le placer dans ton w sortant
goto fini

conv_AF
movfw MonASCII ; ressort la val de ton w entrant ASCII
xorlw 0x41 ; soustraire h41 pour correspond..
;(h41=A ,h42=B ...h46=F)
movwf MonHEX ; et le placer dans ton w sortant
;goto fini ;
fini


scuse si je suis a cotés!
ryl...
Messages postés
87
Date d'inscription
jeudi 10 octobre 2002
Statut
Membre
Dernière intervention
4 avril 2008

Si jai bien compris un ascii en hex
;*****************************************************************************
; CONVERSION ASCII VERS HEXA *
;*****************************************************************************
;-----------------------------------------------------------------------------
; tranforme les digits contenu dans car1 et car2 en 1 nombre hexa
; réponse contenu dans car2 EXEMPLE envoi de 41 en ascii -> 0x41
;-----------------------------------------------------------------------------
ashex
; convertir premier digit
; -----------------------
movlw -0x07 ; écart entre lettre et chiffre
btfsc car1,6 ; tester si code ASCII = 4x
addwf car1,f ; oui, soustraire 7 du code ASCII
movlw -0x30 ; 30 à soustraire
addwf car1,f ; obtenir valeur


; convertir second digit
; ----------------------
movlw -0x07 ; écart entre lettre et chiffre
btfsc car2,6 ; tester si code ASCII = 4x
addwf car2,f ; oui, soustraire 7 du code ASCII
movlw -0x30 ; 30 à soustraire
addwf car2,f ; obtenir valeur


; concaténation
; -------------
swapf car1,w ; charger digit fort swappé
iorwf car2,f ; ajouter au digit faible
RETURN ; et fin
a++
Messages postés
8
Date d'inscription
jeudi 23 décembre 2004
Statut
Membre
Dernière intervention
11 janvier 2005

En regardant tout le monde, j'ai fait ca:
Ca peut marcher ?

HEXA EQU $21
ASCII EQU $20

MOVWF ASCII ; w dans ascii
BTFSC ASCII,6 ; test le bit 6
CALL CONVAàF ; si le bit 6 = 1
CALL CONV0à9 ; si bit 6 = 0

______________________________________
CONV0à9

SUBW 0x30 ; (w) - 0x30 dans w
MOVWF HEXA ; w dans hexa
RETURN
_______________________________________
CONVAàF

ANDLW 0x0F ; (w) ET 0x0F dans W
ADDLW 0x09 ; (W) + 0x09 dans W
MOVWF HEXA ; W dans hexa
RETURN

A+
Messages postés
311
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
15 décembre 2006
1
slu.
Non, pas bon deja a cause des "call" et pour d'autres raisons.
le coup du test bit6 lui par contre est valable.
La methode de Mr phenojeff est plus courte (mieux) mais il a groupé deux ascii ,sert toi de l'une de ses routines de conversion.
a+
ryl...
Messages postés
24
Date d'inscription
jeudi 2 décembre 2004
Statut
Membre
Dernière intervention
28 avril 2008
1