Vous êtes sur la page 1sur 33

Développement

d’applications à
base de
microcontrôleurs
« PIC 16F84»

1
Développement d’applications à base de microcontrôleurs « PIC 16F84»

Introduction

A ) Présentation des microcontrôleurs « PIC » …………….4


A-1 ) Les PIC……………………………………………………………….……….4
A-2 ) Le circuit minimal de mise en oeuvre…………………………………………6

B ) Carte et logiciel de programation :………………………9


B-1 ) La carte de programmation « JDM Programmer »………………….…..……. 9
B-2 ) Le logiciel de programmation « IC-Prog » ………………………….…….…10

C ) Mise en oeuvre…………………………………………12
C-1 ) Tests sans carte ni soudure : Utilisation d’une plaquette d’essais…………….13.
C-2 ) Carte 1 : afficheur, bouton et relais……………………………………………14
C-3 ) Carte 2 : Variation de vitesse d’un moteur à courant continu ….. ……………15
C-4 ) Carte 3 : liaison infra-rouge et liaison calculatrice TI…………………………17
C-5 ) Carte 4 : relais, boutons, LEDS et lignes libres. ………………………………18
C-6 ) Carte 5 : relais, liaison calculatrice TI, LEDS, boutons et quatre lignes libres.19
C-7 ) Carte 6 : afficheur LCD……………………………………………………….20

D ) Programmation en basic………………………………...21
D-1 ) Le programme « WinPicBasic »………………………………………………..22
D-2 ) Structure des programmes ………………………………………….…………24
a ) Partie commune à tous les programmes
b ) Parties spécifiques à chaque programme
D-3 ) Exemples de programmes pour le robot « climber »…………………..…..….25
a ) Faire clignoter les LED D2,D3 et D4 …………………………………..…..……..……25
b ) Faire clignoter le portB …………………………………………….……………..……26
c ) Test des capteurs …………………………………………………….……..…….…..…27
d ) Jouer une mélodie …………………………………………………….…………...……28
e ) Résumé des instructions principales ……………………………………..……………29

F ) Annexes
Résumé des caractéristiques du PIC 16F84 …………………………………………31
Page 1 du datasheet du PIC 16F84 ………………………………………………….32
Dossier de fabrication du programmateur « jdm »…………………………………...33

2
Introduction

Ce petit dossier a pour simple ojectif de fournir les moyens de créer des programmes à base
de PIC, à peu de frais et sans connaissances particulières dans ce domaine , en dehors de la
numération.

Les typons ont été dessinés, mais aujourd’hui, seul celui concernant la commande des
moteurs à courant continu a été réalisé. La partie logicielle a été testée avec le robot que nous
venons d’acheter au lycée. Tous les programmes donnés fonctionnent.

Bon courage.
TFT. Le 28 Novembre 2002.

3
A ) Présentation des microcontrôleurs « PIC 16F84»
A-1 ) Les PIC :
Un PIC est un microcontrôleur, c’est à dire un circuit intégré contenant :
- une unité de traitement de l’information de type microprocesseur
- des périphériques internes, qui permettent de réaliser des montages sans nécessiter l’ajout de
composants externes.

De technologie relativement récente, les microcontrôleurs PIC s'inscrivent dans la nouvelle génération
de structures programmables. Leur facilité de mise en oeuvre permet de proposer une solution micro
programmée simple à des problèmes plus ou moins complexes, sans avoir à supporter la lourdeur de
mise en place relative aux autres systèmes à microcontrôleurs.

Le microcontrôleur PIC présente des caractéristiques techniques performantes, bien qu’il semble
limité, si on le compare à ses homologues. C’est pourquoi il est couramment employé dans des
applications industrielles et domestiques (appareils électroménagers, télévisions, télécommandes,
thermostats électroniques...).

A-1.1 Qu’est-ce qu’une PIC ?

La dénomination PIC est sous copyright de Microchip. Les autres fabricants ont donc été dans
l’impossibilité d’utiliser ce terme pour leur propre microcontrôleurs.

