Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2853 connectés 

  FORUM HardWare.fr
  Programmation
  C

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2183346
ezekielake​ra
Posté le 31-03-2013 à 16:01:45  profilanswer
 

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

mood
Publicité
Posté le 31-03-2013 à 16:01:45  profilanswer
 

n°2183348
Profil sup​primé
Posté le 31-03-2013 à 16:41:10  answer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

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

 

Sujets relatifs
Aide pour macros Excel[Résolu] Aide JavaScript - Des espaces en trop
[C] Remplacer un char dans une chaine de caractèrelangage C - PB unsigned char
langage CAide pour faire suivre un select case sur plusieurs cellules
C++ - Cplex problem de variable dans une boucle for & randomProgramme VBA trouvant une valeur répondant à des conditions ET/OU
[Objective C][Cocoa] Détecter si un host est accessible 
Plus de sujets relatifs à : [C] A l'aide je ne comprends rien a ce programme


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR