Pic16F84A probleme d'interruption
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 31

Pic16F84A probleme d'interruption



  1. #1
    invitec3183b33

    Pic16F84A probleme d'interruption


    ------

    bonjour tout le monde, je suis un débutant en programmation en assembleur "les pic", je voulais faire clignoter des leds branchées sur les protA du pic16f84a en les commandants par RB0/int, c a d , à chaque fois que je clique sur le bouton poussoir branché à rb0, les leds du portA clignotent

    voila mon programme , s'il vous plais veuillez m'indiquer où ce trouve le problème , sachant que MPLAB ne signal aucune erreur

    je vous signale que ça represente une simulation ISIS, donc ce n'est pas la peine de mettre ni l'oscillateur ni des résistances ni Power source



    Code:
    ;**********************************************************************
    ;                                                                                                                   *
    ; Fait clignoter une LED                                                                                  *
    ;                                                                                                                   *
    ;**********************************************************************
    ;                                                                                                                   *
    ;    NOM: LED CLIGNOTANTE AVEC TIMER0                                                *
    ;                                                                                                                   *
    ;                                                                                                                   *
    ;**********************************************************************
    ;                                                                     *
    ;    Fichier requis: P16F84a.inc                                       *
    ;                                                                     *
    ;                                                                     *
    ;                                                                     *
    ;**********************************************************************
    ;                                                                     *
    ;    Notes: Utilisation didactique du boucle en mode interruption     *
    ;                                                                     *
    ;**********************************************************************
    list p=16f84a, f=inhx8m, r=dec
    include "p16f84a.inc"
    __CONFIG _CP_OFF & _XT_OSC & _PWRTE_ON & _WDT_OFF
     
    ; '__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'10000000'         ; Valeur registre option
                                                    ; Résistance pull-up OFF
                                                    ; Préscaler timer à 256
    intconmask equ b'10010000'      ;Interruptions sur rb0/int
        
    #DEFINE interruptport   PORTB,0    
    ;*********************************************************************
    ;                   DECLARATIONS DE VARIABLES                                             *
    ;*********************************************************************
     
    cblock 0x00c
    wtemp
    statustemp
    n1
    n2
    n3
    val
    endc
     
    ;*********************************************************************
    ;                             MACRO                                                                         *
    ;*********************************************************************
     
    bank0 macro
    bcf STATUS,RP0
    endm
     
    bank1 macro
    bsf STATUS,RP0
    endm
     
    ;**********************************************************************
    ;                      DEMARRAGE SUR RESET                            *
    ;**********************************************************************
     
    org 0x00
    goto init
     
    ;**********************************************************************
    ;                     ROUTINE INTERRUPTION                                                     *
    ;**********************************************************************
     
    ;sauvegarder registres 
    ;------------------------
    org 0x04
     
          movwf   wtemp     ; sauver registre W
        swapf   STATUS,w    ; swap status avec résultat dans w
        movwf   statustemp
     
     
    ; switch vers différentes interrupts
    ; inverser ordre pour modifier priorités
    ;  ----------------------------------------
     
     
    btfsc INTCON,T0IE
    btfss INTCON,GIE
    goto inte
    call intt0
    bcf INTCON,T0IF
    goto restoreg
     
    inte
     
    btfsc INTCON,INTE
    btfss INTCON,GIE
    goto rbie
    call intinte
    bcf INTCON,INTF
    goto restoreg
     
    rbie
     
    btfsc INTCON,RBIE
    btfss INTCON,GIE
    goto intpei
    call intrbie
    bcf INTCON,RBIF
    goto restoreg
     
    intpei
     
    btfsc INTCON,EEIE
    btfss INTCON,GIE
    goto restoreg
    call inteeie
     
     
     
     
    restoreg
    
          
    	swapf	statustemp,w	; swap status avec résultat dans w
    	movwf	STATUS
          movf   wtemp,w  	; sauver registre W
    
    retfie
    
    ;**********************************************************************
    ;                     INTERRUPTION TIMER 0                                                      *
    ;**********************************************************************
    intt0
    return
    ;**********************************************************************
    ;                     INTERRUPTION RB0/INT                                                      *
    ;**********************************************************************
    intinte
    bank0
     
    movlw 0xff
    movwf PORTA
    call tempo
    movlw 0x00
    movwf PORTA
    call tempo
    movlw 0xff
    movwf PORTA
    call tempo
    movlw 0x00
    movwf PORTA
    call tempo
    return
     
     
    ;**********************************************************************
    ;                     INTERRUPTION RB0/RB4                            *
    ;**********************************************************************
    intrbie
    return          ; fin d'interruption RB0/RB4
                    ; peut être remplacé par
                    ; retlw pour retour code d'erreur
     
    ;**********************************************************************
    ;                     INTERRUPTION EEPROM                             *
    ;**********************************************************************
    inteeie
    return          ; fin d'interruption eeprom
                    ; peut être remplacé par
                    ; retlw pour retour code d'erreur
     
     
    ;*********************************************************************
    ;                       Fonction de temporisation                                                     *
    ;*********************************************************************
    tempo  ; une temporisation de presque  deux secondes
     
    movlw 1
    movwf n1
    tempo1
    movlw 0xff
    movwf n2
    tempo2
    movlw 0xff
    movwf n3
    tempo3
    decfsz n3
    goto tempo3
    decfsz n2
    goto tempo2
    decfsz n1
    goto tempo1
     
    return
     
     
    ;*********************************************************************
    ;                       INITIALISATIONS                                                            *
    ;*********************************************************************
     
    init
    bank1
    movlw optionval                ; charger masque
    movwf OPTION_REG       ; initialiser registre option
    movlw intconmask             ; charger masque
    movwf INTCON               ;charger interrupt control
    bsf interruptport             ; configurer rb0 comme une entrée
    clrf TRISA                     ; PORTA est configuré comme sorties
     
    bank0                             ; accés à la banque 0
     
     
    ;*********************************************************************
    ;                      PROGRAMME PRINCIPAL                                                     *
    ;*********************************************************************
     
    start
     
    movlw 0x1f       ; allumer les cinq leds  de PORTA
    movwf PORTA
     
     
     
    goto start
    end

    -----
    Dernière modification par Antoane ; 12/10/2015 à 19h47. Motif: Ajout balises [code], suppression balises [color]

  2. #2
    invitee05a3fcc

    Re : Pic16F84A probleme d'interruption

    Bonjour atmaxi et bienvenue sur FUTURA
    Citation Envoyé par atmaxi Voir le message
    voila mon programme ,
    Et le schéma hard ?

  3. #3
    antek

    Re : Pic16F84A probleme d'interruption

    Elimine de ton programme tout ce qui ne sert à rien, ce sera plus simple pour comprendre.
    Déroule ton programme en pas à pas avec le simulateur de MPLAB et regarde les registres concernés.

  4. #4
    invitec3183b33

    Re : Pic16F84A probleme d'interruption

    vola le schèma
    Nom : Sans titre.png
