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

cs_MTHOMAS Messages postés 8 Date d'inscription jeudi 23 décembre 2004 Statut Membre Dernière intervention 11 janvier 2005 - 9 janv. 2005 à 02:03
cs_redwings Messages postés 24 Date d'inscription jeudi 2 décembre 2004 Statut Membre Dernière intervention 28 avril 2008 - 11 janv. 2005 à 21:15
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
A voir également:

8 réponses

rylryl Messages postés 311 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 15 décembre 2006 1
9 janv. 2005 à 12:35
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...
0
cs_MTHOMAS Messages postés 8 Date d'inscription jeudi 23 décembre 2004 Statut Membre Dernière intervention 11 janvier 2005
9 janv. 2005 à 23:21
Salut,

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

A+
0
cs_redwings Messages postés 24 Date d'inscription jeudi 2 décembre 2004 Statut Membre Dernière intervention 28 avril 2008 2
10 janv. 2005 à 00:23
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
0
rylryl Messages postés 311 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 15 décembre 2006 1
10 janv. 2005 à 05:38
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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
phenojeff Messages postés 87 Date d'inscription jeudi 10 octobre 2002 Statut Membre Dernière intervention 4 avril 2008
11 janv. 2005 à 05:00
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++
0
cs_MTHOMAS Messages postés 8 Date d'inscription jeudi 23 décembre 2004 Statut Membre Dernière intervention 11 janvier 2005
11 janv. 2005 à 19:28
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+
0
rylryl Messages postés 311 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 15 décembre 2006 1
11 janv. 2005 à 20:13
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...
0
cs_redwings Messages postés 24 Date d'inscription jeudi 2 décembre 2004 Statut Membre Dernière intervention 28 avril 2008 2
11 janv. 2005 à 21:15
0
Rejoignez-nous