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