Les PICs sont des composants dits RISC (Reduce Instructions Construction Set), pour
composant à jeu d’instructions réduit. Un nombre d’instructions réduites rend leur décodage plus
rapide, ainsi que leur exécution..

Toutes les PICs « Mid-Range » ont un jeu de 35 instructions, stockent chaque instruction dans
un seul mot de programme, et exécutent chaque instruction (sauf les sauts) en 1 cycle. On atteint donc
de très grandes vitesses, et les instructions sont de plus très rapidement assimilées.

L’horloge interne utilisée par PIC est prédivisée par 4 par rapport à l’externe. La base de
temps, qui donne le temps d’un cycle, est donc ¼ de celle de la période de l’horloge externe.

Exemple : Avec un quartz de 4MHz , on obtient 1 000 000 cycles/seconde. Comme le pic exécute
pratiquement une instruction par cycle, hormis les sauts, cela vous offre une puissance de l’ordre de
1MIPS (1 Million d’Instructions Par Seconde).

La fréquence d’horloge peut aller jusqu’à 20MHz. La vitesse de traitement est donc plus
qu’honorable.

4
A-1 2 Les différentes familles des PICs

La famille des PICs est subdivisée en 3 grandes familles :


- La famille « Base-Line », qui utilise des instructions de taille 12 bits,
- La famille « Mid-Range », qui utilise des mots de 14 bits (
- famille « High-End », qui utilise des mots de 16 bits.

Le circuit 16F84, seul utilisé ici, appartient la famille Mid-Range. Vous pouvez bien sûr
utiliser facilement une autre famille, et même un autre microcontrôleur.

Notez dès à présent que le datasheet de la 16F84 n’est qu’une petite partie de la documentation
complète. Pour obtenir la documentation complète, il faut télécharger chez Microchip les
« datasheet » pour la gamme Mid-Range.

Cependant, la documentation de base suffit pour 99,9% des applications, et, de plus, les
datasheet Mid-Range sont disponibles sous la forme d’un fichier par chapitre.

A-1.3 Identification d’un PIC

Le référence de chaque PIC donne plusieurs indications.


Par exemple

16 F 84 -04

Les premiers Une lettre Lettre indiquant le Les chiffres Fréquence


chiffres indiquent L (parfois ) type de suivants identifient maximale
la catégorie de la la plage de tension mémoire* : précisément la d’horloge « -
PIC. est beaucoup plus C ( EPROM ou PIC. (84) XX ».
16 indique une tolérante. EEPROM ), CR ( Par exemple –04
PIC Mid-Range ROM ), F ( Flash ) pour une 4MHz.

*Seule une mémoire FLASH ou EEPROM est susceptible d’être effacée, donc n’espérez pas
reprogrammer vos PICs de type CR. Pour les versions C, voyez le datasheet

Donc, une 16F84-04 est une PIC Mid-Range (16) donc la mémoire programme est de type
FLASH (F) donc réinscriptible de type 84 et capable d’accepter une fréquence d’horloge de 4MHz.

Une dernière indication que vous trouverez est le type de boîtier. Nous utiliserons pour nos
expérience le boîtier PDIP, qui est un boîtier DIL 18 broches, avec un écartement entre les rangées de
0.3’’ (étroit). La version 4MHz sera amplement suffisante.

Remarque importante : Les PICs sont des composants STATIQUES, c’est à dire que la fréquence
d’horloge peut être abaissée jusqu’à l’arrêt complet, sans perte de données et sans dysfonctionnement.
Une version –10 peut donc toujours être employée sans problème en lieu et place d’une –04.

Si vous voulez passer commande pour un PIC que nous allons utiliser dans le reste de cet
ouvrage, demandez donc un PIC16F84-04 en boîtier PDIP .

5
A-2 ) Le circuit de mise en œuvre minimale :
Le circuit 16F84 est l’un des plus simples de la famille, mais il permet néanmoins de travailler avec 12
broches d’entrée/sortie !

La mise en œuvre est très simple. Il faut au minimum :


- Un circuit d’horloge ( un quartz, deux condensateurs ou bien seulement un
condensateur et une résistance )
- Une alimentation +5V!

Il se présente sous la forme d’un boîtier DIP 18 broche, facilement implantable sur une platine
d'essais.