Affichages : 834
Taille : 24,8 Ko
    j'ai fait dérouler mon programme pas à pas , normalement il doit fonctionner , mais quand je clique sur le bouton poussoir rien ne se passe meme si les registres concernés sont bien configurés

  5. A voir en vidéo sur Futura
  6. #5
    antek

    Re : Pic16F84A probleme d'interruption

    Regarde l'évolution des registres en simulateur mode pas à pas.

  7. #6
    Gérard

    Re : Pic16F84A probleme d'interruption

    Citation Envoyé par DAUDET78 Voir le message
    Bonjour atmaxi et bienvenue sur FUTURA Et le schéma hard ?
    Après #4, je m'attendais à des commentaires de ta part, à moins que tu ne désespères?

  8. #7
    invitef86a6203

    Re : Pic16F84A probleme d'interruption

    Lorsqu'on traite une int on ne sort pas directement après , on test aussi les autres int !

    On ne met jamais de tempo à l'intérieur d'une int, elle doit être le plus rapide possible !

    Comment les leds peuvent elles s'éteindre ?
    Si le main passe son temps à les allumées.
    Elles vont s'éteindre au plus quelques µs , on ne verra rien.

  9. #8
    invitec3183b33

    Re : Pic16F84A probleme d'interruption

    Gérard je suis là
    j’étais entraîne de vérifier le programme en le faisant exécuter pas à pas et en meme temps surveiller les registres, j'ai bien constater que les registres conserve les valeurs souhaitées.
    mais dans le programme principale start, j'ai forcé rb0/int a se mettre à 1 par la ligne de commande " bsf PORTB,0 " mais le bit rb0 du registre PORTB est toujours à 0 . comment ??

  10. #9
    invitec3183b33

    Re : Pic16F84A probleme d'interruption

    dans le cahier de charge, c'est quand on appui sur le bouton poussoir que les leds du portA clignotent, alors selon ce que je connais , quand le micro controleur detecte une interruption, il execute un sous programme dans notre cas ce sous programme qui va faire clignoter les leds donc il doit contenir une temorisation n'est ce pas ?

  11. #10
    invitedc9da242

    Re : Pic16F84A probleme d'interruption

    Bonjour, j'ai le même problème avec un 18f, en fait, d'après mes recherches le Bit RBIE et le drapeau RBIF ne marche qu'avec les bits RB4 à RB7 du port B (interrupt on change) donc essaies avec l'un d'eux. RB0 peut servir pour des interruptions mais lesquelles je vois pas.
    Si ça peut t'aider.
    bon courage.

  12. #11
    invitedc9da242

    Re : Pic16F84A probleme d'interruption

    Peux tu voir l'état du flag RBIF dans ta simu ?

  13. #12
    paulfjujo

    Re : Pic16F84A probleme d'interruption

    RB0 peut servir pour des interruptions mais lesquelles je vois pas.
    RB0 interrupt est une interrupt à part entiere
    sur detection de front montant (ou descendant) sur l'entre RB0
    (contrairement à l'IT RB4-RB7 ..interupt sur le changement d'etat,niveau 0 ou 1)

    j'ai forcé rb0/int a se mettre à 1 par la ligne de commande " bsf PORTB,0 "
    mais le bit rb0 du registre PORTB est toujours à 0 . comment ??
    L'It RB0 se base sur le changement (front) de l'ENTREE RB0

    BSF PORTB,b0 c'est pour une sortie RB0
    on ne peut pas forcer le bit interrupt RB0 par programme...
    c'est une interruption hardware interne au PIC.

  14. #13
    invitee05a3fcc

    Re : Pic16F84A probleme d'interruption

    Citation Envoyé par Gérard Voir le message
    Après #4, je m'attendais à des commentaires de ta part, à moins que tu ne désespères?
    Je ne suis pas à 100% du temps sur le site !
    Mes commentaires :
    - pas de découplage du Vdd
    - Pas de résistance de limitation sur les LEDs
    - Pas de circuit anti-rebondissement sur le bouton (faudra le faire par le soft ... que je ne sais (veux ! ) pas lire)

    PS : Ca ne gêne pas le fonctionnement en simulation ..... mais empêche le bon fonctionnement sur le montage définitif .

  15. #14
    invitec3183b33

    Re : Pic16F84A probleme d'interruption

    Citation Envoyé par alfounet Voir le message
    Bonjour, j'ai le même problème avec un 18f, en fait, d'après mes recherches le Bit RBIE et le drapeau RBIF ne marche qu'avec les bits RB4 à RB7 du port B (interrupt on change) donc essaies avec l'un d'eux. RB0 peut servir pour des interruptions mais lesquelles je vois pas.
    Si ça peut t'aider.
    bon courage.
    merci pour ton conseil, j'ai vu un tuto video dans lequel un programmeur utilise une interruption rb0 dans le meme schema que le mien ,mais avec du langage C, ce qui me pousse à penser que le problème dans mon cas vient du programme

  16. #15
    invitec3183b33

    Re : Pic16F84A probleme d'interruption

    Citation Envoyé par paulfjujo Voir le message
    L'It RB0 se base sur le changement (front) de l'ENTREE RB0

    BSF PORTB,b0 c'est pour une sortie RB0
    on ne peut pas forcer le bit interrupt RB0 par programme...
    c'est une interruption hardware interne au PIC.
    j'ai compris merci, mais dans le schema de simulation , j'ai bien mis un bouton poussoir , donc c'est une interrupt hardware pourquoi rien ne se passe quand j'appuis au dessus

  17. #16
    invitec3183b33

    Re : Pic16F84A probleme d'interruption

    Citation Envoyé par DAUDET78 Voir le message
    Je ne suis pas à 100% du temps sur le site !
    Mes commentaires :
    - pas de découplage du Vdd
    - Pas de résistance de limitation sur les LEDs
    - Pas de circuit anti-rebondissement sur le bouton (faudra le faire par le soft ... que je ne sais (veux ! ) pas lire)

    PS : Ca ne gêne pas le fonctionnement en simulation ..... mais empêche le bon fonctionnement sur le montage définitif .
    avec ISIS on aura pas besoin de tout ça , j'ai pas de matériels pour l'instant pour que je passes a la réalisation, j'essaie de comprendre se qui se passe dans le uC avant de me mêler à la réalisation

  18. #17
    invitef86a6203

    Re : Pic16F84A probleme d'interruption

    Citation Envoyé par atmaxi Voir le message
    dans le cahier de charge, c'est quand on appui sur le bouton poussoir que les leds du portA clignotent, alors selon ce que je connais , quand le micro controleur detecte une interruption, il execute un sous programme dans notre cas ce sous programme qui va faire clignoter les leds donc il doit contenir une temorisation n'est ce pas ?
    bah non !
    C est le main qui doit faire clignoter.
    Il faut positionner un flag et le tester dans le main.

    De plus comme déjà dit le main passe son temps à envoyer des 1 sur le port , ça clignotera jamais !

  19. #18
    invitef86a6203

    Re : Pic16F84A probleme d'interruption

    Code:
    movlw 0;
    movwf flag;
    
    start
    
    movf flag,w
    btfss STATUS,Z
    goto FlagOn
       movlw 0x1f       ; allumer les cinq leds  de PORTA
       movwf PORTA;
       goto NextMain
    FlagOn
      call  inteeie;
    
    NextMain

  20. #19
    paulfjujo

    Re : Pic16F84A probleme d'interruption

    Citation Envoyé par atmaxi Voir le message
    j'ai compris merci, mais dans le schema de simulation , j'ai bien mis un bouton poussoir , donc c'est une interrupt hardware pourquoi rien ne se passe quand j'appuis au dessus

    probleme sur la gestion des interruption
    quand on entre dans le traitement d'interruption
    on a pas besoin de tester le drapeau GIE ..puisqu'on est dans l'interruption
    par contre il est indispenssable de tester le drapeau de l'evenement concerné xxxIF

    Code:
    .....
    btfsc INTCON,INTE  ; test si  IT RB0 autorisé
    btfss INTCON,INTF  ; test si drapeau IT RB0 levé 
    goto rbie
    
    ;   call intinte
    movlw 1;
    movwf flag;
    
    bcf INTCON,INTF
    goto restoreg
    
    rbie 
    ...
    Dernière modification par paulfjujo ; 13/10/2015 à 14h08.

  21. #20
    invite3c199cf9

    Re : Pic16F84A probleme d'interruption

    Je ne comprends pas pourquoi tu veux absolument déclencher une interruption pour ce que tu veux faire, alors qu’il suffit de lire dans une boucle l’état du port connecté au poussoir…

  22. #21
    invitec3183b33

    Re : Pic16F84A probleme d'interruption

    Citation Envoyé par lpt1com2 Voir le message
    Je ne comprends pas pourquoi tu veux absolument déclencher une interruption pour ce que tu veux faire, alors qu’il suffit de lire dans une boucle l’état du port connecté au poussoir…
    je veux apprendre ce que c'est une interruption RB0 , en realisant cette exercice
    en utilisant le pic 16f84a, les leds relier au portA clignotent 4 fois lorsque on appui sur le bouton poussoir relier a RB0 apres les leds s'éteignent jusqu'à une autre interruption

  23. #22
    invitec3183b33

    Re : Pic16F84A probleme d'interruption

    Citation Envoyé par freepicbasic Voir le message
    bah non !
    C est le main qui doit faire clignoter.
    Il faut positionner un flag et le tester dans le main.

    De plus comme déjà dit le main passe son temps à envoyer des 1 sur le port , ça clignotera jamais !
    mais l’événement est appelé interruption parce qu’il interrompt le programme principale et exécute d’urgence une routine , je me trempe ?
    donc meme si le main envoie des 1 sur le port, il arrive un moment où ce n'est pas le main qui commande les led du portA mais c'est le programme d'interruption,
    si j'ai des fausses idées s'il vous plait éclaircissent moi le chemin de la compréhension

  24. #23
    Gérard

    Re : Pic16F84A probleme d'interruption

    Ton interruption ne doit que placer un bit (BP_APP) par exemple. Dans le main, tu regardes ce bit, si = 1 alors séquence de clignotement. A la fin de la séquence, tu remets le bit à 0. Comme le bit est à 0, la séquence de clignotement ne sera plus effectuée jusqu'à la prochaine interruption.

  25. #24
    invitec3183b33

    Re : Pic16F84A probleme d'interruption

    je vais essayer cette démarche merci

  26. #25
    invitec3183b33

    Re : Pic16F84A probleme d'interruption

    Citation Envoyé par Gérard Voir le message
    Ton interruption ne doit que placer un bit (BP_APP) par exemple. Dans le main, tu regardes ce bit, si = 1 alors séquence de clignotement. A la fin de la séquence, tu remets le bit à 0. Comme le bit est à 0, la séquence de clignotement ne sera plus effectuée jusqu'à la prochaine interruption.
    une toute petite question, à l'interruption le programme se dirige vers l adresse 0x004, il n'est plus dans main n'est ce pas ?

  27. #26
    antek

    Re : Pic16F84A probleme d'interruption

    Citation Envoyé par atmaxi Voir le message
    une toute petite question, à l'interruption le programme se dirige vers l adresse 0x004, il n'est plus dans main n'est ce pas ?
    Oui, dès que l'interruption est validée, le programme est automatiquement branché à h'4', l'adresse pour le retour est sauvegardée.

  28. #27
    invitec3183b33

    Re : Pic16F84A probleme d'interruption

    Citation Envoyé par antek Voir le message
    Oui, dès que l'interruption est validée, le programme est automatiquement branché à h'4', l'adresse pour le retour est sauvegardée.
    dans mon cas, à l'interruption il faut faire clignoter les leds, alors comment interrompre la routine d'interruption pour que le programme aille au main pour exécuter les instructions de clignotement, car on m'a dit que dans la routine d'interruption la règle générale est d'y passer le moins du temps possible, donc les instruction de clignotement seront placées dans main, alors ma question comment savoir la position des instruction de clignotement si on ignore où va se passer l'interruption ( le programme execute l'instruction qui suit directement l'instruction où est passée l'interruption) ?

  29. #28
    antek

    Re : Pic16F84A probleme d'interruption

    Citation Envoyé par atmaxi Voir le message
    dans mon cas, à l'interruption il faut faire clignoter les leds, alors comment interrompre la routine d'interruption pour que le programme aille au main pour exécuter les instructions de clignotement, car on m'a dit que dans la routine d'interruption la règle générale est d'y passer le moins du temps possible, donc les instruction de clignotement seront placées dans main, alors ma question comment savoir la position des instruction de clignotement si on ignore où va se passer l'interruption ( le programme execute l'instruction qui suit directement l'instruction où est passée l'interruption) ?
    On ne peut pas interrompre une routine d'interruption, on en sort par RETFIE.
    Tu positionnes une variable dans la routine INT, et tu la testes dans le programme principal.

  30. #29
    Gérard

    Re : Pic16F84A probleme d'interruption

    Citation Envoyé par Gérard Voir le message
    Ton interruption ne doit que placer un bit (BP_APP) par exemple. Dans le main, tu regardes ce bit, si = 1 alors séquence de clignotement. A la fin de la séquence, tu remets le bit à 0. Comme le bit est à 0, la séquence de clignotement ne sera plus effectuée jusqu'à la prochaine interruption.
    Je décris ce que tu devrais essayer. L'interruption ne fait que mettre un bit à 1. Après ça, tu sors de l'interruption.
    Le programme principal va lire ce bit, si = 1, alors clignotement, si = 0 aller à début

    debut:

    lire bit placé dans IRQ
    si = 1, alors clignotement
    sinon goto debut

    Dans la routine d'interruption, ne pas oublier de baisser le flag qui a généré l'interruption.

  31. #30
    invitec3183b33

    Re : Pic16F84A probleme d'interruption

    c'est très claire , mais si mon programme principal contient plusieurs instructions alors que le teste est au début de programme et l'interruption se fasse apres le teste , on peut aussi trouver dans le programme des temporisations , alors dans ce cas on va attendre que le programme termine toutes les instructions qui lui reste pour qu'il reprenne dès le début et puis rencontrer de nouveau le test !! le clignotement ne se fera pas immédiatement

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Problème Afficheur 16x2 PIC16F84A ASM
    Par invite90fa2386 dans le forum Électronique
    Réponses: 9
    Dernier message: 15/09/2013, 17h22
  2. Interruption erronée sur PIC16F84A
    Par invited00d258f dans le forum Électronique
    Réponses: 0
    Dernier message: 12/06/2011, 21h01
  3. Recommencer le programme au début après une interruption (PIC16f84A)
    Par invite4386a656 dans le forum Électronique
    Réponses: 8
    Dernier message: 17/05/2008, 14h58
  4. Pic16f84a : Probleme De Sortie
    Par invite619cf51c dans le forum Électronique
    Réponses: 8
    Dernier message: 21/07/2005, 11h52
  5. Problème de programmateur PIC16F84A
    Par inviteae0bf1de dans le forum Électronique
    Réponses: 10
    Dernier message: 07/04/2005, 17h28
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...