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
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 INTCONet 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
__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 *****************************************
;******************* 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