Précaution pratique : Pour se protéger des manipulations malencontreuses, il sera préférable


d’enficher le PIC dans un support tulipe 18 broches, et de ne plus l’enlever de ce support. Il n’y a ainsi
plus de risque de coupe des pattes, lors des cycles de programmation/effacement. Les seules patttes
risquant d’être détruites sont celles du support.

Schéma minimum :

Les outils de développement associés aux PIC sont des logiciels peu coûteux et d'excellente
qualité (assembleurs, compilateurs, simulateurs, émulateurs, programmateurs… sous environnement
Windows). On trouve facilement des compilateurs permettant de développer en assembleur, en C ainsi
qu’en langage basic. Ceux qui sont utilisés ici sont tous gratuits. Il vous faudra simplement réaliser les
cartes. Mais ce ne doit être un problème pour quelqu’un qui se lance dans la programmation des
microcontrôleurs.

La mémoire de la 16F84 est divisée en 3 parties :


- la « Flash ROM » ou mémoire programme,
- l’ « EEPROM » ou mémoire de données et
- la « RAM » utilisée pour les registres.

6
A-2.1 La mémoire programme

La mémoire programme est répartie en 1K mots de 14 bits. Vos programmes seront stockés dans
cette zone. Une instruction est codée sur 1 mot. Cela permet jusqu’à un millier d’instructions dans un
seul programme.

Il faut 2 octets pour coder 14 bits. Lorsque vous lisez le contenu d’une PIC vierge, vous allez lire
des suites de 14 « un », soit ’11111111111111’, ou « 0x3FFF »en hexadécimal. Ceci explique
pourquoi vos fichiers sur PC font 2Kbytes.

A-2.2 La mémoire eeprom

La mémoire eeprom (Electrical Erasable Programmable Read Only Memory), est constituée de 64
octets que vous pouvez lire et écrire depuis votre programme. Ces octets sont conservés après une
coupure de courant, et sont très utiles pour conserver des paramètres semi-permanents. Leur utilisation
implique une procédure spéciale que nous verrons par la suite, car ce n’est pas de la RAM, mais bien
une ROM de type spécial. Il est donc plus rapide de la lire que d’y écrire. Si vous programmez souvent
des eeproms (2416) vous auvez déjà constaté ce phénomène.

A-2.3 La mémoire Ram

La mémoire RAM est celle que nous allons sans cesse utiliser. Toutes les données qui y sont
stockées sont perdues lors d’une coupure de courant. La mémoire RAM est organisée en 2 banques
pour la 16F84. La RAM est subdivisée de plus en deux parties. Nous allons trouver, dans chaque
banque, des « cases mémoires spéciales », appelées REGISTRES SPECIAUX, et des cases mémoires
« libres » dont vous pouvez vous servir à votre guise.

Pour le cas de la 16F84, vous disposerez de 68 octets libres. L’organisation de la RAM est
montrée dans le tableau 4-2 page 13. Vous voyez la séparation verticale en 2 banques, et tout en bas
vous voyez deux banques de 68 octets de RAM.

Malheureusement, l’indication « mapped in bank 0) vous indique qu’accéder à ces 68 octets


depuis la banque 0 ou la banque 1 donne en fait accès à la même case mémoire.

Vous voyez dans la partie supérieure le nom de tous les registres spéciaux utilisés dans la PIC.
Nous les verrons tous, rassurez-vous.

Chaque registre provoque un fonctionnement spécial de la PIC ou la mise en service d’une


fonction particulière. Vous remarquerez enfin que certains registres sont identiques dans les 2 banques
(FSR par exemple). Cela signifie qu’y accéder depuis la banque 0 ou 1 ne fait pas de différence.

Remarquez que la banque 0 utilise les adresses de 0x00 à 0x7F, la banque 1 allant de 0x80 à
0xFF. Les zones en grisé sont des emplacements non utilisés (et non utilisables). L’emplacement 0x00
est un emplacement auquel on ne peut pas accéder.

Pour la grande majorité des registres, chaque bit a une fonction spéciale. Il faut pour cela consulter
le « data sheet », c’est-à-dire le dossier technique fourni par le constructeur, sous forme d’un fichier au
format « Portable Document File ».

