16f84 ; "Feux tricolores" ; Fabrice Sincère (C) décembre 2006 ; IUT Nancy-Brabo

16f84 ; "Feux tricolores" ; Fabrice Sincère (C) décembre 2006 ; IUT Nancy-Brabois ; version 1.00 ; microcontrôleur PIC 16F84A ; développé avec Microchip MPLAB IDE List p=16F84A ; processeur utilisé #include <p16F84A.inc> __config _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC ;bits de configuration : ;code protect OFF ;watchdog timer OFF ;power up timer ON ;oscillateur HS (quartz à grande fréquence : 20 MHz) ;xxxxxxx ; define ;xxxxxxx #define LEDVerteFeuRoutePrincipale PORTB,2 #define LEDJauneFeuRoutePrincipale PORTB,3 #define LEDRougeFeuRoutePrincipale PORTB,4 #define LEDVerteFeuRouteSecondaire PORTB,5 #define LEDJauneFeuRouteSecondaire PORTB,6 #define LEDRougeFeuRouteSecondaire PORTB,7 #define LEDVertePietonRoutePrincipale PORTA,0 #define LEDRougePietonRoutePrincipale PORTA,1 #define LEDVertePietonRouteSecondaire PORTA,2 #define LEDRougePietonRouteSecondaire PORTA,3 ;xxxxxx ; macro ;xxxxxx bank1 macro ; passage en banque 1 bsf STATUS,RP0 endm bank0 macro ; passage en banque 0 bcf STATUS,RP0 endm ;xxxxxxxxxxxxxxxxxxxxxxxxx ; déclaration de variables ;xxxxxxxxxxxxxxxxxxxxxxxxx CBLOCK H'00C' ; début de la zone des registres d'usage général du 16F84A compteur1 : 1 ; variable de le boucle de temporisation compteur2 : 1 ; variable de le boucle de temporisation compteur3 : 1 ; variable de le boucle de temporisation duree : 1 ; durée de la temporisation ENDC ;xxxxxxxxxxxxxxxxxxxx ; démarrage sur reset ;xxxxxxxxxxxxxxxxxxxx org H'0000' goto initialisation ;xxxxxxxxxxxxxxx ; initialisation ;xxxxxxxxxxxxxxx initialisation bank0 clrf PORTA ; mise à 0 des sorties du port A clrf PORTB ; mise à 0 des sorties du port B bank1 movlw B'00000000' movwf OPTION_REG ; bit 7 = 0 : activation des résistances de pull-up du port B ; (cela permet de faire l'économie d'une résistance externe sur le port RB0) ; bits 0 à 6 : ici, options non utilisées (on les met à 0, par exemple) movlw B'00010000' movwf TRISA ; bit 0 du port A (RA0) = 0 : configuration en sortie (commande de la LED Verte Piéton Route principale) ; bit 1 du port A (RA1) = 0 : configuration en sortie (commande de la LED Rouge Piéton Route principale) ; bit 2 du port A (RA2) = 0 : configuration en sortie (commande de la LED Verte Piéton Route secondaire) ; bit 3 du port A (RA3) = 0 : configuration en sortie (commande de la LED Rouge Piéton Route secondaire) ; bit 4 du port A (RA4) = 1 : non utilisé (configuration en entrée, par exemple) movlw B'00000011' movwf TRISB ; bit 0 du port B (RB0) = 1 : configuration en entrée (boutons poussoirs) ; bit 1 du port B (RB1) = 1 : non utilisé (configuration en entrée, par exemple) ; bit 2 du port B (RB2) = 0 : configuration en sortie (commande de la LED Verte Feu Route principale) ; bit 3 du port B (RB3) = 0 : configuration en sortie (commande de la LED Jaune Feu Route principale) ; bit 4 du port B (RB4) = 0 : configuration en sortie (commande de la LED Rouge Feu Route principale) ; bit 5 du port B (RB5) = 0 : configuration en sortie (commande de la LED Verte Feu Route secondaire) ; bit 6 du port B (RB6) = 0 : configuration en sortie (commande de la LED Jaune Feu Route secondaire) ; bit 7 du port B (RB7) = 0 : configuration en sortie (commande de la LED Rouge Feu Route secondaire) bank0 movlw B'00001111' movwf PORTA ; sorties RA0 à RA3 au niveau haut (LED éteintes) movlw B'11111111' movwf PORTB ; sorties RB2 à RB7 au niveau haut (LED éteintes) goto debut_programme ; xxxxxxxxxxxxxxxxxxxxxxxxx ; Routines de temporisation ; xxxxxxxxxxxxxxxxxxxxxxxxx ; La durée de la temporisation est réglée par le registre duree ; (duree)=D'1' 40 ms (pour un quartz 20 MHz) ; (duree)=D'25' 25*40 ms = 1 seconde ; (duree)=D'250' 250*40 ms = 10 secondes ; (duree)=D'0' 256*40 ms = 10,24 secondes (maximum) temporisation movf duree, W movwf compteur3 movlw H'00' ; initialisation des compteurs movwf compteur1 movwf compteur2 debut1 ; 3 boucles imbriquées (256*256*compteur3 boucles *3 cycles) decfsz compteur1, f ; décrémente (compteur1) et compare avec 0 goto debut1 ; (compteur1) différent de 0 ;(compteur1) égal à 0 : decfsz compteur2, f ; décrémente (compteur2) et compare avec 0 goto debut1 decfsz compteur3, f ; décrémente (compteur3) et compare avec 0 goto debut1 return ; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;xxxxxxxxxxxxxxxxxxxxx ; programme principal ;xxxxxxxxxxxxxxxxxxxxx debut_programme ; à la mise sous tension, les feux oranges clignotent debut0 movlw D'25' ; temporisation d'environ 1 seconde (25*40 ms) movwf duree call temporisation bcf LEDJauneFeuRoutePrincipale ;RB3=0 : on allume la LED Jaune Feu Route principale bcf LEDJauneFeuRouteSecondaire ;RB6=0 : on allume la LED Jaune Feu Route secondaire movlw D'25' ; temporisation d'environ 1 seconde (25*40 ms) movwf duree call temporisation bsf LEDJauneFeuRoutePrincipale ; RB3 = 1 : on éteint la LED Jaune Feu Route principale bsf LEDJauneFeuRouteSecondaire ; RB6 = 1 : on éteint la LED Jaune Feu Route secondaire ; détection d'un appui sur les boutons poussoirs btfsc PORTB , 0 ; lecture du port B, test du bit RB0 goto debut0 ; RB0 = 1 (boutons poussoirs au repos) ; RB0 = 0 (au moins un bouton poussoir est appuyé): bcf LEDVerteFeuRoutePrincipale ; on allume la led bcf LEDRougeFeuRouteSecondaire ; on allume la led bcf LEDRougePietonRoutePrincipale ; on allume la led bcf LEDVertePietonRouteSecondaire ; on allume la led debut2 movlw D'125' ; temporisation d'environ 5 secondes (125*40 ms) movwf duree call temporisation ;xxxx bsf LEDVerteFeuRoutePrincipale ; on éteint la led bcf LEDJauneFeuRoutePrincipale ; on allume la led bsf LEDVertePietonRouteSecondaire ; on éteint la led bcf LEDRougePietonRouteSecondaire ; on allume la led movlw D'75' ; temporisation d'environ 3 secondes (75*40 ms) movwf duree call temporisation ;xxx bsf LEDJauneFeuRoutePrincipale ; on éteint la led bcf LEDRougeFeuRoutePrincipale ; on allume la led bcf LEDVerteFeuRouteSecondaire ; on allume la led bsf LEDRougeFeuRouteSecondaire ; on éteint la led bcf LEDVertePietonRoutePrincipale ; on allume le led bsf LEDRougePietonRoutePrincipale ; on éteint la led movlw D'250' ; temporisation d'environ 10 secondes (250*40 ms) movwf duree call temporisation ;xxx bsf LEDVerteFeuRouteSecondaire ; on éteint la led bcf LEDJauneFeuRouteSecondaire ; on allume la led bsf LEDVertePietonRoutePrincipale ; on éteint la led bcf LEDRougePietonRoutePrincipale ; on allume le led movlw D'75' ; temporisation d'environ 3 secondes (75*40 ms) movwf duree call temporisation ;xxx bcf LEDVerteFeuRoutePrincipale ; on allume la led bsf LEDRougeFeuRoutePrincipale ; on éteint la led bsf LEDJauneFeuRouteSecondaire ; on éteint la led bcf LEDRougeFeuRouteSecondaire ; on allume la led bcf LEDVertePietonRouteSecondaire ; on allume la led bsf LEDRougePietonRouteSecondaire ; on éteint la led ; détection d'un appui sur les boutons poussoirs debut3 btfsc PORTB , 0 ; lecture du port B, test du bit RB0 goto debut3 ; RB0 = 1 (boutons poussoirs au repos) ; RB0 = 0 (au moins un bouton poussoir est appuyé): goto debut2 END 16f628 ; "Feux tricolores" ; Fabrice Sincère (C) décembre 2006 ; IUT Nancy-Brabois ; version 1.00 ; microcontrôleur PIC 16F628A ; développé avec Microchip MPLAB IDE List p=16F628A ; processeur utilisé #include <p16F628A.inc> __config _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC & _LVP_OFF & _DATA_CP_OFF & _BOREN_OFF & _MCLRE_ON ;bits de configuration : ;code protect OFF ;watchdog timer OFF ;power up timer ON ;oscillateur HS (quartz à grande fréquence) ;low voltage program OFF ;data EE read protect OFF ;brown out detect OFF ;master clear enable ON ;xxxxxxx ; define ;xxxxxxx #define LEDVerteFeuRoutePrincipale PORTB,2 #define LEDJauneFeuRoutePrincipale PORTB,3 #define LEDRougeFeuRoutePrincipale PORTB,4 #define LEDVerteFeuRouteSecondaire PORTB,5 #define LEDJauneFeuRouteSecondaire PORTB,6 #define LEDRougeFeuRouteSecondaire PORTB,7 #define LEDVertePietonRoutePrincipale PORTA,0 #define LEDRougePietonRoutePrincipale PORTA,1 #define LEDVertePietonRouteSecondaire PORTA,2 #define LEDRougePietonRouteSecondaire PORTA,3 ;xxxxxx ; macro ;xxxxxx bank1 macro ; passage en banque 1 bsf STATUS,RP0 bcf STATUS,RP1 endm bank0 macro ; passage en banque 0 bcf STATUS,RP0 bcf STATUS,RP1 endm ;xxxxxxxxxxxxxxxxxxxxxxxxx ; déclaration de variables ;xxxxxxxxxxxxxxxxxxxxxxxxx CBLOCK H'020' ; début de la zone des registres d'usage général du 16F628A compteur1 : 1 ; variable de le boucle de temporisation compteur2 : 1 ; variable de le boucle de temporisation compteur3 : 1 ; variable de le boucle de temporisation duree : 1 ; durée de la temporisation ENDC ;xxxxxxxxxxxxxxxxxxxx ; démarrage sur reset ;xxxxxxxxxxxxxxxxxxxx org H'0000' goto initialisation ;xxxxxxxxxxxxxxx ; initialisation ;xxxxxxxxxxxxxxx initialisation bank0 clrf PORTA ; mise à 0 des sorties du port A clrf PORTB ; mise à 0 des sorties du port B movlw B'00000111' movwf CMCON ; inactivation des comparateurs analogiques bank1 movlw B'00000000' movwf OPTION_REG ; bit 7 = 0 : activation des résistances de pull-up du port B ; (cela permet de faire l'économie d'une résistance externe sur le port RB0) ; bits 0 à 6 : ici, options non utilisées (on les met à 0, par exemple) movlw B'00010000' movwf TRISA ; bit 0 du port A (RA0) = 0 : configuration en sortie (commande de la LED Verte Piéton Route principale) ; bit 1 du port A (RA1) = 0 : configuration en sortie (commande de la LED Rouge Piéton Route principale) ; bit 2 du port A (RA2) = 0 : configuration en sortie (commande de la LED Verte Piéton Route secondaire) ; bit 3 du port A (RA3) = 0 : configuration en sortie (commande de la LED Rouge Piéton Route secondaire) ; bit 4 du port A (RA4) = 1 : uploads/Ingenierie_Lourd/ code-source 1 .pdf

  • 14
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager