[C] A l'aide je ne comprends rien a ce programme

A l'aide je ne comprends rien a ce programme [C] - C - Programmation

Marsh Posté le 31-03-2013 à 16:01:45    

Bonjour a tous.
 
Je suis a la recherche d'une âme charitable pouvant me sauver la vie .
 
Alors voila, étant en terminale Sti2d spécialité SIN , j'ai un projet a réaliser pour la fin de l'année; celui-ci est "Domotique en rénovation". Ma partie du projet consiste a câbler et programmer un récepteur décodeur DIO aux autres partie du projet.La partie câblage est passée sans trop de problèmes, mais pour la programmation je ne comprends plus rien. Le prof me donne un programme incomplet que je doit finir et en  faire un organigramme .
 
 
Voila le programme en question :
 
 
 
 
 
#include <16F877.h>
#device adc=8
 
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOCPD                    //No EE protection
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
 
#use delay(clock=20000000)
 
 
#define LED PIN_A0
#define in_DIO input(PIN_A1)
#define Nb_bit 32
#define Tpulse1 275
#define Tstart 2675
#define T00 240
#define T01 1300
 
short erreur,bit;
long long code;
int nbit;
long index;
 
// _--__--_______ 275,240,275,1300 pour 0
// _--_______--__ 275,1300,275,240 pour 1
// _--___________ 275,2675 pour start
void pulse(void)
{
   output_bit(pin_B0,1);
   delay_us(50);
   output_bit(pin_B0,0);
}
 
void main()
{
 
         
   while(true){
      code = 0;
      nbit = 0;
      index = 0;
      erreur = false;
      while(in_DIO == 0){}; // détéction du start (le signal passe à un)
      delay_us(Tpulse1*0.5);
      pulse();
      if(in_DIO == 0) {erreur = true;}
      delay_us(Tpulse1*0.5);
      pulse();
      while(index < Tstart){
         if(in_DIO)
            {
            erreur = true;
            index = Tstart;  
            }
         index = index + 100;
         delay_us(90);
      }
      if(!erreur){   //on fait l'acquisition des 32 bits car le start est correct
      for(nbit=0;nbit<=Nb_bit;++nbit)
         {
         delay_us(Tpulse1/2);
         pulse();
         if(in_DIO==0)erreur = true; //au milieu de la premiere pulse on est à 1
         delay_us(Tpulse1/2 + T00/2);//au milieu du signal à 0
         pulse();
         if(in_DIO==1)erreur = true;// on doit être à 0 sinon erreur
         delay_us(T00/2+Tpulse1/2);// T00 plus tard il y a soit un 1
         pulse();
         if(in_DIO==1)
            {
               delay_us(T01-T00);
               pulse();
               if(in_DIO==0)
                  {//c'est un 0
                     bit = 0;
                  }
                  else erreur = true;
            }
            else
            {
               delay_us(T01-T00);
               pulse();
               if(in_DIO==1)
                  {//c'est un 1
                     bit = 1;
                  }
                  else erreur = true;
            }
          delay_us(T00);
          if(erreur == false)
          code = code |(bit<<nbit);
         }
         
      }
      if(erreur==false)
      {
      output_high(LED);
      delay_ms(10);
      output_low(LED);
      delay_ms(1);
      }
    }
 
}
 
 
 
 
Je suis complétement perdu, alors s'il vous plait si quelqu'un pouvait m'expliquer comment fonctionne ce programme, je lui en serais grandement reconnaissant

Reply

Marsh Posté le 31-03-2013 à 16:01:45   

Reply

Marsh Posté le 31-03-2013 à 16:41:10    

ezekielakera a écrit :

Bonjour a tous.
 
Je suis a la recherche d'une âme charitable pouvant me sauver la vie .
 
Alors voila, étant en terminale Sti2d spécialité SIN , j'ai un projet a réaliser pour la fin de l'année; celui-ci est "Domotique en rénovation". Ma partie du projet consiste a câbler et programmer un récepteur décodeur DIO aux autres partie du projet.La partie câblage est passée sans trop de problèmes, mais pour la programmation je ne comprends plus rien. Le prof me donne un programme incomplet que je doit finir et en  faire un organigramme .
 
 
Voila le programme en question :
 
 
 
 
 
#include <16F877.h>
#device adc=8
 
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOCPD                    //No EE protection
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
 
#use delay(clock=20000000)
 
 
#define LED PIN_A0
#define in_DIO input(PIN_A1)
#define Nb_bit 32
#define Tpulse1 275
#define Tstart 2675
#define T00 240
#define T01 1300
 
short erreur,bit;
long long code;
int nbit;
long index;
 
// _--__--_______ 275,240,275,1300 pour 0
// _--_______--__ 275,1300,275,240 pour 1
// _--___________ 275,2675 pour start
void pulse(void)
{
   output_bit(pin_B0,1);
   delay_us(50);
   output_bit(pin_B0,0);
}
 
void main()
{
 
         
   while(true){
      code = 0;
      nbit = 0;
      index = 0;
      erreur = false;
      while(in_DIO == 0){}; // détéction du start (le signal passe à un)
      delay_us(Tpulse1*0.5);
      pulse();
      if(in_DIO == 0) {erreur = true;}
      delay_us(Tpulse1*0.5);
      pulse();
      while(index < Tstart){
         if(in_DIO)
            {
            erreur = true;
            index = Tstart;  
            }
         index = index + 100;
         delay_us(90);
      }
      if(!erreur){   //on fait l'acquisition des 32 bits car le start est correct
      for(nbit=0;nbit<=Nb_bit;++nbit)
         {
         delay_us(Tpulse1/2);
         pulse();
         if(in_DIO==0)erreur = true; //au milieu de la premiere pulse on est à 1
         delay_us(Tpulse1/2 + T00/2);//au milieu du signal à 0
         pulse();
         if(in_DIO==1)erreur = true;// on doit être à 0 sinon erreur
         delay_us(T00/2+Tpulse1/2);// T00 plus tard il y a soit un 1
         pulse();
         if(in_DIO==1)
            {
               delay_us(T01-T00);
               pulse();
               if(in_DIO==0)
                  {//c'est un 0
                     bit = 0;
                  }
                  else erreur = true;
            }
            else
            {
               delay_us(T01-T00);
               pulse();
               if(in_DIO==1)
                  {//c'est un 1
                     bit = 1;
                  }
                  else erreur = true;
            }
          delay_us(T00);
          if(erreur == false)
          code = code |(bit<<nbit);
         }
         
      }
      if(erreur==false)
      {
      output_high(LED);
      delay_ms(10);
      output_low(LED);
      delay_ms(1);
      }
    }
 
}
 
 
 
 
Je suis complétement perdu, alors s'il vous plait si quelqu'un pouvait m'expliquer comment fonctionne ce programme, je lui en serais grandement reconnaissant


 
 
 
Ben dis lui que dans la pratique on fait d'abod un organigramme et aprèès on implémente dans un langage particulier.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed