Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : mazertoc
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
voila le schèma:
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 : Tout sélectionner
;***************************** ****************************** ***********
; *
; 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
voila le schèma:
Pic16F84A probleme d'interruption
Pour débeuguer un programme vaut mieux utiliser MPLAB en simulateur.
Tu fais dérouler ton programme, avec des points d'arrêt aux bons endroits, et tu simules un changement d'état de l'entrée RBINT.
Tu peux alors vérifier si les registres et les sorties varient correctement.
Si ça ne marche pas tu sais alors chercher l'erreur.
Quand tu auras fais ça, tu pourras le simuler sur ISIS.
Mais rien ne vaut une maquette réelle pour mettre en évidence la réalité du fonctionnement.
Tu fais dérouler ton programme, avec des points d'arrêt aux bons endroits, et tu simules un changement d'état de l'entrée RBINT.
Tu peux alors vérifier si les registres et les sorties varient correctement.
Si ça ne marche pas tu sais alors chercher l'erreur.
Quand tu auras fais ça, tu pourras le simuler sur ISIS.
Mais rien ne vaut une maquette réelle pour mettre en évidence la réalité du fonctionnement.
Pic16F84A probleme d'interruption
Pic16F84A probleme d'interruption
Pic16F84A probleme d'interruption
- Gérard
Expert- Messages : 1644
- Âge : 65
- Enregistré en : septembre 2015
- Localisation : Alsace - Haut-Rhin
mazertoc a écrit :Gérard a écrit :Ce schéma ne fonctionnera jamais, je t'ai déjà dit ailleurs pourquoi.
C'est pourquoi rien ne vaut une maquette.
Et pour débeuguer le simulateur MPLAB.
Je comprends pas cette frénésie des simulateurs qui simulent rien, c'est anti-pédagogique.
Tu prêches un convaincu. Je n'utilise pas de simulateur et je m'en porte très bien.
Regarde bien son schéma, c'est vraiment pas terrible.
Pic16F84A probleme d'interruption
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour atmaxi,
Bienvenue à toi sur le Forum Fantas-Pic .
Ton schéma n'est pas très académique disons . Il faut toujours une résistance en série avec des led . En simulation ça fonctionne, en vrai ton PIC va prendre cher , car il ne pourras certainement pas sortir autant de courant !
Je n'utilise pas ISIS proteus , mais si le symbol (flèche vers le bas) en dessous du BP est une masse, tu ne recevra jamais de signal sur ta pin d'entrée du PIC, étant donné que tu as une pull-down ; Donc l’état sera toujours bas pour ton PIC .
Coté programme , je ne connais pas l'ASM , je laisse les habitués de ce langage te répondre la dessus .
Bonne bidouille !
Bienvenue à toi sur le Forum Fantas-Pic .
Ton schéma n'est pas très académique disons . Il faut toujours une résistance en série avec des led . En simulation ça fonctionne, en vrai ton PIC va prendre cher , car il ne pourras certainement pas sortir autant de courant !
Je n'utilise pas ISIS proteus , mais si le symbol (flèche vers le bas) en dessous du BP est une masse, tu ne recevra jamais de signal sur ta pin d'entrée du PIC, étant donné que tu as une pull-down ; Donc l’état sera toujours bas pour ton PIC .
Coté programme , je ne connais pas l'ASM , je laisse les habitués de ce langage te répondre la dessus .
Bonne bidouille !
Pic16F84A probleme d'interruption
Pic16F84A probleme d'interruption
Jérémy a écrit :Je n'utilise pas ISIS proteus , mais si le symbol (flèche vers le bas) en dessous du BP est une masse, tu ne recevra jamais de signal sur ta pin d'entrée du PIC, étant donné que tu as une pull-down ; Donc l’état sera toujours bas pour ton PIC .
Comme il y a un symbole "terre", j'en ai déduis que le triangle à côté du BP était un +Vcc.
Une fois qu'il aura fait marcher le programme faudra bien qu'il fasse une maquette pour vérifier le hard.
Donc patientons . . .
Pic16F84A probleme d'interruption
- Gérard
Expert- Messages : 1644
- Âge : 65
- Enregistré en : septembre 2015
- Localisation : Alsace - Haut-Rhin
Pas de quartz, pas de résistances de limitation de courant pour les LED, pas de résistance entre MCLR et VCC, RA4 est en drain ouvert donc la LED doit être entre RA4 et VCC, pas condensateurs de découplage d'alim ...
Bref, beaucoup de choses à revoir.
Bref, beaucoup de choses à revoir.
Pic16F84A probleme d'interruption
Jérémy a écrit :Bonjour atmaxi,
Bienvenue à toi sur le Forum Fantas-Pic .
Ton schéma n'est pas très académique disons . Il faut toujours une résistance en série avec des led . En simulation ça fonctionne, en vrai ton PIC va prendre cher , car il ne pourras certainement pas sortir autant de courant !
Je n'utilise pas ISIS proteus , mais si le symbol (flèche vers le bas) en dessous du BP est une masse, tu ne recevra jamais de signal sur ta pin d'entrée du PIC, étant donné que tu as une pull-down ; Donc l’état sera toujours bas pour ton PIC .
Coté programme , je ne connais pas l'ASM , je laisse les habitués de ce langage te répondre la dessus .
Bonne bidouille !
le flèche vers le bas est une alimentation de 5v ( 1 logique ) quand j'appuis sur le bouton l'etat de Rb0 change d'etat du bas vers le haut. moi je m'interesse au coté programmation, j'ai bien rédigé le programme pour qu'il ait une interruption quand l'etat change de RB0 (INTCON.INTEDG est à 1)
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 39 invités