Convertir une chaine de caractère en code bin
Résolu
pfehm
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
pfehm -
pfehm -
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.
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:
- Convertir une chaine de caractère en code bin
- Fichier bin - Guide
- Code ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Code de déverrouillage oublié - Guide
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....
Maintenant, je ne connais pas le miKroc, donc voilà, juste une proposition....
pfehm
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
le problème que je ne s'est pas comment transformer un caractère en binaire
VEF_King
en prenant son code ASCII, il me semble
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
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
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
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
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
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