Está en la página 1de 11

COURS PIC16F628A PREMIERE UTILISATION DU MICROCONTROLEUR

1 Aspect matriel
Le microcontrleur PIC 16F628A est un des modles (le plus courant et un des plus petits) de la famille des circuits microcontrleurs de Microchip. Prsent en botier DIL (Dual In Line) 18 broches, il possde de nombreuses et performantes caractristiques. Les principales sont : une programmation facile en langage Basic ou en assembleur son faible cot, la possibilit d'tre programm insitu un oscillateur interne de 4MHz ou externe. Pour un besoin de prcision ou de frquence diffrente de 4MHz et jusque maximum 20MHz, il faut ajouter un quartz ou un circuit RC 16 lignes d'Entres / Sorties : 8 lignes sur le portA (avec possibilit sur 4 entres de convertir sa valeur analogique en un mot numrique) 8 lignes sur le portB architecture RISC (Reduced Instructions Set Computer : jeu dinstructions rduit qui convient de petits programmes) une mmoire programme contenant 2048 instructions (codes sur 14 bits) une mmoire RAM de donnes de 224 octets une mmoire EEPROM de 128 octets des temporisateurs et un chien de garde une interface de transmission srie Dnomination des broches dans un botier DIL 18 broches

On remarquera que toutes les broches du circuit (sauf Vss, Vdd et RB5) ont plusieurs fonctions. Le choix de la fonction utilise se fait par programmation. On distingue en particulier : VDD et VSS reprsentent respectivement l'alimentation 5V et 0V du circuit. Les deux broches OSC1 et OSC2 servent recevoir si besoin le quartz destin l'oscillateur. MCLR (Master CLeaR) active 0 correspond l'entre dInitialisation (Reset) du circuit. RB0 RB7 reprsentent les 8 lignes du port B et RA0 RA7 les 8 lignes du port A, pouvant toutes tre dfinies par programmation en entres ou en sorties.
1/11

Juin07 Ce document cr par C SCHNEIDER est en partie inspir du cours PIC16F84 de Nol DEMISSY.

COURS PIC16F628A
2 Dveloppement d'une application
2.1 Principe Le dveloppement d'une application commence toujours par un cahier des charges qui dfini l'lectronique implanter autour du microcontrleur. Vient ensuite llaboration de lorganigramme (ou de lalgorithme) puis la rdaction du programme en Basic dont le fichier objet (fichier hxadcimal traduisant le programme labor en langage Basic ) sera implant dans le circuit. + 5V
C1 22 pF

OSC1
Q C2 4 MHz 22 pF

VDD RB7

Dans nos tudes simples le schma de base sera toujours celui ci-contre. Il faut placer les composants ralisant les Entres ou les Sorties,comme par exemple des interrupteurs en entres et des leds en sorties.

OSC2

RB6 RB5 RB4

5V

MCLR

16F84
RA4 RA3 RA2 RA1 RA0 VSS RB3 RB2 RB1 RB0

Quant l'criture d'un programme, elle passe invariablement par les tapes suivantes :

a) Rdiger un programme en langage volu l'aide dun diteur de texte. Dans notre exemple : le langage volu sera le Basic et lditeur de texte sera celui du logiciel MikroBasic, il sera cr un fichier extension .pbas b) Compiler le programme basic en un programme source l'aide du compilateur basic qui crera un fichier.asm, c) Assembler le programme qui crera le fichier objet .hex d) Transfrer ce fichier hexadcimal dans le microcontrleur l'aide d'un programmateur (carte lectronique relie au PC sur laquelle est plac le PIC programmer) et dun logiciel. Le logiciel ICPROG par exemple. e) Enfin placer le PIC programm sur le montage qui lui est ddi. Remarque : Les tapes b) et c) se font sur un seul clic.

Juin07 Ce document cr par C SCHNEIDER est en partie inspir du cours PIC16F84 de Nol DEMISSY.

2/11

COURS PIC16F628A
EXEMPLE DECRITURES DUN PROGRAMME DANS SES DIFFERENTES EXTENSIONS

a) Programme extension .pbas

b) Programme extension .asm