7
A-2 4) Broches disponibles
Les lignes d’entrées sorties sont regroupées, sous forme ee deux « ports ». Vous pouvez lire ou écrire depuis vos
programmes sur chacun de ces ports.

Le PORTA regroupe quatre lignes, appelées PA0, PA1, PA2 et PA3.

Le PORTB regroupe 8 lignes, appelées PB0, PB1,… ,PB7.

A-2 5 ) Circuit d’horloge :

8
B ) Carte et logiciel de programmation
La carte de programmation jdm, dont une photo est représentée ci-dessous, est simple à réaliser, et se
connecte directement sur le port série de votre PC.
Il vous faudra également installer le logiciel permettant de télécharger votre programme dans le PIC.
Celui choisi ici est « IC-prog », disponible à « www.h2deetoo.demon.nl »

B-1 ) La carte de programmation JDM Programmer

Les plans de cette carte de programmation extrêmement simple peuvent être trouvés un peu partout
sur Internet.

Son plus gros avantage : Cette carte est alimentée par la liaison série qui le raccorde à l’ordinateur.
Pas d’alimentation à prévoir !

Schéma électrique :

Dossier de fabrication ( 2 images ) :


Pour des raisons de place , il est situé en annexe.
Implantation des composants
circuit imprimé

Remarque: Il existe d’autres programmateurs. Celui que nous avons réalisé, tiré de la revue
« Electronique Pratique », permet de programmer d’autres types de PIC, ainsi que des
mémoires « EEPROM » série.

9
B-2 ) Le logiciel de programmation « IC-Prog » :

Une fois le PIC installé sur sa carte de programmation et le câble de transfert relié à un des
ports série de l’ordinateur, il faut utiliser un logiciel de programmation pour réaliser l’opération.
Le logiciel IC-Prog, disponible gratuitement sur www.ic-prog.com remplit parfaitement cette
fonction.
La fenêtre ci-dessous apparaît la première fois qu’on utilise le logiciel. On peut ensuite la faire
réapparaître à tout moment en cliquant sur l’outil Hardware.

Il faut bien entendu sélectionner JDM Programmer dans la liste déroulante et choisir le port
série utilisé.
Le paramètre I/O Delay permet de déterminer la vitesse de transfert.

10
La fenêtre principale ressemble à celle-ci :

Attention ! Si on n’utilise pas le chien de garde du PIC, il faut désactiver celui-ci en retirant
l’option WDT (à droite de la fenêtre) avant de lancer la programmation. Nous avons passé
énormément de temps à comprendre cela car IC-Prog vous remet cette option par défaut à chaque fois
que vous ouvrez un nouveau fichier.

Remarque : Installation sous XP


Veuillez consulter le fichier « Icprog sous XP »

11
C ) Mise en oeuvre :
TROIS METHODES SONT ENVISAGEABLES :

- Carte minimale, dotée de modules divers (affichage, relais, commande de moteur,… )


- Câblage sur plaquette d’essais
- Basic stamp
- Carte minimale, dotée de modules divers (affichage, relais, commande de moteur,… )

Câblage sur plaquette d’essais

Il est possible de réaliser un câblage sur plaquette d’essais, pour procéder aux premiers essais.

Cette solution est à envisager si


- vous ne souhaitez pas créer de carte, ou que
- vous envisagez une grande variété d’applications différentes,
- vous souhaitez réaliser une application très particulière.

Dans ce cas, la méthode la plus logique est de câbler le minimum ( alimentation, horloge ), puis, en
fonction de l’application sur laquelle vous travaillez, d’ajouter des composants supplémentaires. Cela
demande, pour ceux qui n’ont jamais utilisé de plaquette d’essai, un petit temps d’adaptation, mais
cela impose aussi à l’utilisateur d’entrer dans les détails de câblage.

Carte minimale, dotée de modules divers (affichage, relais, commande de moteur,… )

Une autre solution, plus « généraliste », consiste à créer plusieurs cartes d’application, dotées
chacunes de modules différents. On peut ensuite tester facilement, sans câblage, les différentes
possibilités offertes par les microcontrôleurs.

