Convertir une chaine de caractère en code bin

Résolu/Fermé
pfehm Messages postés 3 Date d'inscription dimanche 27 mars 2011 Statut Membre Dernière intervention 28 mars 2011 - 27 mars 2011 à 13:50
 pfehm - 7 avril 2011 à 18:05
Bonjour,


Dans une partie de mon projet je veux programmer une pic 16F877 par miKroc qui permet la lecture d'une chaine de caractère (par exemple "147K475w566") et la convertir en code binaire.
je suis bloquer au niveau de la conversation du chaine de caractère au code binaire.

merci d'avance pour votre aide.
A voir également:

4 réponses

Je ne suis pas sur de moi, mais il me semble qu il faut lire de manière entière caractère par caractère et transformer la valeur entière de chacun en binaire.

Maintenant, je ne connais pas le miKroc, donc voilà, juste une proposition....
0
pfehm Messages postés 3 Date d'inscription dimanche 27 mars 2011 Statut Membre Dernière intervention 28 mars 2011
27 mars 2011 à 15:08
le problème que je ne s'est pas comment transformer un caractère en binaire
0
en prenant son code ASCII, il me semble
0
pfehm Messages postés 3 Date d'inscription dimanche 27 mars 2011 Statut Membre Dernière intervention 28 mars 2011
28 mars 2011 à 13:35
bjr
j'ai essayé avec lo code suivant
unsigned char j;
unsigned int i;

void str_bit()
{portB.f0=1;
delay_us(250);
portB.f0=0;
delay_us(250);
}
void stp_bit()
{portb.f0=1;
delay_us(250);
portB.f0=0;
delay_ms(2);
}
void main ()
{int asc[8];
int cv;
TRISB = 0x00;
usart_init(9600);
do
{
if (Usart_Data_Ready()) // If data is received
{j = Usart_Read();
cv=(int) j;
usart_write(j);
do{
if (cv>=128){asc[0]=1;
cv=cv-128;}
if (cv>=64){asc[1]=1;
cv=cv-64;}
if (cv>=32){asc[2]=1;
cv=cv-32;}
if (cv>=16){asc[3]=1 ;
cv=cv-16;}
if (cv>=8){asc[4]=1;
cv=cv-8;}
if (cv>=4){asc[5]=1 ;
cv=cv-4;}
if (cv>=2){asc[6]=1;
cv=cv-2;}
if (cv==1){asc[7]=1;
cv=cv-1;}
}
while(cv>0) ;
for (i=0;i<7;i+=2)
{str_bit();
if (asc[i]==1) {portB.f0=1;}
delay_us(250);
str_bit();
if(asc[i+1]==1){portB.f0=1;}
delay_us(250);
stp_bit();
}
}
} while (1) ;
}
il a bien marché au niveau de run mais lorsque je teste sur isis l'oscilloscope je remarque que le code affiché et incorrecte et je ne c'est pas pour quoi
merci pour votre aide
0
je suis un etudiant . j ai m projet presque.
peut etre parce que il faut convertir les resulta avants d utiliser a l'oscilloscope.
bonne chance
0
malaik5 Messages postés 258 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 28 novembre 2013 33
5 avril 2011 à 17:27
Bonjour,
déjà tu utilise quel langage ??
Et en grosso modo pour convertir une chaine de caractère tu dois lire caractère par caractère ta chaine et après convertir le caractère lu en son code binaire correspondant qui est différent du code ASCII :
tiens inspire toi de ça
Symbol Decimal Binary
A 65 01000001
B 66 01000010
C 67 01000011
D 68 01000100
E 69 01000101
F 70 01000110
G 71 01000111
H 72 01001000
I 73 01001001
J 74 01001010
K 75 01001011
L 76 01001100
M 77 01001101
N 78 01001110
O 79 01001111
P 80 01010000
Q 81 01010001
R 82 01010010
S 83 01010011
T 84 01010100
U 85 01010101
V 86 01010110
W 87 01010111
X 88 01011000
Y 89 01011001
Z 90 01011010

Symbol Decimal Binary
a 97 01100001
b 98 01100010
c 99 01100011
d 100 01100100
e 101 01100101
f 102 01100110
g 103 01100111
h 104 01101000
i 105 01101001
j 106 01101010
k 107 01101011
l 108 01101100
m 109 01101101
n 110 01101110
o 111 01101111
p 112 01110000
q 113 01110001
r 114 01110010
s 115 01110011
t 116 01110100
u 117 01110101
v 118 01110110
w 119 01110111
x 120 01111000
y 121 01111001
z 122 01111010


Tu fais une fonction qui prend en entrée le caractère et te rend en sortie le code binaire
Tiens nous au courant
0
Bonjour

Qu'entends-tu par 'traduire une chaine de caractères en binaire' ?
Dans ton micro contrôleur comme dans tous les processeurs, tout est en binaire. La traduction que tu fais avec ta suite de if ne sert qu'à occuper 8 octets de RAM et un peu de temps processeur, mais elle n'apporte strictement rien par rapport au contenu de ta variable cv.
Mais passons.

Il faudrait que l'envoi du bit de start et celui du bit de stop soient à l'extérieur de la boucle
Et il te manque visiblement quelque chose quand tu fais
if (asc[i]==1) {portB.f0=1;}
il faudrait
if (asc[i]==1) {portB.f0=1;} else {portB.f0=0;}
sinon ta sortie va rester à 1
0
merci pour ton aide
le programme est bien fonctionner merci
0