30.07.2015 Views

La programmation des PICs - Seconde partie

La programmation des PICs - Seconde partie

La programmation des PICs - Seconde partie

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Mode compare : <strong>La</strong> valeur de TMR1 atteint la valeur programmée5.3 Etude de la routine d’interruption du fichier « maquette ».Voici le contenu de la routine d’interruption principale contenue dans le fichier« m16f876.asm ». Cette routine contient tous les tests qui permettent d’aiguiller lesinterruptions vers la bonne sous-routine. Dans la majorité <strong>des</strong> cas, vous n’aurez plus qu’àvous occuper de remplir correctement les sous-routines concernées.Vous pourrez également supprimer les tests qui ne vous sont pas nécessaires, et,éventuellement inverser leur ordre afin de définir <strong>des</strong> priorités. Soyez dans ce cas attentifs aubon usage du bit PEIE.;**************************************************************************; ROUTINE INTERRUPTION;**************************************************************************;sauvegarder registres;---------------------org 0x004; adresse d'interruptionmovwf w_temp; sauver registre Wswapf STATUS , w ; swap status avec résultat dans wmovwf status_temp ; sauver status swappémovf FSR , w ; charger FSRmovwf FSR_temp ; sauvegarder FSRmovf PCLATH , w ; charger PCLATHmovwf PCLATH_temp ; le sauverclrf PCLATH ; on est en page 0BANK0; passer en banque0Cette première <strong>partie</strong> effectue la sauvegarde <strong>des</strong> différents registres. Nous allons décrireici leur utilité et leurs impératifs.« w_temp » est la sauvegarde du registre de travail « W ». Ce registre va être utilisé pourla sauvegarde <strong>des</strong> autres registres. De fait, c’est le premier qui doit être sauvé.Hors, si vous sauvez le registre « W » avant d’être autorisé à modifier « STATUS », quilui n’est pas encore sauvé, vous ne pouvez donc pas changer de banque. En effet, lechangement de banque nécessite la modification de RP0 et RP1 du registre « STATUS ».Donc, si vous suivez toujours, au moment de l’interruption, vous ne pouvez pas savoircomment sont configurés RP0 et RP1, donc vous ne savez pas vers quelle banque vouspointez. Il est donc de ce fait impératif de sauvegarder « W » dans la zone RAM commune.REMARQUE IMPORTANTELes 16F873 et 16F874 ne disposent pas d’une zone de banque commune. Comme vous nepouvez pas prévoir dans quelle banque vous allez sauver W, vous devez réserver la mêmeadresse relative pour w_temp à la fois dans la banque 0 et dans la banque 1. Ensuite, vouseffacerez le registre STATUS pour sauver les autres registres dans la banque 0 (par exemple)movwf w_temp ; Sauver W dans la banque 0 ou dans la 1swapf STATUS,W; charger STATUS swappé47

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!