Pour illustrer cette seconde approche, trois cartes ont été conçues :.
Les modules sont les suivants :
- communication ( série bidirectionnelle avec un « PC » ou une calculatrice « TI », liaison infra-
rouge avec modulation/démodulation )
- interface de puissance (commande de relais et PWM, sur un moteur à courant continu )
- interface homme machine (afficheur 7 segments, LED, boutons )

De nombreuses notions de programmation peuvent être abordées.


Il impose la réalisation d’une carte électronique.
Mais une fois celle-ci montée, le câblage se limite à la connexion des entrées et des sorties. Le confort
d’utilisation est beaucoup plus important que la précédente.

Le dossier de fabrication complet des cartes ( schéma, typon t implantation ) est regroupé dans un
fichier séparé, pour ne pas trop alourdir cette partie ( et pour ne pas trop ennuyer ceux que cela
n’intéresse pas…

Basic stamp :

Cette dernière solution présente l’avantage de la rapidité de mise en œuvre, le « Basic Stamp »
regroupe en effet sur un seul circuit au format DIP, un PIC, et tout ce qu’il faut pour le commander.

La seconde solution été développée ici. Les plans de fabrication des cartes sont terminés, avec sans
doute quelques ajustaements à faire.

12
C-1 ) Tests sans carte ni soudure : Utilisation d’une plaquette d’essais :
Un exemple est proposé ici . Il n’est bien sûr pas exhaustif, mais « une photo vaut mieux que tous les
discours ».

Schéma de principe utilisé (Source: Deaubonne Patrick )

Image montrant le schéma ci-dessus réalisé sur plaquette d’essais. (Source: Deaubonne Patrick )

Le support de circuit en bas à droite est à enficher directement sur la carte de programmation.
Temps approximatif de câblage : 30minutes.

13
C-2 ) Carte à modules afficheur 7 segments , boutons et relais
Schéma de principe

Interface de
Appui Interface puissance Sorties
bouton commande puissance
élevée
X3
Calculateur

Affichage
7 segments

Module interface commande : Permet la prise en compte de l’appui sur un bouton.

Module interface de puissance : Elle est constituée de trois relais 2RT. La présence de six
borniers de connexion vers l’extérieur autorise alors la connexions de moteurs pas à pas, à
courant continu, de LED …

Schéma :

14
C-3 ) Variation de vitesse d’un moteur à courant continu:
Schéma de principe

Interface de
Appui Interface puissance Sortie PWM
bouton commande puissance
élevée
Calculateur

PC Liaison Affichage
ou série 7 segments
TI

Cette carte comporte :


- une LED
- deux boutons poussoirs
- Un pont de commande d’un moteur à courant continu, à base de transistors MOS.

15
16
C-4 ) Carte de liaison infra-rouge et liaison TI ou PC :
Schéma de principe

Modulate Emetteur IR
ur

Calculateur

Démodulateur Récepteur IR

Interface
série TI
ou
PC (ajouter alors un max 232 )

Cette carte comporte :


- un module d’émission, modulant le signal logique grace à un circuit 555 monté en astable.
Pour augmenter la puissace d’amission, deux diodes sont utiisées.
- un module de réception, comportant un étage de mise en forme, suivi d’un démodulateur à
NE567.
La liaison avec la calculatrice se fait par un jack, relié au portA du pic.

17
C-5 ) Carte de test à relais, boutons, LEDS et lignes libres.
Cette carte de test comporte :
- un bouton poussoir d’entrée
- trois commandes de 2 relais 2RT
- quatre LEDS
- quatre lignes du port B laissées libres pour liaison avec d’autres cartes.

18
C-6 ) Carte avec relais, liaison calculatrice TI, LEDS, boutons et quatre
lignes libres.
Comme la précédente, cette carte de test comporte :
- un bouton poussoir d’entrée
- trois commandes de 2 relais 2RT
- quatre LEDS

Mais les quatre lignes du port B laissées libres précédemment sont ici utilisées pour une
liaison avec une calculatrice TI89, TI92, TI92plus ou V200.

