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 ---
2) Deuxième partie : clignotement d'une LED par interruption
Bonjour,
- Comme convenu, je ne parlerai pas des sujets déjà évoqués, voir à ce sujet ici : viewtopic.php?p=6621#p6621
Très cordialement
___________________________________________________________________________________________________________________
Sujet non terminé, en cours de traitement, quand j'aurais le temps je terminerais
___________________________________________________________________________________________________________________
___________________________________________________________________________________________________________________
Les interruptions
Qu’est-ce qu’une interruption ?
- Bien que vous savez ce que veut dire le mots interruption dans la vie active, chez les microcontrôleurs le mots veut dire
- la même chose, sauf que eu, il exprime l'interruption pour certain cas, et en fonction du fabricant de celui ci.
___________________________________________________________________________________________________________________
- Comme convenu, je ne parlerai pas des sujets déjà évoqués, voir à ce sujet ici : viewtopic.php?p=6621#p6621
Très cordialement
___________________________________________________________________________________________________________________
Sujet non terminé, en cours de traitement, quand j'aurais le temps je terminerais
___________________________________________________________________________________________________________________
___________________________________________________________________________________________________________________
Les interruptions
Qu’est-ce qu’une interruption ?
- Bien que vous savez ce que veut dire le mots interruption dans la vie active, chez les microcontrôleurs le mots veut dire
- la même chose, sauf que eu, il exprime l'interruption pour certain cas, et en fonction du fabricant de celui ci.
___________________________________________________________________________________________________________________
2) Deuxième partie : clignotement d'une LED par interruption
Bonjour Temps-x et tout le monde
Un petit coup de main a Temps-x sur les interruptions car je ne peut pas continuer ma partie usart sinon
Je met le source, A toi de jouer pour les commentaires
placer la partie inter dans 0x04 pour le 16F88 avec sauvegarde et restauration de status et w, cela servira de "base" pour la suite
incrémenter une variable pour pouvoir compter le nombre de passage dans l'interruption et effacer le flag de Timer0. Penser a déclarer la variable
Dans la partie initialisation, mise en route des interruptions, ici le bit 5 pour Timer0 et le bit 7 pour le général
et c'est tout pour l'instant
Voici le fichier de Temps-x modifié en version interruption avec une routine pour visualiser la led qui clignote
JMarc, post a effacer après modif par Temps-x
Un petit coup de main a Temps-x sur les interruptions car je ne peut pas continuer ma partie usart sinon
Je met le source, A toi de jouer pour les commentaires
placer la partie inter dans 0x04 pour le 16F88 avec sauvegarde et restauration de status et w, cela servira de "base" pour la suite
Code : Tout sélectionner
org 0X04
MOVWF Sauv ;sauve W
SWAPF STATUS,W ;
MOVWF Sauv+1 ;sauve status
Fin_inter
SWAPF Sauv+1,0
MOVWF STATUS ;restaure status
SWAPF Sauv, 1
SWAPF Sauv, 0 ;restaure W
RETFIE
incrémenter une variable pour pouvoir compter le nombre de passage dans l'interruption et effacer le flag de Timer0. Penser a déclarer la variable
Code : Tout sélectionner
incf Compteur_tmr0,f ; compte le nombre de passage dans TMR0
bcf INTCON,TMR0IF ; effacement du Flag TMR0
Dans la partie initialisation, mise en route des interruptions, ici le bit 5 pour Timer0 et le bit 7 pour le général
Code : Tout sélectionner
movlw B'10100000' ; mise en route des interuptions générale est TMR0
movwf INTCON
et c'est tout pour l'instant
Voici le fichier de Temps-x modifié en version interruption avec une routine pour visualiser la led qui clignote
Code : Tout sélectionner
;**********************************************************************************************
Errorlevel-302 ; Supprime le message "Ensure that bank bits are correct"
radix dec ; on travaille en décimal par défaut
LIST P=PIC16F88 ; Définition de processeur
#include <p16F88.inc> ; fichier include
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_IO
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
;*************************************** Assignations *****************************************
#DEFINE led PORTA,2 ; led corresponds à RA2
;******************* Adresse des variables fixe, mais délimité en bank 0 *********************
loop1 EQU H'30'
loop2 EQU H'31'
loop3 EQU H'32'
;**** zone commune en bank 0, bank 1, bank 2, bank 3, début H'70' à H'7F' soit 16 octets *****
CBLOCK 0x70
status_temps :1
w_temps :1
pclath_temps :1
fsr_temps :1
Compteur_tmr0 : 1 ; variable compteur de passage dans TMR0
Sauv :2 ; pour la sauvegarde interruption
ENDC
;***************************** adresse de depart après reset **********************************
ORG H'00'
goto debut
;*********************************************************************************************
org 0X04
MOVWF Sauv ;sauve W
SWAPF STATUS,W ;
MOVWF Sauv+1 ;sauve status
; il n'y a pas d'autre interuption a part Timer0
; donc pas de test pour l'instant
incf Compteur_tmr0,f ; compte le nombre de passage dans TMR0
bcf INTCON,TMR0IF ; effacement du Flag TMR0
Fin_inter
SWAPF Sauv+1,0
MOVWF STATUS ;restaure status
SWAPF Sauv, 1
SWAPF Sauv, 0 ;restaure W
RETFIE
;**********************************************************************************************
debut
;**********************************************************************************************
BANKSEL OSCCON ; directive pour passer en bank 1
;************************** configuration du registre OSCCON en bank 1 ************************
; 01110000 oscillateur 8 MHz
; 01100000 oscillateur 4 MHz
; 01010000 oscillateur 2 MHz
; 01000000 oscillateur 1 MHz
; 00110000 oscillateur 500 kHz
; 00100000 oscillateur 250 kHz
; 00010000 oscillateur 125 kHz
; 00000000 oscillateur 31.25 kHz
movlw B'01100000' ; choix sur 4 Mhz
movwf OSCCON ;
;************************** configuration du registre ANSEL en bank 1 *************************
movlw B'00000000' ; toutes les pattes en modes analogiques
movwf ANSEL ; mode E/S 17(RA0),18(RA1),1(RA2),2(RA3),3(RA4),12(RB6),13(RB7)
;************************ configuration du registre OPTION_REG en bank 1 **********************
movlw B'10000000' ;
movwf OPTION_REG ; résistances hors service
;************************* configuration du registre CMCON en bank 1 **************************
movlw B'00000111' ;
movwf CMCON ; éteindres les comparateurs
;******************* configuration des registres TRISA & TRISB en bank 1 **********************
movlw B'00100000' ;
movwf TRISA ; toutes les pattes en sorties, exception MCLR(RA5) en entrée
; 17(RA0),18(RA1),1(RA2),2(RA3),3(RA4),4(RA5),15(RA6),16(RA7)
movlw B'00000000' ;
movwf TRISB ; toutes les pattes en sorties
; 6(RB0),7(RB1),8(RB2),9(RB3),10(RB4),11(RB5),12(RB6),13(RB7)
;**********************************************************************************************
BANKSEL PORTA ; directive pour passer en bank 0
;**********************************************************************************************
clrf PORTA ; PORTA à 0
clrf PORTB ; PORTB à 0
;********************* configuration du registre INTCON en bank 0,1,2,3 ***********************
; clrf INTCON ; interruption hors service
movlw B'10100000' ; mise en route des interuptions générale est TMR0
movwf INTCON
clrf Compteur_tmr0 ; par precaution
;********************************** programme principal ***************************************
start
call led_routine
; bsf led ; allumage de la LED
; call _1s ; attends 1 seconde
; bcf led ; extinction de la LED
; call _1s ; attends 1 seconde
goto start ; boucler
;***************************** routine led cligno ******************************
led_routine
movlw 0xFF ; valeur a modifier pour la fréquence de cligno
subwf Compteur_tmr0,w
btfss STATUS,Z
return ; non atteint alors retour
clrf Compteur_tmr0 ; remise a zéro du compteur de passage dans Timer0
btfsc led ; test si led on
goto eteindre ; oui alors saut pour eteindre
bsf led ; non alors allumage led
return
eteindre
bcf led
return
END
JMarc, post a effacer après modif par Temps-x
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 57 invités