Explication urgente

Fermé
soulka - 6 juin 2011 à 22:47
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 - 6 juin 2011 à 23:55
Bonjour,

Je suis actuellement en terminal sti electronique et demain j'ai mon oral de bac, j'ai un gros problème concernant un programme que je viens de récuperer sans explication.. Il y a 3 points sur la compréhension de celui ci et 3 points coeff 9 peut faire des dégats.. Donc si une âme charitable aurait la grande amabilité de m'expliquer en détails ce programme.. C'est à propos d'un portail.


#include <avr/io.h> // déclaration des caracteristiques de l'ATMEGA8535
#include <util/delay.h> // fonctions de temporisation
#include <avr/interrupt.h>
#include <stdlib.h>
#include "lcd_2011.c"

//déclaration des variables:

unsigned int TCNT,OCR,ICR,TOP,point,duree_creneau;

char *duree_str="00000";

unsigned char *message0="Appuyer sur BP";
unsigned char *message1="pour detection";
unsigned char *message2="Vehicule present";
unsigned char *message3="Pas de vehicule";
unsigned char *message4=" ICR=";




//sous-prog

void mesure_duree()
{

ICR=TCNT;
lcd_gotoxy(0,0);
lcd_puts(message4);
dtostrf(ICR,5,0,duree_str);
lcd_puts(duree_str);

}


void test_detection_vehicule()
{
if (ICR<40)
{
sbi(PORTA,0);//del eteinte
lcd_gotoxy(0,1);
lcd_puts(message3);
}
else
{
cbi(PORTA,0);//del eclaire
lcd_gotoxy(0,1);
lcd_puts(message2);
}
}

// Programme principal
int main (void)
{
//initialisation des ports;
DDRD=0b00111010;
sbi(PORTD,5);

PORTA=0x04;
DDRA=0b01111011;
DDRB=0x00;
DDRC =0xFF;

// intialisation LCD:

lcd_init(); // initialisation du panneau LCD
lcd_clear(); // Effacer l'écran

//initialisation des variables

OCR=0x0016;//creneau bas de 100µs
TOP=0x03FF;// duree de la periode
TCNT=0x0000;
ICR=0x0000;

PORTA|=_BV(0);//led n'eclaire pas
lcd_clear(); // on efface l'écran
lcd_gotoxy(0,0); // positionnement du curseur ligne 1 colonne 0
lcd_puts(message0);
lcd_gotoxy(0,1); // positionnement du curseur ligne 2 colonne 0
lcd_puts(message1);

while((PINA&0x04)==0x04);

do
{
TCNT=0x0000;
point=1;
do
{
if (TCNT<OCR) cbi(PORTD,5);
else sbi(PORTD,5);

if ((TCNT>OCR)&& (point==1) && ((PIND&0b01000000)==0x00))
{
mesure_duree();
test_detection_vehicule();
point=0;
}

TCNT++;
}
while(TCNT<TOP);

}
while(1);
return 0;

}

Si vous avez besoin de plus d'info concernant l'utilisation n'hésitez pas, merci d'avance.

1 réponse

Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 54
6 juin 2011 à 23:55
Bonjour, jetez un oeil la dedans : https://www.microchip.com/
page 85
0