Pic Basic Compiler
Transcription
Pic Basic Compiler
Ver 9/11/2001 - GL NOTICE D’UTILISATION Pic Basic Compiler Compilateur BASIC pour PIC 5.9 GOTO 5.10 HIGH 5.11 I2CIN 5.12 I2COUT 5.13 IF ... THEN 5.14 INPUT 5.15 LET 5.15.1 Multiplication 5.15.2 Opérateur logique NOT 5.16 LOOKDOWN 5.17 LOOKUP 5.18 LOW 5.19 NAP 5.20 OUTPUT 5.21 PAUSE 5.22 PEEK 5.23 POKE 5.24 POT 5.25 PULSIN 5.26 PULSOUT 5.27 PWM 5.28 RANDOM 5.29 READ 5.30 RETURN 5.31 REVERSE 5.32 SERIN 5.33 SEROUT 5.34 SLEEP 5.35 SOUND 5.36 TOGGLE 5.37 WRITE TABLE DES MATIÈRES 1. Introduction 2. Notions de base 2.1 Les microcontrôleurs PIC 2.2 Les entrées/sorties 2.3 Installation du logiciel 2.4 Votre premier programme 2.5 Programmation du PIC 2.6 Testez votre application 2.7 L’art d’écrire des programmes 2.7.1 Commentaires 2.7.2 Symboles 2.7.3 Etiquettes 6. Structure d’un programme compilé 6.1 Le fichier d’en-tête spécifique PB##.INC 6.2 PBH.INC 6.3 Code généré par PBC 6.4 PBL.INC 3. Options de la ligne de commande 3.1 Syntaxe 3.2 Options 3.2.1 Option -C 3.2.2 Option -D 3.2.3 Option -L 3.2.4 Option -OB 3.2.5 Option -P## 3.2.6 Option -Q 3.2.7 Option -S 7. Autres considérations relatives au PicBasic 7.1 La vitesse d’exécution est-elle assez élevée ? 7.2 Programmation en assembleur 7.2.1 Programmation en assembleur 7.2.2 Exemples de programmes en assembleur 7.2.3 Emplacement de l’assemblage en ligne 7.2.4 Le macro-assembleur PIC 7.3 Les interruptions 7.4 La vie après 2 K 4. Programmation en langage PicBasic 4.1 Commentaires 4.2 Constantes numériques 4.3 Constantes chaînes de caractères 4.4 Identificateurs 4.5 Etiquettes de lignes 4.6 Variables 4.7 Définition de symboles 4.8 Commandes multiples sur une seule lignes 8. Différences entre le compilateur PBC et le Basic Stamp I 8.1 Vitesse d’exécution 8.2 Entrées/sorties numériques 8.3 Absence d’interface PC 8.4 BUTTON 8.5 Lecture et écriture en EEPROM 8.6 GOSUB et RETURN 8.7 RANDOM 8.8 SERIN et SEROUT 8.9 Instructions à basse consommation 8.10 SLEEP 5 Instructions du langage PicBasic 5.1 BRANCH 5.2 BUTTON 5.3 CALL 5.4 DEBUG 5.5 EEPROM 5.6 END 5.7 FOR ... NEXT 5.8 GOSUB Référence : 6312 Annexe A : Résumé du jeu d’instructions de l’assembleur Microchip Annexe B : Résumé du jeu d’instructions de l’assembleur Parallax Garantie et licence d’utilisation Importé par Selectronic BP 513 - 59022 LILLE CEDEX - Tél. : 0 328 550 328 - Télécopie : 0 328 550 329 - www.selectronic.fr 1/20 1. INTRODUCTION Le compilateur “ Pic Basic Compiler ”, ou PBC en abrégé dans la suite de ce document, vous permet de programmer les microcontrôleurs PIC de Microchip en langage PicBasic, nettement plus facile à utiliser et à apprendre que l’assembleur quelque peu hermétique de ces circuits. PBC vous permet aussi de compiler des programmes écrits à l’origine pour le Basic Stamp I (produit Parallax distribué en France par Selectronic) de façon à les faire exécuter directement par un simple PIC 16Cxx. Quel est l’intérêt d’une telle démarche nous direz-vous ? Vitesse d’exécution Comme les programmes compilés par PBC s’exécutent directement depuis la mémoire de programme des PIC plutôt que d’être recherchés dans une EEPROM externe à accès série comme c’est le cas sur le Basic Stamp I, l’exécution est nettement plus rapide. En fait, certaines instructions s’exécutent même jusqu’à cent fois plus vite ! Prix de revient Pourquoi payer le prix d’un Basic Stamp I alors qu’un simple PIC 16Cxx peut convenir grâce à PBC. Partant de ce principe, le prix de revient du compilateur PBC est amorti dès la réalisation de la deuxième ou troisième application. De plus, vous pouvez toujours utiliser les Basic Stamp I en phase de mise au point de votre application. est conseillée. Ce microcontrôleur utilise en effet de la mémoire de programme en technologie EEPROM qui peut être programmée et effacée en quelques minutes. D’autres circuits existent dans les autres familles de PIC avec de la mémoire OTP (programmable une fois) ou encore avec de la mémoire UVPROM (effaçable aux ultraviolets). Le PIC 16C84 (ou 16F84) dispose en outre d’une mémoire EEPROM de données de 64 octets qui peut être utilisée pour faire de la rétention de données ou de paramètres, même lorsque le circuit n’est pas alimenté. Cette mémoire est accessible directement au moyen du compilateur grâce aux instructions READ et WRITE. 2.2 Les entrées/sorties Les entrées/sorties utilisées par le compilateur sont numérotées de 0 à 7 comme pour le Basic Stamp I. Ces entrées/sorties correspondent au port B du PIC de telle façon que Pin0 correspond à la patte 0 du port B ou encore à PortB.0 ou bien encore à RB0 selon les notations employées. La numérotation du port n’a bien sûr rien à voir avec le brochage réel du PIC mais correspond seulement à l’ordre de repérage logique des pattes du port tel qu’il est défini par le fabricant. Ainsi, selon le modèle de PIC utilisé, Pin0 peut être physiquement la patte 6, 21 ou 33 mais sera toujours PortB.0. Les instructions du compilateur qui font référence à un numéro de port d’entrée/sortie telles que HIGH ou LOW par exemple nécessitent le numéro de port seul. Ainsi, il faut écrire par exemple High 3 et non High Pin3 qui produirait des résultats imprévisibles. Une autre solution passe par l’utilisation de symboles comme nous le verrons dans la suite de cette notice. Taille du programme Le compilateur n’impose aucune limite au nombre d’instructions que peut contenir un programme. La taille de ce dernier ne dépend donc que des instructions utilisées et de la place disponible dans la mémoire de programme du PIC choisi. Matériel par défaut Par défaut, le compilateur PBC produit un programme en langage machine prévu pour s’exécuter sur un PIC 16C ou 16F84-04 fonctionnant avec une horloge à quartz à 4 MHz. Un nombre minimum de composants externes est donc nécessaire puisqu’il suffit : de 2 condensateurs de 22 pF et d’un quartz à 4 MHz pour l’oscillateur et d’une résistance de 4,7 kΩ assurant le tirage au + 5 volts de la patte MCLR. La majorité des autres microcontrôleurs PIC est bien évidemment supportée par PBC sauf les anciens PIC 16C5x qui ne disposent que d’une pile à 2 niveaux et d’un jeu d’instructions sur 12 bits. Ceci n’est toutefois pas un problème puisque ces circuits sont aujourd’hui en phase de remplacement par les 16C55x (16C54 devient 16C554 et 16C56 devient 16C556) qui sont, eux, supportés par PBC. 2. NOTIONS DE BASE Par contre, si l’on a besoin de connaître l’état d’un port, il faut utiliser son nom complet. Ainsi, pour savoir si PortB.4 est au niveau bas on écrira : If Pin4 = 0 Then ... Toutes les pattes d’entrées/sorties peuvent être positionnées simultanément en utilisant la variable Pins. Par exemple : Pins = 255 place toutes les lignes du port B au niveau haut. La variable Dirs permet, de la même façon, d’agir sur le registre de sens de fonctionnement du port. Il n’existe que 8 entrées/sorties définies en Basic Stamp I qui sont Pin0 à Pin7 or il existe de nombreux PIC qui ont 13, 22 ou même 33 lignes d’entrées/sorties. Certaines instructions particulières, telle I2COUT par exemple, exploitent automatiquement ces lignes supplémentaires. Pour accéder aux autres, les instructions bien connues PEEK et POKE ont été ajoutées au langage Basic du Basic Stamp I. 2.3 Installation du logiciel Le logiciel contenu sur la disquette doit être copié sur le disque dur de votre machine avant utilisation. Pour cela, placez-vous sous DOS (ou dans une fenêtre DOS si vous utilisez Windows 95 ou 98) et créez un répertoire que vous appellerez PBC (par exemple) en tapant (si votre disque dur s’appelle C) : CD C:\ MD PBC 2.1. Les microcontrôleurs PIC Le compilateur produit du code qui peut être programmé dans une large gamme de microcontrôleurs PIC, disposant de 18 à 40 pattes et de ressources internes diverses et variées. Certaines versions sont même disponibles aujourd’hui en boîtiers 8 pattes. Certains de ces circuits ne peuvent pas être utilisés avec PBC mais ils sont en voie de disparition au profit de composants plus récents. Ce sont les circuits de la série 16C5x dont les plus connus d’entre eux sont le 16C54 et le 16C56. Ces circuits ne disposent en effet que d’une pile à 2 niveaux et d’un jeu d’instructions sur 12 bits contre une pile à 8 niveaux et un jeu d’instructions sur 14 bits pour les versions les plus récentes. Copiez ensuite tous les fichiers contenus sur la disquette, répertoires et sous-répertoires compris, soit avec l’explorateur de Windows 95 ou 98, soit avec la commande DOS : XCOPY A:*.*,C:\PBC /S Consultez si nécessaire le fichier read.me contenu sur la disquette car il peut contenir des informations qui n’étaient pas disponibles lors de la rédaction de ce manuel. 2.4 Votre premier programme A l’heure où ces lignes sont écrites, les circuits suivants sont utilisables avec le compilateur : 16C554, 556, 558, 61, 62, 62A, 620, 621, 622, 63, 64, 64A, 65, 65A, 71, 710, 711, 715, 72, 73, 73A, 74, 74A, 84, 16F83, F84 et PIC 14000. Les circuits 16C54 et 16C56 peuvent ainsi être remplacés par des 16C554 et 16C556 respectivement qui sont quasiment au même prix. Pour pouvoir écrire des programmes destinés au compilateur vous devez disposer d’un éditeur de texte ou d’un traitement de texte. Vous pouvez utiliser EDIT fourni avec MSDOS ou Notepad fourni avec Windows 95. Le nom du fichier source produit doit comporter un maximum de 8 caractères (contraintes DOS) et avoir l’extension .BAS bien que ce ne soit pas obligatoire. Pour des développements d’applications à usage général, l’utilisation d’un 16C84 ou 16F84 (version plus récente appelée à remplacer le 16C84) Le fichier texte ainsi produit doit être en ASCII pur c’est à dire ne contenir aucun caractère particulier de formatage ou d’enrichissement. C’est le cas Importé par Selectronic 2/20 BP 513 - 59022 LILLE CEDEX - Tél. : 0 328 550 328 - Télécopie : 0 328 550 329 - www.selectronic.fr avec EDIT de MSDOS mais, si vous utilisez un traitement de texte, prenez la précaution de sauvegarder votre fichier sous forme ASCII (appelé aussi parfois sous forme DOS par certains logiciels). Le programme suivant va vous permettre de tester votre chaîne de production de PIC programmés à partir du compilateur. Vous pouvez le saisir avec votre éditeur de texte ou bien l’extraire du sous-répertoire “ samples ” de la disquette ; il s’appelle blink.bas. 2.6 Testez votre application Si vous voulez tester le programme que vous venez d’écrire et de compiler, il vous suffit de réaliser le montage dont le schéma vous est proposé ci-dessous ; montage que vous pouvez assembler par exemple sur une plaque de câblage rapide. Alimenté sous une tension stabilisée de 5 volts il doit faire clignoter la LED au rythme d’un éclat par seconde environ. ‘Example program from manual to blink an LED connected to RB0 about once a second loop: High 0 Pause 500 ‘Turn on LED connected to RB0 ‘Delay for .5 seconds Low 0 Pause 500 ‘Turn off LED connected to RB0 ‘Delay for .5 seconds Goto loop ‘Go back to loop and blink LED forever Soit en français : ‘Programme d’exemple du manuel pour faire clignoter une LED connectée sur RB0 ‘une fois pas seconde boucle: High 0 Pause 500 Low 0 Pause 500 ‘ Allume la LED connectée sur RB0 ‘ Délai de 0,5 seconde ‘ Eteint la LED connectée sur RB0 ‘ Délai de 0,5 seconde Goto boucle ‘ Retour au début, fait clignoter la LED indéfiniment Une fois que vous êtes certain que le programme que vous avez écrit va fonctionner sans problème, vous pouvez le compiler en frappant tout simplement PBC suivi du nom de son fichier source. Dans cet exemple vous frapperez donc : pbc blink ou pbc blink.bas. Un message de “ copyright ” est alors affiché et le compilateur traite ensuite votre fichier. En l’absence d’erreur il crée un fichier source assembleur appelé dans ce cas blink.src et appelle automatiquement l’assembleur fourni pour terminer le travail et créer le fichier binaire blink.hex qu’il ne vous reste plus qu’à programmer dans le PIC choisi. En cas d’erreur, le compilateur affiche différents messages selon leurs types et leurs emplacements et vous devez alors les corriger en faisant à nouveau appel à l’éditeur de texte. 2.7 L’art d’écrire des programmes L’écriture de programmes lisibles et faciles à faire évoluer par la suite est presque un art. Voici quelques techniques simples que nous vous conseillons pour y parvenir. 2.7.1 Commentaires Utilisez de nombreux commentaires. En effet, même si ce que fait le code que vous avez écrit vous semble évident, ce ne sera pas nécessairement le cas pour une tierce personne, ou même pour vous dans quelques années ! Même si les commentaires prennent de la place dans le listing source en Basic, ils sont ignorés par le compilateur et n’utilisent donc aucun espace mémoire dans le programme destiné au PIC. Il est évidemment conseillé d’écrire et de tester les programmes morceaux par morceaux plutôt que de se lancer d’entrée dans l’écriture de 10 000 lignes de Basic ! Ecrivez des commentaires qui expliquent ce que fait telle ou telle instruction dans votre application. Un commentaire tel que “ met la patte 0 à 1 ” explique la syntaxe de l’instruction à laquelle il se rapporte mais non pourquoi vous faites cela. Un bon commentaire pourrait être, par exemple, “ allume la LED de batterie déchargée ”. Par défaut, le compilateur produit du code pour les PIC 16C84 (ou 16F84). Pour générer du code pour d’autres PIC il faut utiliser l’option -P décrite plus avant dans ce manuel. Ainsi, pour faire fonctionner notre programme sur un PIC 16C74 nous aurions du frapper : pbc -p74 blink. Plusieurs lignes de commentaires au début de chaque sous-programme permettent d’expliquer ce que fait le sous-programme qui suit de façon plus détaillée que les seuls commentaires placés en fin des lignes d’instructions, alors ne vous en privez pas. 2.5 Programmation du PIC Le compilateur n’est pas concerné par la programmation matérielle du circuit. Il produit par contre un fichier de même nom que votre programme source mais d’extension .HEX qui est au format normalisé “ 8 bits merged Intel ” connu de tous les programmateurs de PIC, même les plus simples. Vous utiliserez donc le programmateur de votre choix (par exemple celui vendu en kit dans le catalogue Selectronic pour les 16C84 et 16F84) pour programmer votre circuit à partir de ce fichier .HEX. Attention : Les PIC comportent un certain nombre de bits à programmer “ à la main ” lors de la phase de programmation proprement dite. Ce sont eux qui déterminent le type d’horloge utilisée, la protection du code machine contre la copie et le mode de fonctionnement du timer chien de garde. Ces bits ne sont en aucun cas gérés par le compilateur et doivent être définis par vos soins lors de la programmation. Tous les programmateurs du marché permettent de réaliser cette opération avec la plus grande facilité. Au début du programme il est utile d’indiquer ce que fait le programme, qui l’a écrit et quand, ainsi que son niveau de révision (si tel est le cas). Un mémento des connexions du circuit ou au moins de l’affectation de ses broches d’entrées/sorties est également très utile ainsi que l’indication de la fréquence d’horloge si des notions de temps y faisant appel sont utilisées par le programme. Les commentaires commencent par une apostrophe (‘) et peuvent être placés n’importe où au sein d’une ligne, y compris au début. Tout ce qui suit l’apostrophe est considéré comme du commentaire et est ignoré par le compilateur. 2.7.2 Symboles Utilisez les symboles pour rendre les affectations de broches ou de variables plus compréhensibles que Pin0 ou B1 par exemple. L’utilisation de symboles vient en complément des commentaires pour améliorer la lisibilité d’un programme. Importé par Selectronic BP 513 - 59022 LILLE CEDEX - Tél. : 0 328 550 328 - Télécopie : 0 328 550 329 - www.selectronic.fr 3/20 Le court extrait de programme ci-dessous le démontre : Symbol Symbol BattLED = Pin0 Capacite = B1 If Capacite < 10 then battbasse Goto Autrecode Battbasse BattLED = 1 Goto Autrecode 3.2.1 Option -C ‘ Donne un nom compréhensible à Pin0 ‘ B1 contient la capacité de la batterie ‘ Indiquer si la capacité est trop faible ‘ Sinon continuer le programme ‘ Allume la LED de batterie basse ‘ Suite du programme Afin de rendre le langage PBASIC, usuellement conçu pour le Basic Stamp I, plus performant et mieux adapté à certains PIC, PBC utilise certaines extensions telles que, par exemple, PEEK, POKE, CALL, etc. Cette option invalide ces extensions et rend donc PBC strictement compatible du Basic destiné au Basic Stamp I. Cette option est surtout utile lors de la compilation de programmes Basic Stamp I qui comportent des noms de variables entrant en conflit avec des noms de nouvelles instructions supportées par PBC. 2.7.3 Etiquettes Les étiquettes doivent aussi avoir des noms significatifs dans la mesure du possible. Une étiquette “ boucle ” est ainsi plus significative que “ l1 ” par exemple. Essayez de donner à vos étiquettes un nom qui correspond à la fonction réalisée à leur niveau. Les étiquettes doivent commencer à la première position d’une ligne (colonne 1) et comporter deux points (:) comme dernier caractère. Hormis les étiquettes et les apostrophes de commentaires, rien d’autre ne doit se trouver en première colonne. Enfin, pour réaliser du code lisible, essayez de minimiser l’usage des instructions GOTO. Bien que ce soit un mal nécessaire, essayez d’adopter une disposition logique du programme afin de les minimiser et préférez leur les sous-programmes et les GOSUB correspondants lorsque c’est possible. 3.2.2 Option -D Cette option fait produire à l’assembleur une table des symboles et un listing du programme. 3.2.3 Option -L Cette option fait produire à l’assembleur un listing du programme. 3.2.4 Option -OB Cette fonction fait générer à l’assembleur un fichier objet sous forme binaire plutôt que sous le format “ Intel Merged HEX ” classique. 3.2.5 Option -P## 3. OPTIONS DE LA LIGNE DE COMMANDE Par défaut PBC compile les programmes pour un PIC 16C84 (ou 16F84) ce qu’il fait en ajoutant automatiquement au programme source la ligne : 3.1 Syntaxe include ‘’PB84.INC’’ Le compilateur est appelé depuis la ligne de commande du DOS avec la syntaxe suivante : PBC (options) fichier L’option -P permet de choisir un autre circuit PIC parmi ceux supportés par PBC. Par exemple l’option -P622 fait ajouter au programme source : include ‘’PB622.INC’’ La présence des options est facultative ; ces dernières étant utilisées pour modifier la façon dont PBC va traiter le fichier. Les options commencent par un signe moins (-) suivi d’une lettre qui définit l’option. Selon leur fonction d’autres caractères sont éventuellement nécessaires. Aucun espace ne doit être présent dans les options et toute option non reconnue par PBC génère une erreur fatale. et lui permet de compiler un programme pour un PIC16C622. Consultez le sous-répertoire INC placé dans le répertoire contenant PBC pour découvrir la liste complète des circuits supportés à la date d’acquisition de votre compilateur. 3.2.6 Option -Q Le premier élément suivant PBC et ne commençant pas par un signe moins est supposé être le nom du fichier à compiler. Si aucune extension n’est spécifié pour ce nom et que l’option -Q n’est pas utilisée, l’extension .BAS est prise par défaut. Le nom de fichier utilise la syntaxe standard MSDOS pour préciser le chemin d’accès dans le cas où il ne se trouve pas dans le même répertoire que celui contenant PBC. Dans tous les cas, les fichiers générés par PBC après compilation sont placés dans le répertoire contenant PBC. Lorsqu’aucune extension n’est spécifiée pour le nom de fichier source, .BAS est prise par défaut. Cette option permet d’imposer au compilateur d’avoir à spécifier une option, qui peut alors être quelconque, pour le fichier source. Par défaut, PBC lance automatiquement l’assembleur associé (PM.EXE) si la phase de compilation s’est déroulée sans erreur. PBC doit trouver PM.EXE dans le même répertoire que lui. Si la phase de compilation comporte des erreurs ou si l’option -S a été utilisée, l’assembleur n’est pas lancé. Lorsque PBC compile un programme sans erreur, il lance automatiquement l’assembleur associé afin de générer un fichier objet exécutable à programmer dans le PIC. Si cette option est utilisée, le compilateur n’appelle pas l’assembleur et il ne produit donc que le listing de compilation d’extension .SRC. Si PBC est frappé seul, un court écran d’aide (en anglais) rappelle les règles de syntaxe ci-dessus. Comme cette option interdit l’exécution de l’assembleur, les options qui le concernent à savoir : -D, -L et -OB sont automatiquement ignorées dans ce cas. 3.2.7 Option -S 3.2 Options Option Fonction C Supprime les extensions du language D(*) Génére un listing et une table des symboles L(*) Génère un listing OB(*) Génère du binaire à la place du format HEX P## Indique le type de PIC (PIC16C##) Q Force l’utilisation d’une extension au nom de fichier source S N’appelle pas l’assembleur en fin de compilation 4. PROGRAMMATION EN LANGAGE PICBASIC 4.1 Commentaires En PicBasic, un commentaire commence par le mot clé REM ou par une apostrophe (‘) . Tous les caractères qui suivent, sur la même ligne, sont ignorés par le compilateur qui les considère alors comme des commentaires. Contrairement à certains Basic, REM n’est pas l’abréviation du mot REMark, de ce fait les variables commençant pas REM sont autorisées (mais pas une variable nommée REM bien évidemment). (*) Options simplement transmises par le compilateur à l’assembleur. Importé par Selectronic 4/20 BP 513 - 59022 LILLE CEDEX - Tél. : 0 328 550 328 - Télécopie : 0 328 550 329 - www.selectronic.fr 4.2 Constantes numériques PBC autorise la définition de constantes numériques dans trois bases différentes : décimal, binaire et hexadécimal. Les constantes binaires sont définies au moyen du préfixe “ % ” et les constantes hexadécimales au moyen du préfixe “ $ ”. Les constantes décimales n’ont pas de préfixe. 100 ‘ Constante décimale 100 %100 ‘ Valeur binaire du nombre décimal 4 $100 ‘ Valeur hexadécimale du nombre décimal 256. Afin de faciliter la programmation, les caractères alphanumériques sont convertis en leur équivalent ASCII. Les constantes de type caractère doivent être contenues entre deux guillemets (’’) et ne contenir qu’un caractère. ‘’A’’ ‘’d’’ ‘ Constante ASCII de valeur décimale 65 ‘ Constante ASCII de valeur décimale 100 4.3 Constantes chaînes de caractères PBC ne dispose pas d’instructions de manipulation des chaînes de caractères mais ces dernières peuvent cependant être utilisées avec certaines instructions. Une chaîne de caractères comprend un ou plusieurs caractères et est délimitée par des doubles guillemets. ‘’Hello” ‘ Chaîne équivalente à ‘’H’’,’’e’’,’’l’’,’’l’’,’’o’’ En fait, les chaînes de caractères sont traitées par PBC comme une suite de constantes de type caractère. 4.4 Identificateurs Un identificateur est tout simplement un nom. PBC les utilise comme noms de symboles et comme étiquettes. Un identificateur est n’importe quelle séquence de lettres, chiffres et caractère souligné (_) mais ne doit pas commencer par un chiffre. Les majuscules et minuscules ne sont pas différenciées dans les identificateurs, ainsi TOTO et toto sont considérés comme les mêmes identificateurs. Même si les identificateurs peuvent être de longueur quelconque, PBC ne prend en compte que les 32 premiers caractères. 4.5 Etiquettes de lignes Afin de repérer certaines lignes particulières pour qu’elles soient accessibles par un GOTO ou un GOSUB, PBC utilise des étiquettes. Contrairement aux anciens Basic, PBC n’utilise pas de numéro de ligne et n’impose pas de repérer chaque ligne. Pour un PIC ne comportant que 36 octets de RAM, tel le PIC 16C84 par exemple, les 22 variables utilisateur et les variables des sous-programmes du compilateur utilisent toute la mémoire RAM disponible. Pour des PIC disposant d’une taille de RAM plus importante tel le 16F84 (68 octets) ou le 16C74 (192 octets), des variables utilisateur supplémentaires peuvent être définies. Elles partent alors de B22 pour aller jusqu’à B79 (ou de W11 jusqu’à W39). Tel ou tel PIC peut ne pas avoir assez de RAM pour accepter toutes ces définitions de variables. Si vous les utilisez, le compilateur ne générera pas d’erreur mais votre programme ne fonctionnera pas correctement. Afin de vous éviter ce genre de désagrément, le tableau ci-dessous indique la valeur maximum admissible pour ces variables en fonction du type de circuit PIC choisi. Type de circuit Variable “octet” Variable “mot” Basic Stamp 1 B13 W6 16C61 16C71 16C710 16F83 16C84 B21 W10 16C711 16F84 B51 W25 16C554 16C556 16C620 16C621 B63 W31 16C558 16C622 16C62(A) 16C63 16C64(A) 16C65(A) 16C72 16C73(A) 16C74(A) B79 W39 Les deux premières variables “ octets ” B0 et B1 peuvent aussi être utilisées sous forme de variables “ bit ” avec les appellations : Bit0, Bit1, ..., Bit15. Serout 0,N2400,(‘’Hello’’,13,10) goto Etiquette De plus les variables Port, Dirs et Pins sont prédéfinies. Pins fait référence aux entrées/sorties du port B. Dirs fait référence au registre de sens de transfert des données du port B (TrisB). La mise à 0 d’un bit de Dir place la ligne correspondante de Pin en entrée et un 1 la place en sortie. De nombreuses instructions définissent automatiquement le contenu de Dirs et donc le sens de transfert des lignes. La variable Port est une variable “ mot ” qui associe Pins et Dirs. Comme pour les variables “ octet ” ou “ mot ”, ces variables peuvent être traitées comme variables bit sous la forme : Pin0, Pin1, ... et Dir0, Dir1, ... Un certain nombre de variables sont prédéfinies en langage PicBasic pour le stockage de vos données temporaires. Les variables de taille égale à un octet s’appellent B0, B1, B2 et ainsi de suite. Les variables de taille égale à un mot s’appellent W0, W1, W2 et ainsi de suite. Lors de la mise sous tension ou suite à un reset, Dirs est initialisé à 00 (toutes les lignes en entrées) et toutes les autres variables sont également initialisées à 00. Une étiquette est simplement un identificateur suivi du caractère deux points (:). Etiquette: 4.6 Variables Ces variables “ mots ” sont constituées de la mise bout à bout de variables “ octets ” de la façon suivante : W0 est constituée par B0 et B1, W1 par B2 et B3 et ainsi de suite. Les noms de toutes ces variables peuvent être redéfinis grâce à la commande SYMBOL afin de rendre votre programme plus lisible. Ces variables sont stockées dans les registres en RAM du PIC. Ainsi, B0 est placée à la première adresse mémoire disponible ($0C pour un PIC 16C84 et d’autres “ petits ” circuits, $20 pour le PIC 16C74 et pour des PIC plus “ importants ”). Consultez si nécessaire la fiche technique du PIC que vous avez retenu pour connaître cette première adresse de RAM disponible. Toutes les variables sont considérées comme non signées ; de ce fait, les variables binaires peuvent aller de 0 à 1, les variables octets de 0 à 255 et les variables mot de 0 à 65535. Le tableau suivant résume les noms des variables prédéfinies. Variables “mot” Variables “octet” Variables “bit” WO B0 B1 Bit0, Bit1, ..., Bit7 Bit8, Bit9, ..., Bit15 Les variables sont placées en RAM en séquence jusqu’à B21 ; valeur à partir de laquelle on trouve les variables internes des sous-programmes du compilateur. Ces affectations sont faites dans le fichier PBH.INC que vous pouvez consulter pour information (il est contenu dans le sous-répertoire INC). Importé par Selectronic BP 513 - 59022 LILLE CEDEX - Tél. : 0 328 550 328 - Télécopie : 0 328 550 329 - www.selectronic.fr 5/20 W1 B2 B3 W2 B4 B5 .... .... .... W39 B78 B79 Port Pins Dirs Pin0, Pin1, ..., Pin7 Dir0, Dir1, ..., Dir7 Comme ces noms fixes peuvent sembler contraignants et conduire à des programmes hideux, ils peuvent être redéfinis au moyen de la commande SYMBOL. 4.7 Définition de symboles Afin de rendre les programmes plus lisibles, PBC permet à l’utilisateur de définir ses propres symboles. Ces symboles peuvent être utilisés pour représenter des constantes, des variables ou d’autres symboles. Ils ne doivent pas être utilisés comme étiquettes de lignes. Un seul symbole peut être défini par chaque commande SYMBOL. Symbol Dix = 10 Symbol Compteur = W3 Symbol Varbit = Bit0 Symbol Autre_nom = Varbit ‘ Constante numérique ‘ Définition d’une variable de type mot ‘ Définition d’une variable de type bit ‘ Un autre nom pour la variable Varbit 4.8 Commandes multiples sur une seule ligne Afin de rendre les programmes sources plus compacts et permettre le regroupement logique de certaines instructions, PBC supporte le séparateur “ : ” permettant de placer plusieurs instructions sur la même ligne. Ainsi : W2 = W0 W0 = W1 W1 = W2 LOOKDOWN Recherche d’une valeur dans une table LOOKUP Extraction d’une valeur d’une table LOW Mise en sortie et au niveau bas d’une patte NAP Mise en sommeil pour une courte durée OUTPUT Mise en sortie d’une patte PAUSE Délai (résolution 1 ms) PEEK (*) Lecture en mémoire ou registre POKE (*) Ecriture en mémoire ou registre POT Lecture d’un potentiomètre sur une patte PULSIN Mesure de durée d’impulsion (résolution 10 µs) PULSOUT Génération d’impulsion (résolution 10 µs) PWM Génération d’un signal à rapport cyclique variable RANDOM Génération d’un nombre pseudo aléatoire READ Lecture d’une donnée en EEPROM RETURN Retour de sous-programme REVERSE Inversion de la fonction d’une patte (entrée/sortie et vice versa) SERIN Réception de données sous forme série asynchrone SEROUT Emission de données sous forme série asynchrone SLEEP Mise en sommeil pour une longue durée (résolution 1 s) SOUND Génération de sons ou de bruit blanc TOGGLE Mise en sortie et changement de niveau d’une patte WRITE Ecriture d’un octet en EEPROM (*) Extensions du langage non disponibles en Basic Stamp I. est équivalent à 5.1 BRANCH W2 = W0 : W0 = W1 : W1 = W2 Branche à l’adresse spécifiée par un index. BRANCH Index, (Adresse 0, Adresse 1, ...., Adresse N) 5. INSTRUCTIONS DU LANGAGE PICBASIC - Index est une constante ou une variable qui précise quelle adresse va être utilisée (0 à N). - Adresse X est une étiquette définissant une adresse. BRANCH GOTO calculé (équivalent de ON GOTO) BUTTON Anti-rebondissement et auto-répétition à la lecture d’un poussoir CALL (*) Appel de sous-programme en assembleur DEBUG Instruction de mise au point (ignorée par PBC) EEPROM Définition du contenu initial de l’EEPROM END Arrêt d’exécution et passage en basse consommation FOR ... NEXT Boucle FOR ... NEXT classique GOSUB Appel de sous-programme GOTO Branchement inconditionnel HIGH Mise en sortie et au niveau haut d’une patte I2CIN (*) Réception de données d’un bus I2C BUTTON Patte, Etatbas, Délai, Vitesse, Variable, Action, Adresse I2COUT (*) Emission de données sur un bus I2C - Patte vaut de 0 à 7 et indique le n° de patte du port B à utiliser. IF ... THEN Branchement conditionnel INPUT Mise en entrée d’une patte (LET) Affectation de variable L’index débute à 0 et s’il est plus grand que le nombre maximum d’adresses disponibles, le programme continue en séquence. Exemple : Branch b2, (abc, def, ghi) ‘ Va à l’adresse abc si b2 vaut 0 ‘ Va à l’adresse def si b2 vaut 1 ‘ Va à l’adresse ghi si b2 vaut 2 ‘ Continue en séquence si b2 ‘ est une autre valeur 5.2 BUTTON Lit l’état d’un poussoir et effectue un anti-rebondissement, l’autorépétition, le branchement si le poussoir est dans un état stable. - Etatbas vaut 0 ou 1 et précise l’état logique du poussoir lorsqu’il est appuyé. - Délai varie de 0 à 255 et indique pendant combien de temps le poussoir doit être actionné pour générer une fonction de répétition automatique. Si Importé par Selectronic 6/20 BP 513 - 59022 LILLE CEDEX - Tél. : 0 328 550 328 - Télécopie : 0 328 550 329 - www.selectronic.fr délai vaut 0 les fonctions d’anti-rebondissement et de répétition automatique sont inhibées. Si délai vaut 255 l’anti-rebondissement a lieu mais pas la répétition automatique. - Vitesse varie de 0 à 255 et précise la vitesse de la répétition automatique. Cette vitesse est exprimée en nombre de cycles de l’instruction BUTTON. - Variable est la variable de travail de BUTTON. Elle doit être mise à zéro avant la première utilisation de cette instruction. - Action précise dans quel état doit être le poussoir pour que le branchement ait lieu ( 0 = non appuyé, 1 = appuyé). - Adresse est une étiquette qui précise l’adresse où va brancher le programme lorsque le poussoir sera dans l’état défini par Action. 5.3 CALL Appelle un sous-programme en langage machine. FOR Index = Début TO Fin (STEP Pas) . . NEXT - Pas est une donnée optionnelle et précise de combien doit être incrémenté ou décrémenté l’index de boucle. En son absence, le pas est fixé à +1. Aucun signe ne doit être précisé pour la variable Pas car celui-ci est déterminé automatiquement par le compilateur en fonction des valeurs Début et Fin. L’index est rendu égal à la valeur Début puis le code compris entre FOR et NEXT est exécuté. L’index est alors incrémenté de 1 (ou du pas spécifié par la directive optionnelle STEP) et, s’il n’est pas égal ou supérieur à Fin, les instructions comprises entre FOR et NEXT sont exécutées à nouveau et ainsi de suite. Lorsque l’index devient égal ou supérieur à Fin, le programme continue en séquence après NEXT. Quelles que soient les valeurs de Début et de Fin la boucle est toujours exécutée au moins une fois. CALL Etiquette - Etiquette définit l’adresse de début du sous-programme en langage machine. Attention, cette instruction n’existe pas en Basic Stamp I. Exemple : Call Spgm Réalise une boucle de type FOR ... NEXT ‘Appelle le sous-programme en langage machine Spgm. Un programme peut comporter autant de boucles FOR - NEXT que vous le souhaitez mais il ne faut pas imbriquer les unes dans les autres plus de 16 boucles. Tous les calculs de boucle sont effectués en arithmétique sur 16 bits. Exemple : 5.4 DEBUG Cette instruction ne peut évidemment pas être supportée par un compilateur. Elle est néanmoins analysée par le compilateur qui reporte toute erreur de syntaxe éventuelle. 5.5 EEPROM For B6 = 1 to 10 Serout 0,N2400,(#B6, ’’ ‘’) ‘ Envoie les nombres de 1 à 10 ‘ sur le port série Next B6 5.8 GOSUB Place des constantes à des emplacements consécutifs dans la mémoire EEPROM du PIC. Exécute un saut à un sous-programme avec retour ultérieur. GOSUB Etiquette EEPROM Adresse, (Constante1, Constante2, ...,ConstanteN) - Adresse est la première adresse mémoire à utiliser. Si elle est omise l’adresse 0 est utilisée par défaut. - Constante1 est une constante numérique ou caractère qui est placée à l’adresse spécifiée. - Constante2 est placée à l’adresse suivante et ainsi de suite jusqu’à ConstanteN. Dans le cas de constantes numériques, seul l’octet de poids faible est pris en compte. Pour les constantes caractères, leur code ASCII est utilisé. EEPROM ne fonctionne qu’avec les circuits PIC munis d’une EEPROM de données tel que, par exemple, les 16C84 et 16F84. Les données sont placées dans la mémoire EEPROM lorsque le circuit est programmé et non à chaque exécution du programme. - Etiquette indique le début du sous-programme à exécuter. Exécute un saut au sous-programme dont l’adresse est spécifiée. Lorsque le sous-programme est terminé, l’instruction RETURN (voir ce mot) fait poursuivre l’exécution à l’instruction qui suit GOSUB. On peut utiliser jusqu’à 255 GOSUB dans un seul et même programme mais il ne faut pas en imbriquer plus de 4. Exemple : Gosub Bip ... Bip: High 0 Sound 1,(80,10) Low 0 Return Exemple : Eeprom 5, (10,20,30) ‘ Allume la LED connectée à Pin0 ‘ Génère un bip sur le haut-parleur ‘ connecté à Pin1 ‘ Eteint la LED connectée à Pin0 ‘ Retour au programme appelant.0 5.9 GOTO ‘ Place 10 à l’adresse 5, ‘ 20 à l’adresse 6 et 30 à l’adresse 7. Exécute un branchement inconditionnel à un autre point du programme. 5.6 END GOTO Etiquette Termine un programme. - Etiquette indique l’endroit où se poursuit l’exécution du programme. END Exemple : Arrête l’exécution du programme et fait passer le circuit en mode faible consommation par exécution permanente de NAP (voir la définition de cette instruction si nécessaire). Goto Envoi ... Envoi: Serout 0,N2400,(‘’Hello’’) END n’utilise aucun paramètre et ne peut être terminée que par un Reset matériel. 5.10 HIGH 5.7 FOR ... NEXT ‘ Saute à l’étiquette Envoi ‘ Envoie Hello sur le port série. Fait passer une patte en sortie et au niveau logique haut. Importé par Selectronic BP 513 - 59022 LILLE CEDEX - Tél. : 0 328 550 328 - Télécopie : 0 328 550 329 - www.selectronic.fr 7/20 Exemple : HIGH Patte - Patte est comprise entre 0 et 7 et indique le numéro de patte à utiliser. Attention, seul le numéro de patte doit être spécifié c’est à dire par exemple 2 ou 5 et non Pin2 ou Pin5. Symbol cont = %01010000 Symbol adr = B5 adr = 17 I2cin cont,adr,B2 La patte spécifiée est mise en sortie et au niveau logique haut. ‘ Rend adr égal à 17 ‘ Lit le contenu de l’adresse 17 ‘ et le place dans B2. 5.11 I2CIN Reçoit des données depuis un bus I2C. I2CIN Contrôle, Adresse, Var1 (,Var2, ...) Envoie Contrôle et Adresse sur le bus I2C et place les octets reçus en retour dans Var1, Var2, etc. I2CIN et I2COUT peuvent être utilisées pour lire et écrire dans des circuits munis d’un bus I2C et en particulier dans les mémoires EEPROM à accès série telles que les 24LC01B et 24LC02B de Microchip ou leurs équivalents. Cela permet de stocker des données de manière non volatile même lorsque l’alimentation de l’application est arrêtée. Ces commandes fonctionnent dans le mode maître I2C en lecture et écriture. Les 7 bits de poids faibles de Contrôle contiennent le code de contrôle, le “ chip select ” et des informations d’adresses additionnelles selon le type de circuit I2C utilisé (voir sa fiche technique). Le bit de poids le plus fort indique si l’adresse qui suit est envoyée sur 8 bits ou sur 16 bits. S’il est au niveau bas, l’adresse est sur 8 bits. Voici par exemple les codes de contrôle à utiliser pour diverses mémoires à accès série. Référence Capacité Contrôle Taile de l’adresse 24LC01B 128 octets %01010xxx 8 bits 24LC02B 256 octets %01010xxx 8 bits 24LC04B 512 octets %01010xxb 8 bits 24LC08B 1K %01010xbb 8 bits 24LC16B 2K %01010bbb 8 bits 24LC32B 4K %11010ddd 16 bits 24LC65 8K %11010ddd 16 bits bbb : sélection de block (en fait bits d’adresse de poids forts). ddd : sélection de circuit. xxx : quelconque. Les lignes d’adresses et de données I2C sont prédéfinies dans la bibliothèque principale du compilateur en PortA.0 et PortA.1 respectivement. Ceci permet de libérer le port B et dispense d’avoir à les déclarer à chaque utilisation des instructions I2CIN et I2COUT. Il est toutefois possible de modifier ces définitions en remplaçant les égalités se trouvant au début des sous-programmes I2C dans le fichier PBL.INC. La ligne de données I2C doit être reliée à l’alimentation positive Vcc au moyen d’une résistance de 4,7 kΩ car elle fonctionne en collecteur ouvert bidirectionnel. Le schéma ci-dessous montre un exemple type de connexion avec une mémoire à accès série. Importé par Selectronic 8/20 BP 513 - 59022 LILLE CEDEX - Tél. : 0 328 550 328 - Télécopie : 0 328 550 329 - www.selectronic.fr logiques. Dans ce cas, les opérations sont effectuées de la gauche vers la droite et sur 16 bits. La négation, si nécessaire, ne doit être réalisée que sur la première valeur. Les opérateurs supportés par PBC sont les suivants : 5.12 I2COUT Envoie des données sur un bus I2C. I2COUT Contrôle, Addresse, Val1 (,Val2, ...) Opérateur Fonction + Addition Bien que cette instruction puisse envoyer plusieurs données les unes à la suite des autres, elle ne doit être utilisée de cette façon qu’avec les circuits capables de recevoir un flot continu de données. Ce n’est pas le cas des mémoires EEPROM à bus I2C pour lesquelles un temps d’attente minimum de 10 ms doit être respecté entre l’écriture de chaque octet. - Soustraction * Multiplication ** 16 bits de poids fort de la multiplication / Division Pour de plus amples précisions concernant cette instruction, reportez vous à ce qui a déjà été écrit pour I2CIN. // Reste de la division MIN Minimum MAX Maximum & ET logique I OU logique ^ OU EXCLUSIF logique &/ NON ET logique I/ NON OU logique ^/ NON OU EXCLUSIF logique Envoie Contrôle et Adresse sur le bus I2C puis les données Val1, Val2, etc. Exemple : Symbol Symbol cont = %01010000 adr = B5 adr = 17 I2cout cont, adr, (56) Pause 10 addr = 127 I2cout cont, adr, (B12) Pause 10 ‘ Positionne l’adresse à 17 ‘ Ecrit 56 à l’adresse 17 ‘ Attend 10 ms ‘ Ecrit le contenu de B12 ‘ à l’adresse 127 ‘ Attend 10 ms. Exemple : 5.13 IF ... THEN Branchement conditionnel. IF Expression (AND/OR Expression) THEN Etiquette Effectue une ou plusieurs comparaisons entre deux variables. Les expressions de comparaison devant être écrites sous la forme : Var1 (< , <=, =, <>, >=, >) Var2 Les comparaisons réalisées sont non signées et une variable doit impérativement se trouver à gauche de l’expression. - Etiquette indique où continue l’exécution du programme si la comparaison est vraie c’est à dire si le résultat de l’expression conditionnelle est différent de zéro. Dans le cas contraire, le programme continue son exécution en séquence. Exemple : If Pin0 = 0 Then Allume ‘ Saute à l’étiquette Allume si Pin0 est à 0 If B0 >= 40 Then Retour ‘ Saute à l’étiquette Retour si le contenu de B0 ‘ est supérieur ou égal à 40. 5.15.1 Multiplication PBC exécute des multiplications entières de 16 bits par 16 bits. L’opérateur * fournit les 16 bits de poids faibles des 32 bits du résultat comme dans la majorité des Basic similaires. L’opérateur ** quant à lui fournit les 16 bits de poids forts de ce même résultat. Ces deux opérateurs peuvent être utilisés pour obtenir un résultat sur 32 bits de la façon suivante : Exemple : W1 = W0 * 1000 ‘ Multiplie le contenu de W0 par 1000 et place ‘ les 16 bits de poids faibles du résultat dans W1 W2 = W1 ** W0 ‘ Multiplie le contenu de W1 par le contenu de ‘ W0 et place les 16 bits de poids forts du résultat ‘ dans W2. 5.15.2 Opérateur logique NOT En plus des opérateurs logiques classiques ET, OU et OU EXCLUSIF, PBC supporte l’opérateur de complémentation NOT. Cet opérateur effectue une complémentation bit à bit de la valeur située à sa droite avant de réaliser l’opération logique à laquelle il est associé. 5.14 INPUT Place une patte en entrée. Exemple : INPUT patte - Patte est comprise entre 0 et 7 et indique le numéro de patte à utiliser. Attention, seul le numéro de patte doit être spécifié c’est à dire par exemple 2 ou 5 et non Pin2 ou Pin5. Met la patte correspondante en entrée ce qui permet ensuite au programme de lire le niveau logique auquel elle se trouve. B3 = B3 &/ %11110000 ‘ Est équivalent à B3 = B3 & %00001111. 5.16 LOOKDOWN Cherche une valeur dans une liste de constantes et fournit un index de sa position. LOOKDOWN Référence, (Const0, Const1, ... ConstN), Variable Exemple : Input 2 Let B0 = 27 ‘ Place 27 dans la variable B0, le Let est optionnel B1 = B0 /2 ‘ Place le quotient de la division entière du contenu de B0 ‘ par 2 dans B1 Pin2 = 0 ‘ Met Pin2 à 0 - Référence est la valeur dont on recherche la présence dans une liste de constantes. ‘ Met Pin2 en entrée. 5.15 LET Affectation d’une valeur à une variable. Comme sur tous les Basic, cette instruction est optionnelle et peut être remplacée par le seul signe égal. La valeur assignée à une variable par LET peut être une constante, une autre variable ou le résultat d’une ou plusieurs expressions arithmétiques ou - Const0 à ConstN est la liste des constantes auxquelles va être comparée la référence. - Variable contient le résultat de la recherche ou n’est pas affectée si la recherche est infructueuse. Importé par Selectronic BP 513 - 59022 LILLE CEDEX - Tél. : 0 328 550 328 - Télécopie : 0 328 550 329 - www.selectronic.fr 9/20 L’instruction compare une liste de constantes avec une référence. Si une égalité est trouvée, elle place le numéro de rang de cette valeur (de 0 à N) dans la variable. Si aucune valeur ne concorde, la variable n’est pas affectée. Si par exemple la liste de constantes est : 4, 13, 15, 28, 8 et que la référence est 15, la variable contiendra 2 puisque 15 est la troisième constante de la liste et que le décompte commence à partir de 0. Exemple : Nap 7 ‘ Pause pour environ 2,3 secondes. 5.20 OUTPUT Place une patte en sortie. 5.17 LOOKUP OUTPUT Patte Recherche une donnée dans une liste de constantes en fonction de la valeur d’un index. LOOKUP Index, (Const0, Const1, ..., ConstN), Variable - Index spécifie la position de la constante dans la liste qui doit être placée dans la variable. - Patte est comprise entre 0 et 7 et indique le numéro de patte à utiliser. Attention, seul le numéro de patte doit être spécifié c’est à dire par exemple 2 ou 5 et non Pin2 ou Pin5. Exemple : Output 1 ‘ Met Pin1 en sortie. - Const0 à ConstN est la liste des constantes disponibles. 5.21 PAUSE - Variable contient le résultat de l’instruction. Recherche la valeur spécifiée par l’index dans la liste des constantes et place celle-ci dans la variable. Si par exemple la liste de constantes est 2, 13, 15, 28 et 8 et que l’index vaille 1, la constante placée dans la variable sera 13 puisque le décompte commence à partir de 0. Si l’index est plus grand que le nombre de constantes disponibles, la variable n’est pas affectée. 5.18 LOW Effectue une pause de durée variable. PAUSE Période - Période est une constante ou variable de 0 à 65535 qui spécifie la durée de la pause en millisecondes. Suspend l’exécution du programme pendant un certain nombre de millisecondes mais, contrairement aux instructions NAP et SLEEP, le circuit ne passe pas en mode basse consommation. De ce fait le délai spécifié dans cette instruction est beaucoup plus précis car il repose sur l’horloge système du PIC. Si celle-ci est pilotée par quartz, sa précision est donc excellente. Fait passer une patte en sortie et au niveau logique bas. LOW Patte - Patte est comprise entre 0 et 7 et indique le numéro de patte à utiliser. Attention, seul le numéro de patte doit être spécifié c’est à dire par exemple 2 ou 5 et non Pin2 ou Pin5. Exemple : Pause 1000 ‘ Suspend l’exécution du programme ‘ pendant 1 seconde. La patte spécifiée est mise en sortie et au niveau logique bas. 5.22 PEEK Exemple : Lit une donnée à l’adresse spécifiée. Low 1 ‘ Met Pin1 en sortie et au niveau logique bas. PEEK Adresse, Variable 5.19 NAP - Adresse spécifie une adresse (mémoire ou registre de ressource interne) dans l’espace adressable du PIC utilisé. - Variable contient la donnée lue à l’adresse spécifiée. Place le circuit en sommeil un court instant. NAP Période - Période est une constante ou variable qui spécifie la durée de ce mode selon le tableau ci-dessous. Attention : Cette instruction est une extension de langage de PBC et n’est pas supportée par le Basic du Stamp I. Cette instruction place le circuit en mode sommeil pour une courte durée. Pendant ce laps de temps la consommation du circuit est réduite au minimum. PEEK et POKE permettent d’accéder à toutes les ressources internes d’un PIC par lecture et écriture dans les registres correspondants. Ce sont des instructions qui agissent sur des octets et non sur des bits individuels. Ainsi, si vous utilisez POKE pour positionner des données dans PortA, tout le port est affecté et non quelques bits seulement. Attention : Les temps indiqués dans le tableau ci-dessous sont approximatifs car le chronogramme de cette instruction est dérivé de l’horloge du timer chien de garde qui n’est piloté que par un circuit R-C interne au PIC. De ce fait, la fréquence de cette horloge varie beaucoup d’un circuit à l’autre et en fonction de la température. Si des manipulations de bits individuelles sont nécessaires compte tenu du circuit connecté au PIC, il est conseillé d’utiliser, dans la mesure du possible, le port B puisque ce dernier peut être facilement manipulé bit à bit. Période Durée approximative 0 18 ms 1 36 ms 2 72 ms 3 144 ms 4 288 ms 5 576 ms 6 1,15 s 7 2,3 s Si ce n’est pas possible, il est conseillé d’utiliser la variable B0 qui peut être manipulée bit à bit au moyen des variables bit0 à bit15 et seulement une fois que la manipulation a été faite, d’utiliser POKE pour écrire dans le port ou le registre concerné. Exemple : ‘ Lecture du port A en utilisant la variable intermédiaire B0 Symbol Symbol Boucle: PortA = 5 TrisA = $85 ‘ Définit l’adresse du registre du port A ‘ Définit l’adresse du registre de ‘ direction du port A Poke TrisA,255 ‘ Met toutes les lignes du port A en entrées Peek PortA,B0 ‘ Met l’état des lignes du port A dans B0 If Bit0 = 1 Then zeroun ‘ Saute en zeroun si RA0 est à un If Bit1 = 0 Then unzero ‘ Saute à unzero si RA1 est à zéro Goto Boucle ‘ Continue le test des entrées Importé par Selectronic 10/20 BP 513 - 59022 LILLE CEDEX - Tél. : 0 328 550 328 - Télécopie : 0 328 550 329 - www.selectronic.fr zeroun: High 0 Goto Boucle Low 1 Goto Boucle End unzero: ‘ Met RB0 au niveau haut Exemple : ‘ Met RB1 au niveau bas Pot 3,255,B0 ‘ Lit le potentiomètre connecté à la patte ‘ pour déterminer la valeur d’Echelle Serout 0,N2400,(#B0) ‘ Envoie cette valeur sous forme série sur Pin0. ‘ Ecriture dans le port A en utilisant la variable intermédiaire B0 5.25 PULSIN Symbol PortA = 5 Symbol TrisA = $85 Mesure la durée d’une impulsion en entrée. ‘ Définit l’adresse du registre du port A ‘ Définit l’adresse du registre de direction ‘ du port A Poke TrisA,0 ‘ Met toutes les lignes du port A en sorties Peek PortA,B0 Bit1 = 1 Bit3 = 0 ‘ Met l’état des lignes du port A dans B0 ‘ Place Bit1 de B0 à un ‘ Place Bit3 de B0 à zéro ‘ Bit0, 2 et 4 à 7 de B0 restent inchangés ‘ Envoie au port A son nouveau contenu Poke PortA,B0 End PULSIN Patte, Etat, Variable - Patte est comprise entre 0 et 7 et indique le numéro de patte à utiliser. Attention, seul le numéro de patte doit être spécifié c’est à dire par exemple 2 ou 5 et non Pin2 ou Pin5. - Etat est égal à 0 ou 1 et indique sur quel état de la patte doit avoir lieu la mesure. - Variable est utilisée pour stocker le résultat de la mesure compris entre 1 et 65535. 5.23 POKE La patte correspondante est mise en entrée et la durée de l’impulsion qui y est appliquée est mesurée avec une résolution de 10 µs. Ecrit une donnée à l’adresse spécifiée. POKE Adresse, Variable Si un débordement de la variable se produit c’est à dire si l’impulsion dure plus de 655,35 ms, la variable est mise à zéro. - Adresse spécifie une adresse (mémoire ou registre de ressource interne) dans l’espace adressable du PIC utilisé. - Variable contient la donnée à écrire à l’adresse spécifiée. Exemple : Pulsin 4,1,W3 Attention : Cette instruction est une extension de langage de PBC et n’est pas supportée par le Basic du Stamp I. Pour plus de précision sur la syntaxe et l’utilisation de POKE, voir le descriptif de l’instruction PEEK. Exemple : Poke $85,0 ‘ Mesure une impulsion au niveau haut sur Pin4 ‘ et place sa largeur multipliée par 10 µs dans W3. 5.26 PULSOUT Génère une impulsion calibrée en sortie. PULSOUT Patte, Période ‘ Ecrit 0 dans le registre d’adresse $85 c’est à dire TrisA. 5.24 POT Lit un potentiomètre (ou toute autre résistance variable) connecté à une patte. POT Patte, Echelle, Variable - Patte est comprise entre 0 et 7 et indique le numéro de patte à utiliser. Attention, seul le numéro de patte doit être spécifié c’est à dire par exemple 2 ou 5 et non Pin2 ou Pin5. - Patte est comprise entre 0 et 7 et indique le numéro de patte à utiliser. Attention, seul le numéro de patte doit être spécifié c’est à dire par exemple 2 ou 5 et non Pin2 ou Pin5. - Période varie de 0 à 65535 et spécifie la durée de l’impulsion par pas de 10 µs. La patte est placée en sortie et l’instruction génère une impulsion en inversant le niveau de la patte pendant le laps de temps spécifié. De ce fait c’est l’état de la patte avant l’exécution de cette instruction qui détermine la polarité de l’impulsion générée. Exemple : - Echelle est un facteur de conversion qui dépend du réseau RC connecté sur la patte. Pour de grandes valeurs du produit RC, Echelle doit être petit et vice versa. Echelle est compris entre 0 et 255 et doit malheureusement être déterminé expérimentalement en fonction des composants RC externes. Pulsout 5,100 ‘ Génère une impulsion de 1 ms sur Pin5. 5.27 PWM - Variable contient le résultat de la mesure de la résistance connectée sur la patte spécifiée. Lorsque Echelle est correctement spécifiée, cette variable est proche de 0 pour une résistance minimum et proche de 255 pour une résistance maximum. Génère un signal impulsionnel modulé en largeur pendant un certain temps. Pour déterminer Echelle rapidement, procédez de la façon suivante. Réglez la résistance à mesurer à sa valeur maximum et lisez-là avec cette instruction dans laquelle vous aurez placé Echelle à 255. La valeur que vous trouverez dans la variable sera alors la valeur correcte à utiliser ensuite pour Echelle. - Patte est comprise entre 0 et 7 et indique le numéro de patte à utiliser. Attention, seul le numéro de patte doit être spécifié c’est à dire par exemple 2 ou 5 et non Pin2 ou Pin5. PWM Patte, Rapport cyclique, Cycles - Rapport cyclique varie de 0 à 255 et précise le rapport cyclique (0 = 0 % et 255 = 100 %). - Cycles varie de 0 à 255 et spécifie le nombre de périodes du signal à générer. L’instruction génère un signal impulsionnel modulé en durée sur la patte spécifiée et place ensuite celle-ci en entrée. Cette instruction peut être utilisée pour produire très facilement une tension analogique grâce à une résistance et un condensateur comme indiqué sur le schéma ci-après. Compte tenu de la décharge inévitable du condensateur au fil du temps, l’instruction doit être répétée régulièrement pour mettre à jour ou rafraîchir cette charge. Importé par Selectronic BP 513 - 59022 LILLE CEDEX - Tél. : 0 328 550 328 - Télécopie : 0 328 550 329 - www.selectronic.fr 11/20 Inverse le sens de fonctionnement de la patte spécifiée. Si elle était entrée elle devient sortie et vice versa. Exemple : Output 4 Reverse 4 ‘ Met Pin4 en sortie ‘ Met Pin4 en entrée. 5.32 SERIN Réception de données sous forme série asynchrone. Exemple : SERIN Patte, Mode, (Qual, (Qual),) Variable1 (,Variable2) Pwm 7,127,100 ‘ Génère un signal de rapport cyclique égal à 50 % ‘ sur Pin7 pendant 100 cycles. 5.28 RANDOM - Patte est comprise entre 0 et 7 et indique le numéro de patte à utiliser. Attention, seul le numéro de patte doit être spécifié c’est à dire par exemple 2 ou 5 et non Pin2 ou Pin5. Génère un nombre pseudo aléatoire. RANDOM Variable 16 bits - Variable est utilisée à la fois comme variable de travail et pour récupérer le nombre pseudo aléatoire généré par l’instruction. Attention ! Cette variable est nécessairement de type mot de 16 bits. L’algorithme de génération du nombre pseudo aléatoire a une longueur de 65535 et seul 0 n’est pas généré. Exemple : Random W4 Initialise une liaison série sur l’une des pattes du circuit, configure cette liaison et attend un ou plusieurs qualificateurs optionnels avant de prendre en compte les données reçues. ‘ Produit un nombre pseudo aléatoire dans W4. 5.29 READ Lit un octet dans l’EEPROM. READ Adresse, Variable - Mode définit le mode de fonctionnement de la liaison selon les indications du tableau ci-dessous. Symbole Valeur Vitesse Mode T2400 0 2400 TTL vrai T1200 1 1200 TTL vrai T9600 2 9600 (*) TTL vrai T300 3 300 TTL vrai N2400 4 2400 TTL inversé N1200 5 1200 TTL inversé N9600 6 9600 (*) TTL inversé N300 7 300 TTL inversé - Adresse varie de 0 à 254 et spécifie l’adresse à lire. Si Adresse est égale à 255, Variable contient en retour le nombre d’octets d’EEPROM disponibles. (*) Cette vitesse est propre au compilateur et n’est pas autorisée avec le Basic Stamp I. - Variable reçoit la valeur lue dans la mémoire EEPROM ou le nombre d’octets d’EEPROM disponibles lorsque Adresse vaut 255. - Qual est un ou plusieurs qualificateurs optionnels placés entre parenthèses et qui doivent être reçus dans l’ordre spécifié avant que le ou les caractères attendus ne soient pris en compte. Si, lors de la réception de plusieurs qualificateurs, un seul ne correspond pas ; leur liste est réinitialisée et il faut à nouveau tous les recevoir en partant du début. Un qualificateur peut être une constante, une variable ou une chaîne de caractères ; dans ce dernier cas, chaque caractère de la chaîne est traité comme un qualificateur individuel. Exemple : Read 5,B2 ‘ Lit le contenu de l’adresse 5 en EEPROM ‘ et le met dans B2. 5.30 RETURN Retour de sous-programme. RETURN Fait poursuivre l’exécution du programme à l’instruction qui suit immédiatement le GOSUB ayant appelé le sous-programme se terminant par cette instruction. - Variable1, Variable2, etc. servent à stocker les données reçues une fois les qualificateurs éventuels correctement reçus. Si un nom de variable est spécifié seul, la valeur ASCII du caractère reçu est placée dans la variable. Si son nom est précédé par un signe dièse (#), SERIN convertit la valeur décimale reçue en son équivalent en code ASCII. Tous les caractères non numériques reçus avant ou après la valeur décimale attendue sont ignorés. Exemple : Serin 1,N2400, (’’A’’),B0 RETURN n’utilise aucun paramètre. ‘Attend jusqu’à la réception du caractère A ‘ puis place le caractère suivant dans B0 Exemple : Gosub Souspgm ‘ Va au sous-programme Souspgm ... Souspgm: Serout 0,N2400,(‘’Hello’’) ‘ Envoie Hello sur le port série Return ‘ Retour au programme principal. Bien que les circuits de conversion TTL - RS 232 soient très répandus et peu onéreux, les excellentes caractéristiques d’entrées/sorties des PIC permettent d’utiliser le circuit d’interface très simple de la figure ci-dessous. Dans ce cas, aucune inversion n’étant réalisée par cette interface, il faut utiliser l’un des modes Nxxxx. 5.31 REVERSE Inverse le sens de fonctionnement d’une patte. REVERSE Patte - Patte est comprise entre 0 et 7 et indique le numéro de patte à utiliser. Attention, seul le numéro de patte doit être spécifié c’est à dire par exemple 2 ou 5 et non Pin2 ou Pin5. Importé par Selectronic 12/20 BP 513 - 59022 LILLE CEDEX - Tél. : 0 328 550 328 - Télécopie : 0 328 550 329 - www.selectronic.fr toutes les dix minutes environ. De ce fait, SLEEP est à peu près aussi précise que l’horloge système du circuit. 5.33 SEROUT Emission de données sous forme série asynchrone. Lorsque le délai spécifié est écoulé, l’exécution reprend avec l’instruction suivante. SEROUT Patte, Mode, Variable1 (,Variable2) Initialise une liaison série sur l’une des pattes du circuit, configure cette liaison et envoie des caractères sous forme série asynchrone en utilisant le format : 8 bits de données, pas de parité et un bit de stop. Exemple : - Patte est comprise entre 0 et 7 et indique le numéro de patte à utiliser. Attention, seul le numéro de patte doit être spécifié c’est à dire par exemple 2 ou 5 et non Pin2 ou Pin5. 5.35 SOUND - Mode définit le mode de fonctionnement de la liaison selon les indications du tableau ci-dessous. SOUND Patte, (Note, Durée (,Note, Durée)) Symbole Valeur Vitesse Mode T2400 0 2400 TTL vrai T1200 1 1200 TTL vrai T9600 2 9600 (*) TTL vrai T300 3 300 TTL vrai N2400 4 2400 TTL inversé N1200 5 1200 TTL inversé N9600 6 9600 (*) TTL inversé N300 7 300 TTL inversé OT2400 8 2400 Drain ouvert OT1200 9 1200 Drain ouvert OT9600 10 9600 (*) Drain ouvert OT300 11 300 Drain ouvert ON2400 12 2400 Collecteur ouvert ON1200 13 1200 Collecteur ouvert ON9600 14 9600 (*) Collecteur ouvert ON300 15 300 Collecteur ouvert SLEEP 60 ‘ Mise en mode sommeil pour une minute. Génère une note ou du bruit blanc. - Patte est comprise entre 0 et 7 et indique le numéro de patte à utiliser. Attention, seul le numéro de patte doit être spécifié c’est à dire par exemple 2 ou 5 et non Pin2 ou Pin5. - Note varie de 0 à 255 et définit la fréquence du signal généré. 0 correspond à un silence et les valeurs de 1 à 127 à une fréquence croissante. De 128 à 255, le circuit génère un bruit blanc. - Durée varie de 0 à 255 et définit la durée de génération de la note. Exemple : Sound 7,(100,10,50,10) ‘ Génère deux notes consécutives sur Pin7. L’instruction SOUND génère des signaux rectangulaires aux normes TTL. Si une puissance sonore élevée n’est pas nécessaire, il est possible de commander directement un petit haut-parleur à partir d’une patte d’un PIC au moyen du schéma suivant. Si le haut-parleur est un modèle piézo, le condensateur est inutile. (*) Cette vitesse est propre au compilateur et n’est pas autorisée avec le Basic Stamp I. - Variable1, Variable2, etc. définissent les informations à émettre sachant que SEROUT supporte trois formats différents qui peuvent être mélangés dans une seule et même instruction. 5.36 TOGGLE 1) Une chaîne de caractères est émise comme une suite de caractères alphanumériques. 2) Une valeur numérique (variable ou constante) est émise sous forme de son équivalent ASCII. Ainsi par exemple 13 est retour chariot et 10 est saut ligne. 3) Une valeur numérique précédée d’un signe dièse (#) est émise sous la forme de la représentation en ASCII de la valeur décimale correspondante. Ainsi par exemple si W0 = 123, #W0 fera émettre ‘1’,’2’,’3’. TOGGLE Patte Exemple : Serout 0,N2400, (#B0,10) Place une patte en sortie et inverse son niveau. - Patte est comprise entre 0 et 7 et indique le numéro de patte à utiliser. Attention, seul le numéro de patte doit être spécifié c’est à dire par exemple 2 ou 5 et non Pin2 ou Pin5. Cette instruction met la patte spécifiée en sortie si elle ne l’était pas déjà et change son état (haut vers bas ou vice versa). Exemple : ‘ Envoie la valeur ASCII contenue dans B0 ‘ suivie d’un saut ligne. Low 0 Toggle 0 ‘ Met Pin0 au niveau bas ‘ Met Pin0 au niveau haut. 5.34 SLEEP 5.37 WRITE Passe en mode sommeil pendant un certain temps. Ecrit un octet dans l’EEPROM. SLEEP Période WRITE Adresse, Donnée - Période peut varier de 0 à 65535 et spécifie la durée du mode sommeil en secondes. - Adresse varie de 0 à 2047 et spécifie l’adresse de l’EEPROM où il faut écrire. Cette instruction met le circuit en mode sommeil pendant un certain nombre de secondes. Il passe alors en mode basse consommation. Comme cette instruction utilise le timer chien de garde, sa résolution est de 2,3 secondes et, pour compenser l’imprécision de l’horloge RC du timer, une recalibration de cette dernière par rapport à l’horloge du circuit est réalisée - Donnée peut varier de 0 à 255 et être une constante ou une variable qui est placée dans la mémoire EEPROM à l’adresse spécifiée. Importé par Selectronic BP 513 - 59022 LILLE CEDEX - Tél. : 0 328 550 328 - Télécopie : 0 328 550 329 - www.selectronic.fr 13/20 sous-programmes FW@Pin et FW@Mask sont les fonctions responsables de la réaffectation des numéros de bits dans les registres FSR et W des PIC. Exemple : Write 5,B0 ‘ Ecrit la donnée contenue dans B0 à l’adresse 5 ‘ de l’EEPROM. 6.3 Code généré par PBC PB##.INC et PBH.INC ont préparé le travail du compilateur. Le segment de code est le segment courant et le pointeur est placé sur “ main ” qui est l’endroit où le programme utilisateur doit commencer son exécution. 6. STRUCTURE D’UN PROGRAMME COMPILÉ PBC est conçu pour être simple d’emploi et vous pouvez très bien l’utilise dès à présent sans avoir à vous soucier de comment il fonctionne en interne. Pour les plus curieux d’entre vous, ou pour ceux qui souhaitent modifier voire ajouter des instructions au langage PBasic, voici néanmoins quelques indications sur le principe de travail du compilateur et sur les fichiers associés. 6.1 Le fichier d’en-tête spécifique PB##.INC La première chose que fait PBC après son lancement est de définir le symbole PBCX à 0 ou à 1 selon que les extensions de PBC sont utilisées ou non. Ceci permet à la bibliothèque de sélectionner les fonctions et variables additionnelles éventuellement nécessaires. Ensuite, un fichier d’en-tête, spécifique du microcontrôleur utilisé, est chargé. Par défaut ce fichier est PB84.INC mais cela peut être modifié avec l’option -P. Cette en-tête est en fait chargée d’inclure , grâce à MACLIB, les informations indispensables spécifiques au processeur utilisé. Le fichier PB##.INC utilise le pseudo opérateur DEVICE pour définir l’état des bits particuliers du processeur. Le timer chien de garde doit ainsi être validé et le bit d’oscillateur d’horloge être correctement positionné. Les autres bits sont laissés à l’initiative de l’utilisateur. Le pseudo opérateur DATA est ensuite utilisé pour définir le segment de données comme segment courant et placer le pointeur de chargement à la base de la mémoire vive utilisable du processeur choisi. Dans le cas des PIC 16Cxx cette valeur est $20 ou $0C. Le choix de ces adresses est important car le système de repérage des bits de PBC repose dessus. L’en-tête exécute ensuite un NLIST pour désactiver la génération de listing par l’assembleur afin de ne pas reproduire inutilement toujours les mêmes informations contenues dans PBH.INC sur le listing final. Ensuite, PBH.INC est chargé. Il contient des macros et des définitions d’adresses et peut être modifié si nécessaire. Lorsque PBH.INC est terminé, le listing est à nouveau validé et le segment mémoire de programme est sélectionné. A ce stade des opérations, tous les sous-programmes spécifiques du processeur choisi doivent être ajoutés et assemblés de manière inconditionnelle. Ces sous-programmes doivent être aussi courts que possible. La dernière chose à faire consiste à définir la section “ main ” du programme qui est l’endroit où commence l’exécution du code utilisateur. 6.2 PBH.INC PBH.INC définit en premier lieu les variables utilisateur dans le segment de données. Sont ensuite définis les registres temporaires et les registres de travail employés par les bibliothèques du compilateur. Les variables utilisateur peuvent employer 80 octets de mémoire sauf si l’option -C est utilisée. Dans ce cas, seuls 14 octets sont disponibles. Les variables de travail et les registres temporaires utilisent un autre bloc de 13 à 16 octets. PINx, DIRx et toutes les autres adresses de type bit importantes sont alors définies. Tous les bits intéressants (PORT, TRIS et W0) doivent être accessibles par groupes de 8. Comme le système de comptage de bits des PIC utilise 11 bits, un système particulier a du être développé. Les détails de son principe sont sans intérêt mais il est important de garder présent à l’esprit qu’un numéro de bit en PBC doit être converti avant d’être utilisé par le PIC. Un certain nombre de macros sont définies. Certaines sont de simples utilitaires, d’autres effectuent la réaffectation des numéros de bits dont nous venons de parler, d’autres encore adressent les registres Pins et Dirs. Le segment de programme est ensuite sélectionné et le code de départ est généré. Il est suivi par un groupe de sous-programmes de base. Les Après l’assemblage du code utilisateur, les bibliothèques du compilateur sont ajoutées au moyen du fichier PBL.INC 6.4 PBL.INC PBL.INC contient tous les sous-programmes de bibliothèque du compilateur. La majorité des sous-programmes qui correspondent à une instruction du langage se terminent par le caractère @. Des blocs de commentaires indiquent la fonction de chaque sous-programme. Les sousprogrammes sont placés de telle façon que chaque sous-programme ne fait appel qu’à un sous-programme qui le suit dans la bibliothèque. Chaque sous-programme est assemblé de manière conditionnelle seulement s’il est explicitement référencé, de façon à n’employer que ceux réellement imposés par les instructions du programme utilisateur, minimisant ainsi l’espace mémoire nécessaire. Le premier sous-programme de PBL.INC est end@. Contrairement aux autres sous-programmes, il est toujours assemblé afin de simuler le END implicite en fin de tout programme Basic. 7. AUTRES CONSIDÉRATIONS RELATIVES AU PICBASIC 7.1 La vitesse d’exécution est-elle assez élevée ? Le compilateur génère des programmes prévus pour être exécutés sur un PIC fonctionnant à 4 MHz ce qui est la fréquence d’horloge la plus courante. Toutes les instructions utilisant la notion de temps supposent en effet qu’un cycle d’instruction dure 1 µs. Ceci permet d’être sûr que Pause 1000 génère bien un délai d’une seconde et que les vitesses de transmission de Serin et Serout sont correctes. Dans certains cas, il peut cependant s’avérer nécessaire de faire fonctionner le PIC à une fréquence différente de 4 MHz, soit pour faire fonctionner les programmes encore plus vite, soit tout simplement pour transmettre sur la liaison série à 19 200 bauds au lieu des 9600 permis à 4 MHz. Les programmes générés par PBC peuvent être exécutés à des fréquences d’horloge différentes de 4 MHz sous réserve que vous fassiez attention aux instructions utilisant la notion de temps. Par exemple, si vous faites fonctionner le circuit à 8 MHz, les instructions Serin et Serout fonctionneront à 19 200 bauds lorsque vous les paramètrerez pour 9600. Mais attention, dans la même situation, le Pause 1000 évoqué ci-dessus ne durera plus qu’une demi-seconde et les sons générés par l’instruction Sound auront une fréquence deux fois plus élevée à paramètres identiques. Cet accroissement de la vitesse d’horloge peut aussi être utilisé pour augmenter la résolution des instructions Pulsin et Pulsout. A 4 MHz elles ont une résolution de 10 µs. Avec un quartz à 20 MHz la résolution est accrue dans un rapport 5 et tombe à 2 µs. Mais attention, en contrepartie, la variable de mesure de Pulsin est toujours codée sur un mot de 16 bits et la largeur d’impulsion qu’elle peut alors mesurer dans ce cas diminue à 131070 µs. Dans l’autre sens, il existe des applications où l’on fait fonctionner le PIC avec une horloge à 32 768 Hz afin de réduire la consommation le plus possible. Dans ces conditions, les instructions Serin et Serout ne sont plus utilisables et le timer chien de garde risque de réinitialiser le programme à plusieurs reprises lors de son exécution. Rien ne vous interdit cependant de tester votre application à cette fréquence sachant que les seules instructions pouvant poser problème sont celles utilisant la notion de temps, à savoir : I2CIN, I2COUT, PAUSE, POT, PULSIN, PULSOUT, PWM, SERIN, SEROUT, SLEEP et SOUND. Si vous êtes un programmeur chevronné, vous pouvez tenter de modifier les sous-programmes correspondant à ces instructions dans la bibliothèque du compilateur afin de les adapter à la fréquence d’horloge de votre choix. Cela reste toutefois délicat pour certaines instructions. Importé par Selectronic 14/20 BP 513 - 59022 LILLE CEDEX - Tél. : 0 328 550 328 - Télécopie : 0 328 550 329 - www.selectronic.fr Boucle: For B0 = 0 to 255 Call DecalE 7.2 Programmation en assembleur Même si la majorité des tâches peut être réalisée en PicBasic, l’adjonction de programmes en assembleur peut s’avérer utile dans certains cas particuliers : très grande rapidité d’exécution d’une partie d’un programme, grande compacité du code, etc. Dans ces diverses situations, il est agréable de disposer d’une possibilité d’assembleur en ligne telle celle offerte par PBC. En fait, il existe deux approches différentes pour utiliser des programmes en assembleur avec PBC. La première consiste à faire appel à l’assemblage “ en ligne ” c’est à dire à inclure directement des instructions en langage machine dans le programme Basic. La seconde consiste à écrire des sous-programmes en assembleur qui seront ajoutés à la librairie principale du compilateur ou via un fichier spécifique. 7.2.1 Programmation en assembleur Les programmes en PicBasic peuvent contenir des mnémoniques assembleur sous réserve qu’ils soient précédés par le mot clé ASM et qu’ils soient terminés par le mot clé ENDASM. Chacun de ces mots clés doit être placé seul sur une ligne. Les lignes de mnémoniques assembleur ne sont pas modifiées par PBC qui les transfère telles qu’elles à l’assembleur associé. Ceci permet de profiter de toutes les possibilités de cet assembleur appelé PM pour PIC Macro assembleur. Tous les symboles définis dans le programme PicBasic se retrouvent avec les mêmes noms dans le programme transmis à l’assembleur mais précédés du symbole souligné (_). Ceci permet d’accéder aux variables utilisateur, aux constantes et même aux variables systèmes au sein du programme en assembleur. Ainsi par exemple W0 en PicBasic s’appelle-t-elle _W0 dans le programme en assembleur. En contrepartie, tout symbole défini dans vos propres programmes en assembleur et commençant par un souligné est susceptible d’entrer en conflit avec les symboles utilisés par PBC. De plus, il est impossible au programmes en PicBasic d’accéder aux symboles éventuellement définis avec un tiret de soulignement comme premier caractère dans vos programmes en assembleur. Ainsi, si vous utilisez dans un de vos programmes en assembleur le symbole _var, il sera impossible d’y accéder en PicBasic avec le nom de symbole var. Si des symboles doivent être partagés entre vos programmes en PicBasic et vos programmes en assembleur il est donc indispensable de définir tous ces symboles dans le programme PicBasic concerné. 7.2.2 Exemples de programmes en assembleur ‘ Appel du programme en assembleur ‘ DecalE Next B0 Call DecalI ‘ Appel du programme en assembleur ‘ DecalI Serout 0,N2400,(B0) ‘ Emission du contenu de B0 sur liaison ‘ série Goto Boucle End Asm ‘ Début des deux programmes ‘ en assembleur _DecalE mov T0,#8 asb1 rr _B0 jnc asb2 stb PortA.0 skip asb2 clrb PortA.0 setb PortA.1 clrb PortA.1 djnz T0,asb1 return _DecalI mov T0,#8 asb3 setb PortA.1 clrb PortA.1 clc snb PortA.0 stc rl B0 djnz T0,asb3 goto done ‘ Sortie via le sous-programme standard ‘ de la bibliothèque de PBC “ done ” Endasm N’oubliez pas de placer un END ou un GOTO à la fin du programme Basic pour éviter que le processeur ne “ tombe ” ensuite dans vos sousprogrammes assembleur placés à la fin de ce dernier. Remarquez aussi que dans l’exemple ci-dessus le deuxième sous programme se termine par un saut au sous-programme “ done ” plutôt que par un banal return. En fait, return fonctionnerait aussi mais done présente l’avantage de faire du “ nettoyage ” avec en particulier la réinitialisation du bit RP0 et du timer chien de garde. Si vos sous-programmes en assembleur sont susceptibles d’être utilisés dans différents programmes Basic, il est plus judicieux de les placer dans un fichier texte indépendant et d’appeler ensuite ceux-ci dans les programmes Basic concernés au moyen d’une directive INCLUDE comme dans l’exemple ci-dessous. Pour écrire un octet sur le port A vous pouvez écrire en PicBasic : Poke 5,B0 ‘ Envoie le contenu de B0 sur le PortA Mais vous pouvez aussi écrire la même chose en assembleur sous la forme : Fonctionnellement, cet exemple est identique à celui que nous venons de traiter mais appelle les sous-programmes assembleur à partir d’un fichier externe. Boucle: For B0 = 0 to 255 Call DecalE Asm clrb RP0 mov 5,_B0 Endasm ; S’assure que l’on pointe bien sur la bonne page ; Envoie le contenu de B0 sur le PortA ‘ Appel du programme en ‘ assembleur DecalE Next B0 Call DecalI ‘ Appel du programme en ‘ assembleur DecalI Serout 0,N2400,(B0) ‘ Emission du contenu de B0 ‘ sur liaison série Goto Boucle End Cette façon de faire occupe 3 mots de code machine et s’exécute en 3 µs (avec un oscillateur à 4 MHz) contrairement à l’instruction en PicBasic qui occupe plus de place et prend donc plusieurs dizaines de µs pour s’exécuter. Asm Remarquez, à propos de cet exemple, l’usage de la variable _B0 en assembleur pour accéder à la variable système B0 du PicBasic et le remplacement de l’apostrophe de début de commentaire par un point virgule. En effet, n’oubliez pas que tout ce qui est contenu entre ASM et ENDASM est envoyé tel quel à l’assembleur et doit donc strictement respecter la syntaxe de ce dernier. Celle-ci est conforme à celle de l’assembleur Microchip mais, en cas de doute, vous pouvez consulter la notice de cet assembleur (en langue anglaise) sur la disquette fournie (fichier PM.TXT). Si votre programme en assembleur est plus long que dans l’exemple que nous venons de voir mais n’est destiné qu’à un seul programme PicBasic, vous pouvez l’inclure dans ce dernier et l’appeler au moyen d’une instruction CALL comme dans l’exemple ci-après. Include ‘’Decal.inc’’ ; le contenu du fichier Decal.inc ; sera inséré ici Endasm Et le fichier Decal.inc contient bien évidemment les sous-programmes suivants : _DecalE asb1 rr asb2 clrb mov _B0 jnc stb skip PortA.0 setb T0,#8 asb2 PortA.0 PortA.1 Importé par Selectronic BP 513 - 59022 LILLE CEDEX - Tél. : 0 328 550 328 - Télécopie : 0 328 550 329 - www.selectronic.fr 15/20 _DecalImov asb3 setb clrb djnz return T0,#8 PortA.1 clrb clc snb stc rl djnz goto par défaut) qui ont pour effet d’interrompre l’exécution du programme en cours pour passer à l’exécution du programme gestionnaire d’interruptions. PortA.1 T0,asb1 De ce fait, et même si elles sont très utiles pour certaines applications, les interruptions peuvent être difficiles à maîtriser et à mettre en place. PortA.1 PBC ne supporte pas directement les interruptions ce qui ne veut pas dire que vous ne pouvez pas les utiliser. Néanmoins, les bibliothèques de PBC ne sont pas réentrantes ce qui veut dire que votre gestionnaire d’interruption ne doit pas utiliser d’instructions en Basic et doit donc être intégralement écrit en assembleur. PortA.0 B0 T0,asb3 done ‘ Sortie via le sous-programme ‘ standard de la bibliothèque de ‘ PBC “ done ” Il existe aussi une troisième possibilité qui consiste à ajouter vos sousprogrammes aux fichiers PBH.INC ou PBL.INC puisque ces derniers sont systématiquement ajoutés à votre programme par le compilateur. C’est cependant une solution que nous déconseillons car ces fichiers sont structurés de façon très particulière et, en procédant de la sorte, vous risquez de les modifier au point de les rendre ensuite inutilisables par le compilateur. 7.2.3 Emplacement de l’assemblage en ligne Les instructions d’un programme Basic s’exécutent au fur et à mesure de leur apparition dans le listing source. La première ligne de code est celle par laquelle le programme va commencer son exécution ; de même le END final, écrit par vos soins ou implicite, est placé immédiatement après la dernière instruction exécutable de votre programme. De nombreux programmeurs ont tendance à placer leurs sousprogrammes soit au début soit à la fin du programme Basic. Dans le premier cas cela signifie que ceux-ci s’exécuteront avant le programme Basic ; dans le deuxième cas, que tout programme Basic qui pourrait accidentellement aller au delà du END (suite à une erreur dans la logique du programme par exemple) “ tomberait ” dans les sous-programmes en assembleur. La deuxième solution est toutefois conseillée pour des raisons de logique (sauf bien sûr s’il est indispensable que vos sous-programmes en assembleur s’exécutent avant le programme Basic) mais impose de bien mettre un END en fin du programme Basic si ce dernier doit se terminer. Dans la pratique, de nombreux programmes d’applications microcontrôlées ne se terminent jamais et tournent en boucle, auquel cas ce problème ne se pose pas. 7.2.4 Le macro-assembleur PIC Le macro-assembleur PIC, appelé PM.EXE, fourni avec PBC, accepte les mnémoniques standards de l’assembleur Microchip ou bien les mnémoniques compatibles 8051 définis à l’origine par la société Parallax. Les en-têtes de fichiers fournies sont toutefois codées en utilisant la syntaxe compatible 8051 afin d’inclure les définitions des noms de bits avec leurs fonctions ce qui peut éventuellement poser quelques problèmes si vous réutilisez des programmes en assembleur extraits de notices ou notes d’applications Microchip. Il est cependant facile de réaliser les conversions nécessaires à ce niveau. Ainsi, par exemple, si vous lisez : bsf status,RP0 ‘ Positionne le bit RP0 RP0 Lorsqu’une interruption se produit le PIC stocke l’adresse de la prochaine instruction à exécuter sur la pile et saute à l’adresse 4. Ceci signifie qu’il vous faut dès à présent disposer d’un emplacement libre sur la pile qui n’en comporte que 8. Les sous-programmes des bibliothèques du PIC peuvent utiliser jusqu’à 4 niveaux de pile ; les 4 niveaux suivants étant en principe disponibles pour les CALL et les GOSUB imbriqués. Vous devez donc vous assurer que vous imbriquez au maximum 3 GOSUB et que vous n’utilisez pas de CALL à l’intérieur afin de toujours disposer de ce niveau de pile indispensable. Si votre programme d’interruption utilise lui même la pile, il vous faut évidemment autant de niveaux disponibles en plus que ce qu’il utilise. Une fois ce problème résolu, il faut vous occuper de la sauvegarde du contexte. En effet, lors d’une interruption le PIC peut être en train d’exécuter n’importe quelle instruction et l’état des registres W, PCLATH, du registre d’état et du pointeur de page vous sont à priori inconnus. Il faut donc les mémoriser (c’est ce que l’on appelle sauvegarder le contexte) de façon à pouvoir les restaurer en fin de votre programme d’interruption afin que l’exécution du programme en cours puisse continuer. Si ce n’est pas le cas, vous vous exposez à des difficultés de mise au point de votre programme qui deviendront vite inextricables. Ceci étant, PBC réserve en interne trois variables spécifiquement destinées aux interruptions : I0, I1 et I2 mais seule I0 est disponible sur le PIC 16C84. Si vous souhaitez disposer des trois il faut faire appel à un PIC ayant plus de RAM tel le 16F84 par exemple. Si vous avez besoin d’autres variables vous pouvez tout simplement réserver les variables systèmes classiques B0, B1, etc. Pour cela il suffit tout simplement de ne pas les utiliser dans votre programme principal. Votre programme d’interruption doit être aussi court et aussi rapide que possible sinon le timer chien de garde risque de s’activer ce qui provoquerait un mauvais fonctionnement de tout votre programme. Une bonne solution consiste à faire en sorte que le programme d’interruption se contente de changer l’état d’une variable. De ce fait, le programme Basic peut être informé de l’arrivée de cette interruption simplement en testant régulièrement cette variable. Le programme d’interruption peut être placé dans le fichier PBH.INC. Vers la fin du fichier se trouve l’étiquette Start ; c’est ici que le PIC commence l’exécution suite à un reset. Quelques lignes en dessous se trouve une section de code mise en commentaire. C’est à cet endroit que vous pouvez placer votre programme d’interruption en n’oubliant pas de lui donner comme origine 4 au moyen d’un ORG 4. Votre programme d’interruption doit évidemment se terminer impérativement par un RETI 7.4 La vie après 2 K vous le convertirez en bsf Une telle tâche ne peut donc être accomplie que par des programmeurs expérimentés en respectant les quelques indications que voici. ‘ Positionne le bit RP0 En effet, du fait des définitions déjà réalisées, le symbole RP0 est défini comme appartenant au registre status. Consultez si nécessaire le fichier P84.INC qui réalise la liste de ces définitions pour un PIC 16C84. Pour une information plus complète sur les possibilités et la syntaxe du macro-assembleur PM.EXE, consultez le fichier (uniquement en langue anglaise) PM.TXT contenu sur la disquette fournie. 7.3 Interruptions Les interruptions sont un bon moyen de rendre votre programme difficile à mettre au point. En effet, les interruptions sont déclenchées par des événements externes (sous réserve d’être autorisées, ce qui n’est pas le cas Lorsqu’un programme en Basic atteint 2 K (ce qui est déjà très long compte tenu de l’efficacité du compilateur) un certain nombre de problèmes se produisent. En effet, les instruction d’appel ou de saut comme CALL ou GOTO par exemple disposent d’un nombre de bits tel qu’il leur est impossible de coder des adresses au delà de 2 K. Pour aller plus loin, il faut manipuler les bits du registre PCLATH du PIC avant chaque utilisation de CALL ou de GOTO. Afin de minimiser la taille du code généré et d’accroire l’efficacité du compilateur, cette manipulation n’est pas prise en compte par PBC. Cette limite de 2 K représente d’ailleurs un problème pour tous les langages de programmation : assembleur, C ou Basic. S’il est absolument nécessaire que vous alliez au delà de 2 K, la seule solution viable consiste à éditer le fichier .SRC généré par le compilateur afin d’agir directement sur les bits de PCLATH avant chaque saut généré par un Importé par Selectronic 16/20 BP 513 - 59022 LILLE CEDEX - Tél. : 0 328 550 328 - Télécopie : 0 328 550 329 - www.selectronic.fr CALL ou un GOTO. C’est évidemment une opération délicate et qui doit être faite avec la plus grande attention sinon vous risquez de vous retrouver n’importe où dans l’espace adressable. Pour de plus amples renseignements sur le registre PCLATH et sur son fonctionnement exact, reportez-vous aux fiches techniques Microchip. 8. DIFFÉRENCES ENTRE COMPILATEUR PBC ET LE Basic Stamp 1 Tout a été fait pour qu’un programme écrit pour un Basic Stamp I et compilé avec PBC s’exécute de la même façon et c’est effectivement le cas pour la majorité des applications. Cependant, quelques légères différences sont inévitables. Elles résultent d’une part de l’amélioration apportée par l’exécution directe de code machine par le PIC sans la phase de décodage réalisée pour chaque instruction par le Stamp. D’autre part, le Stamp est un système fermé dont le fonctionnement interne nous est inconnu. Même si tout a été fait pour que, de l’extérieur, le comportement soit le même, une compatibilité à 100 % ne peut être garantie. Les paragraphes suivants abordent les problèmes que vous pourriez éventuellement rencontrer. 8.1 Vitesse d’exécution La différence majeure entre le Basic Stamp I et les programmes compilés par PBC se situe au niveau de la vitesse d’exécution. En effet, outre le fait que le programme n’a plus besoin d’être lu depuis une EEPROM externe à accès série, des instructions telles que GOTO et GOSUB par exemple s’exécutent à peu près cent fois plus vite. Bien que cela soit apprécié des utilisateurs dans la majorité des cas, cela pourrait éventuellement poser problème pour des programmes dont certaines boucles de temporisations reposeraient sur la vitesse d’exécution des instructions. La solution consiste alors à remplacer ces boucles par de véritables instructions de temporisation ne dépendant que de l’horloge du circuit (PAUSE, NAP ou SLEEP par exemple). 8.2 Entrées/sortie numériques PBC agit comme le Basic Stamp directement sur les registre TRIS et PORT du PIC. Si cette solution présente de nombreux avantages quant à la vitesse d’exécution et à l’occupation mémoire, elle présente cependant un inconvénient. Certaines fonctions telles que TOGGLE et PULSOUT par exemple utilisent des instructions du type lecture/modification/écriture directement dans le registre PORT. Si de telles instructions sont exécutées trop près l’une de l’autre alors que, par exemple, le port pilote une charge inductive ou capacitive ; l’instruction peut produire des résultats imprévus. Voici un exemple. Supposons qu’une patte pilote une charge capacitive de 10 µF, qu’elle soit initialement à l’état bas et que l’on veuille exécuter des instructions TOGGLE. La première instruction va lire l’état de la patte et va l’inverser et donc la mettre au niveau haut. La capacité va donc commencer à se charger mais, si l’instruction suivante qui vient à son tour lire l’état de la patte arrive trop près derrière, elle verra toujours une patte au niveau bas et générera donc un nouveau niveau haut. En pratique, cela ne pose toutefois que rarement problème, surtout lorsque l’on a été sensibilisé comme nous venons de le faire. Les instructions SOUND et POT, très sujettes à ce genre de difficultés, disposent de protections permettant de les contourner. 8.3 Absence d’interface PC Comme les programmes compilés par PBC sont prévus pour être exécutés directement sur un PIC, l’interface PC du Basic Stamp n’a plus aucune raison d’être. De ce fait, deux différences sont à connaître. L’instruction DEBUG est inopérante mais sa syntaxe est néanmoins examinée par PBC pour voir si elle est correcte. Le “ réveil ” du PIC qui était assuré par le PC après un END n’est plus possible et seule une action sur MCLR peut donc y parvenir. 8.4 BUTTON PBC impose d’utiliser une variable 8 bits pour stocker la valeur de la répétition alors que le Basic Stamp autorise n’importe quel type de variable. Les variables de type mot fonctionnent aussi avec PBC mais gaspillent de l’espace mémoire inutilement. Les variables de type bit sont acceptées par le compilateur qui, même s’il génère une erreur de compilation les traite quand même. Par contre, la commande ne fonctionnera pas correctement lors de son exécution. Par ailleurs, la plus grande vitesse d’exécution des programmes compilés avec PBC peut poser problème avec des commandes BUTTON successives. En effet, celle-ci ne teste l’entrée qu’une fois par exécution. L’antirebondissement est assuré par la relative lenteur du Stamp due à la recherche de chaque instruction en EEPROM. Avec PBC, cette lenteur n’existe plus et plusieurs BUTTON successifs trop rapprochés peuvent poser problème suite à un anti-rebondissement moins efficace. 8.5 Lecture et écriture en EEPROM Le Basic Stamp autorise le stockage de données via les commandes READ et WRITE dans la zone mémoire EEPROM non utilisée par le programme. Comme les programmes compilés avec PBC s’exécutent directement depuis la mémoire de programme des PIC, cette EEPROM de stockage de données doit être prévue spécifiquement si elle est nécessaire. Une solution consiste à utiliser des PIC 16C84, 16F83 ou 16F84 qui disposent de 64 octets d’EEPROM supportés par les instructions READ et WRITE de PBC. Pour utiliser de la mémoire EEPROM avec des PIC qui en sont démunis, une bonne solution consiste à faire appel à de l’EEPROM externe sur bus I2C grâce aux instructions I2CIN et I2COUT. 8.6 GOSUB et RETURN Le Basic Stamp utilise W6 comme pile pour les instructions GOSUB et RETURN ce qui permet aux programmes d’utiliser jusqu’à 16 GOSUB ou d’imbriquer les GOSUB sur 4 niveaux. PBC utilise quant à lui la “ vraie ” pile des PIC pour ces instructions ce qui implique que le registre W6 soit libre et utilisable par vos programmes. De plus il est toujours possible d’imbriquer jusqu’à 4 GOSUB ; par contre, le nombre total de GOSUB dans un programme peut atteindre 255. 8.7 RANDOM L’instruction RANDOM fonctionne selon un principe différent de celle du Basic Stamp. Cela ne modifie pas le comportement des programmes qui y font appel mais introduit juste une limitation : il est interdit de faire un RANDOM Port. Le compilateur génère une erreur dans un tel cas. 8.8 SERIN et SEROUT SERIN et SEROUT ont été modifiées afin de disposer de la vitesse, quasi universelle aujourd’hui, de 9600 bauds. Il a donc été nécessaire de supprimer la vitesse de 600 bauds dont elle a pris la place. Cela ne pose généralement aucun problème car cette vitesse est très peu usité de nos jours. Le compilateur génère une erreur si on tente d’y faire appel. 8.9 Instructions à basse consommation Lorsque le timer chien de garde réveille le PIC qui se trouve en mode sommeil (instructions NAP ou SLEEP), cela se produit sans perturber les entrées/sorties pour les programmes compilés avec PBC. Pour une raison inconnue, les entrées/sorties du Basic Stamp sont perturbées pendant environ 18 ms dans une telle situation. De même, l’instruction SLEEP perturbe les entrées/sorties du Basic Stamp toutes les 2,3 secondes environ. Pour les programmes compilés avec PBC cela ne se produit qu’une fois toutes les 10 mn lors de la recalibration de l’horloge du timer chien de garde. 8.10 SLEEP Les spécifications du Basic Stamp indiquent une précision du temps de Importé par Selectronic BP 513 - 59022 LILLE CEDEX - Tél. : 0 328 550 328 - Télécopie : 0 328 550 329 - www.selectronic.fr 17/20 l’instruction SLEEP de l’ordre de 99,8 % ce qui est excessivement optimiste. En effet, la résolution de l’instruction SLEEP en Basic Stamp n’est que de 2,3 secondes ce qui introduit déjà une erreur moyenne de 1 seconde. De plus, l’oscillateur qui pilote cette instruction est celui du timer chien de garde qui est une cellule RC interne au PIC. Cet oscillateur dérive donc avec la température et la commande SLEEP également. Pour éliminer cela, PBC effectue une calibration de cette horloge par rapport à l’horloge système et cette opération se reproduit toutes les 10 minutes. De ce fait, la précision de temps de l’instruction SLEEP en PBC est quasiment identique à celle de l’horloge système. Le seul “ inconvénient ” de ce procédé est que le PIC est rendu actif un court instant pendant le mode SLEEP (0,38 % du temps en fait) ce qui augmente un peu la consommation de ce mode. Cette augmentation est cependant très faible puisque Microchip indique 40 µA de courant de repos d’un PIC 16C84 alors que l’on mesure seulement 47 µA pour un PIC 16C84 en mode SLEEP généré par PBC. ANNEXE A Résumé du jeu d’instructions de l’assembleur Microchip. ANNEXE B Résumé du jeu d’instructions de l’assembleur Parallax. ADD fr,#lit CSNE fr,#lit MOVSZ W,++fr ADD fr1,fr2 CSNE fr1,fr2 MOVSZ W,-fr ADD fr,W DEC fr NEG ADD W,#lit1 DECSZ fr NOP fr ADD W,fr DJNZ fr,addr NOT fr ADDB fr,bit IJNZ fr,addr NOT W AND fr,#lit INC fr OR fr,#lit AND fr1,fr2 INCZ fr OR fr1,fr2 AND fr,W JB bit,addr OR fr,W AND W,#lit JC addr OR W,#lit AND W,fr JMP addr OR W,fr CALL addr JMP PC+W RET CJA fr,#lit,addr JMP W RETI CJA fr1,fr2,addr JNB bit,addr RETW CJAE fr,#lit,addr JNC addr RL fr CJAE fr1,fr2,addr JNZ addr RR fr bit CJB fr,#lit,addr JZ addr SB CJB fr1,fr2,addr LCALL addr SC CJBE fr,#lit,addr LJMP addr SETB CJBE fr1,fr2,addr LSET addr SKIP CJE fr,#lit,addr MOV fr,#lit SLEEP CJE fr1,fr2,addr MOV fr1,fr2 SNB CJNE fr,#lit,addr MOV fr,W SNC CJNE fr1,fr2,addr MOV OPTION,#lit SNZ CLC MOV OPTION,fr STC STZ lit,lit,... bit bit CLR fr MOV OPTION,W CLR W MOV !fr,#lit SUB fr,#lit CLR WDT MOV !fr1,fr2 SUB fr1,fr2 CLRB bit MOV !fr,W SUB fr,W CLZ MOV W,#lit SUBB fr,bit3 CSA fr,#lit MOV W,fr SWAP fr CSA fr1,fr2 MOV W,/fr SZ CSAE fr,#lit MOV W,fr-W2 TEST fr CSAE fr1,fr2 MOV W,++fr XOR fr,#lit CSB fr,#lit MOV W,-fr XOR fr1,fr2 CSB fr1,fr2 MOV W,<<fr XOR fr,W CSBE fr,#lit MOV W,>>fr XOR W, #lit CSBE fr1,fr2 MOV W,<>fr XOR X,fr CSE fr,#lit MOVB bit1,bit2 CSE fr1,fr2 MOVB bit1,/bit2 114-Bit Core Only supported by PM 3PM implementation diffres from prallax 2Not Importé par Selectronic 18/20 BP 513 - 59022 LILLE CEDEX - Tél. : 0 328 550 328 - Télécopie : 0 328 550 329 - www.selectronic.fr NOTES GARANTIE ET LICENCE D’UTILISATION Lisez les termes de la licence d’utilisation et les conditions de garantie qui suivent avant d’ouvrir l’emballage de la disquette. L’ouverture de cet emballage confirme votre acceptation sans aucune réserve de ces derniers. Garantie L’éditeur du logiciel garantit que le logiciel permettra une utilisation conforme, pour l’essentiel, aux performances décrites dans le(s) manuel(s) accompagnant le logiciel, pendant une durée de quatre-vingt-dix (90) jours suivant la date de sa réception. Toute garantie implicite est limitée à quatrevingt (90) jours en ce qui concerne le logiciel. L’étendue de la responsabilité de l’éditeur du logiciel et de ses fournisseurs, ainsi que vos droits à réparation se limiteront au choix de l’éditeur du logiciel, soit au remboursement du prix payé, soit au remplacement du logiciel non conforme à la garantie limitée prévue ci-dessus, sous réserve que le produit concerné soit retourné à l’éditeur du logiciel ou à son distributeur accompagné d’une copie de son justificatif d’achat. Toutefois, cette garantie limitée serait inapplicable dans le cas où le non fonctionnement du logiciel résulterait d’un accident, d’un abus ou d’une mauvaise utilisation. Tout logiciel de remplacement sera garanti pour la période de la garantie d’origine restant à courir, ou pendant trente (30) jours à compter de la date de remplacement au cas où cette dernière période serait plus longue. Sauf disposition d’ordre public contraire, l’éditeur du logiciel et ses fournisseurs excluent toute autre garantie explicite ou implicite relativement au logiciel et à la documentation qui l’accompagne, notamment toute garantie concernant leur caractère propre à la commercialisation ou leur adéquation à un usage particulier. La présente garantie limitée vous confère des droits spécifiques et ne fait pas obstacle à l’application de la garantie légale prévue aux articles 1641 et suivants du Code Civil. Sauf disposition d’ordre public contraire, l’éditeur du logiciel et ses fournisseurs ne sauraient être tenus responsables de dommages de quelque nature que ce soit (notamment des dommages corporels, des pertes de bénéfices, des interruptions d’activité, des pertes de données, ou de toute autre perte de nature pécuniaire) résultant de l’utilisation ou de l’impossibilité d’utiliser le logiciel, même si l’éditeur du logiciel ou ses distributeurs ont été informés de la possibilité de survenance de tels dommages. En toute hypothèse, l’étendue de la responsabilité de l’éditeur du logiciel sera limitée à la somme que vous avez effectivement payée pour le logiciel. Licence d’utilisation L’éditeur et ses distributeurs ne vendent pas de droit sur le présent programme mais octroient à l’acquéreur le droit de l’utiliser dans le cadre de sa licence d’utilisation et conservent expressément le droit de propriété du programme et de sa licence d’utilisation. Contre le paiement des frais de licence inclus dans le prix de vente du logiciel et l’acceptation des termes de la licence d’utilisation, l’acquéreur a le droit non exclusif d’utiliser ce programme sur un seul ordinateur et en un seul lieu pour ses besoins propres ou internes à son entreprise. Le logiciel et sa documentation sont protégés par la législation en vigueur en France sur les droits d’auteur. Aucune partie de ce programme ni de sa documentation, tant en langue d’origine qu’en version française, ne peut être copiée ou reproduite, en totalité ou en partie et par quelque moyen que ce soit sans l’autorisation écrite préalable expresse de l’éditeur du logiciel (ou de la société Selectronic pour ce qui est de la seule version française du manuel d’utilisation). Le contenu de présent manuel est la propriété de SELECTRONIC et est protégé par copyrignt. Toute reproduction complètre ou même partielle est strictement illicite. Pour obtenir un autre exemplaire de ce manuel, veuillez contacter SELECTRONIC. EN CAS DE PROBLEME : Veuiller nous retourner l'appareil soigneusement emballé, si possible dans son carton d'origine, et accompagné d'une copie de la facture, à: Par la POSTE : Selectronic S.A.V. - B.P. 513 - 59022 LILLE CEDEX Par TRANSPORTEUR : Selectronic - 86, rue de Cambrai - 59000 LILLE Importé par Selectronic BP 513 - 59022 LILLE CEDEX - Tél. : 0 328 550 328 - Télécopie : 0 328 550 329 - www.selectronic.fr 19/20 NOTES NOTES Importé par Selectronic 20/20 BP 513 - 59022 LILLE CEDEX - Tél. : 0 328 550 328 - Télécopie : 0 328 550 329 - www.selectronic.fr