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

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