Besoin d'aide pour comprendre un programme en
pompom
-
loupius Messages postés 789 Statut Membre -
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
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:
- Besoin d'aide pour comprendre un programme en
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Desinstaller un programme - Guide
- Programme word gratuit - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
12 réponses
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.
Bonjour, ne donne pas ton adresse mail, si tu veux éviter les spams =)
Postes le ici et entre balises <code> /code>.
Postes le ici et entre balises <code> /code>.
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;
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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...
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...
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?
#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;
}
#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;
}
Tu as oublier d'entourer ton code des balises <code > et </code > pour qu'il soit plus lisible... tu peux modifier ton message.
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...
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.
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.
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.