Vous êtes sur la page 1sur 12

MicrocontrleurPICPrsentationdulangageCpourPIC

TEln

Prsentation succinte du langage C


Lescommentairessefontenmettant//endbutdeligneouenentourantunblocpourlemettreen commentairepar/*et*/. Exemple:
//Ceciestuncommentairesuruneligne /*Ceciestunbloc misencommentaire*/

Chaque instruction setermine parun pointvirgule, chaquedbutetfin deblocs d'instructions sont entourspar{et}.Lafonctionprincipaled'unprogrammes'appelletoujoursmain: Exemple:
voidmain() { \\Votrecodeici }

LesvariablesquevousutiliserezpourlePICserontdedeuxtypes: entiernotint,lavariableseracompriseentre0et255,dclaration:intnom_variable caractrenotchar,lavariablecontiendrauncaractreascii,dclaration:charnom_variable flottant(nombrevirgule)notfloat,dclaration:floatnom_variable danslestroiscasvouspouvezinitialiserlesvariableslorsdeleurcration. Exemple:


inti=0,j=100,k; charcarac='a',car='@',car2; floatpi=3.1415,coeff=0.97;

Vouspouvezaussiutiliserdestableauxunedimension,ladclarationsefait: type_stock nom_du_tableau[nombre_elements_tableau]. Attention le premier lment est numrot partirde0etdoncledernierlmentseranombre_elements_tableau1. Exemple: intvaleurs[3];dclareuntableaude3lmentsdetypeentiers.Lepremierlmentseraaccessiblepar valeurs[0]etledernierlmentseravaleurs[2]. floatmesures[2]={14.65,45.23};dclareuntableaude2lmentsdetypeflottant.Lepremierlment (mesures[0])estinitialis14,65etledeuxime(mesures[1])45,23. TableaudesoprateursstandardsenlangageC:reportezlaphotocopiejointecedocument. LetestSi Nousavonsvulorsdel'examendesoprateursl'expressionconditionnelle.Ilexiste galementbiensr unestructuredecontrlequiralisel'excutionconditionnelle.Sasyntaxeestlasuivante:
if(<condition>){<instructions...>}

La condition est teste comme un boolen, c'estdire qu'elle est considre comme vraie si son valuationn'estpasnulle.0estconsidr commelavaleurboolenneFAUX,diffrentde0est considr comme la valeur boolenne VRAI. Vous pouvez aussi utiliser les valeurs TRUE et FALSEdansvostests.Danslecasouneseuleinstructionestexcuterquandlaconditionestvraie,
OlivierDARTOISJacquesDUPRAT Page1

MicrocontrleurPICPrsentationdulangageCpourPIC

TEln

ontrouverasouventcetteinstructiontouteseulelaplacedublocentreaccolades. LetestSiavecalternative:
if(<condition>){ <instructions...> }else{ <instructions...> }

L encoreilestpossiblederemplacerl'unoul'autre(oulesdeux)blocsentreaccoladesparuneunique instruction.Attentiondanscecas,ilfautterminercetteinstructionparunpointvirgule. LetestSiavecdemultiplesalternatives:


if(<cond1>){ <instructions...>/*Sicond1estvraie*/ }elseif(<cond2>){ <instructions...>/*sicond1fausseetcond2vraie*/ }else{ <instructions...>/*sicond1etcond2fausses*/ } }

Exemple:
if(val_can<128){ ouput_b(0x0F); }else{ ouput_b(0xF0); } //silavaleurluparleCANestinfrieur128 //onmet1les4bitsdepoidsfaiblesduportB //sinononmet1les4bitsdepoidsfortsduportB

Leswitch()
switch(<expression>){ case<val1>:<instructions...> case<val2>:<instructions...> ... case<valn>:<instructions...> default:<instructions...> }

