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 ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

Pic16F84A probleme d'interruption
atmaxi
Membre
Membre
Messages : 17
Enregistré en : octobre 2015

#1 Message par atmaxi » lun. 12 oct. 2015 19:41

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 : 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
,; 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
,; 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:
Image

Pic16F84A probleme d'interruption
mazertoc
Passioné
Passioné
Messages : 201
Enregistré en : juillet 2015
Localisation : Auvernha

#2 Message par mazertoc » lun. 12 oct. 2015 20:04

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.

Pic16F84A probleme d'interruption
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#3 Message par Gérard » lun. 12 oct. 2015 20:41

Ce schéma ne fonctionnera jamais, je t'ai déjà dit ailleurs pourquoi.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Pic16F84A probleme d'interruption
mazertoc
Passioné
Passioné
Messages : 201
Enregistré en : juillet 2015
Localisation : Auvernha

#4 Message par mazertoc » lun. 12 oct. 2015 21:29

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.

Pic16F84A probleme d'interruption
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#5 Message par Gérard » lun. 12 oct. 2015 21:31

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.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Pic16F84A probleme d'interruption
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#6 Message par Jérémy » lun. 12 oct. 2015 22:03

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 !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Pic16F84A probleme d'interruption
mazertoc
Passioné
Passioné
Messages : 201
Enregistré en : juillet 2015
Localisation : Auvernha

#7 Message par mazertoc » lun. 12 oct. 2015 22:04

Oui, sur maquette il verrait rapidement les problèmes.
Et en plus faut s'abimer les yeux pour lire les pin !

Pic16F84A probleme d'interruption
mazertoc
Passioné
Passioné
Messages : 201
Enregistré en : juillet 2015
Localisation : Auvernha

#8 Message par mazertoc » lun. 12 oct. 2015 22:09

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
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#9 Message par Gérard » lun. 12 oct. 2015 22:12

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.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Pic16F84A probleme d'interruption
atmaxi
Membre
Membre
Messages : 17
Enregistré en : octobre 2015

#10 Message par atmaxi » lun. 12 oct. 2015 23:57

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 2 invités