;// ASM code generated by mikroVirtualMachine for PIC - V. 3.0.0.0 ; Date/Time: 20/09/2005 10:09:28 ; Info: http://www.mikroelektronika.co.yu ;// ADDRESS OPCODE ASM ; ---------------------------------------------$0000 $281A GOTO PIC_Store_Complet_main $0004 $ math_mul_8x8_u: $0004 $1303 BCF STATUS,RP1 $0005 $1283 BCF STATUS,RP0 $0006 $3008 MOVLW 8 $0007 $00A4 MOVWF MATH_MAIN_GLOBAL_LOOPCOUNT $0008 $0822 MOVF MATH_MAIN_GLOBAL_X_1,W $0009 $0CA0 RRF MATH_MAIN_GLOBAL_Y_1,F $000A $1803 BTFSC STATUS,C
Juin07 Ce document cr par C SCHNEIDER est en partie inspir du cours PIC16F84 de Nol DEMISSY.

3/11

COURS PIC16F628A
$000B $2810 $000C $0BA4 $000D $2809 $000E $01A2 $000F $3400 $0010 $1003 $0011 $2815 ect............. ect............. $0073 $0074 $0075 $0076 $0077 $0078 $0079 $007A $007A $007A $0823 $00A9 $0827 $07A9 $0829 $0086 $2828 $ $ $287A MOVF Math_main_global_X_2, W MOVWF main_global_sortie MOVF main_global_d, W ADDWF main_global_sortie, F MOVF main_global_sortie, W MOVWF PORTB GOTO PIC_Store_Complet_L_0 PIC_Store_Complet_L_2: PIC_Store_Complet_L_9: GOTO PIC_Store_Complet_L_9 GOTO $+5 DECFSZ MATH_MAIN_GLOBAL_LOOPCOUNT,F GOTO $-4 CLRF MATH_MAIN_GLOBAL_X_1,F RETLW 0 BCF STATUS,C GOTO $+4

c) Programme extension .hex


:100000001A28FF3FFF3FFF3F031383120830A4006D :100010002208A00C03181028A40B0928A201003400 :1000200003101528A00C0318A207A20CA30CA40B04 :10003000122808000730031383129F0080308316B4 :1000400081008601FF30850083128601A501A6018B :100050000030051A0130F20000307202031D33280F :10006000FF30F3003428F301FF307302031D5928D9 :10007000003005180130F10025087104A700003098 :1000800085180130F300F3097308A70500308518BF :100090000130F10026087104A80000300518013075 :1000A000F300F3097308A8052708A5002808A6008F :1000B0006C28003005190130F1000030851901303D :1000C000F300F30971087305A7002708F100F1098F :1000D0007108A800A501A6012808A000A10102300E :1000E000A200A30104202308A9002708A9072908C2 :1000F000860028287A28FF3FFF3FFF3FFF3FFF3F52 :02400E00013F70 :00000001FF

On y retrouve le code machine de chaque instruction en assembleur (partie grise) mais crite octet par octet lenvers Exemple : Dans le fichier .asm la ligne correspond dans le fichier .hex Ou encore la ligne correspond dans le fichier .hex Dans le fichier .asm la ligne correspond dans le fichier .hex $0000 $ 281A 1A28 $0006 $3008 0830 $007A $ 287A 7A28 GOTO PIC_store_complet_main MOVLW 8 GOTO PIC_store_complet_L_9

Juin07 Ce document cr par C SCHNEIDER est en partie inspir du cours PIC16F84 de Nol DEMISSY.

4/11

COURS PIC16F628A
2.2 Un premier exemple Dans le montage suivant, l'appui sur un bouton poussoir provoque l'allumage dfinitif d'une led, initialement teinte.
+ 5V
C1 22 pF

OSC1
C2 22 pF Q 4 MHz

VDD RB7

OSC2 MCLR

RB6 RB5 RB4

+ 5V
RA4 RA3 RA2 RA1 RA0

16F84
RB3 RB2 RB1 RB0 VSS

program Exemple_1_cours symbol bp = PortA.2 symbol led = PortB.3 main: cmcon=07 trisa = $FF trisb = 0 portb = 0 while bp = 1 wend led = 1 end.

