Nouveau sur le forum je vient poster un sujet pour demander des conseils au niveau optimisation de code.C'est a dire réduire au plus petit un code.
J'ai donc écrit un code de teste qui permet de faire clignoté une led sans devoir utilisé la fonction "Delay" qui vous le savez pendant son exécution le PIC ne peut rien faire d'autre.
J'utilise MikroC pour programmer.
Apprentissage :
-PIC utilisé : http://ww1.microchip.com/downloads/en/DeviceDoc/40044F.pdf
-Utilisation de variables
-Expérimentation des registres disponibles
-Créer un délais sans la fonction "delay_ms" (ici pour exemple 500ms)
-A l'aide du délais,faire clignoté une LED.
-Utilisation d'une LED témoin avant démarrage du programme principal.
-Expérimentation sur la création de fonctions et leurs appels.
-Routine d'interruption,le TMR0 et son calcule de débordement.
-Expérimentation de la condition "SI".
Voila dite moi si il est possible d'optimisé ce code et si vous avez des conseils.
Code : Tout sélectionner
#define led PORTA.B1 // masque pour le bit 1
#define led2 PORTB.B3 // masque pour le bit 3
unsigned int compteur; // variable pour stocker débordement TMR0
unsigned char bascule; // variable pour stocker débordement compteur
void interrupt() // routine interruption
{
if (INTCON.T0IF == 1) // si débordement TMR0 a lieu,alors
{
INTCON.T0IF = 0; // init du flag a 0
compteur++; // incrémentation de la variable
}
}
void intled() // signalement avant le lancement du programme
{
delay_ms(200);
led2 = 1;
delay_ms(200);
led2 = 0;
delay_ms(200);
led2 = 1;
delay_ms(200);
led2 = 0;
delay_ms(200);
led2 = 1;
return;
}
void main() // routine principale
{
PORTA = 0; // init 0V
PORTB = 0; // init 0V
TRISA = 0; // init full sortie
TRISB = 0; // init full sortie
PCON = 0b00001000; // init OSC interne 4MHz
INTCON = 0b10100000; // interrupt autorisé,TMR0 activé
CMCON = 7; // désactivation comparateur PORTA
OPTION_REG = 0b00000000; // init prescaler 1:2
intled(); // appel de la fonction créer
TMR0 = 0; // init TMR0 a 0
compteur = 0; // init variable a 0
bascule = 0; // init variable a 0
while(1)
{
if (compteur == 1953)
{
compteur = 0; // init compteur a 0
bascule++;
}
if (bascule == 1)
{
led=~led; // changement état de la led
}
bascule = 0; // init bascule a 0
}
}
Cordialement.

