Você está na página 1de 3

PROGRAMAO EM C PARA PIC

Joo Lus da Silva Filho


Universidade Federal do Piau Teresina Piau joao-fi@hotmail.com Resumo Este documento apresenta os resultados e observaes obtidas a partir do 4 e!perimento da disciplina "#aborat$rio de Microcontroladores%& 'ue teve como t(tulo "Pro)rama*o em C para PIC%+ Essa pr,tica tin-a como ob.etivo a /amiliari0a*o do aluno com a lin)ua)em C para o PIC123455A no MP#A6 e a analise do c$di)o em Assembl7 correspondente+ Palavras-chaves Assembl7& #in)ua)em C& MP#A6& PIC123455A+ Abstract 8-is document s-o9s t-e results and observations )at-ered b7 t-e /ort- e!periment o/ t-e sub.ect "Microcontroller #ab%& 9-ic- -ad t-e title "Pro)rammin) in C /or t-e PIC%+ 8-is practice -ad as )oal t-at t-e student )ets used 9it- t-e C #an)ua)e /or t-e PIC123455A in t-e MP#A6 and t-e anal7sis o/ t-e correspondin) Assembl7 code+ Keywords : PIC123455A+ Assembl7& C #an)ua)e& MP#A6&

. P"#)'$ D'!T#S ' "'SULT*$#S 'FP'" D'!T* S Para reali4ar o e8/erimento1 foram a/resentados dois /ro0ramas re:ueridos /elo /rofessor. # /rimeiro era /ra construir um c@di0o-fonte em )1 atrav2s do soft9are DPL*?1 :ue controlasse um sem3foro de G tem/os1 cujo circuito est3 re/resentado /ela fi0ura +. # tem/o do estado verde deveria /ermanecer em Hs1 amarelo em >s e vermelho em Is. *l2m de o sem3foro ser ininterru/to e utili4ar a fun;o Jdela6KmsA88C. J3 o se0undo era /ara alterar o /rimeiro /ro0rama de tal forma :ue o sem3foro s@ saia do estado verde H se0undos a/@s o /edestre solicitar a /assa0em1 :ue deveria ser feita atrav2s de um 5oto conectado no /ino ")G. * solicita;o s@ deveria ser aceita a/@s o 5oto ser li5erado1 de/ois voltava /ara o JverdeL e es/erava uma nova solicita;o /elo usu3rio. 'm se0uida1 reali4ou-se a constru;o dos dois c@di0osfontes1 com ajuda do /rofessor1 do datasheet P )+,F-..* e dos conhecimentos ad:uiridos em sala de aula. $e/ois1 /rojetou-se o /ro0rama no soft9are P"#T'US /ara verificar se o microcontrolador estava reali4ando o :ue o /rofessor re:ueria. $everia tam52m ter avaliado o funcionamento do c@di0o no /roto5oard1 mas devido ao curto /erodo de aula1 no houve tem/o necess3rio /ara a reali4a;o de tal eta/a. Por fim1 identificou-se :ue o L'$ ficava realmente verde durante Hs e res/onderam-se as :uest<es /resentes na /r3tica.

. !T"#$U%&# T'(" )* # P )+,F-..* /ode ser /ro0ramado de diferentes formas1 /or2m at2 a /r3tica anterior utili4ou-se a/enas a lin0ua0em em *ssem5l6. )omo j3 visto1 essa lin0ua0em 2 eficiente devido 7 /ro8imidade com o hard9are da m3:uina1 /ossui r3/ida velocidade1 /or2m 2 muito com/le8a e a /orta5ilidade de seus /ro0ramas 2 5ai8a. $evido a essas limita;<es1 a Lin0ua0em ) foi criada em +=.>1 /or $ennis "itchie1 da ?ell La5oratories e consistia1 na realidade1 em uma lin0ua0em de nvel intermedi3rio entre o *ssem5l6 e as lin0ua0ens de alto nvel. 'la sur0iu /ara /ermitir a constru;o de /ro0ramas de maneira mais sim/les e clara1 resultando em /ro0ramas mais com/le8os :ue os feitos em *ssem5l6. *l2m disso1 um c@di0o escrito em ) 2 /ort3vel em rela;o a sua estrutura1 ou seja1 2 /ossvel ser ada/tado /ara os mais diferentes ti/os de com/utadores e sistemas o/eracionais ABindo9s1 Linus etc.C de forma otimi4ada. ' tam52m /ossui 0rande :uantidade de o/eradores1 utili4a 5i5liotecas /adroni4adas e os c@di0os 0eram /ro0ramas e8ecut3veis e eficientes atrav2s da com/ila;o dos mesmos. . D*T'" * S UT L E*$#S Soft9are DPL*? Soft9are P"#T'US

Fi0ura + )ircuito /ara a IM /r3tica do La5orat@rio de Dicrocontroladores

