Besoin d'aide pour comprendre un programme en

pompom -  
loupius Messages postés 789 Statut Membre -
Bonjour,
voilà je suis débutant dans la programmation et j'aurai aimé savoir si quelqu'un aurait pu m'aider à déchiffrer un programme en C afin de le comprendre. Etant donné que je suis interrogé la dessus a la rentrée ! Je peux donner mon adresse mail si nécessaire.
Merci de répondre
A voir également:

12 réponses

scriptiz Messages postés 1494 Statut Membre 425
 
Le mieux serait que tu mette le code source du programme en question ici entre les balises <code > et </code > (sans les espaces avant le >) pour que ton code apparaisse proprement sur le forum.
0
Utilisateur anonyme
 
Bonjour, ne donne pas ton adresse mail, si tu veux éviter les spams =)

Postes le ici et entre balises <code> /code>.
0
pompom
 
qu'est ce que vous appelez mon code?
0
scriptiz Messages postés 1494 Statut Membre 425
 
Le code source du programme que tu veux comprendre, par exemple un bête programme en C qui affiche Hello World :

#include <stdio.h>
 
int main(void)
{
    printf("Hello world!\n");
    return 0;
}
0

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

Posez votre question
Utilisateur anonyme
 
Et bien le code source, tu dois avoir la source nn ?
Si tu n'as que l'éxecutable, ne postes pas le binaire, ça nous servirait à rien, par contre si tu n'as pas la source, on va avoir du mal à le déchiffrer, étant donné que le seul code que l'on pourra en tirer sera de l'asm...
0
pompom
 
je dois très certainement en avoir un ! mais le programme est assez long et je n'arrive pas a le repérer. est ce que je pourrai publier tout le programme ou c'est pas possible?
0
Utilisateur anonyme
 
Oui, mais tu vas avoir du mal à publier le programme !
Mais postes toujours =)
0
pompom
 
#include <p18F4550.h>
#include "AFFICHAGE.h"
#include "UART.h"

#pragma config FOSC = HS
#pragma config PWRT = OFF
#pragma config BOR = OFF
#pragma config WDTPS = 4096
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config CPUDIV = OSC1_PLL2
void OpenUSART(void);
void tempo (void);
void liressi(void);
void recepoctet (void);
void reception (void);
void InterruptHandlerHigh ( void);
void config_reg (void);
void capture (void);
void DETECTBIT (void);
unsigned char N,DRAPEAU,N1,N2,DATA;
unsigned int VAR;
unsigned char TAB[25];

#pragma code InterruptVectorHigh = 0x08

void InterruptVectorHigh ()
{
_asm
goto InterruptHandlerHigh //jump to interrupt routine
_endasm
}
#pragma code
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh ()

{ INTCONbits.GIEH = 0;
RCONbits.IPEN= 0;
INTCONbits.TMR0IF = 0;
T0CONbits.TMR0ON =0;
// PIE2bits.CCP2IE =0;
PIR2bits.CCP2IF =0; //check for TMR0 overflow
// PIE1bits.CCP1IE =0;
PIR1bits.CCP1IF =0;
N =TMR0L ;
DRAPEAU = 1;
}
void recepoctet (void)
{unsigned char i;
for (i=0;i<8;i++)
{
reception ();
}
}

void main (void)
{
unsigned int i;

do{
WDTCONbits.SWDTEN=0;
WDTCONbits.SWDTEN=1;

TRISD =0;
// do{

//liressi ();
//PORTD = 0x01;
//}while (VAR<1022);

PORTD =0x01;
for (i=0;i<65000;i++);
do{config_reg ();
PORTD =0x02;
reception (); // reception des reponses du capteur

}while (DATA!=0XB4);

//for (i=0;i<30;i++)
i=0;
do
{recepoctet ();
TAB[i++] = DATA;
}while (DATA!=0xAA);
//do{
//liressi ();
PORTD = 0x55;
// }while (VAR>102);

INTCON = 0x00;
OpenUSART ();
i=0;
PORTD =0x55;
do{
putchar (TAB[i++]);
}while (TAB[i]!=0xAA);
echap();
PORTD = 0x25;

AFFICHAGE ();

}while (1);}

void reception (void)
{
DATA>>=1;
capture ();

DETECTBIT ();

}

void config_reg (void)
{

ADCON1=0x0E;
TRISB =0xff;
INTCON = 0x80;
RCONbits.IPEN= 1;
T0CON =0x42;
TRISCbits.TRISC2=1;
TRISCbits.TRISC1=1;
PIE1bits.CCP1IE=0;
PIE2bits.CCP2IE=0;
TRISD =0;
CCP1CON = 0x05;
CCP2CON = 0x04;
}

void liressi(void)
{ADCON0 =0x11;
ADCON1 =0x0A;
ADCON2 =0xBE;
TRISAbits.TRISA5 =1;
ADCON0bits.GO_DONE =1;
while (ADCON0bits.GO_DONE ==1);
VAR = ADRESH;
VAR<<=8;
VAR = VAR|ADRESL;

}

void capture (void)
{RCONbits.IPEN= 1;
IPR1bits.CCP1IP =1;
PIE1bits.CCP1IE=1;
INTCON = 0x80;
TMR0L=0;
T0CONbits.TMR0ON =1;
DRAPEAU = 0;
//PORTD =0x03;
while (!DRAPEAU);
//PORTD =0x04;
N1=N;
DRAPEAU = 0;
INTCON = 0x80;
RCONbits.IPEN= 1;
IPR2bits.CCP2IP =1;
PIE2bits.CCP2IE =1;
T0CONbits.TMR0ON =1;
while (!DRAPEAU);
//PORTD =0x05;
N=(N-N1);
//PORTD =N;
}

void DETECTBIT (void)
{

if ((N>59) & (N<95))
{DATA &=0x7F;}

else DATA|= 0x80;

}
0
scriptiz Messages postés 1494 Statut Membre 425
 
Tu as oublier d'entourer ton code des balises <code > et </code > pour qu'il soit plus lisible... tu peux modifier ton message.
0
Utilisateur anonyme
 
Ok, par contre je ne connais pas ta bibliothèque p18F4550.h. Mais je pense qu'il s'agit très probabement d'une programmation d'automate ou autre...
0
pompom
 
en fait ce programme sert a recevoir des données envoyées par un autre prog, ces données sont par exemple l'humidité la pression, la température, la vitesse du vent.. mais ce que j'aurai aimé (si c possible) c connaitre les diverses fonctions du programme, connaitre leur role.
0
pompom
 
personne n'est en mesure de me répondre? =(
0
loupius Messages postés 789 Statut Membre 148
 
Ce programme n'est pas du 'genre' attendu.
Tu avais omis de dire qu'il s'agissait d'un programme pour un PIC 18F4550... et là il y a beaucoup moins de 'clients' pour te répondre.
En fait ton programme en 'C' est beaucoup plus proche de l'assembleur que du 'C' et réussir à comprendre ce que fait précisémment ce programme va bien t'occuper le temps des vacances.
Si tu ne l'as déjà, charge le datasheet (sur le site de Microchip); prend le d'une main et ton courage de l'autre ;-)
La compréhension du PIC est passionante.
Bonnes vacances.
0