You are on page 1of 29
LIF FES I" BTS-SE Electronique CHAPITRE 6 : LES MICROCONTROLEURS A- Microcontroleur 16F84 : I- Architecture matériel et logicietle du microcontroleur 16F84 : trod Un_microcontréleur est un microprocesseur RISC (Reduced Instruction Set Computer). Le nombre d'instructions est réduit (35 instructions pour le 16F84) Un microcontréleur dispose d’un microprocesseur, des mémoires et des ports dentrée/sortie pour communiquer avec l'environnement extérieur. Un microcontrdleur est un composant est programmable et effacable.tl est utilisé de facon autonome : plus besoin diordinateur une fois le composant programmé, Ceci permet la simplification de V'électronique numérique : gain de temps et de cout. Les principaux domaines d'utilisation sont la robotique, la domotique, lindustrie 2, Structure exteme : La figure suivante montre le brochage.Certaines braches ont une double fonction : — naa == Ch ef) = rat as <2 a0 aawrocki —=(}3-pe{) —oscweuxas WOR—-]4 ssf —~ oscweiour vets 8 a —vwo seont=~(e isle ner aime? 5 apsnee ne 0 nip —aas naa ao Ce sof —~ nes + VSS, VDD : broches d’alimentation * RAO... RA4: 5 broches d’E/5 nommé Port A © RBO.. RB7: 8 broches d’E/S nommé Port B + TOCKT: Entrée de comptage pour le temporisateur (timer) * INT: Entrée de demande d'interruption + MCLR:: broche d’entrée pour la remise & 0 du microcontrdleur. * OSC1, OSC2 : broches pour générer ou recevoir un signal d’horloge. Le PIC peut utiliser un Quartz ou d’un circuit RC pour générer une horlage interne ; comme il peut recevoir une horloge externe sur la broche OSC1. ¢, osc} x Fae ese ey i od Ly Rama r ESxTat <7 88 crock tom — rf osc: LI et sysiem pICternx Ht — Open <—} c PICIGEXX oscz veo Ren 2 ita me tor cm | Tr renee | OSSZCLKOUT Recomended vas: § 25 Ro = 1001 Ceont> 200 Page 81 LTP FES 1" BTS-SE Electronique ructure int La Figure ci-dessous présente ‘architecture générale du circuit. ~~ Powerap “Tise Oeciaior Startup Tamer | | ‘Sexe ‘STATUS 0g} _ i Flash [71 Brceree Counter jo rT -ROM Data Memory | & | i t sa r / | | oH }rigweaa | [tt ac io Fates Lea, oS | (st) | Picisra4a | — Baxe co TF | Instruction ee Liao oe “y = [ ma, vera oseueaxour OSCNELRIN | Il est constitué des éléments suivants : un systéme dinitialisation a la mise sous tension(power-up timer, Power-on Reset, I Oscillator Start-up Timer) | - un systéme de génération d’horloge a partir du quartz externe (Timing Generation).La fréquence maximum est 10 MHz ce qui permet d’exécuter une instruction en 400 ns ; puisque une instruction est exécuté durant 1 cycle machine, | sauf pour les sauts (2 cycles machines) et que 1 cycle machine = 4 cycles d'horloge. une unité arithmétique et logique (ALU) et un accumulateur W. une mémoire flash de programmede 1k mots de 14 bits.(Instructions codées sur un mot de 14 bits) - un compteur de programme (programcounter) et une mémoire pile (stack) - un bus spécifique pour le programme(program bus) - un registre contenant le codede instruction a exécuter - un bus spécifique pour les données (data bus) - une mémoire RAM contenant 68 octets de données et les registres SFR (Spécial Fonction Registers) - une mémoire EEPROM de 64 octets de données + 2ports d'entrées/sortiesRA (5 lignes d°E/s) et RB (8 lignes a’E/S) - un compteur temporisateur (timer TMRO) - un chien de garde (watchdagTimer). 4, Organisation de la mémoire Le PICL6F84 contient de la mémoire de programme et de la mémoire de données nt Page 82 LTP FES I BTS-SE Electronique a- Mémoire de programme : Elle contient le programme & exécuter, qui est téléchargé par liaison série, La figure suivante montre organisation de cette mémoire. Elle contient 1k mots de 14 bits dans le cas du PIC 16F84, méme si le compteur de programme (PC) de 13 bits, peut en adresser 8k. Ladresse0000h contient le vecteur du RESET, l'adresse OCO4h unique vecteur d'interruption du PIC. La pile contient 8 cases. Elle n'a pas d’adresse dans la plage de mémoire. Ce sont des zones réservées par le systéme pour mémoriser les adresses de retour lors d’un appel de sous:programme par ’instruction CALL, (Papa eapi Vesior | espera Interrupt Vector sor Memory ‘Space a FF sf b- Mémoire de donnée Elle se décompose en deux parties de RAM et une zone EEPROM. La premiére partie de la RAM contient les registres SFR (Special Function Registers) qui permettent de contrdler les opérations sur le circuit. La seconde partie de RAM contient des registres généraux, libres pour l'utilisateur. Les instructions contiennent une adresse sur 7 bits pour désigner octet avec lequel instruction doit travailler, D'aprés la figure suivante, l'accés au registre TRISA dadresse8sh, par exemple, est impossible avec une adresse sur 7 bits. C'est pourquoi le constructeur a défini deux banques. Le bit RPO du registre d'état (STATUS.5) permet de choisir entre les deux. Ainsi, une adresse sur 8 bits est composée de RPO en poids fort et des 7 bits provenant de I'instruction a exécuter. LIF FES Electronique | rte Adress le access GO | Indirect addr.("?| indirect addr") | gon [om aero sin an [eeu] an cn [sus | StaTus | ean can [__ FoR Fen | th | os [porta [risa] sn | oe [ponte [rise] en | oom em | cen EEGomi |] aan ooh Eeconz” 89h oan PCLATH | aan Bh LLINTCON Bh cca f Geeeeee| tock | separ | SvBscee? 4Fh I Crh sn [SS | a Pn Er ro £2 Unimplerented deta memory ecaton:teadas 0 Note Net pst rgter - Les registres généraux sont accessibles soit directement soit indirectement travers les registres FSR et INDF. Les registres spéciaux (SFR) permettent la gestion du circuit. Certains ont une fonction générale, d'autres ont une fonction spécifique attachée a un périphérique donné. La figure ci-dessous donne la fonction de chacun des bits de ces registres. Ils sont situés de ladresse OOh a l'adresse OBh dans la banqued et de I'adresse 80h a l'adresse 8BA dans la banque 1. Les registres 07h et 87h n'existent pas. Les rdles des registres spéciaux (SFR) sont + INDF (00h ou 80h) : Utilise le contenu de FSR pour laccés indirect @ ia mémoire. + TMRO (01h) : Registre lié au compteur du temporisateur 0. * PCL (02h ow 82h) : Contient les bits de poids faibles du compteur de programmes (PC). Le registre PCLATH (OAh ou 8Ah) contient les bits de poids forts. + STATUS (03h ou 83h) : Il contient l'état de unité arithmétique et logique ainsi que les bits de sélection des banques. + FSR (04h ou 84h) : Permet l'adressage indirect. + PORTA (05h) : Donne accés en lecture ou écriture au port A de 5 bits, Les sorties sont & drain ouvert. Le bit 4 peut étre utilisé en entrée de comptage du temporisateur TMRO. + PORTB (06h) : Donne accés en lecture ou écriture au port B. Les sorties sont @ drain ouvert. Le bit 0 peut étre utilisé en entrée d'interruption. Page 84 LIF FES 1 BTS.SE Electronique ‘+ EEDATA (08h) : Permet laces aux données dans la mémoire EEPROM. + EEADR (09h): Permet l'accés aux adresses de la mémoire EEPROM. + PCLATCH (0Ah ou 8Ah) : Donne accés en écriture aux bits de poids forts du compteur de programme. + INTCON (OBh ou 88h) : Masque d'interruptions. + OPTION_REG (81h) : Contient des bits de configuration pour divers périphériques. + TRISA (85h) : Indique la direction (entrée ou sortie) du port A ‘+ TRISB (86h) : Indique la direction (entrée ou sortie) du port B. + ECON] (88h) : Permet le contréle d'accés a la mémoire EEPROM. + EECON2 (89h): Permet le contréle d'accés & la mémoire EEPROM. J ] Value on ai acd | Name arz | see | ons | aea | aes | cuz | ons | avo | faunce, | Stent | L sot | oes) Bonk [oh [INDF ~~ Uses sana of Po arene data namo noo Bic eeeTO A [amr ame [oon ne [ome a oder 6 ie fhe Progra Coun PO] [C2000 ance | asoa enoa [oan [sume [ne | ari | aro] | Pe [2 | oe |e) oon tem | oone gan) oan FSR Tires ola nema acess cee [isa we | om ua fm [roma — | — | — | SMR] AR RAD PRAT | RA ome coos | on es [oe [roars | Rar [Abe | RS | REY [ RES [REE [RET] RSG caw wa | GO (Gm Tainpiemenied i ‘oan [EEDATA | EEPROM data rogiier i ae wae Gin [EEADR | EEPROM aocioss rogaat [a m7 am_[roum | — | — | — | WiteutertrunperstisofhePo™ 2000 ‘en [tcon | Ge [ERE | Woe] wre | RSE [Tor [WF [Ra 3000 9008 Bank 4 on [RO aes canis of FS akons dala memory ral ysl rege eo sin [option res) REPU] wreos| Tocs | Tose psa | ps2 [est [so | siaz sas [sar or a [Pou ow ode € bs of Program Gouri (PO) RE ean _[starus® [ire | rer [ reo | 7o | FO | 2 oc @ | 0003 trax | 000 quan jean [FSR ines cela memory adres pita ra ce ‘an_| TRIGA = [=] — [Port aaa arecion rgier =n 35h TRIGS |] PORTS cata crecon rain Ta [P| ae Tringiomented sntch cond aD sen ERC ae Wee REN |e [aon | EECON2 | BEPRON conrol register? (nota pela eer [on froth = |, — | [vtetaterteruoper Suis rte ram? [o_[wTeON [ie | ESE [Tae ne [Re | TOR [wi | RF Legend: = unkown, w= unchanged, ~~ unimplemented read as 0 = value Gevends on condition Note 1: The unper byte of the program counter is not directly accessible, PCLATH is a slave ragistar for PC<12:8>, The contents of PCLATH can ba transferred tothe upper oye ofthe program counter, but the contents of PC<12.8> ie never transfered to POLATH, ‘Tne TO and PD status bits in the STATUS register are not affected by a CTR recet ‘Other (non power-up) resets include: external reset through NLR and the Watchdog Timer Reset. (On any device reset, these pins are configured as inputs, This s the value tnat wil be in the port ouiput latch, c Registre d’état (STATUS) : Le registre d’état STATUS contient l'état des opérations de l'unité arithmétique et logique, ainsi que état de la remise a 0. I! contient aussi des bits pour le choix de la banque de la mémoire de donnée. Les bits IRP et RP1 (STATUS<7:6>) ne sont pas utilisés par le PICL6F84, et doivent bere a0. ene eee ene Page 85 LIF FES 1 BTS-SE Electronique STATUS REGISTER (ADDRESS 03h, 83h) wo __Rwo pw Ret Ree Rewx RP] Re1 | Reo] TO [a [2 oc c] [R= Readatie wt a7 Te |W = Wriable st | 'U = Unimplemented bit, read 20'0 == Vatu st POR reset bit 7: IRP: Register Bank Selec: bit (sed for indirect adsvessing) The IRF bits not used by the PIGIEFBEA, IRP should be maintained clear. bit 65: RP4:RPO: Registar Bank Select bits (used for direct addressing) 00 = Bank 0 (00h - 7Fh) 01 = Bank 1 (80h - FF} | Each bank s 126 bytes. Only bit RPO is used by the PICTEF84A, RP should be maintained clear bit 4: TO:Timeout bt 1 = Afier power-up, curt instruction, or SLAP struction = AWOT time-out occurred PD: Power-sown bit 115 After power-up or by the cuswor instruction 0 By execution ofthe Sunzr instruction 2: Zero bit 1 = The result of an arithmetic or logic operation is zero ‘The result of an arithmetic oF logic operation i¢ pot zero bit 1: DC: Digit canryiBorTOW bit for acoA and ADOLA Instructions) (For BOTOW the polanty is reversed) 15 A catry-out from the 4th iow order bit ofthe result occurred = No carry.out from the ath ow oraer bit of the result bit 0: Camy/SOrTGW bit (for abuaE and ADDL instructions) += Acamyout from the most significant bit ofthe result occurred = No carry-out from the most significant bit of the result occurred \Note:For Borrow the polanty is reversed. A subtraction is executed by adding the two's complement of the second operand. For rotate (RA ALE) instructions, this itis loaded with elthar the high or low order bit of the source register. bit it d- Mémoire EEPROM Le PICL6F84 posséde une zone EEPROM de 64 octets accessibles en lecture et en écriture par le programme. On peut y sauvegarder des valeurs, qui seront conservées méme si l'alimentation est éteinte, et les récupérer lors de la mise sous tension. Leur accés est spécifique et requiert l'utilisation de registres dédiés. La lecture et I'écriture ne peut Siexécuter que selon des séquences particuliéres qui seront décrite ultérieurement. 5, jeu d'instructions Les PIC16F84 est concu selon une architecture RISC. Programmer avec un nombre dinstructions réduit permet de limiter la taille de leur codage et donc de la place mémoire et du temps d'exécution. a- Format des instructions : Toutes les instructions sont codées sur 14 bits, Elles sont regroupées en trois grands types : Instructions pour les opérations orientées octets - Instructions pour les opérations orientées bits Instructions pour les opérations littérales et de contréle Le registre de travail W joue un réle particulier dans un grand nombre dinstructions. Le format général des instructions est comme suit : LTF FES I" BTS-SE Electronique ‘Byte-oriented fa regisior operations a a6 | “orcooe Te | ‘or aestnation ve ror destination i fle reser adres | Bitoriented te register operations. ; 3 woo 78 oecone beiray re = debit ot address 1 = Tet fe rogleter aderoes Literal and control operations Generat 13 ar ° Ca CT) ‘i mmeacite value CALL and coro istucons only tt e ‘onCODE era k= Tbh immediate vata b- Les instructions de transfert Trois instructions de transfert sont disponibles sur le PIC 16F84. + Instruction: MOVLW__k Cette instruction permet de charger une constante k de 8 bits dansle registre W. Ici, la valeur ci charger est donnée sur 8 bits. La syntaxe de cette instruction est donnée sur la figure ci-dessous mov Move Literal to W Syntax Tabet] WOvIW Operands: 0sk 5256 Operation 0M) Status Affected: None i Encoding: [ex [oe [oe] Description: ‘The aghtbititera Ws oad io W rogister. The dont care wil assemble Words: 1 | Cycles: 1 Exemple d'utilisation; MOVLW Ox5A Quelle est la valeur binaire & charger dans W? | Déterminer le code machine correspondant a cette instruction : + Instruction : MOVWF | Cette instruction permet de transférer le contenu du registre W dans un registre f On peut noter la valeur du bit 7 est a 1 et les bits 0. 6 donnant adresse du registre f concerné, La syntaxe de cette instruction est donnée sur la figure ci-dessous. LIF FES I BTS-SE Electronique MOvWE Move W tof Syntax [label] MOVWF 1 Operands: osts127 Operation: w=) Status Affected: None Encoding: 9 | ooo | ir Description: ‘Move data trom W register 16 register ?. Words: 1 Cycles: 1 Exemple d'utilisation: MOVWF PORTB Quelle I’adresse du PORTS en hexadécimal et en binaire sur 7bit? Déterminer le code machine correspondant a cette instruction ‘+ Instruction : MOVE fd Cette instruction permet de transférer une donnée contenue dans un registre f vers le registre W ow le registre f On peut noter que le bit 7 (noté dJdu code machine de Vinstruction permet de choisir la destination : W ou f La syntaxe de cette instruction est donnée sur la figure ci-dessous. Move Move t ‘Syntax: [label] MOVF fd Operands: Osfs 127 de [0.1] Operation: (9) (destination) Staus Affected: Z Encoding: vo [oe [oer [eae Description: Tho cellos oealr Tis povedToa ) Operation: Os fet>) Status Alected: None Status fected: Neve Encoding: ~ or [abe [BEE | FEE] Encoding (Lor [oss [ere [ee Docctpton: Te hregr Fins Deccipion: BE wnnomer Ti cowed. Words 1 Words: 1 Cycles: 1 Cycles: 1 + Instruction : BSE f,b Cette instruction permet de mettre un bit b (avec 0 | | Page 89 LTF FES: I" BTS-SE Electronique Tien Desa yale | Tea opeae Si Ws ‘Operands: [MSb Leaner SYTE ORIENTED FILE AEGIBTER OPERATIONS HODRE TT [RaW and? 7 [soon 2 ANOWF fd | AND W with F 4 foo o1on WZ cir f° [Gort 4 48 Ste i caw | | ctrw + |oo ooo: Comrie | compementt 1 [to Soo: 12 Deer a | Goctmentt 1 fos Gent 2 DECrSz a | Decomentt Sho 1a) [oo tas Wer fa eoweret Yo 2 INersz fa | Ice Sks fo | say [oo 1% Towra | ene RW went 2 |e "2 wove fa | ene! + {eo 2 howe f° tow Wor 1 [8 Nor + | Noopwaon + [a | Mra | Ratan rogh cary 1 je 12 | RRE fd | Rotate Right f through Camry 1 | oo 12} SUBWE a Sinime Wtemnt + fee 12 | SWAPr fa |Smpabeleont + [te a SOMME fi | Broce SA Wot + [ae 2 ROWINTED FILE REGISTER OPERATIONS Ber 46 at GearT 7) aaa az Ber tb | suse > fot ene 2 |erese fb | Brie, stip esr ta | st fone | % Strss fb bites Supls ta | ime 3 CHFERAL AND CONTROL OPERATIONS ‘ADDLW | Addiiteral and W 7 7 Tilz kkk kekK] COCZ | AoW [AND colmnw { ttot nett tay] Oe fea | Carsubrousne 2 enka eet | CLRWOT - Gear Watchdog Timer ‘i ooad 4220 o100| TOPO [coro | Sowsusress [21% me om | neueve OF fant wt ‘ noo 2 | MOVLW k | Move litera! to W ett O0xx f rome | Rourntom rest i twos Renw | Raumwinitord ni 2 oie RETURN || Roun tom Surouine 2 00 ec00 1000 Sizer | Com cancoymade i sees esi oom] ToD | | Susu ix | Siosaul hom ee i Shox ate wht] @DOz XORLW A | Excise Of tert wth im eee 2 Wiote When an U0 resisters modited as a hnnlion of teif(e.g, MOVE PORT, 1), the value used wil be that value present fon the pins themselves. For example, the daa Isto is" fora pin configured as input and is driven low by an external evice, the data wit be written back wth a 2: thi inetructon is executed on the TMRO register (and, whore applicable, <= 1), the prescaler wil be cleared if assigned to the Timerd Modula. 3: If Program Counter (PC) is madifiec ora conctonal tet Is true, the instruction requires two cycles, The sacond cycle is ‘executed a8 a NOP. Field Description Fo |Register fie aduress [0x00 to OOF) [w___[Working register (accumulator) [= [eit address wan an &5i He ragisiar [biter fet, constant data or fader 1 I [Doni care ‘cation f= Oar T) [The assembler wil generate code with x=0. Ris the recommended form af use for compatity with all Microchip satware tis, |G __ [Destination selec: d= 0: Store resut in W, [a= 1-store suit in fle ragistar t [Default sd = [Program Counter Timeout bi Fowerdown bi e- Exercice Soit le programme suivant: BSF STATUS,REO + ee as ~ CLRE TRISB. ; cacao LIF FES I" BTS-SE Electronique RCF STATUS, RPO MOVFPORTA , w MOVE FORTS ? gotoLoop : + Déterminer le réle de chaque instruction + Déterminer le code machine de chaque instruction. + Déterminer le réle du programme. 6. Modes d'adre: I existe 3 types d'accés a une donnée (ou modes d'adressage) pour le PICL6F84 - Adressage immédiat : La donnée est contenue dans I'instruction. - Adressage direct : La donnée est contenue dans un registre (ou case mémoire) - Adressage indirect : L'adresse de la donnée est contenue dans un pointeur, a- Adressage immédiat La donnée est contenue dans |'instruction. Exemple : moviw OxC4; Transfert la valeur OxC4dans W b- Adressage direct La donnée est contenue dans un registre. Ce dernier peut étre par un nom (par exemple W)au une adresse d’une mémoire. Exemple : movf 0x2B,w ; Transfert dans W la valeur contenue a l'adresse Ox2B. Uadresse 0x28 peut correspondre & 2 registres en fonction de la banque choisie, Le bit RPO permet ce choix, le bit RP1 étant réservé pour les futurs systémes a 4 banques. Adressage indirect Ladresse de la donnée est contenue dans un pointeur, Dans les PIC, un seul pointeur est disponible pour l'adressage indirect : FSR (File Select Register). On peut écrire dans FSR l'adresse du registre a atteindre. FSR est de 8bits, donc on peut atteindre les deux banques du PIC 16F84, Liaccés au registre d'adresse contenue dans FSR se fait en utilisant le registre INDF. Exemple : movin Ox1A7 Charge 1Ah dans novwf FSR; Charge Ml, contenant 1Ah, dans FSR ROvEINDE, w; Charge la valeur contenue 2 l'adresse 1Ah dans # Exercice : Soit le programme suivant brfssPSR,4 ; gotonex?’ ; - + Déterminer le réle de chaque instruction - Déterminer le code machine de chaque instruction. Déterminer le role du programme. Page 91 LIF FES I BTS-SE Blectronique Il- Programmation en assembleur du microcontrdleur 16F84 1. Outils pour le développement : Pour développer une application fonctionnant a l'aide d'un microcontroleur, fl faut disposer de : ~ un compilateur : Logiciel traduisant un programme écrit dans un langage donné (G, assembleur) en langage machine. L’environnement de développement intégré MPLAB fournit un compilateur MPASM pour traduire un programme assembleur d’extension .asm en un code machine sous forme d’un fichier d’extension .hex MPASIA assembler code.asm code.hex | programmer, 2: ° 8 3. 3 8 3 3 o: 2000000. - Le programmateur: Transfert le programme compilé (langage machine) dans la mémoire du microcontréleur. Ce programmateur est constitué d'un circuit branché sur le port série ou USB du PC, sur lequel on implante le PIC, et dun logiciel permettant d’assurer le transfert. I existe différents logiciels comme ICPROG, PONYPROG. Les broches du PIC16F84 utilisé pour le chargement du programme machine sont montrées sur le schéma de liaison suivant : ToNarnst exwmnal Qpetions Sonnet Pore Sones a 0 of tis a cux}——» 60 pet Te diese eee ceessecec 1 teNormat Bites La broche R86 recoit une horloge de synchronisation, et RB7 permet le transfert du programme bit par bit. La broche veP sera égale a 12V pendant la programmation, et 5V en fonctionnement normale, leur (MPASM) du PICL6E84.: 2. Structure d’un programme assem Un programme écrit en assembleur MPASM doit respecter une certaine syntaxe et un certain nombre de régles afin qu'il soit facile lire et a débuguer * Tout ce qui commence a Ia premiere colonne est considéré comme une étiquette (label) permettant de faire des appels et aussi des assignations de constantes et de variables. + tout ce qui suit un point-virgule est considéré comme un commentaire non interprété par le compilateur + Un programme apparait donc comme un texte écrit sur 3 colonnes - la colonne de gauche contient les étiquettes (labels) sermons ate te Page 92 LIF FES 1" BTS-SE Electronique - la 2” colonne contient les instructions, ou les directives - la 3**colonne contient des commentaires + Lorganisation d'un programme assembleur MPASMpeut étre comme suit : Inclusion d'un fichier d’entéte contenant toutes les constantes du PIC - _ Définition des constantes et des variables, exemple - Sie programme utilise des interruptions, mettre a l'adresse 0x00 (adresse du RESET) une instruction de branchement au début du programme principal. Ex : org 0x000 goto debut ~ Ecrire la routine d'interruption a l'adresse Ox004. Exemple : ORG Ox004 5 écrire la routine d'interruption ici RETELE ~ Ecrire le programme principal et les sous programmes (s'il y en a). Chaque sous- programme commence par une étiquette qui représente son nom, et se termine par linstruction RETURN. ~ terminer avec la directive END Exemple : } programme Le i 9p Connecte un interrupteur sur RRO (entrée) et une LED sur RBL (sortie) 7 Si on place Ltinterrupteur a 1, la LED doit s'alluner, i sion le met & zéro, elle doit s'éteindre huBm, r= dec prléssdn, £: FINCLUDE “p16£84A. inc CONFIG _CP OFF 4 XT OSC & PARTE Reset ORG 0x000 gote debut oRe —0x004 ; Scrire 1a routine d'interruption ici RETFIE debutbst STATUS, REO + bank 1 mevlw B'90000001" novwE TRISS } pour configurer le port B bef STATUS, REO } bank @ st btfss PORTS, 0 goto off bsf PORTE, 1 goto tst eff bef PORTS, 1 goto tet END 3. Les directives de MPASM Les directives de l'assembleur sont des instructions qu'on ajoute dans le programme et qui seront interprétées par l'assembleur MPASM. Ce ne sont pas des instructions destinées au PIC. Les directives les plus utilisées sont : rr Page 93, LTF FES I BTS-SE Electronique + UST: permet de définir un certain nombre de parametres comme le processeur utilisé @), la base par défaut pour les nombres (r), le format du fichier hex & produire (1) ainsi que d'autres paramétres. Exemple LIST pel6FS4n, radec + #INCLUDE: permet diinsérer un fichier source. Par exemple le fichier p16f84Ainc contient la définition d'un certain nombre de constante comme les noms des registres ainsi que les noms de certain bits; HINCLODE pl6£84A. inc * —CONFIG: permet de définir les fusibles de configuration qui seront copié dans EEPROM de configuration lors de implantation du programme dans le PIC (protection de code, type d'oscillateur, chien de garde et temporisation du départ) G _CR_OFF § XT_OSC § WDT_OFF & _PARTE_OFF + EQU: permet de définir une constante : N EQUO: Chaque fois que le compilateur rencontrera N, il la remplacera par 20. + #DEFINE : définit un texte de substitution #DEFINE somme (x,y) (x+y) Chaque fois que le compilateur rencontrera le texte somme(xy), il le remplacera par (xy) * ORG: définit la position dans la mémoire programme & partir de laquelle seront inscrites les instructions suivantes. + CBLOCK/ENDC: définit un bloc de variables CBLOCK 0x08 7 varl-0x0B, var2-0x0C, x= vat var NDC Ox0D, yaOxOF 2 octets + END: indique la fin du programme 4, Le Format d Lassembleur reconnait les nombres en décimal, hexadécimal, binaire ou octal. * Notation en Hexadécimal: AMEt ou O4F ou 4h il faut un zéro devant le chiffre hexadécimal s'il débute par une lettre). + Notation en Décimal: ara + Notation en Binaire: b'01010011" + Notation en Octal nv" 5. Organigramme (appelé aussi Algorigramme) C'est une représentation graphique d’un programme, et qui permet de donner une représentation de l'ordre d’exécution des instructions d’un programme Iutilise un certain nombre de symboles définis comme suit : age 94 { LTF FES I BTS-SE Electronique ‘Symbole général : Z Renvoi Opération ou groupe Symbole utilisé 2 fois pour opération sur des données assurer la continuité lorsqu’une eles ‘i rctions) partie de ligne de liaison n'est pas représentée Début ou Fin : Fonetion ou sous- 7 programme = aun programme, d’un sous Portion de programme programme ou d'une considérée comme une simple interruption opération Entrée-sortie : Opération d’entrée ou de sortie des données Branchement : ‘Test d'unecondition et branchement vers une voie pari plusieurs ‘NON Les différents symboles sont reliés entre eux par des lignes de liaison, Le sens général des lignes est de haut en bas et de gauche @ droite. Lorsque le sens ainsi défini nest pas respects, des fléches indiquent le sens utilisé. Sens particulier (de bas en haut) Sensgenéral “NON (de haut en bas) 6, Programmation des ports d’E/S du PICI6F84: Ce microcontréleur dispose de deux ports bidirectionnels d’E/S : PORTA de Sbits et PORTE de 8 bits. Certaines pattes de ces ports sont multiplexées avec d'autres fonctions de périphériques internes (Le temporisateur TIMER et interruption INT) Quand le périphérique est activé, a borne ne peut plus étre utilisée en E/S @ Le port d'E/S PORTA Le port A désigné par PORTA est un port de 5 bits (RAO d RA4). Chaque broche d'entrée est compatible TTL et chaque sortie est compatible CMOS. La configuration de direction pour chaque bit du port est déterminée avec le registre TRISA. * Bit i de TRISA = 0 permet de configuré le bit ide PORTA en sortie + Bit ide TRISA = 1permet de configuré le bit ide PORTA en entrée Page 95, LTF FES. 1° BTS-SE Electronique Aprés un Reset, les broches du PORTA sont configurés en entrée. La figure suivante donne une présentation des registres PORTA et TRISA : J T valueon | iress | Name 7 Bits: i: et | wer-on | Yak on all == [== [=| = [|= |=] = |S fee — peerage Legend: = unknown, » unimplemented read as 0. Shaded cols ace unimplamented, read as La figure suivante donne le schéma bloc des broches du PORTA : BLOCK DIAGRAM OF PINS RA3:RAO BLOCK DIAGRAM OF PIN RA4 ae =rfo a ost we || — wR. Fl barns Se Hr | Gore eo we BS hock a Ieee Flac } =N a eee ee Recent f > TMRO clock ir - 5 Noe: ¥O pins have protection dios to Vo and Ves. Note: 10 pin has protaction diodse to Ves ony. La broche RA4 est multiplexée avec l'entrée horloge du timer TMRO, elle peut donc étre utilisée soit comme E/S normale du port A, soit comme entrée horloge pour le Timer TMRO. La broche RA4 est une E/S @ drain ouvert, si on veut l'utiliser comme sortie (pour allumer une LED par exemple), il faut mettre une résistance externe vers VOD. Le schéma ci-dessous donne le principe d'une sortie drain ouvert (ow collecteur ouvert) : + SiRA4 est positionnée a 0, le transistor est saturé, la sortie est reliée & la masse, + SiRAM est placée G 1, le transistor est bloqué, la sortie est déconnectée dou la nécessite de la résistance externe pour amener le courant de V'alimentation vers la LED, PICLOF84 R Nh PAtein Le vss Page 96 LTF FES 1° BTS-SE Flectronique b- Le port d'E/S PORTB : Le port B désigné par PORTB est de 8 bits (RBO d RB7). Toutes les broches d’E/S sont compatibles TTL. La configuration de direction se fait a aide du registre TRISB, Apres un Reset, les broches du PORTS sont configurées en entrée. La figure suivante donne une présentation des registres PORTB, TRISB et OPTION_REG ; y ‘Value on se | None wey | ans | oes | ous | ons | one | eer | seo | ponte ah [pos | aap ae [Re sen _| ese [Truss] Trees | Tasal_| —trisba_| Tess | Tased |Teset) reseo ssn sn _lornon ees] mero [wrens] tacs [rose “| pea | ese | pst] ps0 ys Legend: x= unknown, « = urenongod. Shaded calle are noted by PORTE. La figure suivante donne le schéma bloc des broches du PORTB : BLOCK DIAGRAM OF PINS RB7:RB4 BLOCK DIAGRAM OF PINSRBS:RBO I repo, weerais___ eam sagt nore Note 1 TRS = anaties wos cul IFRGPU= tee OPTION. RES rege, 2: Ops rave dee preteen to Yoo and Vs. Nelo. 1: TRIS =" ensties waak guhup | 1WREPU = "0 nthe OOTION REG register 2: UO pnstave dodo roweton a Ven and es, | + Chaque broche d'entrée du PORTB a une résistance de tirage & VDD réalisé par transistor MOS. On peut I‘activer pour toutes les broches en mettant le bit REPU (bit 7 du registre OPTION_REG) a 0.Ce tirage est automatiquement désactivé pour les broches qui sont configurées en sorties. I! est désactivé aussi pour toutes les broches aprés un RESET. + La ligne RBO peut étre utilisé comme entrée peut déclencher l'interruption externe INT. Selon Ia valeur du bit INTEDG (bit 6 du registre OPTION.REG), un front montant (si INTEDG=1) ou descendant (si INTEDG=0)sur l’entrée INT mettra le drapeau INTF (bit 1 du registre INTCON) & 1. Ce front déclenchera l'interruption INT (interrupt) si celle-ci est activé par les bitsINTE=1 (InterruptEnable) et GIE=1 (Global InterruptEnable) du registre INTCON, + Configurée en entrée, une quelconque des lignes RB4 @ RB7 peut étre utilisé pour déclencher interruption RBI. Dans ce cas, chaque changement d'état d’une des lignes RB4 & RB7 mettra le drapeau RBIF (bit O du registre INTCON) @ 1, et déclenchera nae Page 97 LTE FES I BTS.SE Blectronique Vinterruption RBI (RB Interrupt) si celle-ci est activé par les bits RBIE (RB Interrupt Enable) et GIE=1 (Global Interrupt Enable) du registre INTCON. La figure suivante donne la description du registre INTCON de configuration des interruptions INTCON REGISTER (ADDRESS 0Bh, 88h) Row RAV RMVO RM RMD ROR (Cae eee [toe [inte [Roe [tor [inte [Rar] (R= Readetie oe | bi amo |W =Wirtabte bit | 1U. =Unimplemented bt. = Value at POR reset bit?: GIE: Global interrupt Enable bit 1 = Disables all interrupts Note: For the oporation ofthe intorrupt structure, please refer to Section +. | i | Pues | | bi 8: EEIE: EE Write Compiete Interrupt Enable bit Enables the EE write complete interrupt 0 = Disables the EE write complete interrupt bit 5: TOE: TMRO Overttow interrupt Enable bit 1 = Enables the TMRO interupt | = Disables the TMRO interrupt bit 4: INTE: RBOIINT Interrupt Enable bit 1 = Enables the RBOVINT intarrupt 0= Disables the RSOMNT interupt bit 3: RBIE: RB Port Change Interrupt Enable bit 41 = Enables the RB port change interrupt = Disables the RB port change interruct bit 2: TOIF:TMRO Overflow interrupt Flag bit 1 = TMRO has overflowed (must be cleared in software) 0 = TMRO did not overfiow bt 1: INTE: RBOJINT Interrupt Flag bit {= The RBOVINT interrupt occurred 0 = The RBOMNT interrupt did not occur bit 0: RBUF: RB Port Change Interrupt Flag bit 11 = When at least one of the RB7:RBS pins changed state (must be cleared in software) Enables all un-masked interrupts: 0 = None of the RB7:RB4 pins have changed stale 7. Programmation du temporisateur/compteur TMRO : Le PIC16F84 est doté d'un compteur 8 bits appelé TMRO, La figure suivante donne le schéma bloc TIMER BLOCK DIAGRAM <-—) Ss a RAAITOCK! rogeamenatie |_| lesout pa Breseatar || L__I i Gaycie daiay) 3 ' t Setioverupt P52, PS1, PSO PSA flog OR TOF Toes on overfow Note 1: TOCS, TOSE, PSA, PS2PS0 (OPTION _REG<5:0>), 2: The presoaler Is shared with Watchdog Timer (refer to Figure 4-2 for detailed block diagram). Page o8 LIF FES I BTS-SE Electronique La figure suivante donne une présentation du compteur TMRO et des registres INTCON et OPTION.REG qui sont utilisé pour la configuration du compteur TMRO Value on Uasinee me | tr | ne ans ans | aes on2 ons | ano | “aon” oat cin art | ee fees (eee on sor cers a Se see [om ino it oti ender [neon | @ | vm [ Tue [wre] Ra TOR | WE [ ROR [asad oor ose eae [em lormon RES | RAPG| wreo6 [ees Tose | psa | a2 [pst | Pan Le TIMERO du PICI6F84 a les caractéristiques suivantes : + Le compteur TMRO est incrémenté en permanence soit par I'horloge interne Fosc/4 (mode timer) si le bit TOCS (bit 5 du registre OPTION.REG) est a O;soit par une horloge externe appliquée d la broche RA4 du port A (mode compteur) si TOCS=1. + Le contenu du timerTMRO est accessible par le registre TMRO qui porte le méme nom que le compteur. I peut étre (u ou écrit a n'importe quel moment. Aprés une écriture, incrémentation est inhibée (arrété) pendant deux cycles instruction. + Au débordement de TMRO (passage de FF a 00), le drapeau TOIF (bit 2 du registre INTCON) est placé a 1. Ceci peut déclencher interruption TOI (imerOverflowinterrupt) si celle-ci est active par les bits TOIE«1 CimerOverflowinterrupténable) et GIE=1 (Giobal InterruptEnable) du registre INTCON. + Dans le cas de lhorloge externe, selon le bit TOSE (bit 4 du registre OPTION.REG) on peut choisir le front montant (TOSE=0) ou le front descendant (TOSE=1) sur lequel le compteur TMRO s'incrémente. + Quelques soit l'horloge choisie, on peut la passer dans un diviseur de fréquence programmable (appelé prescaler) dont le rapport est fixés par les bits PSO, PS1 et P52 du registre OPTION.REG. + Llaffectation ou non du pré-diviseur se fait & l'aide du bit PSA du registre OPTION.REG - PSA = 0 alors le pré-diviseur est utilisé pour le compteur TMRO. PSA = 1 alors le pré-diviseur n’est pas utilisé par le compteur TMRO; mais il est affecté au chien de garde (Watchdogtimer) un fon un | La figure suivante donne le schéma bloc complet du compteur TMRO et du pré- diviseur : BLOCK DIAGRAM OF THE TIMEROWDT PRESCALER, | cunOUT rol) Te = | bn 3 Line PA Stag bo |—-[ eaireaw| | fs] : | ata had a mm | SS WOT Enable be [aux LJ Pea, + Pia Note: TECS, TOSE, PSA, PSZPSD me (OPTION REGSO>L Page 99 LTR FES I" BTS.SE Electronique La figure suivante donne la description du registre OPTION.REG OPTION_REG REGISTER (ADDRESS 81h) Re RRMA RAR RT RINT REPU _[iwreoS] roos | rose [esa [ps2] #si | PS0_] [R= Reacabe bt ir TDM = Wetabe bt Urumolenertad bit, read 93°0 len vate ot POR reset bt? RBPU: PORTS Put-up Enabye bit i = PORTS pull-ups aro disabled 0 = PORTS pulhups are enabied (oy indviual por latch values) bit 6 INTEDG: loterupt Edee Select bit interrupt on rising edge of RBOIINT pie Interrupt on ‘aling edge of RBONNT pin DiS: TOCS:TMRO Clack Sourea Select bit ransiion on RAAITOCK gin | internal instruction cycle clock (CLKOUT) bit 4: TOSE-TMRO Source Edge Select bit increment on high-tovow transition on RAA/TOCK pin = increment on low-to-high transton on ReN4/TOCK pia bit 3: PSA: Prescaler Assignment bit bit 2-0: PS2:PS0: Prascaler Rate Select bits BitVlue TMRORaIe WOT Rote grammation de la mémoire EEPROM de donnée @ Introduction Le PICI6F84 est doté d'une mémoire de type EEPROM de 64 octets pour stocker des données méme en l'absence de 'alimentation, Cette mémoire EEPROM peut étre lue et écrite pendant Vexécution du programme d'une maniére indirecte @ travers les registres spéciaux : EECON1, EECON2 (registre n'est pas implémenté physiquement), EEDATA, EEADR. La figure suivante donne une présentation de ces registres : T T wets on soess [nome | sy | ats es | ers | sk2 a2 | sue | on | anenan | nent on FeoAA | EEPROM ants requir veers xeer | suse eave on FEADR | EEPROM scores regior ee ee en secon! [SPS] [ee [wnena [ween | we [80 | 0 wooo | -—-a gooo eh EEGON? | EEPROM contlrogetor? = Legend: «= unknown, « = unchanged sod by deta EEPROM, Uunimolemented read as (0. ¢ = value depends upon condition. Shaded cats are nat Le registre EEDATA mémorise la donnée lue ou a donnée a écrire. Le registre EEADR mémorise l'adresse (de 0 a 3Fh) de la case mémoire a utiliser. Le registre EECON1 permet le control pour la lecture et lécriture de |'EEPROM, la figure suivante donne la signification de chaque bit de ce registre : re Page 100 LIF FES 1" BIS-SE Electronique EECON1 REGISTER (ADDRESS 88h) a CS ee = =a | can aoe U. =Unimpiomented bit read a8 0 SiS Unimplmented: Rese as See eee eee | | Sit EEIF: EEPROM Vir Operation Itorup Flag bt 1 = The write operation completed (must be cleared in software) | | =the arte eran vot comple eo el been sare | | 683 WRERR: EEPROM Error Flag bit Ef wo operation i premature teminatod ' {any MER coor ony WOT ree! cur normal operon) =e unto operation completa bit2 WREN: EEPROM Write Enable bit 1 Talons meas Dis wre the data EEPROM | tt wre ete contort ‘Tine s wie ce. (The tits clesed by ardware once wit is complee,The WE Bit can only Deo! ot saree) ota, | 0 = We cyte to the data EEPROM is complete | bitO RD: Road Control bit | ‘(= Initiates an EEPROM read (read takes one cycle. RD is cleared in hardware, The RD bit can only be set (not cleared) in software). 0 = Does not intiate an EEPROM read | b- Lecture d'une donnée de la mémoire EEPROM Pour lire une donnée, il faut écrire l'adresse dans le registre EEADR et mettre le bit RD (bit 0) du registre EECON1 4 1; la donnée sera disponible dans le registre EEDATA aprés un seul cycle d’horloge. Exemple : mettre le contenu de la case d’adresse Ox15 de L'EEPROM dans W. c Ecriture d'une donnée de la mémoire EEPROM Pour écrire une donnée, il faut écrire la donnée dans le registre EEDATA, et adresse dans le registre EEADR ; ensuite il faut écrire la séquence suivante pour valider Vécriture BSF STATUS, RPO; Banque 1 BCF INTCON, GIE ; désactive toutes les interruptions. BS ERCOML, WREN ;active 1'écriture MOVLW 55h ; MOVAF EECON2 MOVLW AAR MovWE EECONE 7 @crire AAh dans EECON2 BSF BECONL, i ; mise du bit WR Al pour conmencer 1’ écriture BCfEECONI,WREN ; désactive i’ écriture BSF INTCON, GIS ; active les interruptions si nécessaire. BCF STATUS,RPO ; Banque 0 Cette séquence permet d’écrire 55h puis AAh dans EECON2 et enfin de mettre WR bit L du registre EECONI a 1. Ceci permet d’éviter l’écriture accidentelle dans I'EEPROM dans le cas d'un code erroné. nh dans ‘cone, Page LOL LIF FES 1 BTS-SE Electronique Hest recommandé de désactiver les interruptions pendant Vécriture de I'—CEPROM La mise @ 0 du bit WREN se fait a la fin, et n'a aucune influence sur le cycle a’écriture, A la fin de Vécriture, le bit WR est remis @ 0 par le PIC (hardware) a la fin du cycle d'écriture, et le bit flag EEIF est mis & 1. a Ecriture d'une donnée de la mémoire EEPROM pendant la programmation La directive DE permet de déclarer des donnés qui seront stockée dans I'—EEPROM de donnée au moment de l'implantation du programme sur le PIC. Exemple : ORG 0x2 DE 10, 29, 30 Ladresse 0x2100 permet Vaccés a la I case de EEPROM 11I-Langage de programmation C: Le langage C, est un langage de programmation évolué, modulaire et structuré, Le compilateur C permet de traduire un programme source d’extension .C sous forme d'un programme machine (pour ie PIC d’extension .hex). 1. Stru un programme C Un programme C s'écrit sous la forme suivante : /texemple de programme*/ // 1 fancludecexemple.n> —// inelu: crit /* et */ ou apres // pibliotheques fidefine 5// définition des équivalences ici M sera remplacé paz 5 ehars []=(0x81,0xC3,0xB7,0xEF,0x00}; // déclaration des variables globales char sequence(char i) ; // déclaration des entétes des fonctions void main() { char 7 // déclaration dss variables locales // code du programme principale TRISB=O ; while (1) ( forin=0 7 nM ; net) ( Porn {n) i // ou bien PORTB=s(n] ; Delay_ms(1000) , charsequence(char ij ( // Implementation dee fonctions switoh (i) [ ease 0 : return 0x81 ° : ease 1: return Oxc3 ; case 2: return OxE7 ; case 3: return OnE; 4 : 1 case 4: return 0x00 default : return 0; } Chaque ligne d'instruction se termine par un « ;». Le début d'un bloc d'instruction(séquence) est précédé du symbole « {», La fin d’un bloc dinstruction (séquence) est suivie du symbole « }», Déclarer une variable ou une fonction, c'est informer le compilateur de son existence, En langage C, un identificateurécrit en minuscule est différent du méme identificateur écrit en majuscule. Saree Page 102 LIF FES 1° BISSE Electronique 2, Déclaration des variabies et des constantes: Une variable est déclarée en précisant un type de données suivi par un identificateur. Exemple chac'n; //n est une ble de type char n=10 7 // la variable n est décla talisée par 10 Une constante est déclarée comme une variable précédé par la mention const Exemple const char nel0; // 1a constante n initialisée par 10 i/ par le changer 1a valour de 1 J existe des types entiers (char, short, int et long) et des types rationnels (float et double). Type Signification Taille Taille Taille Pour PIC C sous DOS | C sous Windows | __mikroC char | Caraciére sbit | Shit | 8 bit short | Entier 16 bit 16 bit 8 bit ant | Enter 16 bit 32 bit 16 bit long | Entier long 32 bit 32 bit 32 bit float Réel 32 bit 32 bit \ 32 bit | double |réel en double précis | 64 bit 64 bit 32bit | Quand on n’a besoin que des valeurs positives d'une variable, on peut précéder la déclaration par le mot réservé unsigned, ce qui signifie non signé.Exemple char a: //n peut étre initialisé par les valeurs’ limites unsigned char 7 ///n peut tre initialisé par les valeurs limites 3 3, Les opérateurs du langage C érateurs arithmétiques: a ta te / addition, soustraction, multiplication et division fe % modulo (ex:a%b permet le calcul le reste de la division de a par 6) | vB Ps P inditionnels Inférieur, supérieur, inférieur ou egal, supe Egal, different Opérateurs logiques sur des expressions Ces opérateurs permettent de manipuler des valeurs logiques des expressions. { NON Togique d’une expression ET logique entre 2 expressions, OU logique entre 2 expressions érateurs logiques st les bits Ces opérateurs permettent de manipuler des bits = NON Togique bit par bit @un nombre @ eee [ET logique , OU logique et OU exclusif de 2 nombres bit par bits Pe Décalage & droite , Décalage a gauche Opérateurs d’affectation Affectation 7 i Affectation élargie, Exemple 1 tas pe, cco | iscks est equivalent itks Vopérateur = posséde une associativité de gauche a droite, ainsi dans Pexpression = J = 55 on evalue j=5 d’abord, puis ixj, i et j ont a la fin la valeur 5. LIF FES I BTS-SE. Electronique Si Vopérateur est placé avant la variable (on parle dopérateur préfixé), operation ost effectuée avant lévaluation de Fexpression, et s'il est place apres (on parle @opérateur postfixé) Vopération est effectuée aprés.Exemple its = 5) //on ate Conversion d cite (ca La conversion de type explicite est nécessaire lorsqu’on veut convertir un type vers autre qui a une taille de représentation inférieure.Syntaxe : (NouveauType) variable Exemple : float xai.se; int i= tint) 7 puis la valeur 1 an @n puis la valeur 6 ior te La priorité relative des opérateurs est indiquée dans le tableau suivant : Opérateurs Geoite © gauche ‘ gouche & droite Gauche & droite Gauche 3 droite gauche a gauche & gauche gacche & gauche & eucne ructure de Choix (Structure alternative) : Algorithme organigramme Programme € 83 concitionalors x if (condition) ( traitement! traitement! Sinon ) traitement? else! Finsi Teaieenmnes J], teeitonene2 Exemple : Af (axb) { max= aj} else { maxeb ; Sile traitement est une seule instruction, on peut supprimer les accolades. if lab) max= a jelse na Avec le langage C, on peut réaliser ce choix par la syntaxesuivante: Syntaxe: "condition? exp : exp2 ; Exemple: max = acb 2 a:b Structure de Choix multiple : Algorithme Programme C [Selonexpression switch (expression) | valeurl : traitement case valeurd : traitomentt valeur? : traitement2 break ; ci case valeurl : traitemant2 } | Sinon : traitementn break Finselon | dofault:traitement_par_defaut } instruction switch est une instruction de choix multiple, permettant de tester plusieurs valeurs d'une expression, L'expression peut étre de type byte, short, char ou int, Sanaa NNSEIRIeerieeeeeemeeee sere Page 104 LTF FES I" BTS-SE Electronique Le mot clé break demande a sortir du bloc Structure Itérative > Uinstruction while : (Tant que) II Sagit d'une boucle tant que qui exécute un ensemble instructions tant quiune condition est vraie, [Algorithme TANTQUE condition FAIRE ‘Traitement | FAnTANTQUE > Vinstruction do-while : (Faire - tant J organigramme Programme © while (condition) | | | ) que) I s'agit d'une boudle faire-tant que similaire a la boucle while sauf que la condition est évaluée aprés chaque parcours de fois, alors que la boucle while peut ne j boucle. La boucle do-while est exécutée au moins une jamais tre exécutée, [Algorithme [organigramme Programme © -] t } FAIRE i ei | TANTQUE condition | |} wniteicondition) | | J > Linstruction for : (boucle Pour) Uinstruction for est une boucle qui permet de répéter un traitement pour un nombre de fois déterminé par un compteur. [Algorithme POUR Compteur=val_tnitiale Aval_finalepar Pas FAIRE Traitement PINPOUR organigramme + Tait Compteus Programme € for (initscondi tionsmedi fication) | ) | traitement Traitement Modif conpteur| scree eee teen eee > Les instructions break et continue instruction break (casser) sert a interrompre le déroulement d'une boucle en passant A instruction situee aprés la boucle. L’exécution de cette instruction est conditionnée par un choix.én cas de boucles imbriquées, instruction break fait sortir de la boucle la plus interne, Uinstruction continue permet de passer directement au tour de boucle suivant. Page 105 LIF FES 1° BTS-SE Electronique fonctions en langage C (Les sous programmes) Une fonction est un sous-programme ayant des paramétres d’entrée et une valeur de de retour, qui peut étre appelé depuis le programme principal ou une autre fonction 11 fautdeclarer a Pavance son entéte avant son appel ; souvent avant la fonction principale main en respectant la syntaxe suivante : ourNom_fonction (type n m_paraml, t pe nom_paran2, Une fonction doit retourner une valeur sauf si elle est du type void, dans ce cas on peut la considérer comme étant une procedure Les entétes des fonctions standards du langage C, sont écrite dans des fichiers extension .h; qu'il faut inclure dans le programme par la directive #include Limplémentation des fonctions peut se faire, aprés la fonction main, selon ta structure suivante ‘Type_retourNom_fonction (type nom_paraml, (/ déclarations de: // les instructions return. ; // retour d/une variables e Lappel d'une fonction se fait a partir de la fonction principale main, ou une autre fonction par la syntaxe suivante variable = Nom_fonct ; 6. Les tableaux en lange Introduction : Un tableau est association de plusieurs variables de méme type, et réserve ainsi une zone mémoire permettant de stocker plusieurs données de méme type. Un tableau posséde un nom et un nombre d’éléments qui représente sa taille. Pour désigner un élément, on indique le nom du tableau suivi par son indice entre crochets. Le tableaux permet l'accés indexé aux éléments; il en découle que, dans un tableau T, le successeur naturel de l’élément T[i] est élément Tli+l). [a2 Taw Tas Tio Pa Tio] TH) Tl2) TED Teal Les cases mémoires d'un tableau sont contigueés, et ont la méme taille. Lutilisation des boucles permet d'effectuer le méme traitement pour toutes les données du tableau, b, Déclaration d’un tableau a une dimension : La syntaxe de déclaration d'une variable tableau est la suivante : s_éLément sNom_tableau(taille] Exemple : int £120 Un tableau peut étre initialisé au moment de sa déclaration ; si sa taille est non défini, ily’ aura réservation automatique des cellules du tableau Page 106 | | LTE FES 1 BTS-SE Le systéme réservera 7 octets d’adresses mémoires successives dont la premiére adresse est t( oust [0}) Electronique pour ce tableau ; © Tableau a 2 dimensions ta déclaration se fait par la méme méthode de déclaration qu’un tableau a une dimension, mais 1a, on ajoute le nombre de colonne. Et toujours, en premier le nombre de figne et en second le nombre de colonne. type eau[taille ligne] [taille colonne] ; Un tableau d 2 dimensions peut étre initialisé au moment de sa déclaration.Exemple : 312) = 1 (1, 2), £ test un tableau 4 3 lignes et 2 colonnes : T 3 3 Si la taille est non définie, le compilateur détermine la taille du tableau apres le nombre de valeurs d’initialisation. d. Tableau an dimensions : On peut généraliser pour déclarer un tableau a n dimensions de la maniére suivante : "Ses_éiementston tableau [taillel](taille2] . [taillen] ; Exemple ; 20] (207 £20] @. Déclaration et mémorisation : Une chaine de caractére est déclarée comme étant un tableau de caractére ; et on peut l'initialiser par un texte, La case du tableau contenant la valeur 0 marque la fin du texte. Exemple : wars [20] ="5\ “AE | sol sl) sat sy S représente l'adresse de s[0)] ; donc une chaine est manipulée par l'adresse du premier élément du tableau. I" BTS-SE Electronique 4. Initialisation de chaines de caractéres : +, Line chaine de caractéres peut étre initialisée par la fonction strepy : "SALUT") 7// fonction f sar" Une chaiine de caractéres peut étre initialisée au moment de sa déclaration, Il yaura réservation automatique des cellules de la chaine de caracteres : a * Une autre méthode consiste & utiliser un pointeur, tel que : char “p= "SALUT" ; ©. Manipulation des chaines de caractéres : C dispose de bibliothéques de fonctions pour le traitement des chaines : Les fonctions de ta bibliothéque : strlen (s) + calcul fa longueur d'une chaine s strepy(s1,22) —: copie la chaine s2 dans la chaine s1 streat (si, 52) ajoute la chaine s2 a la fin de la chaine s1 stromp(s1,s2) : compare sl ds2 strnepy(si,s2,n) : copie n caractéres de s2 dans la $1 stmeat(s1,s2,n) : ajouten caractéres de s2dans la s1 Les fonctions de_Ja bibliothéque atoi (8) + convertie s en un nombre entier (chaine vers int) atol (3) : convertie s en un entier long atof (s) convertie s en un double itoa(n,s,) : convertie n (int) en chaine s selon la base b Ltoa(n,s,B) convertie n (long) en chaine s selon la base b ultoa(n, 8,5) convertie n (unsigned long) en s selon la hase b d. Tableaux de chaines de caractéres : Un tableau de chaine de caractére est déclaré comme étant un tableau de caractére & 2 dimensions. Exemple (10) = ( “Mohamed”, "ALi" , "Kicham” } La mémorisation se fait comme suit S(O] T tar Tar T T sti} var oD i s{2] | [ea a? 3 s{0}, s{1] et s{2} représentent les adresses des 3 chaines de caractéres, sl0l, s{1] et s(2] permettent daccéder aux 3 chaines de caractéres, sli){j] permet d’accéder au caractére dindice j de la chaine s[i} 8. Les pointeurs en |; Un pointeur est une variable qui contient adresse mémoire d'une variable. I! doit étre déclaré de la facon suivante : type_de_la variable ‘nom_pointeur Pour assigner une adresse & un pointeur, on utilise Vopérateur &, comme suit : Nom_pointour = § variable ; Page 108 LIF FES I BTS-SE Electronique Une valeur particuliéreNULL indique que le pointeur ne contient aucune adresse. Nom _pointeur = NULL ; Par exemple, un pointeur sur une variable de type entier sera déclaré par : iat a= 10; /* variable de type entier initialise a ant *p ; /* pointeur sur une variable de type ontier 1a */ s ps sa; /* p resoit l’adresse de la variable entisre a +/ printf ("8d \n", *p); /* affiche le contenu de a */ Pans cette exemple a et *p permettent d’accéder a la méme case mémoire. x 0045F870 0x 0045870 a Exemple 1; : nt lines 0x 0045874 Ox 00 sia} bhar’s[5]="bien” , *p; | eee fain 7*'oubien pes; */ | oxooasts7al “ox 66 “CaF sia) for (i=834<5;144) ¢ { 2" 0045F872[" Ox 65 Ce) [9(2] prince Ladresse de s(Xd] est: %x\n", 4, p); 0x 0045F8711 0x69 sf} rint te contenu de s[%a] est: SK ("xc")\n", 4, *p, 2p); | biti 0x 0045F870[ Ox 42_(’0) _jsi0} Mémoire Dans un tableau de caractéres (chaine de caractére), Pouraccéder au caractére suivant, i sufit dincrémenter Padresse par 1, car la taille d'un char est de 1 octet, donc p++ permet d’ajouter 1 au contenu de p. Exemple 2 fermen i lint i, *p, t[4]; p=ae(@] 5) /? ou bien pet ; +/ for (i=0"; ica ; ine, pee) ! +p = 471003 | "or (pat, i8 5 icd 5 i++, pos) { print#("L'adrasse de t/Rd} est : %\n", a, p); print#("le contenu de t[8d] est : Xd\nin", 4, *p); } Ke) 10) Mémoire Dans un tableau d’entier (de type int), Pour accéder au nombre suivant, il sufft diincrémenter Vadresse par 4, car la taille d'un nombre de type int est de 4 octet langage C sous windows. Done p+ permet dajouter 4 au contenu de p pour le nee eer Page 109 |

You might also like