' Dclarations de variables '******** Dbut du programme principal ******** 'inhibition des entres analogiques du port A ' 1111 1111 = PortA.2 en entre ' 0000 0000 = PortB en sortie ' mettre 0 sur toutes les sorties ' des que bp = 0 (appui), on sort de la boucle la sortie RB3 passe 1, la led sallume 'indique au logiciel la fin du programme compiler et assembler

Explications supplmentaires : Pour une utilisation et une relecture plus simples du programme, on utilise couramment des alias dont il faut en tout premier lieu dclarer lexistence et le type: ici led et bp On commence toujours le programme principal par la configuration des ports A et B (dfinition pour chaque broche de chaque port de lutilisation en entre ou en sortie). Ce qui ncessite d'crire dans les registres TRIS A et TRIS B :(1) pour entre ou (0).pour sortie On utilise ici les entres du portA comme tant des valeurs numriques, il faut par consquent crire 07 dans le registre CMCON
Juin07 Ce document cr par C SCHNEIDER est en partie inspir du cours PIC16F84 de Nol DEMISSY.

5/11

COURS PIC16F628A
2.3 Un second exemple La led doit maintenant clignoter dfinitivement aprs appui sur le bouton poussoir.
program Exemple_2_cours_PIC symbol bp = PortA.2 symbol led = PortB.3 main: trisa = $FF trisb = 0 cmcon=07 portb = 0

' Dclarations '********* Main ******** ' Configuration : ' 1111 1111 = PortA.2 en entre ' 0000 0000 = PortB en sortie 'inhibition des entres analogiques du port A ' aucune sortie active ' des que bp = 0 (appui), on sort de la boucle ' on tombe dans une boucle sans fin ' qui fait clignoter la led

while bp = 1 wend while true led = 1 delay_ms(1000) led = 0 delay_ms(1000) wend end.

Juin07 Ce document cr par C SCHNEIDER est en partie inspir du cours PIC16F84 de Nol DEMISSY.

6/11

COURS PIC16F628A
3 Dveloppement avec le logiciel MikroBasic (ver 2.0)
3.1 Les principales instructions Les oprateurs arithmtiques lmentaires : + : addition - : soustraction * multiplication / : division div : excute la division et restitue la partie entire mod : excute la division et restitue le reste de la division Les oprateurs logiques lmentaires : & : (AND) ! : (OR) ^ : (XOR) not : inverseur >> x : o x indique le nombre de dcalages droite successifs dans un mot binaire << x : o x indique le nombre de dcalages gauche successifs dans un mot binaire. Les principales instructions :

Syntaxe
program end. dim as byte (integer,) const

Commentaires
Program prcise la premire ligne le nom du fichier en basic. La fin du programme est repre par end avec un point Permet de dclarer les variables utilises dans le programme en prcisant leur type : byte : octet (8 bits) integer : 16 bits word : nom alphanumrique Dclare une donne constante de type numrique ou caractre
end.

Exemple
program essai

dim i, j, k as byte dim counter as word dim tab as longint[100]

const MIN = 1000 const SWITCH = "n const vals as byte[12] = (31,12,17) symbol t1s = delay_ms(1000) symbol led = PortB.3 sub procedure calcul n = a * (b +3) end sub main :

symbol

Dclaration dalias Dclaration des sous programmes (procdures ou fonctions) pour une meilleure structure du programme. Scrivent avant le programme principal Etiquette de dbut de programme principal, toujours suivi de deux points Structure de contrle pour raliser un test laide dune expression boolenne. Excute un traitement si condition vraie (ou ventuellement un autre si faux)

sub end sub main :

if ... then ... (else) ... end if

if plus = 1 then i = i+1 else i=i*2 end if 7/11

Juin07 Ce document cr par C SCHNEIDER est en partie inspir du cours PIC16F84 de Nol DEMISSY.

COURS PIC16F628A
while ... wend

Pour rpter un traitement tant quune condition est vraie.

while i < 4 i = i+1 wend

Rem : sutilise aussi pour crer une boucle while true sans fin
Select case case 0 ......... case 3 ......... case else ......... end select for to next delay_us (n) delay_ms (m)

