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