Pages

2015/07/29

Simulation de deux feux rouge d'un carreffour à l'aide d'un Microcontroleur

LA PROGRAMMATION DES DEUX FEUX ROUGE A L'AIDE DU PIC 16F84A
Simulation de deux feux rouge d'un carreffour à l'aide d'un Microcontroleur PIC 16F84

 
Objectif: fonctionner deux feux rouge par l'utilisation d'un Microcontrôleur avec la possibilité de modification de mode de travail. 

Cahier des charges 

Il y'a 3 modes de fonctionnement :

     A. fonctionnement du Jour (normal);
     
     B. fonctionnement de Nuit;

     c. Arrêt (les deux feux ne fonctionnent pas );

Les deux feux doivent avoir le fonctionnement synchrones (mode normal) selon le tableau suivant (Figure: 2):

 
Simulation de deux feux rouge d'un carreffour à l'aide d'un Microcontroleur PIC 16F84
Figure: 2
 

1.Simulation par le programme ISIS:

 Les deux feux rouge (TRAFFIC LIGHTS ) sont branchés directement au PIC 16F84A avec le port B qui comporte 8 broches entrées/sorties. Tel que :

- Le FEU 1 est brancher aux broches : RB4,RB5 et RB6;

- Le FEU 2 est brancher aux broches : RB1,RB2 et RB3;

-On branche un bouton poussoir à la broche RB0/INT , cette broche qui va nous permet de basculer entre les différents modes de fonctionnement.

PIC 16F84A With ISIS proteus
Figure: 3

 2.Programmation par le programme MicroC for PIC:



 int i;
 int j=0;


/////////////////////////////////////////
 void interrupt(){

                   j++;                   // fonction Interruption
                  if(j==3) j=0;
                   intcon.f1=0;
                   i=3;
                  }

                 
//////////////////////////////////////






void fjour(){                        //fonction de feu rouge du jour
             portb=0b01000010;
             delay_ms(200);
             for(i=0;i<3;i++){
                          portb=
0b00000010;
                          delay_ms(100);
                          portb=0b01000010;
                          delay_ms(100);
                          }
if(j==0){
             portb=0b00100000;
             delay_ms(100);
             portb=0b00011000;
             delay_ms(200);
       }
         for(i=0;i<3;i++){
                          portb=0b00010000;
                          delay_ms(100);
                          portb=0b00011000;
                          delay_ms(100);
                          }
             portb=
0b00000100;
             delay_ms(
100);
             }



 
///////////////////////////////////////



void fnuit(){                 //fonction de feu clignoté de la nuit
             portb=0b00100100;
             delay_ms(100);
             portb=0b00000000;
             delay_ms(100);
             }


 
//////////////////////////////

 
void fstop(){                       // fonction d’arrêt
             portb=
0;
     }


/////////////////////////////////


 
void main() {  
 
    
              
              trisb=1//RB0 en entrée et les 7 bits qui restent en sortie
              portb=
0;


              intcon=
0b10010000;
              option_reg=
0b11000000;
             

              for(;;){
                      if(j==0) fjour();
                      if(j==1) fnuit();
                      if(j==2
) fstop();
                      }
             }
 

0 comments:

Enregistrer un commentaire