12.07.2015 Views

microprocesseur

microprocesseur

microprocesseur

SHOW MORE
SHOW LESS

Create successful ePaper yourself

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

MICROPROCESSEURMCS BASIC-52 1.3Cette nouvelle mise à jour de l’interpréteur d’origine par H.-J. Böhling et D. Wulf à déjà étéprésentée en février 2001 dans Elektor. Cet interpréteur a aussi été testé avec succès avecla carte flash. Le programme offre des instructions spéciales pour programmer et effacerdes EEPROM. Plusieurs programmes Basic peuvent être placés dans l’EEPROM et lancésspécifiquement. Toutes les étapes ont été vérifiées avec une EEPROM de 8 Koctets.1. Écrivons un programme.2. Programmons ce programme dans l’EEPROM avec XFER.3. Chargeons d’autres programmes avec XFER.4. PROG fournit le nombre de programmes enregistrés (disons 12)5. La commande ROM commute en EEPROM.6. ROM 2 permet d’activer le deuxième programme.7. PROG2 définit le premier programme dans l’EEPROM comme celui qui démarreautomatiquementLe premier programme en EEPROM est lancé automatiquement par chaque redémarragesans qu’on ait besoin d’un terminal.gramme a été lancé par RUN. Un signal rectangulaired’une fréquence d’environ 200 Hzapparaît sur P1.0. Le niveau sur P1.7 changeenviron chaque seconde, ce qui permet decommander directement une LED. Le programmecomparable en assembleur, qui comportaitpourtant une boucle de délai supplémentaire,était quelque peu plus rapide. Lesprogrammes en Basic tournent de 100 à1 000 fois plus lentement que les programmeséquivalents en assembleur. Mais cela n’a riend’étonnant : Basic-52 est un interpréteur,donc un programme assez complexe quiinterprète et exécute mot à mot la source enBasic. La complexité de cette tâche se reconnaîtdéjà à la taille de l’interpréteur : 8 Koctets.On n’atteint même pas 100 octets en rassemblanttous les exemples en assembleurdes 2 premières parties du cours. Les programmesétaient très simples et leur déroulementplutôt linéaire. La liste de tâchesaccomplies par l’interpréteur est, par contre,impressionnante. Pour exécuter un programmeen Basic, il doit reconnaître et évaluerles mots-clés. En outre, le traitement parl’interpréteur de toutes les valeurs numériquessous forme de nombres réels est bienplus complexe que celui de simples octets.Diviseur de fréquence en BasicChargeons maintenant Basic-52 d’effectuerune tâche concrète : la détection continued’impulsions d’entrée. Une sortie est commutéeaprès 10 impulsions puis remise àl’état initial après 20 impulsions au total. Leprogramme constitue donc en fait un diviseurde fréquence par 20 : il effectue une fonctiondont se chargent normalement quelques circuitsintégrés. Il sera intéressant de voir dansquelle mesure cela fonctionne.Basic-52 n’offre aucune possibilitésimple d’adresser les bits individuelsd’un port. Il faut donc toujours lire etécrire toutes les données du port. Onobtient l’information sur un état spécifiqueen appliquant la fonctionlogique ET à l’état total du port(masquage). Basic-52 offre la fonctionlogique .AND. appliquée à desoctets. Les 2 points précédant et suivantle AND indiquent que le traitementdoit être effectué sur les bits etnon pas comme une combinaisonlogique d’expressions (If condition1AND condition2 …). Ce masquageest effectué aux lignes 110 et 130 dulistage. Une seule opération permetde combiner 8 états de bits avec8 autres par un ET logique. Le résultatn’est égal à 1 que lorsque 2 bitscorrespondants sont tout deuxégaux à 1. Voici d’ailleurs2 exemples :10101010 .AND.00000001 =——————0000000011110001 .AND.00000001 =——————00000001On voit qu’un ET logique avec00000001b = 01h = 1 ne peut donnerque 1 ou 0. Seul le bit 0 du port estsurveillé, les autres bits sont ignorés.Tout se passe donc comme si onappliquait un masque au port qui nelaisse apercevoir que le bit choisicomme entrée. On pourrait d’ailleursutiliser la même méthode en assembleur,mais ce serait inutile car onpeut interroger directement un bitunique.100 COUNT=0110 INP=PORT1.AND.1120 IF INP=1 THEN GOTO 110130 INP=PORT1.AND.1140 IF INP=0 THEN GOTO 130150 COUNT=COUNT+1 :REM PRINT COUNT160 IF COUNT=10 THENGOTO 200170 IF COUNT=20 THENGOTO 250180 GOTO 110200 REM Output low210 PORT1=253:REM P1.1 = 0220 GOTO 110250 REM Output high260 PORT1=255:REM P1.1 = 1270 COUNT=0280 GOTO 110(divide.bas)Les programmes Basic comportentsouvent un grand nombre de sautspar GOTO, ce qui complique leur lecture,particulièrement lorsqu’il s’agitde gros projets. On parle souvent de« code spaghetti » pour désigner cegenre d’enchevêtrement difficile àdémêler. Le programme de divisionde fréquence en offre un bonexemple. Mais il montre aussi que cestyle est approprié pour de petitstravaux. Il est par contre indispensablede mieux structurer les programmesde plus grande taille, parexemple en faisant appel à des sousprogrammes.Le programme fait appel à unevariable Count comme compteurd’impulsions et à une variable INPpour l’état d’entrée du port 1.0.Count est initialisé à 0. Le programmeparcourt ensuite 2 bouclesdans lesquelles l’état du port estcontinuellement lu et évalué. Leslignes 110 et 120 sont parcouruestant que l’état est haut. Leslignes 130 et 140 en sont l’équivalentpour l’état bas. Ce n’est que lorsqu’unenouvelle transition au niveauhaut a lieu que la boucle se bouclepar un saut de la ligne 180 à laligne 110. Mais le compteur a étéincrémenté au passage à la28 Elektor 3/2002

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

Saved successfully!

Ooh no, something went wrong!