pic 16f84 2led i bouton 1 moteur
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

pic 16f84 2led i bouton 1 moteur



  1. #1
    invitefc1671e3

    pic 16f84 2led i bouton 1 moteur


    ------

    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

    -----

  2. #2
    invitef86a6203

    Re : pic 16f84 2led i bouton 1 moteur

    il manque le "bsf status,rp0" avant de programmer le sens de i/O

    Code:
            ; initialisations spécifiques 
             ; ---------------------------- 
    
       bsf   STATUS,RP0      ; repasser banque 1 
    ;##############################
    
       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

  3. #3
    invitef86a6203

    Re : pic 16f84 2led i bouton 1 moteur

    Le 1 de cmpt3 ne sert à rien puisque 1-1=0
    Il faudrait au moins 2


    Les "goto" peuvent revenir à "boucle1"
    le clrf" ne servent à rien dans la boucle , puisque les compteurs sont déjà à 0 sauf au début.



    Code:
    ;TEMPO de plus ou moin 250 ms 
    ;----------------------------- 
    tempo 
       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   boucle1 ; si cmpt2 pas 0, recommencer boucle1 
       return         ; retour de la sous-routine

Discussions similaires

  1. pic 16F84
    Par inviteaa98cb7b dans le forum TPE / TIPE et autres travaux
    Réponses: 2
    Dernier message: 03/04/2007, 16h48
  2. pic 16F84
    Par invite894c2685 dans le forum Électronique
    Réponses: 0
    Dernier message: 21/09/2006, 15h47
  3. Pic 16f84
    Par invite59c54dd9 dans le forum Électronique
    Réponses: 3
    Dernier message: 04/03/2006, 16h36
  4. Pic 16f84
    Par invited82a1853 dans le forum Électronique
    Réponses: 2
    Dernier message: 11/12/2005, 19h28
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...