Suivant que la variable vaut 0 ou 3 ou autre faire

Permet de raliser une itration laide dune variable Fonctions prtes lemploi pour raliser une temporisation de n microsecondes ou m millisecondes Renvoi inconditionnel une ligne de programme dfinie par une tiquette. Ltiquette est indique par son nom suivi de deux points ( :) A viter autant que possible.

wend Select case j case 0 portB=%00001111 case 3 portB=%01111111 case else portB=0 end select for i = 0 to 4 portB = i next i delay_ms (500)

goto

goto main

Juin07 Ce document cr par C SCHNEIDER est en partie inspir du cours PIC16F84 de Nol DEMISSY.

8/11

COURS PIC16F628A
3.2 Utilisation du logiciel MikroBasic Le logiciel MikroBasic est un environnement de dveloppement intgr (IDE). Il est constitu entre autres dun diteur et dun compilateur et de toutes commandes ncessaires la compilation (cration du fichier assembleur) et lassemblage (cration du fichier objet en hexadcimal). Toute erreur de syntaxe est signale par le compilateur et stoppe la compilation. Une aide contextuelle est disponible (voir paragraphe ci aprs). Une fois les erreurs supprimes, le logiciel assemble et cre le fichier objet qui sera transfr ensuite dans le PIC. Barre de menus

Explorateur de code Caractristiques du projet

Fentre d'criture du fichier source en Basic Voici les tapes de dveloppement de l'application : Cration dun projet (fichier.pbp). Il faut absolument un projet pour un programme. Rdaction du programme source en Basic dans la fentre principale. Enregistrement du programme source (fichier.pbas) Compilation (puis assemblage) Correction des ventuelles erreurs signales par le compilateur et recompilation

Aprs excution de ces tapes, nous disposons du fichier .hex implanter dans la mmoire du microcontrleur PIC. Avant de programmer le circuit, il est conseill de sassurer du bon fonctionnement du programme par une simulation pas pas associe une visualisation des tats des diffrentes variables et registres internes Remarque : Ceci est une prsentation succincte de MikroBasic. Lors de la cration du programme, il est conseill de lire la notice Utilisation de MikroBasic .
Juin07 Ce document cr par C SCHNEIDER est en partie inspir du cours PIC16F84 de Nol DEMISSY.

9/11

COURS PIC16F628A
4 La programmation du composant
Elle ncessite l'emploi d'une carte de programmation relier un PC via un liaison srie RS232 (COM1 ou 2 du PC). Le PC est quip du logiciel de programmation ICPROG. La carte dispose d'un emplacement destin recevoir le composant programmer. 4.1 La carte de programmation : Voici la carte que nous utiliserons :

4.2

Programmation dun PIC :

Il est impratif de faire dans lordre les manipulations suivantes : a) Placer le circuit intgr PIC sur la carte de programmation b) Brancher la carte sur la liaison srie dun PC via le cble connecteurs DB9 c) Programmer avec le logiciel ICPROG :

Lancer icprog.exe

Ouvrir le fichier hexadcimal correspondant au programme implanter dans le composant. Celui-ci apparat dans la fentre. Il est possible de voir le programme en assembleur en cliquant sur A, ou en hexadcimal en cliquant sur H. Choisir le modle du composant programmer, 16F628A dans notre cas. Positionner les paramtres concernant la programmation (oscillateur, fusibles)

Juin07 Ce document cr par C SCHNEIDER est en partie inspir du cours PIC16F84 de Nol DEMISSY.

10/11

COURS PIC16F628A
Lancer la programmation par le menu Commande Tout Programmer ou par la touche de fonction F5 ou par licne.

d) Aprs la programmation, il faut dbrancher la carte programmateur du PC e) Enlever le circuit intgr PIC. f) Placer le PIC sur son montage et tester le fonctionnement attendu

Remarque : Ceci est une prsentation succincte de la programmation. Avant toute manipulation pour crire dans le composant, il est conseill de lire la notice Utilisation du programmateur .

Juin07 Ce document cr par C SCHNEIDER est en partie inspir du cours PIC16F84 de Nol DEMISSY.

11/11