debutant_aides

debutant_aides - ASM - Programmation

Marsh Posté le 23-05-2012 à 10:56:52    

Salut à tout le monde
C’est ma première participation et j’espère que je trouverai de l’aides de  votre part
Enfaite j’ai un partie de programme écrit en assembleur (PIC12F629),
Et pour bien comprendre ce programme et qui fait pour piloter le moteur , il faut le  décortiquer  et dépouiller  ,
Et comme je suis débutant en langage assembleur , j’ai lu le data-sheet du PIC
Du coup j’ai remarqué la partie du programme que je pense responsable des interruptions  
Je fait un copie coller du partie de programme , et j’aime bien que vous me détaillez le fonctionnement est les source de cette interruption.
Mercii d’avance  :)  
 
ORG                      0x0004
                MOVWF   0x20
                MOVF    STATUS    , W
                CLRF    STATUS
                MOVWF   0x4F
                ram[0x4D] = ram[0x4B];
                ram[0x4E] = ram[0x4C];
                BTFSC   INTCON    , T0IF; // test si l'interruption vient du TMR0
                BTFSS   INTCON    , T0IE; // test si TMR0 déborde  
                GOTO    Label_0002
                CLRF    STATUS
                BCF     INTCON    , T0IF; //  
                MOVLW   0x9C
                BCF     STATUS    , RP0; // bank 0
                ADDWF   TMR0      , f
                ram[0x4B] = ram[0x43];
                ram[0x4C] = 0x00;
                MOVF    0x3F      , W
                SUBWF   0x4B      , f; //  
                BTFSS   STATUS    , C; // tester le  carry par rapport à 1
                ram[0x4C] --;
                if (!(ram[0x4C] & 0x80)) GOTO Label_0003;
                PORTA |= 0x20;               // PORTA5                
                GOTO    Label_0004
 
Label_0003 :
                PORTA &= ~0x20;            // PORTA5                
 
Label_0004 :
                ram[0x3F] --;
                ram[0x4B] = ram[0x3F];
                ram[0x4C] = 0x00;
                MOVF    0x44      , W
                SUBWF   0x4B      , f;// [4B,4C]-=[0x44]
                BTFSS   STATUS    , C
                ram[0x4C] --;
                if (!(ram[0x4C] & 0x80)) GOTO Label_0005; si [4B,4C]>0
                PORTA |= 0x01;               // PORTA0      
                GOTO    Label_0006
 
Label_0005 :
                PORTA &= ~0x01;            // PORTA0      
 
Label_0006 :
                if (ram[0x3F] != 0x00) GOTO Label_0007;
                ram[0x3F] = 0x10;//
 
Label_0007 :
                DECFSZ  0x42      , f
                GOTO    Label_0002
                ram[0x42] = 0x0A;
                if (ram[0x3E] != 0x00) ram[0x3E] --;
 
Label_0002 : ;// Restauration des Registres  
                BCF     STATUS    , RP0 ; // bank 0
                ram[0x4B] = ram[0x4D];  
                ram[0x4C] = ram[0x4E];  
                MOVF    0x4F      , W
                MOVWF   STATUS       ; // STATUS=[0x4F]
                SWAPF   0x20      , f
                SWAPF   0x20      , W ;  
                RETFIE;//fin d'interruption

Reply

Marsh Posté le 23-05-2012 à 10:56:52   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed