Escolar Documentos
Profissional Documentos
Cultura Documentos
MICROCONTROLADORES
Linguagem C
Teresina - 2012
Sumrio
%. &ntrodu'(o
%.%. C vs )sse* l+
%. &ntrodu'(o
Introduo
C vs Assembly C1digo )sse* l+
2era u* c1digo co*pilado 3en4uto5 6eloz Controle 3total5 so re as opera'7es C1digos fonte e4tensos 8ifcil de progra*ar 8ifcil de entender 8ifcil *anuten'(o 2rande depend9ncia do hard!are /ai4o reaproveita*ento de c1digo &*possi ilidade de *igra'(o para outros :C;s
Microcontroladores $ Prof. Marcos Zurita
Introduo
C1digo C
C1digo co*pilado =uase t(o 3en4uto5 =uanto ).M >uase t(o veloz =uanto ).M ) stra'(o das opera'7es e* ai4o nvel C1digos?fonte en4utos F@cil de progra*ar F@cil de entender F@cil *anuten'(o /ai4a depend9ncia do hard!are /o* reaproveita*ento de c1digo Possi ilidade de integra'(o co* ).M Menor velocidade e* opera'7es crticas
Microcontroladores $ Prof. Marcos Zurita
<
Introduo
Como Projetar Sistemas om !i ro ontroladores
8espe'a?se da sua fa*lia e de seus pais por alguns dias...
Introduo
E4a*ine 3todos5 os *icrocontroladores de =ue voc9 disp7e CnD de E".E conver? soresE te*poriza? doresE etc.F Escolha o =ue *elhor atende aos re=uisitos de funciona? *ento do siste*a deseGado.
ProGete eE se possvelE construa u* prot1tipo do siste*a =ue ser@ con? trolado pelo uCE incluindo perifricos =ue ser(o utiliza? dos na aplica'(o real.
Introduo
Escreva o progra*a e* u*a linguage* de alto nvel para progra*ar o uC. Escolha ta* * u* si*ulador para au4iliar o desenvolvi*ento.
Co* alguns pucos cli=ues o progra*a inteiro se converte e* algo co*preensvel pelo uC. Utilize u* gravador para progra*a?lo.
Introduo
)gora o uC G@ est@ suficiente*ente *a? duro para co*e'ar a dar retorno a sociedadeJ Colo=ue o chip progra*ado no siste*aE respire fundo e ligue?oJ
#. Co*piladores
%K
Com"iladores
Alguns Com"iladores "ara PIC
Assembly
MP).M Cco*piladorF MP-)/ Cdepura'(oE e*ula'(o e grava'(oF Pic)nt pico?C P&L&E C#C CC<4 Mi?Tech P&CC MiNroC
CCS
%%
Com"iladores
# Com"ilador CCS C
.uporta toda linha de :C;s P&C CP&C%#E %0E %A e %HF &ntegra'(o co* o MP-)/ Co*pati ilidade co* )O.& e &.P 2era c1digos eficientes 2rande diversidade de i liotecas e fun'7es 2rande porta ilidade de c1digo &*ple*enta'(o natural de ponto flutuante )ssistente de cria'(o de c1digo 2era'(o auto*@tica de c1digo ).M e relat1rios 2rande nvel de a stra'(o no uso deQ
%#
,. ) -inguage* C do CC.
%,
A Linguagem C do CCS
A Linguagem do CCS C
%0
A Linguagem C do CCS
$ari%eis e Ti"os de &ados
char int float void int% intH int%A int,# oolean +te
Microcontroladores $ Prof. Marcos Zurita
%<
A Linguagem C do CCS
!odi'i adores de Ti"o
)ltera* o ta*anho ou a for*a co* =ue os tipos s(o tratados. signed unsigned short long
%A
A Linguagem C do CCS
Ti"os &is"on(%eis no CCS C
Tipo short int, int1, boolean char signed char unsigned char int, int8, byte signed int, signed byte unsigned int, unsigned byte long int, int16 signed long int unsigned long int int32 signed int32 unsigned int32 float Tamanho em Bits 1 8 8 8 8 8 8 16 16 16 32 32 32 32 Faixa de Valores 0 ou 1 0 a 255 -128 a 127 0 a 255 0 a 255 -128 a 127 0 a 255 0 a 65.535 -32.768 a 32.767 0 a 65.535 0 a 4.294.967.295 -2.147.483.648 a 2.147.483.647 0 a 4.294.967.295 -3.4 1038 a 3.4 1038
%B
A Linguagem C do CCS
)so de $ari%eis
int cont; unsigned int ciclo, j; float tensao; cont = 0; ciclo = 1; j = ciclo + 1; tensao = 3.496; // contador de 8 bits // ciclos de maquina // tensao lida
%H
A Linguagem C do CCS
!atri*es
Cada ele*ento deste conGunto pode ser acessado atravs de seu ndice no conGunto C%R ele*ento S ndice KFQ
b = v[2]; // recebe o 3 elemento v[0] = 34; // atribui 34 ao 1 elemento
%I
A Linguagem C do CCS
!atri*es !ultidimensionais
[0][0] = 200; // atribui 200 ao elemento 0,0 [0"f][0"f] = 0; // atribui 0 ao elemento 15,15 ! = #0,0,1,0 // reenc!e toda a matriz 1,1,0,0$;
#K
A Linguagem C do CCS
Strings
Trata*?se de u* conGunto de caracteres. Pode* ser declaradas na for*a de vetores ou de ponteiros. >uando declaradas so a for*a de vetorE deve* ter se*pre o ta*anho do nT*ero *@4i*o de caracteres U %.
c%a& 'sg[14]; c%a& 'es[2][4]; // strin" de ate 13 caracteres // #etor de strin"s de 3 caracteres reenc!e 13 caracteres
#%
A Linguagem C do CCS
Casting - Con%erso de Ti"os
Casting u* recurso para for'ar o co*pilador a tratar u*a vari@vel Cou e4press(oF co*o sendo de u* tipo diferente da=uele =ue foi declarado no progra*a. .eu uso pode ser necess@rio e* opera'7es envolvendo vari@veis de tipos diferentes. .inta4eQ
,ti o-destino. e" &essao-a-se&-conve&tida;
E4e*ploQ
int16 adc; float tensao; // #ari$#el ti o %int& // #ari$#el ti o %'loat&
adc = fa/-conve&sao-01,.; // %adc& est$ entre 0 e 1023 tensao = ,float.adc21023; // con#erte %adc& ara 'loat
Microcontroladores $ Prof. Marcos Zurita
##
A Linguagem C do CCS
P uso de casting re=uer alguns cuidados =ue deve* ser o servados pelo progra*adorQ Casting de u*a e4press(o co* sinal para u*a vari@vel se* sinalQ pode gerar resultados inesperados caso o valor seGa negativo Ce4.Q int para unsigned intFV Casting de u*a vari@vel"e4press(o cuGo nT*ero de its *aior =ue o da vari@vel de destinoQ o resultado ser@ truncadoE isto E todos os its de orde* superior ao de *aior orde* da vari@vel de destino ser(o desprezados Ce4.Q int16 para int8FV Casting de u* nT*ero para u* u* caractere n(o gera o caractere do nT*ero Ci.e.E CcharF< W X<XFE o invs disto resultar@ nu* caractere cuGo valor ).C&& corresponde ao nT*ero dado. #,
Microcontroladores $ Prof. Marcos Zurita
A Linguagem C do CCS
Casting de u* ponto flutuante CfloatF para u* tipo inteiro CintE int16 ou int32FE pode gerar resultados inesperadosQ
Caso o valor contido seGa *aior do =ue o aceit@vel pela vari@vel de destinoE *es*o =ue ela seGa u* tipo int,# Cfloat pode co*portar at ,.04%K,H en=uanto u* int32 se* sinal vai at 0.#I4%KIFV Float u* tipo co* sinalE logoE suGeito aos *es*os pro le*as de convers(o para tipos se* sinalE caso o valor contido seGa negativo. ) convers(o deseG@vel pode re=uerer arredonda*entoE o =ue n(o feito pelo cast. E4.Q
int 3; // #ari$#el ti o %int& float gan%o=4.99; // #ari$#el ti o %'loat& 3 = ,int.gan%o; // ( #ale 5 e n)o 6*
Microcontroladores $ Prof. Marcos Zurita
#0
A Linguagem C do CCS
$ari%eis +lobais e Lo ais
+lobais .(o acessveis e* =ual=uer ponto do progra*a. .1 s(o destrudas no encerra*ento do progra*a. Lo ais .1 s(o acessveis dentro da fun'(o onde fora* declaradas. .(o destrudas no encerra*ento da fun'(o.
#<
A Linguagem C do CCS
,-./ 6ari@vel glo al vs local
5include 6stdio.%7 int " = 3; void 'ain ,. # int 8 = 910; " = " + 8; &intf,(:o'a = ;i(, ".; $ // #ari$#el "lobal
// #ari$#el local
#A
A Linguagem C do CCS
!odi'i ador Stati
P riga o co*pilador a *anter a vari@vel nu*a posi'(o fi4a da *e*1ria. Evita =ue a vari@vel seGa destruda no encerra*ento da fun'(o. .(o inicializadas co* KV
#B
A Linguagem C do CCS
,-./ Modificador .tatic
5include 6stdio.%7 int " = 3; // #ari$#el "lobal
b8te inc&e'enta,. # static b8te ciclo; // #ari$#el local est$tica &etu&n ciclo++; $ void 'ain,. # " = " + inc&e'enta,.; " = ," + 2. < inc&e'enta,.; &intf,(=oisa = ;"(, ".; $
Microcontroladores $ Prof. Marcos Zurita
#H
A Linguagem C do CCS
Ponteiros
Ponteiro u*a vari@vel =ue cont* o endere'o de outra vari@vel. Pode* ser utilizados para aloca'(o dinY*icaE podendo su stituir *atrizes co* *ais efici9ncia Cpor n(o ter ta*anho fi4oF. .inta4eQ
ti o <no'e-do- ontei&o;
0 ? Zetorna o endere'o apontado pelo ponteiroV 1 ? Zetorna o conteTdo ar*azenado no endere'o apontado pelo ponteiro.
Microcontroladores $ Prof. Marcos Zurita
#I
A Linguagem C do CCS
,-./ Ponteiros
int < t&; int " = 10; int 8 = 24; t& = >"; &intf,("=;i?n(, < t&.; t& = >8; &intf,(8=;i?n(, < t&.; // tr + um onteiro ara int // x + uma #ari$#el ti o int // , + uma #ari$#el ti o int // tr a"ora a onta // im rime %x-10& // tr a"ora a onta // im rime %,-20& ara %x& ara %x&
,K
A Linguagem C do CCS
Constantes
6alores *antidos fi4os na *e*1ria durante toda a e4ecu'(o do progra*a. Todo valor atri udo e4plicita*ente no c1digo potencial*ente u* candidato a ser convertido e* constante. Pode* assu*ir =ual=uer u* dos tipos nativos do CE e sere* declaradas co*o he4adeci*aisE octaisE strings e constantes de controle C arra invertidaF. 8eve* ser declaradas e* cai4a alta Cpor conven'(oF.
,%
A Linguagem C do CCS
,-./ Constantes
5include 6stdio.%7 5define =@A:0 24 //const. ti o int 5define @B)C0-=@A:0 DE out&a coisa( //const. ti o strin" 5define F0A:-=@A:0 14.32+ //const. ti o 'loat void 'ain,. # float j = 0.0; c%a& 'sg[14] = @B)C0-=@A:0 ; j = j + =@A:0 + F0A:-=@A:0; &intf,(=oisas = ;f(, j.; $
Microcontroladores $ Prof. Marcos Zurita
,#
A Linguagem C do CCS
,-"ress2es Constantes
3ormato &es rio
OT*ero deci*al inteiro OT*ero deci*al e* ponto flutuante OT*ero octal OT*ero he4adeci*al OT*ero in@rio Caractere Caractere octal Caractere he4adeci*al Caractere especialE onde [c pode serQ [n Oova linha [r Zetorno de carro [t Ta ula'(o [ Zetrocesso CBackspaceF [f .alta For*ul@rio [X )spas si*ples [5 )spas duplas [[ /arra invertida
Microcontroladores $ Prof. Marcos Zurita
,,
A Linguagem C do CCS
#"eradores Aritm4ti os
+ 9 < 2 % ++ 99
.o*a Cinteira e ponto flutuanteF .u tra'(o ou troca de sinal Cinteira e ponto flutuanteF Multiplica'(o Cinteira e ponto flutuanteF 8ivis(o Cinteira e ponto flutuanteF Zesto de divis(o Cde inteirosF &ncre*ento Cinteiro e ponto flutuanteF 8ecre*ento Cinteiro e ponto flutuanteF
,0
A Linguagem C do CCS
,-./ Pperadores )rit*ticos
void 'ain,. # int " = 10, 8 = 1H, / = 4; float f = 13.0f; " = 8 + /; 8 = 23 2 2; f = 23.0 2 2; / = 24 ; 4; "++; /99; &intf,(" &intf,(8 &intf,(/ &intf,(f $
Microcontroladores $ Prof. Marcos Zurita
// // // // // //
x , ' z x z
22 11 11.5 4 15 3
= = = =
A Linguagem C do CCS
#"eradores 5ela ionais e L6gi os
Com"arao ,ntre $alores
#"erador 7 7= 6 6= == I= !aior "ue !aior ou igual a !enor "ue !enor ou igual a #gual a $iferente de &es rio
,A
A Linguagem C do CCS
#"eradores de 9its
,B
A Linguagem C do CCS
,-./ Pperadores de /its
b8te s' = 0b10001100; b8te ", 8, /, 3; / = Ks'; " = s' 77 3; 8 = s' 66 2; 3 = " J 8; 3 = " > 8; 3 = " L 8; // sm - 140 // // , a"ora #ale 0b01110011 // x a"ora #ale 0b00010001 // , a"ora #ale 0b00110000 // ( a"ora #ale 0b00110001 // ( a"ora #ale 0b00010000 // ( a"ora #ale 0b00100001
,H
A Linguagem C do CCS
5egistros em C 7stru t8
U* registro u* conGunto de vari@veis agrupadas e* u*a *es*a refer9ncia. Pode* conter vari@veis de tipos distintos. )s vari@veis contidas pode* ter seu ta*anho e* its alterado atravs do *odificador 3Q5. .inta4eQ
st&uct nome.estrutura # ti o1 nome.#ar1 /0bits1; ti o2 nome.#ar2 /0bits1; 2...3 ti o4 nome.#ar4 /0bits1; $ nome.#ar;
Microcontroladores $ Prof. Marcos Zurita
,I
A Linguagem C do CCS
,-./ Zegistros e* C CstructF
st&uct lcd- in # int1 enable; int1 &s; int1 &M; int1 unused; int dataN4; $ lcd; // cria a estrutura %lcd. in& // bit 00 cam o %enable& // bit 10 cam o %rs& // bit 20 cam o %r5& // bit 30 cam o %unused& // bits 4670 cam o %data& 24 bits3 // %lcd&0 #ari$#el do ti o %lcd. in&
c%a& c, c%; st&uct lcd-b3 lcd- in; // %lcd.b(& + do ti o %lcd. in& lcd.data = 0"9; c = lcd.data; c% = GaG; lcd-b3.enable = 0; lcd-b3.data = c%;
Microcontroladores $ Prof. Marcos Zurita
0K
A Linguagem C do CCS
)ni2es em C 7union8
Per*ite a cria'(o de vari@veis capazes de suportar dife? rentes tipos de dados nu* *es*o espa'o de *e*1ria. Pcupa na *e*1ria apenas o ta*anho da *aior vari@vel declarada. P ta*anho das vari@veis pode ser alterado por 3Q5. .inta4eQ
union nome.uniao # ti o1 nome.#ar1 /0bits1; ti o2 nome.#ar2 /0bits1; 2...3 ti o4 nome.#ar4 /0bits1; $ nome.#ar;
Microcontroladores $ Prof. Marcos Zurita
0%
A Linguagem C do CCS
,-./ Uni7es e* C CunionF
union d-ifc # // 8ria a uni)o %d.i'c& de 32 bits int32 i24N24; // 6 ode conter um inteiro de 24 bits float f; // ou ode conter um 'loat c%a& c[3]; // ou ode conter 3 caracteres $ dado; // %dado&0 #ari$#el do ti o %d.i'c& dado.i24 = 0"204; dado.f = 3.14; dado.c%a& = G iG;
// %dado& cont+m um inteiro de 24 bits // %dado& cont+m a"ora um 'loat // %dado& cont+m a"ora uma strin"
Oote =ue 3dado5 ora cont* u* inteiro de #0 itsE ora cont* u* float C,# F ora cont* u*a stringE e* ora a uni(o ocupe ,# its de *e*1ria durante todo te*po. Ca e ao progra*ador o conheci*ento de =ual tipo de vari@vel foi ar*azenada *ais recente*ente na uni(o.
Microcontroladores $ Prof. Marcos Zurita
0#
A Linguagem C do CCS
,numera2es 7,num8
Por padr(oE o pri*eiro identificador te* valor zeroE sendo o valor de cada identificador su se=uenteE o valor do identificador anterior U %.
enu' se'afo&o #OPC1P, 0F0CPQ@=2, OPCFPQR@$; // 9:;<:-0, =>=;:?@-2, 9:;>:?A@-3 enu' udc' #BSA101P=1, 1PTPS0=10, =PS)PS0=100, FAQR0C=1000$; // B4C<=<:-1, <:D:4=-10, 8:4E:4=-100, >C?A=;-1000 valo& = '<FAQR0C + c<=PS)PS0 + d<1PTPS0 + u<BSA101P; estado = OPC1P;
Microcontroladores $ Prof. Marcos Zurita
0,
A Linguagem C do CCS
&e'inio de Ti"os 7ty"ede'8
T+pedef per*ite criar u* novo tipo de vari@velE al* dos tipos nativos da linguage* CintE charE floatE etcF. .inta4eQ
t8 edef /ti o.quali'icador1 /nome.ti o1 /declaraF)o1;
E4e*ploQ
t8 edef intH o&ta 0 = 0, U; o&ta; // cria um no#o ti o c!amado % orta& = e G s)o do ti o % orta&
// as #ari$#eis
U = 0"00;
00
A Linguagem C do CCS
,-.2/ 8efini'(o de Tipos Ct+pedefF
t8 edef st&uct coo&d# // cria um no#o ti o c!amado %coord& int32 os-"N24; int32 os-8N24; $; float asso-", asso-8;
void 'ain,. # coo&d coo&d-ini, coo&d-fin; // no#o ti o sendo usado* // instruFHes... asso-" = ,coo&d-fin." 9 coo&d-ini.".2100; asso-8 = ,coo&d-fin.8 V coo&d-ini.8.2100; // mais instruFHes... $
Microcontroladores $ Prof. Marcos Zurita
0<
A Linguagem C do CCS
,strutura de Condio :i';
0A
A Linguagem C do CCS
,strutura de Condio :s<it =;
0B
A Linguagem C do CCS
,strutura de 5e"etio :'or;
0H
A Linguagem C do CCS
,strutura de 5e"etio :<=ile;
22 codigo
0I
A Linguagem C do CCS
,strutura de 5e"etio :do-<=ile;
<K
A Linguagem C do CCS
3un2es
ConGunto de rotinas agrupadas de *odo a realizar u*a deter*inada tarefa. Melhor *aneira de a strair e agrupar trechos de c1digo =ue se repete*. 8efinida por u* no*eE u* tipo de retornoE argu*entos e corpo. Ps argu*entos s(o opcionaisE e o retornoE =uando n(o for necess@rioE deve ser void.
<%
A Linguagem C do CCS
,./ Fun'7es
void &intRelloWo&d,. # &intf,DRello Wo&ldI(.; $ int16 so'a,intH a, intH b. # &etu&n a + b; $ void 'ain,. # int16 s = so'a,4, 14.; &intf,(so'a = ;l?n(, s.; &intRelloWo&d,.; $
Microcontroladores $ Prof. Marcos Zurita
<#
A Linguagem C do CCS
#"erador Ternrio
Ta* * conhecido co*o 3operador de e4press(o condicional5. ] u*a for*a co*pacta da estrutura if-else. .inta4eQ
condicao X e" &essao1 N e" &essao2;
E4e*ploQ
'ini'o = ,"68.X " N 8; //retorna o menor ar"umento // o cIdi"o acima equi#ale a0 if ,"68. 'ini'o = "; else 'ini'o = 8;
Microcontroladores $ Prof. Marcos Zurita
<,
A Linguagem C do CCS
!a ros
8e *aneira se*elhante a declara'(o de constantesE *acros s(o u* recurso de su stitui'(o te4tual de trechos de c1digoE co*portando?se de *aneira se*elhante a pe=uenas fun'7es. .inta4eQ
5define no'e-'ac&o,a&g1, a&g2, ..., a&gS. e" &essao;
E4e*ploQ
5define 'in,",8. ,,"68.X"N8. //retorna o menor ar"umento int a, b, c, d, 'eno&; // instruFHes... d = 'in,a,b.; // "era o cIdi"o %d-22aJb3Ka0b3L& 'eno& = 'in,d,c.; // "era o cIdi"o %menor-22dJc3Kd0c3L&
Microcontroladores $ Prof. Marcos Zurita
<0
9ibliogra'ia
Milan 6erleE PIC Microcontrollers Programming in CE %a Ed.E MiNroEleNtroniNaE #KKI. )l erto Oo oru Mi+adairaE Microcontroladores PIC18: aprenda e programe em liguagem CE #a Ed.E Editora ]ricaE #K%%. )ndre! .. Tanen au*E Organizao Estruturada de ComputadoresE <a Ed.E PearsonE #KKA. Microchip Tec. &nc.E 8- it PIC MicrocontrollersE 8ata .heetE #K%K. Microchip Tec. &nc.E PIC1!"8#$% - &8'()'((-Pin En*anced "las* MicrocontrollersE 8ata .heetE #KK,.
Microcontroladores $ Prof. Marcos Zurita
<<