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
pfehm - 7 avril 2011 à 18:05
A voir également:
- Convertir une chaine de caractère en code bin
- .Bin - Guide
- Caractère ascii - Guide
- Caractere speciaux - Guide
- Caractère spéciaux - Guide
- Convertir youtube en mp3 avec audacity - 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
dimanche 27 mars 2011
Statut
Membre
Dernière intervention
28 mars 2011
28 mars 2011 à 13:35
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
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
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
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
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
27 mars 2011 à 15:08
27 mars 2011 à 17:36