Besoin d'aide pour comprendre un programme en

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
Configuration: Windows 7
Firefox 3.5.6

12 réponses

  1. 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.
    1. Bonjour, ne donne pas ton adresse mail, si tu veux éviter les spams =)

      Postes le ici et entre balises <code> /code>.
      1. 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;
        }
        1. 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...
          1. 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?
            1. Oui, mais tu vas avoir du mal à publier le programme !
              Mais postes toujours =)
              1. #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;

                }
                1. Tu as oublier d'entourer ton code des balises <code > et </code > pour qu'il soit plus lisible... tu peux modifier ton message.
                  1. 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...
                    1. 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.
                      1. personne n'est en mesure de me répondre? =(
                        1. 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.