# c@di0o-fonte do +N /ro0rama encontra-se a5ai8oO + Pinclude Q+,f-..a.hR > Pfuses FT1!#B$T G Puse dela6 AclocSTIUUUUUUC VVclocS de ImW4

I H void main ACX , . 9hileA+CX - out/utKhi0hA/inK5.CY = dela6KmsAHUUUCY +U out/utKlo9A/inK5.CY ++ out/utKhi0hA/inK5,CY +> dela6KmsA>UUUCY +G out/utKlo9A/inK5,CY +I out/utKhi0hA/inK5HCY +H dela6KmsAIUUUCY +, out/utKlo9A/inK5HCY +. Z +- Z # c@di0o-fonte do >N /ro0rama est3 re/resentado a5ai8oO + Pinclude Q+,f-..a.hR > Pfuses FT1!#B$T G Puse dela6 AclocSTIUUUUUUC I void main ACX H int aY , 9hileA+CX . aTUY - out/utKhi0hA/inK5.CY = ifAin/utA/inKcGCTTUCX +U 9hile AaQ+CX ++ ifAin/utA/inKcGCTT+CX +> dela6KmsAHUUUCY +G out/utKlo9A/inK5.CY +I out/utKhi0hA/inK5,CY +H dela6KmsA>UUUCY +, out/utKlo9A/inK5,CY +. out/utKhi0hA/inK5HCY +- dela6KmsAIUUUCY += out/utKlo9A/inK5HCY >U a[[Y >+ ZVVfim >N if >> ZVVfim 9hile >G ZVVfim +N if >I ZVVfim void main *demais1 a fun;o J$isassem5l6 Listin0L no DPL*? foi ca/a4 de converter um c@di0o em ) /ara *ssem5l6. )om 5ase nessa a/lica;o1 fe4-se a converso do c@di0o do +N /ro0rama e /erce5eu-se :ue o /ro0rama se tornou 5em maior. Por2m1 a/@s uma an3lise do mesmo1 notou-se :ue esse /oderia ser resumido. Por e8em/lo1 a instru;o Pinclude Q+,f-..a.hR em ) foi convertida na se0uinte formaO UUUU GUUU D#\LB U UUU+ UU-* D#\BF U8a UUU> >-+= ]#T# U8+= UUUG UUUU !#P Lo0o1 essas instru;<es /oderiam ser facilmente su5stitudas em *ssem5l6 /orO Pinclude Q/ic+,f-..a.incR. Perce5eu-se tam52m :ue as instru;<es /ara ativar a sada de um /ino em ? ou desli0ar a mesma eram re/etitivas.

Por e8em/lo1 no inicio do /ro0rama a instru;o Jout/utKlo9A/inK5.C foi su5stituda /or O UU>' +,-G ?SF U8G1 U8H A+M instru;oC UU>I +G-, ?)F U8,1 U8. A>M instru;oC UU>H +>-G ?)F U8G1 U8H AGM instru;oC UU>, +.-, ?SF U8,1 U8. AIM instru;oC Para otimi4ar esse c@di0o1 notou-se :ue os 5ancos de memorias sem/re foram confi0urados /ara acionar T" S? e confi0urar ? como sada1 em se0uida acionar P#"T? e definir :ual ser3 a sada. )om 5ase nisso1 se fosse utili4ado as o/;<esO 5anSsel T" S?1 movl9 ?^UUUUUUU^ e mov9f T" S? no inicio do /ro0rama1 seria omitido o uso da +M e da >M instru;o do e8em/lo acima diversas ve4es1 economi4ando = instru;<es. J3 o acionamento da P#"T? /resente na GM instru;o foi feita , ve4es no /ro0rama1 o :ue /oderia ter sido su5stitudo /ela o/;o 5anSsel P#"T? a/@s as confi0ura;<es feitas em T" S?1 economi4ando H instru;<es. *l2m disso1 re:uereu-se :ue a fun;o Jdela6KmsL fosse su5stituda /ela utili4a;o do timerU no +N /ro0rama. *o fa4er as atuali4a;<es1 o c@di0o fonte tornou-se assimO Pinclude Q+,f-..a.hR Puse dela6AclocS T IUUUUUUC Pfuses FT1!#B$T int cont5.1cont5,1cont5H1fla01fla0+Y PintKtimerU void trataTD"U AC X if Afla0+TTUC X doX cont5.[[Y if Acont5.TT.,CX fla0T+Y fla0+TIY Z Z9hileAfla0+TTUCY Z elseX if Afla0+TT+C X doX cont5,[[Y if Acont5,TTGUCX fla0+THY fla0T>Y Z Z9hileAfla0+TT+CY Z elseX doX cont5H[[Y if Acont5HTT,+CX fla0+T,Y fla0TUY cont5.TUY cont5,TUY cont5HTUY Z Z9hileAfla0+TT>CY Z