19
C-7 ) Carte afficheur LCD
6 lignes du pic sont utilisées pour la liaison avec le pic. Les autres sont laissées libres
d’utilisation.

20
D ) Programmation en basic :

D-1 ) Le programme « WinPicBasic »

Il se présente comme suit :

Les exemples fournis sont groupés dans deux répertoires :


- « examples » contient les programmes exemples écrits par P. Beaudonne
- « Exemples » contient les exemples écrits pour le robot « Mountain climber » du lycée de
Bois d’Olives. Celui-ci est livré avec un microprocesseur qui n’est rien d’auter qu’une
version coréenne du pic 16F84. Il est compatible broche à broche ! C’est pourquoi
plusieurs plrogrammes de test ont été écrits, pour montrer plusieurs aspects du la
programmation en basic sous « WinPicBasic ».

Remarque : Quelques « bugs » de ce logiciel, qui, s’il est gratuit et fonctionne très bien, n’en
est pas moins imparfait :
A ) Pas de nom de plus de 8 caractères, ni de caractères spéciaux ( espace,… )
B ) La fonction « Enregistrer sous » pour changer le nom d’un programme ne change
pas. C’est très déroutant si on ne le sait pas ! Il suffit pour s’en sortir, de jongler avec
les fonctions copir/coller et avec l’explorateur.

21
Pour le debuggage ( la correction des erreurs ) :

Un numéro est indiqué : Il suffit de cliquer sur « code erreurs », pour aller voir ce que signifie
le numéro donné.

L’onglet « erreurs assembleur » parfois des indications comme « tris portb… ». ???? Ne pas
en tenir compte. Il semble que seuls les messages d’erreur du debuggeur basic comptent.

22
D-2 ) Structure des programmes :

a ) Partie commune à tous les programmes :


Les lignes suivantes seront toujours présentes dans vos programmes, et ne devront pas être
changées :

'
***************************************************************
**
' *********** Zone des déclarations pour la compilation ***********
'
***************************************************************
**
device 16f84
'
***************************************************************
**
' ************* Zone des déclarations des constantes **************
'
***************************************************************
**
define INDIR 0H
define OPTION_REG 01H
define PCL 2H
define STATUS 3h
define FSR 4h
define PORTA 5h
define PORTB 6h
define _EEDATA 8h
define EEADR 9h
define PCLATH 0aH
define Z 2
define CY 0

23
b ) Parties spécifiques à chaque programme :
Tous les programmes doivents comporter un certain nombre de parties, dont certaines ne
devront pas être touchées.

L’en tête :

Il se place dès les premières lignes. Il permet d’indiquer un certain nombre d’informations :
Ce que fait votre programme.
Vos nom et prénom
Date
Version du programme
Son état d’avancement : « a faire… »

C’est l’équivalent des cartouches des schémas en mécanique et en électricité.


Il suffit de placer le symbole « ‘ » en début de ligne, pour que le texte suivant apparaisse en
vert. C’est alors un commentaire. Il ne fait qu’informer le lecteur…

La zone des déclarations des variables et des symboles :

Les symboles permettent de remplacer un texte par un autre. C’est l’équivalent des macros
dans las autrs langages.

Si la broche « PB3 » est reliée par exemple à une LED appelée « D4 », par exemple, il est
plus simple et plus parlant de l’appeler « D4 », que « B.4 », dans votre rogramme. Pour cela,
il suffit d’écrire la ligne de programme suivante :
« symbol D4 B.3 »

Les variables sont déclarées pa leur nom, précédé du mot clé « dim ». Par exemple :
« dim e,i,f» définit trois variables appelées « e », « i » et « f ».

Sens des broches des port A et B :

Un « 0 » signifie que la broche sera utilisée comme sortie, du point de vus du pic. Un « 1 »
signifie que la broche sera considérée comme une entrée.
Exemple :

Init portb=00001111' Broches PA0 à PA3 et PB4 à PB7 en sortie


Init porta=00000000 ' broches PB0 à PB3 en entrée

Programme principal :

C’est ici que va se situer votre programme.