L'instruction switch permet de diriger le programme vers une squence d'instructions choisie parmi plusieurs,suivantlavaleurd'uneexpressionquidoittredetypeentier. Lebranchementsefaitl'tiquettecasedontlavaleurestgalel'expressiondette(ilnedoityavoirau plusqu'unetiquettequicorrespond).Siaucunetiquettenecorrespond,lesautsefaitl'tiquettedefault sielleexiste. Attention,unefoislebranchementeffectu,leprogrammecontinuedes'excuterdansl'ordre,ycompris lescasequipeuventsuivre.Pourempchercecomportement,onutilisesouventbreaklafindes instructionsquisuiventlecase:soneffetestdesauterdirectementaprsleblocduswitch. Exemple:
intval,c; c=1; val=mafonctiondecalcul();/*unefonctiondfinieailleurs*/ switch(val){ case0: OlivierDARTOISJacquesDUPRAT Page2

MicrocontrleurPICPrsentationdulangageCpourPIC case1:printf("Rsultat0ou1\n");c=2;break; case2:printf("Rsultat2\n");break; case4:printf("Rsultat4\n");c=0;break; default:printf("Casnonprvu\n"); }

TEln

Lesboucles Laboucleforoupour: C'estunebouclebeaucoupplusgnralequedansd'autreslangages.Sonrleneselimitepaslasimple rptitionenincrmentantunentier.Sonutilisationestlasuivante:


for(<inst.initiale>;<cond.depoursuite>;<inst.d'avancement>){ <instructions...> }

L'instructioninitialeestexcuteavantledbutdelaboucle,laconditiondepoursuiteesttestechaque dbutdeboucleetl'instructiond'avancementestexcuteendernireinstructionchaquetourdeboucle. Exemple:


inttab[100]; for(i=0;i<100;i++){ output_b(tab[i]);/*excutespouri=0,i=1...i=99*/ }

Labouclewhileoutantque:
while(<conditiondepoursuite>){ <instruction...> }

Exemple:
while(input_c()!=4){ output_toggle(PIN_B0); } //tantquelavaleurlusurleportCestdiffrentede4 //onfaitclignoterlaDELquiestrelieaubitdepoidsfaibleduportB

Laboucledo...whileoufaire...tantque: Ici le test est effectu en fin de boucle. Cette boucle est donc, contrairement aux deux boucles prcdentes,excuteaumoinsunefois,mmesilaconditionestfaussedsledbutdelaboucle.
do{ <instructions...> }while(<conditiondepoursuite>);

Important : Consultez l'aide en ligne du compilateur Prsentation du langage C pour PIC


Pour raliser les exemples qui suivent vous devez avoir en votre possession la documentation de prsentation des PICs et du cheminement de programmation de ceuxci. Cette documentation sert uniquementprsenterdesexemples.

OlivierDARTOISJacquesDUPRAT

Page3

MicrocontrleurPICPrsentationdulangageCpourPIC

TEln

1. Ex. n1 : Positionner des sorties - Faire clignoter une DEL


NousallonsdoncralisernotrepremierprogrammeenlangageC.NousallonsfaireclignoterlaDEL vertePC0delamaquetteinter+dels.Dansl'EDI,crezunnouveaufichieraveclenomdel.cpuis saisissezleslignessuivantes:

Leslignes13sontdescommentairescarleslignescommencentpar//. Laligne5prcisequeltypedeCnousallonsutiliseretinclutunfichierutilelacompilation. Laligne10devratredcommentesivousprogrammezvotrePICavecTinyBootLoader(dcomment= enleverles//devant). Laligne12prciselesfusiblesprogrammerdanslePIC. Laligne13permetdeprciserquelfrquencelequartzdevotrecarteoscille.Danslaplupartdescas cettevaleursera4000000pourunquartz4MHzou20000000pourunquartz20MHz. La ligne15 indiqueledbutdenotreprogrammeprincipal(fonctionmain),vousouvrezdoncune accolade. La ligne17 permetdefairebouclerindfinimentnotreprogramme(while(true)signifietantque vrai).Lesinstructionsentrelesaccoladesserontdoncexcutessansarrt. Laligne18permetd'envoyer(output)versleportC(_c)lavaleurentreparanthse(ici0enhex=0x00). TouteslesdiodesduportCserontdoncteintes. Aupassagevousremarquezquelafind'uneinstructionseterminepar;. Laligne19permetd'attendrelenombredemsindiquentreparanthse(ici500msdonc0,5s). Laligne20envoielavaleur1surleportC,vousallumezdoncladiodereliaubitdepoidsfaibleduport C(icilaDELvertePC0). Laligne21permetd'attendrenouveau500ms. Laligne22indiquelafindelabouclewhile(true). Laligne23indiquelafindenotreprogrammecarc'estl'accoladefermantedelafonctionmain(). Sauvegardezvotreprogrammepuiscompilezle.ProgrammezvotrePICettestezvotreprogrammeavecla
OlivierDARTOISJacquesDUPRAT Page4

MicrocontrleurPICPrsentationdulangageCpourPIC

TEln

carteinters+dels.Celafonctionne...flicitationssinonreprenezletout tapepartape.N'oubliezpasque l'onpeutaussisimulerlesprogrammesdansIsiscommedansleschmacidessous:


SimulationClignotementDELsurPC0 OlivierDARTOISJacquesDUPRAT TELN2005 U1
9 10 1 2 3 4 5 6 7 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/T HV RA0/AN0 RA1/AN1 RA2/AN2/VREF RA3/AN3/VREF+ RA4/T 0CKI RA5/AN4/SS RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RC0/T 1OSO/T 1CKI RC1/T 1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/T X/CK RC7/RX/DT 21 22 23 24 25 26 27 28 11 12 13 14 15 16 17 18

R1
220

D1
LEDGREEN

Exercice1: 1. FaitesclignoterplusrapidementvotreDELpuisfaitesclignoterladelvertePC1. 2. AllumezalternativementlesdiodesvertesPC0,PC2,PC4puisPC1,PC3,PC5. 3. Faitesunchenillardquiparcoursles6diodesjaunespuisles6diodesvertes.

PIC16F876 PROGRAM=..\..\..\DocumentsandSettings\Olivier\Mesdocuments\T estCCS\del.HEX CLOCK=4MHz

2.Ex. n2 : Lire des entres Lire l'tat des inters


Pour notre deuxime exemple, nous allons lire l'tat des interrupteurs de la maquette inters+dels connectsauportB(intersPB0PB3)etafficherl'tatdeceuxcisurlesquatresDELsduportC(DELs vertePC0 PC3).Dansl'EDI,crezunnouveaufichieraveclenominters.cpuissaisissezleslignes suivantes:

OlivierDARTOISJacquesDUPRAT

Page5

MicrocontrleurPICPrsentationdulangageCpourPIC

TEln

Nouscommentonsseulementleslignesnouvelles. Laligne14permetdedclarerunevariabledetypeentier(int).Cettevariablesert stockerlersultat d'uncalculoulavaleurd'undesportsduPIC.Unevariabledetypeintpermetdestockerdesvaleurs de0255(8bits).Pourstockerdesnombresvirgulesvousutiliserezletypeflottant(float)codersur32 bits. Laligne17litl'tatdeslignesconnectesauportB(input_b)etvousstockezcettevaleurdanslavariable val_inter. La ligne 18 permet de mettre sur le port C la valeur val_inter et donc d'allumer les DELs correspondantesauxintersenposition1. Sauvegardezvotreprogrammepuiscompilezle.ProgrammezvotrePICettestezvotreprogrammeavecla carteinters+dels.SichaquefoisquevousactionnezuninterPB0(PB3)ladiodePC0(PC3)s'allume votreprogrammefonctionnecorrectementsinonvrifiezletoutetrecommencez. Laschmadesimulationpeuttrelesuivant:
SimulationLectureInters etAffichagesurDELs OlivierDARTOIS JacquesDUPRAT TELN2005 R5
10k +5V

R8
10k

PB0 U1
9 10 1 2 3 4 5 6 7 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/T HV RA0/AN0 RA1/AN1 RA2/AN2/VREF RA3/AN3/VREF+ RA4/T 0CKI RA5/AN4/SS RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RC0/T 1OSO/T 1CKI RC1/T 1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/T X/CK RC7/RX/DT 21 22 23 24 25 26 27 28 11 12 13 14 15 16 17 18

PB1 PB2 PB3


220

R1 R2 R3 R4

PC0 PC1 PC2 PC3

PIC16F876 PROGRAM=inters.HEX CLOCK=4MHz

Remarque:LesrsistancesR5R8sontdesrsistancesdetirageverslehaut(fixeunpotentiel+5Vdonc un1logiquelorsqu'uninterestouvert).LeportBduPICpossdeeninternedesrsistancesdetirages verslehaut.Cellescisontactivesparl'instructionport_b_pullups(true)etdsactivesparl'instruction port_b_pullups(false).Sivousactivezdansvotreprogrammelesrsistancesdetirageverslehautalorsles rsistancesR5R8nesontplusncessaires. Exercice2: Faites un programme qui lit l'tat des inters PB0 PB3 et qui allume les dels du port C avec les conditionssuivantes: siPB0etPB1sont1alorsvousallumezladiodevertePC0etuniquementcelleci. siPB2etPB3sont1alorsvousallumezladiodevertePC1etuniquementcelleci. siPB0etPB3sont1alorsvousfaitesclignoterlesdiodesPC0etPC1. danstouslesautrescasladiodevertePC2devratreallum. Indication:utilisezunestructureswitch.
OlivierDARTOISJacquesDUPRAT Page6

MicrocontrleurPICPrsentationdulangageCpourPIC

TEln

3.Ex. n3 : La conversion analogique-numrique


Laplupartdescapteursdlivrentunetensionproportionnelleauphnomnequ'ilsmesurent.Pour tre exploitablecettetensiondoit trenumrise l'aided'unconvertisseuranalogiquenumrique(CANou DACenanglais:DigitaltoAnalogConverter).LeCPICpossdedesentresanalogiquessurleportA (entresAN0AN4).Deuxdecesentrespeuventtreconfigurespourfixerlalimitebasse(VREF)et haute(VREF+)delanumrisation.LarsolutionduconvertisseurinterneduPICestde10bits(soit1024 valeurspossibles).Nousutiliseronsunersolutionplusfaiblesur8bitsquiestlavaleurpardfautdu convertisseur(soit256valeurspossibles). Dansnotreexemplenousallonsnumriserlatensionprsentesurl'entreAN2etafficherlersultatsur les6DELsduportC. Quandnousauronsunetensionde0Vsurl'entreAN2,touteslesDELsduportCseront teintes.Quel seralavaleurdelatensionprsentelorsquelessixpremiresdelsduportCserontallumes? Dansl'EDI,crezunnouveaufichieraveclenomcan.cpuissaisissezleslignessuivantes:

Nouscommentonsseulementleslignesnouvelles. La ligne14 permetdedclarerunevariabledetypeentierquivapermettredestockerlersultatdela conversionanalogiquenumrique. Laligne16permetd'initialiserleportAenanalogiqueetdeprciserquelleentrevatreutilispourla conversion.Lesvaleurspossiblespourcettefonctionsont:

OlivierDARTOISJacquesDUPRAT

Page7

MicrocontrleurPICPrsentationdulangageCpourPIC Valeurs NO_ANALOGS ALL_ANALOGS AN0_AN1_AN2_AN4_VSS_VREF AN0_AN1_AN3 AN0_AN1_VSS_VREF AN0_AN1_AN4_VREF_VREF AN0_AN1_VREF_VREF AN0 AN0_VREF_VREF Description TouteslesentresduportAenmodenumrique TouteslesentresduportAenmodeanalogique

TEln

EntresAN0,AN1,AN2etAN4enanalogique,AN3TensionRefrence haute(VREF+) EntresAN0,AN1etAN3enanalogique,AN2etAN4ennumrique EntresAN0etAN1enanalogique,AN3TensionRefrencehaute (VREF+),AN2etAN4ennumrique EntresAN0,AN1etAN4enanalogique,AN2TensiondeRfrencebasse (VREF),AN3TensiondeRfrencehaute(VREF+) EntresAN0etAN1enanalogique,AN2TensiondeRf.basse(VREF), AN3TensiondeRf.haute(VREF+),AN4ennumrique EntresAN0analogique,touteslesautresentresennumrique EntresAN0analogique,AN2TensiondeRf.basse(VREF),AN3Tension deRf.haute(VREF+),AN1etAN4ennumrique

Laligne17dterminel'horlogeutilispourlaconversion. Laligne18permetdeslectionnerl'entrenumriser.Dansnotrecasseullecanal0estutilisdoncon slectionneceluicisinonilsuffitdeprciserlenumrodecanal. Laligne19permetauconvertisseurdes'initialiserenattendant100ms. Laligne22permetdelirelersultatdelaconversionetstockeceluicidanslavariableval_can. Laligne23envoiesurcettevaleurversleportCetallumelesDELsenconsquence. Sauvegardezvotreprogrammepuiscompilezle.ProgrammezvotrePICettestezvotreprogrammeavecla carteinters+dels.TournezlentementlepotentiomtrerelilavoieAN2.Lorsquevousfaitesvariercette tensionlesDELsduportCdoivents'teindreous'allumerenfonctiondelavaleurconvertie.Vrifiez l'tatdesDELspourunetensionde0V,1V(mesurezlatensionaupotentiomtreavecunmultimtre) puiscomparezl aveclathorie.Vrifiezvotrerponse laquestiondelapageprcdenteenallumant les6premiresdiodesvertesetenrelevantaumultimtrelatensionsurlepotentiomtre. Leschmadesimulationpourcetexemplesera:
SimulationCAN etAffichagesurDELs OlivierDARTOIS JacquesDUPRAT TELN2005 U1
9 10 1 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/T HV RA0/AN0 RA1/AN1 RA2/AN2/VREF RA3/AN3/VREF+ RA4/T0CKI RA5/AN4/SS RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RC0/T1OSO/T1CKI RC1/T 1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT 21 22 23 24 25 26 27 28 11 12 13 14 15 16 17 18

+5V

RV1
1k

R1 R2 R3 R4 R5 R6 R7 R8

220

PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7

2 3 4 5 6 7

PIC16F876 PROGRAM=can.HEX CLOCK=4MHz

220

OlivierDARTOISJacquesDUPRAT

Page8

MicrocontrleurPICPrsentationdulangageCpourPIC

TEln

Exercice3: Configurez le convertisseur analogiquenumrique duPICpour qu'il prennecomme valeurbasse de conversionlatensionVrefetcommevaleurhautedeconversionlatensionVref+.RglezVref+ 3Vet Vref1V.AffichezsurlesdelsvertesduportClersultatdelaconversion. Comparez le quantum dans cette configuration et le quantum prcdent. Quel est l'intrt de cette configuration?

4.Ex. n4 : Utilisation de la voie srie


La communication avec le monde extrieure (au C PIC) est trs importante aujourd'hui. En particulier la communication par voie srie vers un ordinateur permet d'accder la puissance de stockageetdecalculsqu'unCnepossdepasforcement. Nousallonsraliseruneconversionpuistransmettrelersultatdecetteconversionparlavoiesrieversle PC.NousutiliseronslelogicielTinyBootLoaderpourvisualiserlesrsultats. Dansl'EDI,crezunnouveaufichieraveclenomsrie.cpuissaisissezleslignessuivantes:

La ligne12 permetdedfinirlescaractristiquesdelacommunicationsurlavoiesrieainsiqueles brochesutilisespourcelleci.Dansnotreexemple,voustransmettrez unevitessede19200baud,la broched'mittionseraRC6(portC,6mebroche),labrochederceptionseraRC7(portC,7mebroche) enfiniln'yaurapasdebitdeparit(parity=None).Ducotdevotrelogicieldedialoguesurlavoiesrie (HyperTerminal),ilfaudrarglerlesmmesparamtres. Laligne17dfinitunevariabledetypeflottant(float)doncellepourrastockerunnombrevirgule. Laligne18dfinituneconstante(const)detypeflottant.SonnomseraQuantumestvaudra5V/255


OlivierDARTOISJacquesDUPRAT Page9

MicrocontrleurPICPrsentationdulangageCpourPIC

TEln

soit0,0196V.Cetteconstantepermetdetransformerunevaleurcomprisentre0et255fourniparleCAN enunetensioncomprisentre0Vet5V. Laligne27permetd'obtenirlersultatdelaconversionduCAN,delemultiplierparleQuantumafin d'obtenirdanslavariabletensionlavaleurdelatensionprsentesurl'entreAN0. La ligne 28 permetd'envoyerdesinformations surlavoie srie.La fonctionutiliseestla fonction printf.Cettefonctionestrelativementcomplexeetestexpliquedansladocumentationofficielledu compilateurC.Dansnotrecas,nousenvoyonsverslavoiesrieletextequiestcomprisentreguillements ou%2.2festremplacparlavaleurdelatension: le\rpermetderamenerlecurseuraudbutdelaligne. le\npermetdesauteruneligne. le%2.2fpermetdeformaterleflottanttension(lettre'f'dans'%2.2f')pourqu'ils'afficheavec deuxchiffresavantlavirguleetdeuxchiffresaprslavirgule. Sauvegardezvotreprogrammepuiscompilezle.ProgrammezvotrePICettestezvotreprogramme en injectant une tension analogique variable (alimentation par exemple) sur la ligne AN0. Connectez l'interfacedecommunicationsurleconnecteurHE1010correspondantdevotrecartegestionetsurlePC lancezleprogrammeTinyBootLoader.LesvaleursdelatensionnumriseparlePICsurlavoieAN0 devraientapparaitrealorsdansl'ongletTerminalsivousvous tesbienconnect.Faitesvariervotre tensionanalogiqueetconstatezleschangements. LeschmadesimulationpourIsisutilisedescomposantsvirtuelsetenparticulierlecomposantVirtual Terminal.Saisissezleschmasuivantettestezle:
NumrisationvoieAN0 etenvoievaleursurvoies rie OlivierDARTOIS JacquesDUPRAT TELN2005 U1
9 10 1 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/T HV RA0/AN0 RA1/AN1 RA2/AN2/VREF RA3/AN3/VREF+ RA4/T 0CKI RA5/AN4/SS RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RC0/T 1OSO/T 1CKI RC1/T 1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/T X/CK RC7/RX/DT 21 22 23 24 25 26 27 28 11 12 13 14 15 16 17 18

+5V

RV1
1k

2 3 4 5 6 7

VIRTUALTERMINAL
RXD T XD RTS CTS BAUDRAT E=19200 DAT ABIT S=8 PARIT Y=NONE ST OPBIT S=1

PIC16F876 PROGRAM=serie.HEX CLOCK=4MHz

5.Ex. n6 : Utilisation d'un afficheur LCD


Pour que les affichages dedonnes soientplus attrayantvous pouvez utiliserun afficheur LCD. Le modlequenousutiliseronsfait2lignesde16caractres.LecompilateurCCSestfourniavecunpilote d'afficheurLCD,nousallonsdoncutilisercettebibliothquedefonction:

lcd_init():fonctiond'initialisationdel'afficheurLCD.Aappelerenpremier.
Page10

OlivierDARTOISJacquesDUPRAT

MicrocontrleurPICPrsentationdulangageCpourPIC

TEln

lcd_putc(c) :fonction qui permetd'envoyeruncaractreversl'afficheurLCD. Lescaractres spciaux\f(effacementcran),\n(passerladeuximeligne)peuventtreutilissdansla chainedecaractresquevousenvoyezauLCD. lcd_gotoxy(x,y):fonctionquipermetdedplacerlecurseurdel'afficheur. lcd_getc(x,y):fonctionquipermetdercuprerlecaractrequisetrouvesouslecurseur.Vous n'utiliserezpascettefonction.

Pourquevotreafficheurfonctionnesurvosmaquettes,ilfautrajouteravantlaligne#include<lcd.c> laligne#defineuse_portb_lcdTRUEpourdireaucompilateurquel'afficheurestconnectauportB duPIC. Nousallonsraliserunprogrammequiafficheunmessagedebienvenuesurl'afficheurpendant3spuis nous testerons l'appui des boutons K1 et K2 et nous afficherons un message en consquence sur l'afficheur. Pourcela,dansl'EDI,crezunnouveaufichieraveclenomlcd.cpuissaisissezleslignessuivantes:

Laligne6indiquequevousraliserezlaprogrammationaveclelogicielTinyBootLoader. La ligne16 permetd'initialiserl'afficheurLCD.Les lignes17et18 affichentunmessagesurlesdeux lignesdel'afficheurLCD. Laligne23permetdercuprerlavaleurduportCetdelastockerdanslavariableval_portC.


OlivierDARTOISJacquesDUPRAT Page11

MicrocontrleurPICPrsentationdulangageCpourPIC

TEln

Laligne24permetdercuprerl'tatdesdeuxinterrupteursK1etK2en liminanttouslesautresbits. Surleschmastructurel,vousvoyezquelorsqu'unboutonpoussoirestenfonc vouspositionnezlebit correspondant 1.Sileboutonestrelach,lebitcorrespondantest 0(rsistancederappelversla masse).K1estreli PC4etK2estreliPC5.Pourliminerlesbitsnonsignificatifsvousfaitesdonc unETlogiqueentrelavaleurluesurleportCetlavaleurbinaire00110000. Laligne25testesilavaleurluesurleportCestgale16(symbole==danslaconditiondetestdusi). EneffetK1reliPC4doncendcimalsicebitest1sonpoidsvaut16endcimal.Sic'estlecasalors vousaffichezunmessagesurl'afficheurLCD. Leslignes26et27sontquasimentidentiquesdansleraisonnementlaligne25. Modifiez votre programme pour afficher un message si les deux boutons K1 et K2 sont enfoncs. Envoyezsurlavoiesriel'tatdesboutonsetvisualisezdansTinyBootLoadercequ'envoielePIC. Leschmadesimulationdecemontageestlesuivant:

LCD1
LM016L

+5V

VSS VDD VEE

RS RW E 4 5 6

AfficheurLCD OlivierDARTOIS JacquesDUPRAT TELN2005 U1


9 10 1 2 3 4 5 6 7 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/T HV RA0/AN0 RA1/AN1 RA2/AN2/VREF RA3/AN3/VREF+ RA4/T 0CKI RA5/AN4/SS RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RC0/T 1OSO/T 1CKI RC1/T 1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/T X/CK RC7/RX/DT 21 22 23 24 25 26 27 28 11 12 13 14 15 16 17 18

1 2 3

7 8 9 10 11 12 13 14

D0 D1 D2 D3 D4 D5 D6 D7

+5V

K1

K2

PIC16F876 PROGRAM=LCD.HEX CLOCK=4MHz

R1
10k

R2
10k

6.Les fonctions disponibles en langage C pour PIC


Reportezvous l'aideintgrdanslecompilateurCetauxdocumentationsmisesvotredispositionsur lerseau.

OlivierDARTOISJacquesDUPRAT

Page12