Z Z void main AC X setu/KtimerKU A"T))K !T'"!*L _ "T))K$ \K>H,CY ena5leKinterru/ts A0lo5al _ intKtimerUCY cont5.TUY cont5,TUY cont5HTUY fla0TUY 9hileA+CX if Afla0TTUCX out/utKlo9 A/inK5HCY out/utKhi0h A/inK5.CY fla0+TUY Z if Afla0TT+CX out/utKlo9 A/inK5.CY out/utKhi0h A/inK5,CY fla0+T+Y Z if Afla0TT>CX out/utKlo9 A/inK5,CY out/utKhi0h A/inK5HCY fla0+T>Y Z Z Z !otou-se :ue nesse caso o L'$ ficava acesso durante a/ro8imadamente I1=, se0undos e no Hs como deveria. sso ocorreu /or:ue foi difcil determinar um e8ato tem/o ao utili4ar o timerU1 e esse valor foi o mais /r@8imo /ossvel. $esde :ue o timerU contava de U a >HH e a/enas a/@s essa conta0em reali4ava o estouro. Tam52m foi utili4ado um oscilador de IDWE1 um /rescaler de >H,1 e um contador e8tra de .,. Lo0o o tem/o da interru/;o verde durou TT>HH`>H,`.,`+usTI1=,+>-Us. *l2m disso1 o5teve-se um atraso sem a utili4a;o do timerU e do Jdela6L. Por e8em/lo1 as instru;<es a5ai8o demoram U1=.H se0undos /ara serem e8ecutadas1 a/ro8imadamente +UUUms. doX forA8TUY8Q>HHY8[[CX forA6TUY6Q>HHY6[[CX Z Z 4[[Y Z9hileA4Q+HCY Por fim1 analisaram-se as vanta0ens e desvanta0ens de usar o timerU ao inv2s do dela6. 'ntre as desvanta0ens notou-se a com/le8idade /ara confi0urar o timerU e o aumento do c@di0o fonte. J3 entre as vanta0ens1 o timerU

/oderia 0erar diversas conta0ens e /ermitia :ue o microcontrolador reali4asse diversas o/era;<es simultaneas1 en:uanto o Jdela6L interrom/ia o /ro0rama com/letamente ao ser acionado. Por e8em/lo1 deve-se /rojetar um contador e :ue durante essa conta0em um led /is:ue v3rias ve4es em certo tem/o. Para :ue o led li0ue e desli0ue nesse /erodo1 usar a fun;o dela6 interrom/eria o contador durante o atraso de tem/o1 en:uanto o timerU no ocasionaria em tal /ro5lema. \. )#!)LUS&# )om 5ase no IN e8/erimento do La5orat@rio de Dicrocontroladores1 entendeu-se a im/ortancia da Lin0ua0em ) /ara a /ro0rama;o do P )+,F-..* e a/renderam-se al0umas instru;<es a/licadas ao DPL*?. *l2m disso1 analisou-se o c@di0o corres/ondente em *ssem5l61 /erce5endo1 ento1 :ue os c@di0os em ) eram 5em menores e :ue /oderiam ser entendidos com maior facilidade. Portanto1 /ro0ramar em ) tornou-se mais efica4 :ue em *ssem5l6. Tam52m1 verificaram-se diversas formas /ara 0erar um JatrasoL no microcontrolador1 :ue foi reali4ado atrav2s da fun;o Jdela6KmsL1 da confi0ura;o do timerU ou /or uma /e:uena rotina semelhante ao :ue era feito em *ssem5l6. 'nto1 a /r3tica reali4ada a/resentou resultados satisfat@rios1 visto :ue se conse0uiu /rojetar os /ro0ramas re:ueridos no P"#T'US e familiari4ou-se com as instru;<es da Lin0ua0em em ). "'F'"b!) *S ? ?L #]"*F )*S c+d )#L'%&# TUTP"#. Tutoriais so5re /ro0rama;o de microcontroladores. )am/inasO Sol5et Ltda1 >UU.. c>d EU" T*1 Darcos. Dicrocontroladores + $is/onvel emO htt/OVV999.uf/i.5rVsu5siteFilesV4uritaVar:uivosVfilesVUFP -DicrocontroladoresKH-Dicrocontroladores v+K+./df. *cessado emO U= de jan. >U+I. cId Dicrochi/ Tec. nc.1 JP )+,F-.F* - >-VIUVII-Pin 'nhanced Flash DicrocontrollersL1 $ata Sheet1 >UUG. $is/onvel em O htt/OVV/df.datasheetcatalo0.comVdatasheetVmicrochi/VGGU >Ga./df. *cessado emO U= de jan. >U+I. cHd P'"' "*1 F35io. Dicrocontroladores P )O Pro0rama;o em ) V F35io Pereir1 . ed. So PauloO erica1 >UU..

Você também pode gostar