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 ---
Commentez, partagez et proposez des Tutos en langage ASM !
2) Deuxième partie : clignotement d'une LED par interruption
Temps-x
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 895
Enregistré en : juillet 2016
Localisation : Terre

#1 Message par Temps-x » ven. 8 sept. 2017 02:45

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.

___________________________________________________________________________________________________________________
Quand la souris nargue le chat, c'est que son trou n'est pas loin.

2) Deuxième partie : clignotement d'une LED par interruption
JMarc
Confirmé
Confirmé
Messages : 506
Enregistré en : août 2016
Localisation : Dans le Sud...

#2 Message par JMarc » dim. 31 déc. 2017 12:28

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 :sifflotte:

Je met le source, A toi de jouer pour les commentaires :sifflotte:

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            
:
    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 1 invité