Convertir un code Asm en C

Fermé
Angel Seiko Inoto - 17 févr. 2008 à 17:54
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 - 17 févr. 2008 à 18:28
Bonjour tout le monde, j'aurais besoin de l'aide de personnes connaissant le langage assembleur svp.
Ce serait pour convertir un programme en C. Je ne connais pas vraiment l'asm, je l'ai deja etudié mais très brièvement et il y'a de cela plusieurs mois donc bon :s

Je vous poste le programme :

#include <16f877.h>
#fuses HS,NOPROTECT,NOWDT,BROWNOUT,PUT,NOLVP
#ORG 0x1F00,0x1FFF {} /* Reserve memory for bootloader for the 8k 16F876/7 */
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

#use i2c (master, sda=PIN_C4, scl=PIN_C3)

main()
{
i2c_start(); //initate start condition
i2c_write(0xE0); //device address
i2c_write(0x00); //register address
i2c_write(0xA0); //1rst seq to change adress
i2c_start(); //initate start condition
i2c_write(0xE0); //device address
i2c_write(0x00); //register address
i2c_write(0xAA); //2nd seq to change adress
i2c_start(); //initate start condition
i2c_write(0xE0); //device address
i2c_write(0x00); //register address
i2c_write(0xA5); //3rd seq to change adress
i2c_start(); //initate start condition
i2c_write(0xE0); //device address
i2c_write(0x00); //register address
i2c_write(0xF0); //write new adress
i2c_stop();
}

Affichage des 2 distances en cm sur le PC :

#include <16f877.h>
#fuses HS,NOPROTECT,NOWDT,BROWNOUT,PUT,NOLVP
#ORG 0x1F00,0x1FFF {} /* Reserve memory for bootloader for the 8k 16F876/7 */
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#use i2c (master, sda=PIN_C4, scl=PIN_C3)

main()
{
// int i;
int rangeE;
int rangeF;
while(1)
{
i2c_start(); //initate start condition
i2c_write(0xF0); //device address
i2c_write(0x00); //register address
i2c_write(0x51); //set units to centimeters
i2c_stop();
delay_ms(105); //wait for returning ping

i2c_start(); //initiate a new start condition
i2c_write(0xF0); //device address
i2c_write(0x02); //address of high byte register
i2c_start();
i2c_write(0xF1); //device address but read

rangeF = i2c_read(1); //read first byte and shift left
rangeF = rangeF << 8;
rangeF += i2c_read(1); //read second byte and add to 1st
rangeF += i2c_read(0);
i2c_stop();

// printf("range F0 in centimeters = %3unr", rangeF);
delay_ms(1000);

i2c_start(); //initate start condition
i2c_write(0xE0); //device address
i2c_write(0x00); //register address
i2c_write(0x51); //set units to centimeters
i2c_stop();
delay_ms(105); //wait for returning ping

i2c_start(); //initiate a new start condition
i2c_write(0xE0); //device address
i2c_write(0x02); //address of high byte register
i2c_start();
i2c_write(0xE1); //device address but read

rangeE = i2c_read(1); //read first byte and shift left
rangeE = rangeE << 8;
rangeE += i2c_read(1); //read second byte and add to 1st
rangeE += i2c_read(0);
i2c_stop();

printf("range E0 in centimeters = %3unr", rangeE);
printf("range F0 in centimeters = %3unr", rangeF);
printf(" nr");
delay_ms(1000);
}
}



Voila, pour ceux qui l'auraient compris, il s'agit d'un programme utilisant 2 capteurs ultrasons.
J'espere que ce programme n'est pas trop long et difficile, j'ai besoin d'utiliser justement les capteurs dans un projet que je realise

Merci d'avance =)

Angel.
A voir également:

1 réponse

Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 125
17 févr. 2008 à 18:28
Bonjour bonjour,

Je suis... confus... le but est de convertir un programme depuis un assembleur vers du C et... tu donnes un programme écrit en C d'un bout à l'autre. (à part quelques options spécifiques à un compilateur visiblement)

Pourrais-tu reformuler la question s'il te plait ?

M.
0