NE PAS OUBLIER QU’IL DOIT REVENIR SUR LE DEBUT : « goto start ».

Zone des procédures

Si vous souhaitez créer et utiliser des procédures, comme « tempo » pour la temporisation,
celles-ci doivent être placées ici.

24
D-3 ) Exemples de programmes pour le robot « climber » :

Les entrées et les sorties du robot sont affectées comme suit :


Numéro de broche Fonction Fonction Composant Type Rôle
principale secondaire Relié à
6 B.0 INT U5 E
7 B.1 U6 E Entrée optocoupleur
8 B.2 U7 E
9 B.3 Micro E Microphone
1 A.2 D1 S LED état capteur
18 A.1 D2 S LED état capteur
17 A.0 D3 S LED état capteur
13 B.7 D I/O LM S Moteur gauche et LED D6
12 B.6 CLKI RM S Moteur droit et Led D7
10 B.4 HP S Haut-parleur

a ) Faire clignoter les LED D2,D3 et D4 :

dim k,d ' définition de deux variables appelées k et d

Init porta=%00000000
Init portb=%00001111

start:
PORTA = %00000111 ‘ On allume les trois LEDS.
next:
gosub tempo ' attendre 1/4 de seconde
gosub tempo ' attendre 1/4 de seconde
gosub tempo ' attendre 1/4 de seconde
gosub tempo ' attendre 1/4 de seconde

d = PORTA ' Lecture de l’état du port


d = d xor %00000111
‘OU EXCLUSIF : CHANGE LE PORTA A CHAQUE FOIS
PORTA = d ‘ écriture du complément.

‘ Variante : décalage « SHL »

goto next ' boucle le programme à l'infini


goto start

25
b ) Faire clignoter le portB :
dim k,d ' définition de deux variables appelées k et d

' Broches PA0 à PA3 et PB4 à PB7 en sortie


' broches PB0 à PB3 en entrée ( capteurs IR et microphone ).
' PB4: Haut-parleur
' PB6 et PB7: Moteur droit et gauche

Init portb=%00001111
Init porta=%00000000

' *********************** Programme principal *********************


' *****************************************************************
start:

PORTB = %11010000
next:
d = PORTB ' Lecture de l’état du port
d = d xor 255
‘ OU EXCLUSIF POUR CHANGER L’ETAT DU PORTB A CHAQUE FOIS
PORTB = d ‘ ecriture du complément.

gosub tempo ' attendre 1/4 de seconde


gosub tempo ' attendre 1/4 de seconde
gosub tempo ' attendre 1/4 de seconde
gosub tempo ' attendre 1/4 de seconde

goto next ' boucle le programme à l'infini


goto start

26
c ) Test des capteurs :
Symbol capG "PORTB 0"
Symbol capM "PORTB 1"
Symbol capD "PORTB 2"
Symbol D4 "PORTA 2"
Symbol D3 "PORTA 0"
Symbol D2 "PORTA 1"

dim k,d,f ' définition de deux variables appelées k et d


init portb=00001111
init porta=00000000

start:
d=0
suite:
' Les capteurs sont affectés à PB0, PB1 et PB2.
' Il suffit de lire d'état de ces broches pour connaître l'état des capteurs
‘ 0 si détection.
ifnbit PORTB 0 goto next3 ' Allumer D4
ifnbit PORTB 1 goto next4 ' Allumer D2
ifnbit PORTB 2 goto next5 ' Allumer D3
gosub tempo

next6:
if d<10 then d = d+1 else d=0
f = 20 * d
sound(f, 100,B.4)
gosub tempo
gosub tempo
gosub tempo
goto suite
‘ FIN PROGRAMME PRINCIPAL

next3:
PORTA=0
set A.2 ' D4 si B.0
gosub tempo
goto next6

next4:
PORTA=0
set A.1 ' D2 si B.1
goto next6

next5:
PORTA = 0
set A.0 ' D3 si B.2
goto next6

27
d ) Jouer une mélodie
symbol micro B.3
symbol HP "B.4"
' Le haut-parleur est relié à la broche B.4

dim e,i,f ' définition de deux variables appelées k et d

Init portb=00001111
Init porta=00000000

