Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Programation compilateur CSS L'interruption RBI



  1. #1
    paterson

    Programation compilateur CSS L'interruption RBI

    Bonjour , je souhaiterai utiliser l'interruption RBI :

    L'interruption RBI (RB4 A RB7 du port B)
    Cette interruption est provoquée par un changement d'état sur l'une des
    entrées RB4 à RB7 du port B, Le front n'a pas d'importance. Les bits associés
    sont RBIE (validation) et RBIF (drapeau)
    Pour ceci , j'utilise le logiciel CSS ( programmateur de pic en C )

    Code:
    #include <16F876A.h>
    #fuses XT, NOWDT, PUT, NOPROTECT, NOBROWNOUT, LVP, NOCPD, NOWRT, NODEBUG               	
    #use delay(clock=4000000)
    
    #INT_RB
    
    void RB_isr()
    {
       OUTPUT_TOGGLE(pin_C1);
       delay_ms (500);
    }
    
    VOID main()
    {
       enable_INTerrupts (INT_RB);
       enable_INTerrupts (GLOBAL);
    
       WHILE (1)
          {
          OUTPUT_TOGGLE (pin_C0);
          delay_ms (500);
          }
    }
    En fait , dés qui a un changement d'état sur B4 a B7 l'interruption devrai se réaliser au lieu de sa , il entre dans une boucle sans fin ( je ne comprend pas ... )

    Puis si je désactive l'interruption dans la boucle , a la fin , il sort de sa boucle , et retourne dans le programme principale , mais une fois que je refait enable_INTerrupts (INT_RB); , il pars directe dans sa boucle d'interruption ...

    Merci d'avance pour votre aide , je ne vois vraiment pas se qui va pas ...

    -----


  2. Publicité
  3. #2
    Gérard

    Re : Programation compilateur CSS L'interruption RBI

    Dans la routine d'IRQ, tu dois mettre RBIF à 0 sinon tu ne fais que rentrer et sortir de l'interruption.

  4. #3
    paterson

    Re : Programation compilateur CSS L'interruption RBI

    Merci , mais j'ai regarder comment faire : s'était :
    #asm
    BCF 0x0B,0
    #endasm
    Aprés , j'ai regarder se qui génère comme programme , j'ai trouvé :

    0058: BCF 0B.0
    0059: BCF 0A.3
    005A: BCF 0A.4
    005B: GOTO 01D

    Sinon , voila mon code généré en ASM, merci de m'avoir appris pour RBIF à 0 ...

    Je crois que je vais pouvoir me mètre a l'assembleur pour les PIC ( et dire que j'ai dit que l'assembleur s'était de la merde en cours ( pour le 68HC11 ... ) )

    Code:
    CCS PCM C Compiler, Version 3.249, 28193               02-déc.-07 13:14
    
                   Filename: C:\Documents and Settings\Matt\Bureau\test interuption\RBI.lst
    
                   ROM used: 128 words (2%)
                             Largest free fragment is 2048
                   RAM used: 16 (9%) at main() level
                             19 (11%) worst case
                   Stack:    3 worst case (1 in main + 2 for interrupts)
    
    *
    0000:  MOVLW  00
    0001:  MOVWF  0A
    0002:  GOTO   05C
    0003:  NOP
    0004:  MOVWF  7F
    0005:  SWAPF  03,W
    0006:  CLRF   03
    0007:  MOVWF  21
    0008:  MOVF   0A,W
    0009:  MOVWF  20
    000A:  CLRF   0A
    000B:  MOVF   04,W
    000C:  MOVWF  22
    000D:  MOVF   77,W
    000E:  MOVWF  23
    000F:  MOVF   78,W
    0010:  MOVWF  24
    0011:  MOVF   79,W
    0012:  MOVWF  25
    0013:  MOVF   7A,W
    0014:  MOVWF  26
    0015:  MOVF   7B,W
    0016:  MOVWF  27
    0017:  BCF    03.7
    0018:  BCF    03.5
    0019:  BTFSS  0B.3
    001A:  GOTO   01D
    001B:  BTFSC  0B.0
    001C:  GOTO   030
    001D:  MOVF   22,W
    001E:  MOVWF  04
    001F:  MOVF   23,W
    0020:  MOVWF  77
    0021:  MOVF   24,W
    0022:  MOVWF  78
    0023:  MOVF   25,W
    0024:  MOVWF  79
    0025:  MOVF   26,W
    0026:  MOVWF  7A
    0027:  MOVF   27,W
    0028:  MOVWF  7B
    0029:  MOVF   20,W
    002A:  MOVWF  0A
    002B:  SWAPF  21,W
    002C:  MOVWF  03
    002D:  SWAPF  7F,F
    002E:  SWAPF  7F,W
    002F:  RETFIE
    0030:  BCF    0A.3
    0031:  BCF    0A.4
    0032:  GOTO   048
    .................... #include <16F876.h>
    .................... //////// Standard Header file for the PIC16F876 device ////////////////
    .................... #device PIC16F876
    .................... #list
    ....................
    .................... #fuses XT, NOWDT, PUT, NOPROTECT, NOBROWNOUT, LVP, NOCPD, NOWRT, NODEBUG
    .................... #use delay(clock=4000000)
    0033:  MOVLW  2D
    0034:  MOVWF  04
    0035:  MOVF   00,W
    0036:  BTFSC  03.2
    0037:  GOTO   047
    0038:  MOVLW  01
    0039:  MOVWF  78
    003A:  CLRF   77
    003B:  DECFSZ 77,F
    003C:  GOTO   03B
    003D:  DECFSZ 78,F
    003E:  GOTO   03A
    003F:  MOVLW  4A
    0040:  MOVWF  77
    0041:  DECFSZ 77,F
    0042:  GOTO   041
    0043:  NOP
    0044:  NOP
    0045:  DECFSZ 00,F
    0046:  GOTO   038
    0047:  RETLW  00
    ....................
    .................... #INT_RB
    ....................
    .................... void RB_isr()
    .................... {
    ....................    disable_interrupts(INT_RB);
    0048:  BCF    0B.3
    ....................    OUTPUT_TOGGLE(pin_C1);
    0049:  BCF    29.1
    004A:  MOVF   29,W
    004B:  BSF    03.5
    004C:  MOVWF  07
    004D:  MOVLW  02
    004E:  BCF    03.5
    004F:  XORWF  07,F
    *
    0064:  MOVLW  FF
    0065:  BCF    03.5
    0066:  MOVWF  29
    ....................    delay_ms (500);
    *
    0050:  MOVWF  2C
    0051:  MOVLW  FA
    0052:  MOVWF  2D
    0053:  CALL   033
    0054:  DECFSZ 2C,F
    0055:  GOTO   051
    ....................    enable_INTerrupts (INT_RB);
    0056:  BSF    0B.3
    ....................    #asm
    ....................    BcF   0x0B,0
    0057:  BCF    0B.0
    ....................    #endasm
    .................... }
    ....................
    0058:  BCF    0B.0
    0059:  BCF    0A.3
    005A:  BCF    0A.4
    005B:  GOTO   01D
    .................... VOID main()
    .................... {
    005C:  CLRF   04
    005D:  MOVLW  1F
    005E:  ANDWF  03,F
    005F:  BSF    03.5
    0060:  BSF    1F.0
    0061:  BSF    1F.1
    0062:  BSF    1F.2
    0063:  BCF    1F.3
    ....................    enable_INTerrupts (INT_RB);
    *
    0067:  BSF    0B.3
    ....................    enable_INTerrupts (GLOBAL);
    0068:  MOVLW  C0
    0069:  IORWF  0B,F
    ....................
    ....................    WHILE (1)
    ....................       {
    ....................       OUTPUT_TOGGLE (pin_C0);
    006A:  BCF    29.0
    006B:  MOVF   29,W
    006C:  BSF    03.5
    006D:  MOVWF  07
    006E:  MOVLW  01
    006F:  BCF    03.5
    0070:  XORWF  07,F
    ....................       delay_ms (500);
    0071:  MOVLW  02
    0072:  MOVWF  2A
    0073:  CLRF   28
    0074:  BTFSC  0B.7
    0075:  BSF    28.7
    0076:  BCF    0B.7
    0077:  MOVLW  FA
    0078:  MOVWF  2D
    0079:  CALL   033
    007A:  BTFSC  28.7
    007B:  BSF    0B.7
    007C:  DECFSZ 2A,F
    007D:  GOTO   073
    ....................       }
    007E:  GOTO   06A
    .................... }
    ....................
    007F:  SLEEP
    
    Configuration Fuses:
       Word  1: 3FB1   XT NOWDT PUT NOPROTECT NOBROWNOUT LVP NOCPD NOWRT NODEBUG

  5. #4
    Gérard

    Re : Programation compilateur CSS L'interruption RBI

    Si tu veux te mettre à l'assembleur, une seule adresse :
    http://www.abcelectronique.com/bigonoff/
    Bonnes lectures.

  6. #5
    paterson

    Re : Programation compilateur CSS L'interruption RBI

    Merci , je connaissais déjà , mais bon , j'ai trouvé un bon cours , certes avec moins d'exemple ,

    http://z.oumnad.123.fr/

    Comme j'ai déjà programmer en assembleur sur le 68HC11 , j'ai surtout besoin des mnémonique et le mapping ...

    Mais une chose que je comprend pas , je suis sur isis et j'observe la ligne 0x000B lorsque je fait : BCF 0x0B.0

    Il devrais mettre RBIF a 0 , hors il est a 1 ...

    Enfin , si j'ai bien compris les interruption , dés qui en a 1 qui est activé , il va a l'adresse programme 4 , et après teste si on retrouve le drapeau a 1 ...

  7. A voir en vidéo sur Futura
  8. #6
    Gérard

    Re : Programation compilateur CSS L'interruption RBI

    Dès qu'il y a une interruption, le programme va à l'adresse 4 et là, c'est toi qui gère.
    Si tu n'as que une interruption, ce n'est pas la peine de tester tous les flags.

  9. Publicité
  10. #7
    paterson

    Re : Programation compilateur CSS L'interruption RBI

    Merci , beaucoup du conseil , malheureusement , s'est CSS qui a fait se programme d'interruption , donc je ne peux rien modifier .

    J'ai montrer a mon prof d'électronique , a voir sa réaction , il trouve que mon compilateur s'est de la merde ...

    En gros , je devrais migrer sur Pic c ou C18

  11. #8
    Gérard

    Re : Programation compilateur CSS L'interruption RBI

    Citation Envoyé par paterson Voir le message
    Merci , beaucoup du conseil , malheureusement , s'est CSS qui a fait se programme d'interruption , donc je ne peux rien modifier .

    J'ai montrer a mon prof d'électronique , a voir sa réaction , il trouve que mon compilateur s'est de la merde ...

    En gros , je devrais migrer sur Pic c ou C18
    En ce qui concerne les compilateurs C, je ne te serai d'aucune aide, je programme en Basic.

  12. #9
    RISC

    Re : Programation compilateur CSS L'interruption RBI

    Bonsoir Paterson,

    En fait le compilateur CCS n'est pas un compilateur ANSI C..
    Il est très efficace au niveau code généré mais pas portable...et tu ne peux par facilement réutiliser du C standard.
    Il a 2 écoles ...ANSI C et pas ANSI C. Chacune avec des avantages ou inconvénients. A chacun son choix.

    Par contre...il est pas cher du tout !

    Il existe d'autres compilateur pour les PIC16 mais aucun de Microchip (Le C18 ne compile que pour les PIC18, par contre la version student est gratuite ad vitam eternam. Seule l'optimisation disparait après 60 jours.

    Il existe également PicC Lite de Hitech mais cette version est limitée en taille de code et en banques de RAM.

    a+

  13. #10
    irohito

    Re : Programation compilateur CSS L'interruption RBI

    bonjour
    je suis nouveau sur ce forum , alors je sais pas trop si je peut continuer un topic comme sa !!
    je suis étudiant en électronique , et j'ai un projet de fin d'année à faire .Le problème , c'est que j'ai de la programmation a faire avec le conpileur pic Css.
    J'ai un programme qui fonctionne avec beaucoup d'interruption extérieur , et j'aimerai savoir quel est la différence entre #INT_EXT
    et #INT_EXT1 ??

    merci de me répondre

Sur le même thème :

Discussions similaires

  1. Compilateur
    Par maedupuis dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 17/09/2007, 12h54
  2. compilateur de c
    Par Manager dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 01/10/2005, 01h56
  3. Compilateur
    Par Fufu dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 01/06/2004, 16h23
  4. Compilateur C
    Par Cyrius dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 24/11/2003, 20h08