salut
pouvez-vous m'aider*: avec le pic 16f84
j'ai un bouton 2 led et un moteur
Quand le bouton est OFF on moteur arrêt de tourner apres 2 sec et la Del clignote puis elle s’arrête. Quand le bouton est on un autre led est allumé et le moteur commence de tourner
Code:;********************************************************************** ; * ; Moteur ON/OFF avec indicateur à LED et interrupteur * ; * ; * ;********************************************************************** ; * ; NOM: test * ; Date: 20/05/2007 * ; Version: BETA * ; Circuit: N/A * ; Auteur: * ; * ;********************************************************************** ; * ; Fichier requis: P16F84.inc * ; * ;********************************************************************** ; * ; Notes: N/A * ; * ;********************************************************************** LIST p=16F84 ; Définition de processeur #include <p16F84.inc> ; Définitions de variables __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ; '__CONFIG' précise les paramètres encodés dans le processeur au moment de ; la programmation du processeur. Les définitions sont dans le fichier include. ; Voici les valeurs et leurs définitions : ; _CP_ON Code protection ON : impossible de relire ; _CP_OFF Code protection OFF ; _PWRTE_ON Timer reset sur power on en service ; _PWRTE_OFF Timer reset hors-service ; _WDT_ON Watch-dog en service ; _WDT_OFF Watch-dog hors service ; _LP_OSC Oscillateur quartz basse vitesse ; _XT_OSC Oscillateur quartz moyenne vitesse ; _HS_OSC Oscillateur quartz grande vitesse ; _RC_OSC Oscillateur à réseau RC ;********************************************************************* ; ASSIGNATIONS * ;********************************************************************* OPTIONVAL EQU B'00001000' ; Valeur registre option ; Résistance pull-up ON ; Pas de préscaler ;********************************************************************* ; DEFINE * ;********************************************************************* #DEFINE MOTEUR PORTA,0 ; BIT 2 #DEFINE LED_M_OFF PORTB,3 ; BIT 3 #DEFINE LED_M PORTB,4 ; BIT 3 #DEFINE BOUTON_1 PORTB,1 ; BIT 4 ;********************************************************************* ; MACRO * ;********************************************************************* ; #### Sortie ON #### ;EX: ;--- ;LED_1_ON macro ; bsf LED1 ; endm ;________________________________________________________________ ;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° ; Bank 1 & 2 ; ---------- goto_bank0 macro bcf STATUS,RP0 ; sélectionner banque 0 endm goto_bank1 macro bsf STATUS,RP0 ; sélectionner banque 1 endm ;________________________________________________________________ ;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° ;********************************************************************* ; DECLARATIONS DE VARIABLES * ;********************************************************************* CBLOCK 0x00C ; début de la zone variables ; temp : 1 cmpt1 : 1 cmpt2 : 1 cmpt3 : 1 bouton_inf : 1 ENDC ; fin des déclarations memory ;********************************************************************** ; DEMARRAGE SUR RESET * ;********************************************************************** org 0x000 ; Adresse de départ après reset goto init ; Adresse 0: initialiser ;********************************************************************* ; INITIALISATIONS * ;********************************************************************* init clrf PORTA ; Sorties portA à 0 clrf PORTB ; sorties portB à 0 bsf STATUS,RP0 ; sélectionner banque 1 clrf EEADR ; permet de diminuer la consommation movlw OPTIONVAL ; charger masque movwf OPTION_REG ; initialiser registre option ; Effacer RAM ; ------------ movlw 0x0c ; initialisation pointeur movwf FSR ; pointeur d'adressage indirec init1 clrf INDF ; effacer ram incf FSR,f ; pointer sur suivant btfss FSR,6 ; tester si fin zone atteinte (>=40) goto init1 ; non, boucler btfss FSR,4 ; tester si fin zone atteinte (>=50) goto init1 ; non, boucler ; initialisations spécifiques ; ---------------------------- bcf LED_M ; LED_M en sortie (banque1) bcf LED_M_OFF ; LED_M_OFF en sortie (banque1) bcf MOTEUR ; MOTEUR en sortie (banque1) bsf BOUTON_1 ; BOUTON_1 en entrer (banque1) bcf STATUS,RP0 ; repasser banque 0 goto start ; sauter au programme principal ;********************************************************************* ; call * ;********************************************************************* bouton_on bsf bouton_inf,0 bsf LED_M bsf MOTEUR bcf LED_M_OFF return bouton_off btfsc bouton_inf,0 ; Tester si le bouton a été relâché, si oui alors exécuter la tempo de 2000 ms call tempo_switch_off ; call tempo de 2000 ms bcf LED_M bcf MOTEUR bsf LED_M_OFF return tempo_switch_off bcf bouton_inf,0 ; Remettre la valeur de bouton_inf à 0 bsf LED_M_OFF ; animation LED_M_OFF (préviens la coupure du moteur) call tempo ; tempo 250 ms bcf LED_M_OFF ; animation LED_M_OFF (préviens la coupure du moteur) call tempo ; tempo 250 ms bsf LED_M_OFF ; animation LED_M_OFF (préviens la coupure du moteur) call tempo ; tempo 250 ms bcf LED_M_OFF ; animation LED_M_OFF (préviens la coupure du moteur) call tempo ; tempo 250 ms bsf LED_M_OFF ; animation LED_M_OFF (préviens la coupure du moteur) call tempo ; tempo 250 ms bcf LED_M_OFF ; animation LED_M_OFF (préviens la coupure du moteur) call tempo ; tempo 250 ms bsf LED_M_OFF ; animation LED_M_OFF (préviens la coupure du moteur) call tempo ; tempo 250 ms bcf LED_M_OFF ; animation LED_M_OFF (préviens la coupure du moteur) call tempo ; tempo 250 ms (total = 2000 ms) return ;TEMPO de plus ou moin 250 ms ;----------------------------- tempo movlw 1 ; pour 2 boucles movwf cmpt3 ; initialiser compteur3 boucle3 clrf cmpt2 ; effacer compteur2 boucle2 clrf cmpt1 ; effacer compteur1 boucle1 nop ; perdre 1 cycle decfsz cmpt1 , f ; décrémenter compteur1 goto boucle1 ; si pas 0, boucler decfsz cmpt2 , f ; si 0, décrémenter compteur 2 goto boucle2 ; si cmpt2 pas 0, recommencer boucle1 decfsz cmpt3 , f ; si 0, décrémenter compteur 3 goto boucle3 ; si cmpt3 pas 0, recommencer boucle2 return ; retour de la sous-routine ;********************************************************************* ; Début du programme * ;********************************************************************* start call bouton_off ; on démarre avec comme paramètre bouton off boucle_programme btfsc bouton_inf,0 ; tester si le bouton è ete activer ! goto passer_bouton_on ; passer btfsc BOUTON_1 call bouton_on passer_bouton_on btfss bouton_inf,0 ; tester si le bouton è ete activer ! goto passer_bouton_off ; passer btfss BOUTON_1 call bouton_off passer_bouton_off goto boucle_programme END ; directive fin de programme
-----