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
|