start:

' Lecture des sons dans une table:

reset e
restore

for i = 1 to 20
read e
sound(e,100,HP)
next i

' Table des sons à jouer:


data 100,40,30,20,10,60,60,60,60,10,40,50,60,70,80,70,60,50,40,20

goto start

28
e ) Résumé des instructions principales :

device < definit le type de micro-processeur>


define < Attribut un nom à une valeur>
dim < reserve un octet mémoire >
Init < initialisation d'un port >

GOSUB < exécuter une routine >


return < fin de routine , revenir au prog. appelant>

For x to xx < faire boucle de x à xx >


next < boucle for, retour à la ligne for si x différent de xx>

goto xx < aller à la ligne xx>

SHL "shift left" décalage à gauche en fait il s'agit d'une rotation à gauche
le bit de poids fort passe dans la retenu (carry)

IF (condition) THEN
si la condition est juste les instructions suivant le THEN sont exécutées
IFZ (variable) GOTO
si la dernière opération est EGALE à 0 aller à la ligne indiquer par le GOTO
IFNZ (variable) GOTO
si la dernière opération est DIFFERENTE de 0 aller à la ligne indiquée par le GOTO

Symbol Remplace une chaine de caractères par une autre


button Attend qu'une transition haut bas puis bas haut soit arrivé
utiliser cette fonction avec une tempo juste derrière pour éviter les rebonds
ex Button BTN1 ' avec la déclaration cidessus
' Button A.1 ' ou alors avec les paramètres directement

data liste de données


ex: data 0x10, 0xff, 0xd3
ou bien
data "Exemple"
read lecture d'un octet Data, à chaque passage l'octet suivant est lu
ex: Read C ' variable C = octet lu
Au départ READ est à zéro. Si le chiffre lu est 4 , il faut faire 3 READ pour
être en phase puis un dernier READ se fait à l'affichage.

restore Remet le compteur Data à zéro, le prochain octet lu, sera le premier
reset Met une variable à 0 équivalent à (Variable=0)

#INCLUDE Permet d'inclure un morceau de programme déja fait


afin de simplifier le programme principle
ex: #include "tempo.bas"

SOUND Génére un son sur une Pin du µp


sound (fréquence, Nombre de cycle, Port.Pin)
sound (200,100,B.0)

29
IFNBIT Si le bit est a 0 alors allez à l'adresse
IFNBIT PORTA pin GOTO Adress
PORT est PORTA ou PORTB ou PORTC
ex: ifnbit PORTA 1 goto Adress
avec SYMBOL BTN1 "PORTA 1"
ex: ifnbit BTN1 goto Fonction

READEEPROM Lit les données de l'eeprom data dans la variable Data


ex: data = ReadEEPROM(1) ' lit l'eeprom adresse 1

WriteEEPROM écrit les données dans l'eeprom


writeEEPROM(Data, 1) ' ecrit dans l'eeprom à l'adresse 1 le contenu de Data

HIGH met un bit à 1 sur un octet ou port


ex: High A.4 ' met le bit 4 à 5volts du port A'

LOW met un bit à 0 sur un octet ou port


ex: Low A.4 ' met le bit 4 à la masse sur port A

Dim Buffer[16] ' créé un buffer de 16 octets


ex Dim Buffer[16]
equivalent à ;
dim buffer[0], Buffer[1],Buffer[2],Buffer[3]
dim buffer[4], Buffer[5],Buffer[6],Buffer[7]
dim buffer[8], Buffer[9],Buffer[10],Buffer[11]
dim buffer[12], Buffer[13],Buffer[14],Buffer[15]

VARPTR renvoie l'adresse de la variable et non pas son contenu


ex: VARPTR(Buffer[0]) ' La première adresse du buffer est renvoyé
'
FSR pointeur pour le mode indexé
INDIR Valeur à écrire ou lu par le pointeur ci-dessus

30
F ) Annexes :
1 ) Résumé des caractéristiques du PIC 16F84

31
2 ) Page 1 du datasheet du PIC 16F84

32
3 ) Dossier de fabrication du programmateur « jdm »

33

Vous aimerez peut-être aussi