Vous êtes sur la page 1sur 121

Notas de Aula Programao Embarcada - ELT024

Rodrigo Maximiano Antunes de Almeida


Instituto de Engenharia de Sistemas e Tecnologia da Informao,
Universidade Federal de Ita jub,
Minas Gerais,
Brasil

rodrigomax @ unifei.edu.br
13 de Dezembro de 2013

1 Licenciado

sobre

Criative Commons Attribution-NonCommercial-NoDerivs

Contedo
1 Introduo
1.1
1.2
1.3

1.4
1.5
1.6
1.7

1.8

1.9
1.10
1.11
1.12

1.13

1.14

vingugem g F F F F F F F F F F F F F F F F F F F F
rrdwre utilizdo F F F F F F F F F F F F F F F F F
emiente de progrmo F F F F F F F F F F F F F
snstlo F F F F F F F F F F F F F F F F F F
gon(guro do grvdor sghP F F F F F
grio de um novo projeto F F F F F F F
sndento e pdro de esrit F F F F F F F F F F
gomentrios F F F F F F F F F F F F F F F F F F F F F
erquivos F e Fh F F F F F F F F F F F F F F F F F F F
hiretivs de ompilo F F F F F F F F F F F F F F
5inlude F F F F F F F F F F F F F F F F F F
5de(ne F F F F F F F F F F F F F F F F F F F
5ifdefD 5ifndefD 5else e 5endif F F F F F F
ipos de ddos em g F F F F F F F F F F F F F F F F
epresento inri e hexdeiml F F F
wodi(dores de tmnho e sinl F F F F F
wodi(dores de esso F F F F F F F F F F
wodi(dores de posiionmento F F F F F
wodi(dor de persistni F F F F F F F F
yperes ritmtis F F F F F F F F F F F F F F F
puno min@A F F F F F F F F F F F F F F F F F F F
otins de tempo F F F F F F F F F F F F F F F F F F
yperes om its F F F F F F F F F F F F F F F F F
xy F F F F F F F F F F F F F F F F F F F F F
exh F F F F F F F F F F F F F F F F F F F F F
y F F F F F F F F F F F F F F F F F F F F F F
y F F F F F F F F F F F F F F F F F F F F F
hift F F F F F F F F F F F F F F F F F F F F F
vigr um it @it setA F F F F F F F F F F F
hesligr um it @it lerA F F F F F F F F F
ror o vlor de um it @it )ipA F F F F
eri(r o estdo de um it @it testA F F
grindo funes trvs de de(ne9s F F F
heug de sistems emrdos F F F F F F F F F F
ixternlizr s informes F F F F F F F F
rogrmo inrementl F F F F F F F F F
gher possveis pontos de memoryElek F
guiddo om frgmento d memri
ytimizo de digo F F F F F F F F F F F
eproduzir e isolr o erro F F F F F F F F F
onteiros e endereos de memri F F F F F F F F F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

I
P
Q
Q
R
S
U
W
W
W
II
II
IP
IQ
IR
IS
IT
IU
IU
IV
IW
PI
PP
PQ
PQ
PR
PR
PR
PS
PT
PT
PU
PV
QP
QP
QQ
QQ
QQ
QQ
QQ
QR

2 Arquitetura de microcontroladores
2.1
2.2
2.3

2.4

eesso memri F F F F F F F F F F F F F F F F F F F F F F
glok e tempo de instruo F F F F F F F F F F F F F F F F
isquem eltrio e iruitos importntes F F F F F F F F F
wultiplexo nos terminis do miroontroldor
egistros de on(guro do miroontroldor F F F F F F

3 Programao dos Perifricos


3.1
3.2
3.3
3.4

3.5

3.6

3.7

3.8

3.9

3.10
3.11
3.12
3.13

eesso s portsdo miroontroldor


gon(guro dos perifrios F F F F F F
frrmento de ved's F F F F F F F F F F
hisply de U segmentos F F F F F F F F F
wultiplexo de displys F F F
grio d iliote F F F F F
veitur de tels F F F F F F F F F F F F
heoune por softwre F F F F F
errnjo de leitur por mtriz F
grio d iliote F F F F F F
hisply vgh PxIT F F F F F F F F F F F
grio d iliote F F F F F
gomunio seril F F F F F F F F F F F
sPg F F F F F F F F F F F F F F F F
PQP F F F F F F F F F F F F F F
grio d iliote F F F F F F
gonversor eh F F F F F F F F F F F F F F
ilementos sensores F F F F F F F
roesso de onverso eh F F F
grio d iliote F F F F F F
ds w F F F F F F F F F F F F F F
grio d iliote F F F F F F
imer F F F F F F F F F F F F F F F F F F
eproduo de ons F F F F F F F F F F
snterrupo F F F F F F F F F F F F F F F
thdog F F F F F F F F F F F F F F F F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

4.1
4.2
4.3

5.1
5.2
5.3

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

yne single loop F F F F F F F F F F F F F F F F F F F F


snterrupt ontrol system F F F F F F F F F F F F F F F
goopertive multitsking F F F F F F F F F F F F F F
pixo de tempo pr exeuo dos slots F
tilizo do tempo livre pr interrupes

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

F
F
F
F
F

5 Anexos

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

4 Arquitetura de desenvolvimento de software

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F

36

QV
RH
RI
RP
RQ

45
RT
RV
SI
SP
SR
SS
SU
SU
TH
TP
TR
TV
UP
UP
UT
UW
VP
VP
VR
VT
VV
VW
WP
WR
WS
WW

100

IHI
IHP
IHR
IHU
IHV

110

on(gFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F III
sioFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IIP
snstlr grvdoresGdepurdores de sg em sistems xTR F F F F F F F F F F F F F F IIQ

ii

Lista de Figuras
IFI
IFP
IFQ
IFR
IFS
IFT
IFU
IFV
IFW
IFIH
IFII

gmds de stro de um sistem operionl F F F F F F F


esquis sore lingugens utilizds pr projetos de softwre
gon(guro ds ferrments de ompilo F F F F F F F F F F
snstlo do sghP F F F F F F F F F F F F F F F F F F F F F F F F
esumo ds on(gures do sghP no wvef F F F F F F F F
edido de tulizo do (rmwre do sghP F F F F F F F F F F
rojet ixplorer do wvef F F F F F F F F F F F F F F F F F F
rolem ds efernis girulres F F F F F F F F F F F F F F
oluo ds refernis irulres om 5ifndef F F F F F F F F F
voop in(nito de um devie driver gerndo erro no sistem F F
ixemplo de funionmento do vetor de interrupo F F F F F F

F F F F F F F
emrdo
F F F F F F F
F F F F F F F
F F F F F F F
F F F F F F F
F F F F F F F
F F F F F F F
F F F F F F F
F F F F F F F
F F F F F F F

F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F

I
P
R
S
T
T
U
IQ
IR
PH
PH

PFI
PFP
PFQ
PFR
PFS
PFT

erquitetur do miroontroldor sg IVfRSSH F F F F F F F F


wemri omo um rmrio F F F F F F F F F F F F F F F F F F
wemri e perifrios omo um rmrio F F F F F F F F F F F
egies de memris disponveis no sg IVfRSSH F F F F F F
isquem eltrioX wiroontroldor sg IVfRSSH F F F F F F
egistros de on(guro do miroontroldor sg IVfRSSH

F
F
F
F
F
F

F
F
F
F
F
F

F
F
F
F
F
F

F
F
F
F
F
F

F
F
F
F
F
F

F
F
F
F
F
F

F
F
F
F
F
F

F
F
F
F
F
F

F
F
F
F
F
F

F
F
F
F
F
F

F
F
F
F
F
F

QU
QV
QW
QW
RI
RQ

QFI
QFP
QFQ
QFR
QFS
QFT
QFU
QFV
QFW
QFIH
QFII
QFIP
QFIQ
QFIR
QFIS
QFIT
QFIU
QFIV
QFIW
QFPH
QFPI
QFPP
QFPQ
QFPR
QFPS

egistros de on(guro dos perifrios do sg IVfRSSH F F F F F


frrmento de ved's F F F F F F F F F F F F F F F F F F F F F F F F F
hisply de U egmentos F F F F F F F F F F F F F F F F F F F F F F F
higrm eltrio pr disply de U segmentos om nodo omum
vigo de R displys de U segmentos multiplexdos F F F F F F F F
giruito de leitur de hve F F F F F F F F F F F F F F F F F F F F F
ysilo do sinl no momento do hvemento F F F F F F F F F F
giruito de deoune F F F F F F F F F F F F F F F F F F F F F F F F F
tilizo de (ltro g pr deoune do sinl F F F F F F F F F F F
eldo em rrnjo mtriil F F F F F F F F F F F F F F F F F F F F
hisply elfnumrio vgh PxIT F F F F F F F F F F F F F F F F F F
hisply elfnumrio vgh PxIT E verso F F F F F F F F F F F F F F
grteres disponveis pr yw eHH F F F F F F F F F F F F F F F
grteres disponveis pr yw eHP F F F F F F F F F F F F F F F
isquemtio de ligo do disply de vgh F F F F F F F F F F F F F
frrmento sPg om vrios dispositivos F F F F F F F F F F F F F F
gonexo om oletor erto F F F F F F F F F F F F F F F F F F F F F
invio de ddos pr o rIQVH F F F F F F F F F F F F F F F F F F F
fyte de omndo do rIQVH F F F F F F F F F F F F F F F F F F F F
egistros internos do rIQVH F F F F F F F F F F F F F F F F F F F F
inl serilizdo pr trnsmisso em PQP F F F F F F F F F F F F
vmpd inndesente F F F F F F F F F F F F F F F F F F F F F F F
otenimetro F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
otenimetro omo divisor de tenso F F F F F F F F F F F F F F F
giruito integrdo vwQS F F F F F F F F F F F F F F F F F F F F F F F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

RV
SI
SP
SP
SQ
SU
SV
SV
SW
TI
TR
TR
TT
TU
TW
UQ
UQ
UR
UR
UR
UU
VP
VQ
VQ
VQ

iii

F
F
F
F
F
F

QFPT
QFPU
QFPV
QFPW

higrm de loos do vwQS F F F F F F


he(nio de fix de vlores pr eh de
gonversor nlgio digitl de P its F F
inis w om vrio do duty yle

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

VR
VS
VS
VV

RFI
RFP
RFQ
RFR

ixemplo de mquin de estdos F F F F F F F F F F F F


ixemplo d mudn de slots no tempo F F F F F F F
vinh de tempo de um sistem om I slot F F F F F F
gomportmento d linh de tempo om interrupes

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

F
F
F
F

IHR
IHV
IHV
IHV

iv

F
P
F
F

F F F
its
F F F
F F F

F
F
F
F

F
F
F
F

Lista de Tabelas
IFI
IFP
IFQ
IFR
IFS
IFT
IFU
IFV
IFW

oftwres utilizdos no urso F F F F F F F F F F


perrments utilizds F F F F F F F F F F F F F F
ipos de ddos e fix de vlores F F F F F F F F
epresento deiml E inri E hexdeiml F
eltero de tmnho e sinl dos tipos sios
ypero it set om de(ne F F F F F F F F F F F
ypero it ler om de(ne F F F F F F F F F F
ypero it )ip om de(ne F F F F F F F F F F F
ypero it test om de(ne F F F F F F F F F F

F
F
F
F
F
F
F
F
F

Q
R
IR
IS
IT
PV
PW
QH
QI

PFI

untidde de operes e trefs F F F F F F F F F F F F F F F F F F F F F F F F F F

RH

QFI
QFP
QFQ
QFR
QFS
QFT
QFU

indereos de memri pr s ports do sg IVfRSSH F F F F F F F


el de on(guro do sg pr s experinis F F F F F F F F F
gonverso inrio E hexdeiml pr displys de U segmentos F F F
vist de omndos eitos pelo o vgh F F F F F F F F F F F F F F F F
xs de trnsmisso pr diferentes protoolos F F F F F F F F F F F
glulo do vlor d tx de trnsmisso d port seril F F F F F F F
pix de frequnis mxims e mnims pr d on(guro do

RT
RW
SQ
TV
UP
UV
VW

F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F

F F F F F F
F F F F F F
F F F F F F
F F F F F F
F F F F F F
F F F F F F
presler

F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F

F
F
F
F
F
F
F

Lista de Programas
IFI
IFP
IFQ
IFR
QFI
QFP
QFQ
QFR
QFS
QFT
QFU
QFV
QFW
QFIH
QFII
QFIP
QFIQ
QFIR
QFIS
QFIT
QFIU
QFIV
QFIW
QFPH
QFPI
QFPP
QFPQ
QFPR
QFPS
QFPT
QFPU
QFPV
QFPW
QFQH
RFI
RFP
RFQ
RFR
RFS
RFT
RFU
SFI
SFP

esumo do dispUsegF F F F F F F F F F F F F F F F F F F F F F F F F F F
esumo do dispUsegFh F F F F F F F F F F F F F F F F F F F F F F F F F F
istrutur de heder F F F F F F F F F F F F F F F F F F F F F F F F F F F
yperes ritmtis om tipos diferentes F F F F F F F F F F F F F F F
dispUsegF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
dispUsegFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
tilizndo iliote dispUseg F F F F F F F F F F F F F F F F F F F F F
teldoF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
teldoFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
ixemplo de uso d iliote teldo F F F F F F F F F F F F F F F F F F
ldFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
ldF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
ixemplo de uso d iliote de vgh F F F F F F F F F F F F F F F F F
rite g F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
ed g F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
otins de esrit e leitur no g F F F F F F F F F F F F F F F F F F F
otins de onverso fgh x inteiro F F F F F F F F F F F F F F F F F F
serilF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
serilFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
ixemplo de uso d iliote de omunio seril F F F F F F F F F F
dF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
dFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
ixemplo de uso d iliote de onversores eh F F F F F F F F F F F
pwmF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
pwmFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
ixemplo de uso d iliote ds sds w F F F F F F F F F F F F
timerF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
timerFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
ixemplo de uso d iliote de um temporizdor F F F F F F F F F F
eproduo de sons F F F F F F F F F F F F F F F F F F F F F F F F F F F
pontes de snterrupo F F F F F F F F F F F F F F F F F F F F F F F F F F
rtmento ds interrupes F F F F F F F F F F F F F F F F F F F F F F F
sniilizo do sistem om interrupes F F F F F F F F F F F F F F F
sniilizo do sistem om interrupes F F F F F F F F F F F F F F F
ixemplo de rquitetur singleEloop F F F F F F F F F F F F F F F F F F F
rolem n sinroni de tempo pr o singleEloop F F F F F F F F F F
ixemplo de sistem snterruptEdriven F F F F F F F F F F F F F F F F F F
ixemplo de sistem snterruptEdriven om se de tempo F F F F F F F
ixemplo de oopertive multitsking F F F F F F F F F F F F F F F F F F
ixemplo de oopertive multitsking om uso do top slot F F F F F F
ixemplo de sistem goopertiveEmultitsking om slot temporizdo
on(gFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
sioFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

vi

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

IH
IH
IQ
IV
SS
ST
ST
TP
TQ
TQ
TW
UH
UI
US
US
UT
UU
VH
VH
VI
VT
VT
VU
WH
WH
WI
WP
WQ
WQ
WR
WT
WU
WV
WW
IHI
IHI
IHP
IHQ
IHS
IHT
IHU
III
IIP

Captulo 1

Introduo
The real danger is not that computers will begin to think like men,
but that men will begin to think like computers.

E ydney tF rrris

rogrmo pr sistems emrdos exige um srie de uiddos espeiisD pois estes sistems
gerlmente possuem restries de memri e proessmentoF or se trtr de sistems om
funes espe(sD s rotins e tnis de progrmo diferem dquels usds pr projetos
de plitivos pr desktopsF
mm neessrio onheer mis fundo o hrdwre que ser utilizdoD pois d miE
roproessdor possui um rquitetur diferenteD om quntidde e tipos de instrues diversosF
rogrmdores voltdos pr desktops no preism se ter tnto estes itensD pois eles proE
grmm pr um sistem operionlD que reliz o ppel de trdutorD disponiilizndo um
interfe omumD independente do hrdwre utilizdo@pigur IFIAF

Aplicao
Sistema Operacional
Firmware
Hardware
pigur IFIX gmds de stro de um sistem operionl
r sistems emrdosD neessrio progrmr espei(mente pr o hrdwre em quesE
toF m opo pr se oter rti(ilmente est md de stro que er gerd pelo
sistem operionl utilizo de dois itensX um ompildor prprio pr o omponente em
questo e um iliote de funesF y ompildor ser o responsvel por trduzir lingugem
de lto nvel em um lingugem que o miroontroldor onsegue entenderF e iliote de
funesD ou frmeworkD em gerlD disponiilizd pelos frintes do miroontroldorF
1.1

Linguagem C
C is quirky, awed, and an enormous success.

E hennis wF ithie

xeste urso ser utilizd lingugem gF ist um lingugem om diverss rterstis que
tornm um o esolh pr o desenvolvimento de softwre emrdoF epesr de ser um
lingugem de lto nvelD permite o progrmdor um esso direto os dispositivos de hrdwreF
I

Introduo

mm esolh d miori dos progrmdores e gerentes de projetos no que onerne


o desenvolvimento de sistems emrdos omo pode ser visto n pigur IFPF

pigur IFPX esquis sore lingugens utilizds pr projetos de softwre emrdo


Fonte: http://www.embedded.com/design/218600142

e desontinuidde depois de PHHR se d devido mudn de metodologi d pesquisF entes


de PHHSD pergunt formuld erX r o desenvolvimento d su plio emrdD quis
ds lingugens vo usou nos ltimos IP mesescF im PHHS pergunt se tornouX weu projeto
emrdo tul progrmdo priniplmente em F wltipls selees erm possveis
ntes de PHHSD permitindo som superior IHH7D sendo o vlor mdio de PHW7D o que impli
que miori ds pessos esolheu dus ou mis opesF
y mior impto n pesquis pode ser visulizdo n lingugem ssemlerX t PHHRD estv
presente em TP7 ds resposts @n mdiAF y que omprov que prtimente todo projeto de
sistem emrdo exige um pouo de ssemlerF ho mesmo modoD pereemos que tulmente
pouos projetos so relizdos totlmente ou em su miori em ssemlerD um mdi de pens
U7F
1.2

Hardware utilizado
People who are really serious about software should make their own
hardware.

E eln uy

gomo o enfoque deste urso progrmo de sistems emrdos e no eletrniD utiliE


zremos um kit de desenvolvimento prontoD sedo num miroontroldor sgF
gomo perifrios disponveis temosX

I disply vgh P linhs por IT rteres @omptvel om rhUURVHA

R displys de U segmentos om rrmento de ddos omprtilhdos

V leds ligdos o mesmo rrmento dos displys

IT mini swithes orgnizds em formto mtriil RxR

I sensor de tempertur vwQSg

I resistni de queimento ligd um sd w

I motor hg tipo ventildor ligdo um sd w

I uzzer ligdo um sd w
Notas de Aula ELT024 - Programao para Sistemas Embarcados

Introduo

I nl de omunio seril pdro EPQP

gd omponente ter seu funionmento sio explido pr permitir o desenvolvimento de


rotins pr estesF
1.3

Ambiente de programao
First, solve the problem. Then, write the code.

E tohn tohnson

y miente utilizdo ser o wvef@AF iste um miente de desenvolvimento disponiilizdo


pel wirohip@A grtuitmenteF y ompildor utilizdo ser o hggD os linkers e ssemlers
sero disponiilizdos pel iliote qtilsF
gomo o foo prendizgem de oneitos sore progrmo emrdD poder ser utiE
lizd qulquer pltform de progrmo e qulquer ompildorGlinkerF gso sej utilizdo
qulquer onjunto de ompildorGlinker diferentes deveEse prestr teno pens ns diretivs
pr grvoF
r progrmo em miente vinux reomendEse o uso d sute suvef ISFIHF iste
progrm foi desenvolvido pr uhi QFSF elm de permitir integro om o mesmo ompildor
utilizdo neste urso permite progrmo do miroontroldor utilizndo o progrmdor sghP
vi fF

Instalao
e el IFI present os softwres que sero utilizdos no ursoF
el IFIX oftwres utilizdos no urso
Item

shi
gompildor
vinkerGessemler
lugin wvef

Verso

Licena

wvef

VFSH

roprietrio

hgg

PFWFHH @winQPA

qv

qtils

HFIQFU @winQPA

qv

sdEmpl

HFI

qv

odos os softwres so grtuitos e esto disponveis n internetF r orret instlo


deveEse instlr os softwres segundo sequni presentd n el IFIF enote o diretrio
onde d softwre foi instldoF
eps instlo dos softwres deveEse rir o rquivo piITdeviesFtxt @de preferni no
wordpdA que foi instldo no diretrio do hgg dentro d pst inludepiIT @por pdro
gXerquivos de progrmshgginludepiITAF xo windows vist e windows U no possvel
editr rquivos de sistemF xeste so lique no rquivo om o oto direito b roprieddes b
egurn b iditr b surios e seleionr opo gontrole otlD depois lique em okF eps
isso ser possvel editr o rquivoF roure ento seguintes linhsX

name 18f4550
using 18f2455
ror letr f minsul d primeir linhD pens do IVfRSSHD pr um p misuloX

name 18F4550
using 18f2455

Notas de Aula ELT024 - Programao para Sistemas Embarcados

Introduo

pigur IFQX gon(guro ds ferrments de ompilo

im seguid r o progrm wvef e v o menu rojets Eb et vnguge ool votiE


onsF er presentd um tel similr d pigur IFQF
eleione ferrment mll hevie g gompiler for sgIT @hggITAF ixpnd opo
ixeutlesF e ferrment gpsm otid no diretrio in dentro de onde foi instldo
o qtilsD por pdroX gXerquivos de progrmsgputilsinF r s opes sdIT e sd
link deveEse esolher o rquivo sdFexeD que enontrdo no diretrio in dentro do diretrio
onde foi instldo o hgg por pdroX gXerquivos de progrmshgginF glir em
yuF e el IFP present um resumo dests opesF
el IFPX perrments utilizds
Executables Nome do arquivo

Localizao

gpsm

gpsmFexe

gXerquivos de progrmsgputilsin

sd link

sdFexe

gXerquivos de progrmshggin

sdIT

sdFexe

gXerquivos de progrmshggin

eps estes pssos sute wvef est pront pr trlhr om o ompildor hggCqtilsF

Congurao do gravador ICD2


eps instlr o wvef j possvel fzer instlo e on(guro do grvdor ou depurdor
sghPF goneteEo qulquer port f e gurde tel de instlo do indowsF im lgums
verses do windows pode onteer de vo ser perguntdo se desej instlr um softwre no
ssindo digitlmenteD erti(queEse que verso do (rmwre pelo menos IFHFHFH d frinte
wirohipD onforme pode ser visto n pigur IFR e vneF
eps o termino d instlo r o progrm wvef pr on(gurr o grvdor ou depuE
rdorF o menu rogrmmer Eb elet rogrmmer Eb wvef sgh PF novmente o
menu rogrmmer ms dest vez esolh opo  wvef sgh P etup izrdF
Notas de Aula ELT024 - Programao para Sistemas Embarcados

Introduo

pigur IFRX snstlo do sghP

xo wizrdD esolh omunio omo f e depois dig que pl possui limento


independente rget hs own power supplyF heixe s outrs opes n seleo pdroF entes
de lir em onluir veri(que o (nl se o resumo se pree om o d pigur IFSF
x primeir vez que o omputdor se onetr o sghP possvel que o wvef preise
tulizr o (rmwre do sghP onforme o viso que pode ser visto n pigur IFTF

Criao de um novo projeto


eomendEse utilizo do ssistente disponvel pr rio de um novo projeto @menu
rojet Eb rojet izrdAF ile ir questionr sore @entre prnteses os vlores dotdos neste
ursoAX
IF O microcontrolador a ser utilizado (PIC 18f4550)
PF A sute de compilao (SDCC 16)
QF O diretrio e nome do projeto
RF Arquivos j existentes cujo programador deseja incluir no projeto
eps estes pssos o projeto estr ridoF gso list de rquivos do projeto no estej
visvel v o menu iew Eb rojetF
r rio de um novo rquivo v t o menu pile Eb xewF xeste novo rquivo digite
lgum ois e slveEoF gso sej o rquivo que onter funo prinipl @minA ostume
slvElo om o nome de minFF
e d novo rquivo rido neessrio inseriElo no projetoF r isso deveEse lir n pst
orrespondente o tipo de rquivo que se desej inluir e em seguid edd piles omo pode ser
visulizdo n pigur IFUF
e progrmo pr sistems emrdos possui diverss rterstis diferentes d progrE
mo voltd pr desktopF ho mesmo modoD existem lguns oneitos que gerlmente no so
Notas de Aula ELT024 - Programao para Sistemas Embarcados

Introduo

pigur IFSX esumo ds on(gures do sghP no wvef

pigur IFTX edido de tulizo do (rmwre do sghP

Notas de Aula ELT024 - Programao para Sistemas Embarcados

Introduo

pigur IFUX rojet ixplorer do wvef

explordos nos ursos de lingugens de progrmo em gD ms que so esseniis pr o om


desenvolvimento deste ursoF istes oneitos sero explndos neste ptuloF
1.4

Indentao e padro de escrita


Good programmers use their brains, but good guidelines save us
having to think out every case.

E prnis qlssorow

fundmentl oedeer um pdro pr esrit de progrmsD de modo que visulizo do


digo sej filitdF
x lngu portugues utilizmos prgrfos pr delimitr loos de frses que possuem
mesm ideiF im lingugem g estes loos so delimitdos por hves { e }F
r demonstrr o leitor que um prgrfo omeou utilizmos um reuo direit n priE
meir linhF undo neessrio relizr um ito de itens oloEse d um destes itens
num linh reud direitD lgums vezes om um identi(dor omo um tro E ou set
Eb pr filitr identi(o visulF
gom esse mesmo intuitoD os reuos e espmentos so utilizdos pr que o digo sej mis
filmente entendidoF
gomo todo loo de omndos iniido e termindo om um hveD tornouEse omum que
ests @s hvesA estejm no mesmo nvel e todo digo interno els sej deslodo direitF e
existir um segundo loo interno o primeiroD este deve ser deslodo dus vezes pr indir
hierrqui no )uxo do progrmF egue ixo um exemplo de um mesmo digo om diferen
pens n indentoF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

Introduo

gdigo indentdo
1

gdigo no indentdo

void main void


unsigned int
unsigned int
unsigned int

void main void


unsigned int i
unsigned int temp
unsigned int teclanova

i;
temp ;
teclanova =0;
InicializaSerial ( ) ;
InicializaDisplays ( ) ;
InicializaLCD ( ) ;
InicializaAD ( ) ;

for

InicializaSerial ( ) ;
InicializaDisplays ( ) ;
InicializaLCD ( ) ;
InicializaAD ( ) ;

for

(;;)

if

teclanova = Tecla ;
( i =0; i < 1 6 ; i++)
{

( BitTst ( Tecla ,

teclanova = Tecla ;
( i =0; i < 1 6 ; i++)

for
if

i) )

EnviaDados ( i +48) ;

i) )

EnviaDados ( i +48) ;

for

( BitTst ( Tecla ,

}
}

(;;)

AtualizaDisplay ( ) ;
( teclanova != Tecla )

if

for
if

=0;

AtualizaDisplay ( ) ;
( teclanova != Tecla )
{

(i = 0;

< 1000;

for

i++) ;

(i = 0;

< 1000;

i++) ;

odemos notr pelo digo nterior que quele que possui indento filit n veri(o
de quis instruesGrotins esto suordinds s demisF
yutr rtersti de pdronizo est n rio de nomes de funes e de vriveisF el
lingugem g um funo ou vrivel pode ter qulquer nome desde queX sej iniid por um
letrD misul ou minsulD e os demis rteres sejm letrsD nmeros ou undersore F
e lingugem g permite tmm que sejm delrds dus vriveis om mesmo nome so
possum letrs diferentes pens qunto ix @misul ou minsulAF or exemploX vr e
ver so vriveis distintsD o que pode gerr erro no desenvolvimento do progrmD usndo
dvids e erros de digitoF
or isso onvenionEse que os nomes de vriveis sejm esritos pens em minsulsF
undo o nome ompostoD se utiliz um misul pr difereniElos omoD por exemploD s
vriveis ontos e ontotlF
xomes de funo sero esritos om primeir letr misul e no so de nome ompostoD
d iniil ser grfd em misuloX sniilizeldo@AD ristem@AF
gs de de(nies @utilizdos em onjunto om diretiv 5de(neA sero grfdos exlusivE
mente em misuloX xwiyhiyveD gyxqesegsyxevF
gd hve ser olod num ni linhD onforme exemplo nteriorD evitndoEse onstruE
es do tipoX

if

( PORTA == 0 x30 ) {

PORTB

= 0 x10 ;

yu

if

( PORTA
PORTB =

== 0 x30 ) {
0 x10 ; }

es regrs presentds vism forneer um identidde visul o digoF is regrs no so


solutsD servem pens pr o ontexto dest postilF im gerlD d instituio ou projeto
Notas de Aula ELT024 - Programao para Sistemas Embarcados

Introduo

possui seu prprio onjunto de normsF importnte ter onheimento deste onjunto e pliElo
em seu digoF
y estilo dotdo nest postil onheido tmm omo estilo ellmnD sd @no emsA
ou exsD j que todos os doumentos do pdro exs g utilizm este estiloF epesr disto o
pdro exs g no espei( um estilo pr ser usdoF
1.5

Comentrios
If the code and the comments disagree, then both are probably
wrong.

E xorm hryer

gomentrios so textos que introduzimos no meio do progrm fonte om inteno de tornE


lo mis lroF um o prti em progrmo inserir omentrios no meio dos nossos
progrmsF odeEse omentr pens um linh usndo o smolo GG @dus rrsAF r
omentr mis de um linh usEse o smolo GB @rr e sterisoA ntes do omentrio e BG
@steriso e rrA pr indir o (nl do omentrioF

#include
#define
int main int

< s t d i o . h>

DIST
(

260

/*

esse

mostrar

printf

return

1.6

programa
como

( " So

se

char *

argv [ ] )

serve

//

argc ,

para

distancia

insere

entre

SP

comentrios

Ita

*/

Paulo est a %d Km de Itajub " ,

DIST ) ;

0;

Arquivos .c e .h

x progrmo em lingugem g utilizmos dois tipos de rquivos om funes distintsF od


implemento de digo feit no rquivo om extenso F @code AF nele que rimos s
funesD de(nimos s vriveis e relizmos progrmo do digoF e existem dois rquivos
F no projeto e queremos que um deles poss usr s funes do outro rquivoD neessrio
relizr um 5inludeF
ys rquivos Fh @header A tem omo funo ser um espelho dos rquivos F disponiilizndo
s funes de um rquivo F pr serem utilizds em outros rquivosF xele olomos todos
os prottipos ds funes que queremos que os outros rquivos usemF
e quisermos que um funo s poss ser utilizd dentro do prprio rquivoD por motivo
de segurn ou orgnizoD st delrr seu prottipo eixe no rquivo FF
e for neessrio que um rquivo lei eGou grve num vrivel de outro rquivo reomenE
ddo rir funes espe(s pr tl (nliddeF
y progrm IFI present um exemplo de um rquivo de digo F e o progrm IFP preE
sent o respetivo rquivo de heder FhF
odemos notr que no rquivo Fh funo etulizhisply@A no est presenteD deste modo
el no estr disponvel pr os outros rquivosF odemos notr tmm que pr ler ou
grvr vrivel digito neessrio utilizr s funes wudhigito@A e verhigito@AF xotr que
no existe esso direto s vriveisF iste tipo de ordgem insere trsos no proessmento
devido um efeito onheido omo overhed de funesD podendo inlusive usr trvmentos
no sistem so no exist espo su(iente no stkF
1.7

Diretivas de compilao

es diretivs de ompilo so instrues que so dds o ompildorF ils no sero exeutE


dsF ods s diretivs de ompilo omem om um sinl 5D onheido omo jogo d velh
ou hshF
Notas de Aula ELT024 - Programao para Sistemas Embarcados

10

Introduo

rogrm IFIX esumo do dispUsegF


1
2
3
4
5
6
7

static char temp


static char valor
void MudaDigito char
// v a r i v e l

10
11
12
13
14
15

apenas

dentro

deste

arquivo

// v a r i v e l

que

ser

usada

tambm

fora

do

arquivo

// f u n e s

usadas

dentro

8
9

usada

valor

fora

do

arquivo

val )

val ;

char LerDigito void


return valor
void InicializaDisplays void
}

16

// c d i g o

17
18

void

da

funo

19
20

// f u n o

apenas

21
22

usada

AtualizaDisplay (

// c d i g o

da

void

dentro

deste

arquivo

funo

rogrm IFPX esumo do dispUsegFh

1
2
3
4
5
6

#ifndef
define VAR_H
void MudaDigito char val
char LerDigito void
void InicializaDisplays void
#endif
VAR_H

);

);

);

//VAR_H

Notas de Aula ELT024 - Programao para Sistemas Embarcados

11

Introduo

#include
e diretiv de ompilo 5inlude responsvel por permitir que o progrmdor utilize no seu
digo funes que form implementds em outros rquivosD sej por ele prprio ou por outrs
pessosF xo neessrio possuir o digo fonte ds funes que se desej utilizrF neessrio
pens de um rquivo que indique os prottipos ds funes @omo els devem ser hmdsA e
possuir funo disponvel em su form ompildF
im gerl um rquivo que possui pens prottipos de funes denomindo de reder e
possui extenso FhF

#dene
yutr diretiv muito onheid 5de(neF qerlmente utilizd pr de(nir um onstnteD
ms pode ser utilizd pr que o digo fonte sej modi(do ntes de ser ompildoF
yriginl

gompildo

#define
void main void

void

CONST 1 5
(

printf ( "%d" , CONST *

3) ;

puno yriginl

void

char
else
char

#endif

PADRAO Serial
* msg = " SERIAL " ;
* msg

printf ( msg ) ;

void

printf ( "%d" ,

15

3) ;

45

ypes de uso om o 5de(ne

MostraSaidaPadrao ( )

#ifdef

main (

esultdo n el

" LCD " ;

esultdo n el

#include
#define
void main void

SERIAL

< s t d i o . h>

PADRAO S e r i a l
(

MostraSaidaPadrao ( ) ;

#include
#define
void main void

< s t d i o . h>

PADRAO LCD
(

LCD

MostraSaidaPadrao ( ) ;

elo digo presentdo pereemos que mesm funo wostriddro@AD present reE
sultdos diferentes dependendo de omo foi de(nid opo eheyF
ys de(ne9s tmm judm filitr lolizo dos dispositivos e justr s on(gures
no miroontroldorF odo perifrio possui um ou mis endereos pr os quis ele respondeF
istes endereos podem vrir inlusive dentro de um mesm fmliF or exemploX o endereo
d port h @onde esto ligdos os ledsA HxpVQF r ligr ou desligr um led preiso lterr
o vlor que est dentro do endereo HxpVQF r filitr este proedimentoD de(nido um
ponteiro pr este endereo e rotuldo om o nome yhF he(nir ypp omo H e yx omo I
filit leitur do digoF
Notas de Aula ELT024 - Programao para Sistemas Embarcados

12

Introduo

#ifdef, #ifndef, #else e #endif


es diretivs 5ifdefD 5ifndefD 5else e 5endif so muito utilizds qundo queremos gerr dois
progrms que diferem pens num pequeno pedo de digoF or exemplo dois sistems de
ontrole de temperturF y primeiro possui um disply de vghD pz de mostrr tempertur
textulmenteF y segundo sistem exeut mesm funo que o primeiroD ms um dispositivo
mis rtoD portnto possui pens um led inditivo de soretemperturF y digo pode ser
esrito d seguinte mneirX

void

ImprimirTemp (

char

valor )

#ifdef

LCD
Imprime_LCD ( valor )

else
if

( valor > 3 0 )

led

= 1;

else

}
{

led

= 0;

#endif

//LCD

xo momento d ompilo o prEompildor ir veri(r se tg vgh foi de(nid em


lgum lugrF im so positivo o prEompildor ir deixr tudo que estiver entre o 5ifdef e o
5else e retirr tudo que est entre o 5else e o 5endifF
yutr funo muito utilizd dests diretivs pr evitr referni irulrF upondo dois
rquivosD um responsvel pel omunio seril @serilFhA e o segundo responsvel pelo ontrole
de tempertur @tempFhAF y projeto exige que tempertur poss ser ontrold pel port
seril e tod vez que tempertur pssr de um determindo ptmr deve ser envido um lert
pel port serilF y rquivo d port seril @serilFhA tem s seguintes funesD presentds
seguirF

char
void

void
char

LerSerial (
EnviaSerial (

);

val ) ;

y rquivo de ontrole d tempertur @tempFhA possui s funes presentds seguirF

char
void

void
char val

LerTemperatura (
AjustaCalor (

);
);

od vez que funo verempertur@A for hmdD el deve fzer um teste e se o vlor for
mior que um ptmr hmr funo invieril@A om o digo HxQHF r isso o rquivo
tempFh deve inluir o rquivo serilFhF

#include " serial .h"


char LerTemperatura void
void AjustaCalor char val
(

);
);

od vez que funo vereril@A reeer um vlorD el deve hmr funo ejustglor@A
e repssr esse vlorF r isso o rquivo serilFh deve inluir o rquivo tempFh

#include " temp .h"


char LerSerial void
void EnviaSerial char
(

);

val ) ;

Notas de Aula ELT024 - Programao para Sistemas Embarcados

13

Introduo

rogrm IFQX istrutur de heder

1
2
3
5

#ifndef

TAG_CONTROLE

#define
// t o d o

#endif

TAG_CONTROLE

contedo

do

arquivo

vem

aqui .

//TAG_CONTROLE

y prolem que deste modo rid um referni irulr sem (mX o ompildor l o
rquivo serilFh e peree que tem que inserir o rquivo tempFhF snserindo o rquivo tempFh
peree que tem que inserir o rquivo serilFhD onforme pode ser visto n pigur IFVF

temp.h
#include serial.h
char LerTemperatura(void);
void AjustaCalor(char val);

serial.h
#include temp.h
char LerSerial(void);
void EnviaSerial(char val);

temp.h
#include serial.h
char LerTemperatura(void);
void AjustaCalor(char val);

pigur IFVX rolem ds efernis girulres


e soluo rir um dispositivo que permit que o ontedo do rquivo sej lido pens um
vezF iste dispositivo implementdo trvs d estrutur presentd no progrm IFQF
egundo o digo imD o ontedo que estiver entre o 5ifndef e o 5endifD s ser mntido
se tg eqgyxyvi xy estiver de(nidF gomo isto verdde durnte primeir
leiturD o prEompildor l o rquivo normlmenteF e onteer um referni liD n
segund vez que o rquivo for lidoD tg eqgyxyvi j estr de(nid impedindo
ssim que o proesso lio ontinueD onforme pode ser visto n pigur IFWF
qerlmente se utiliz omo tg de ontrole o nome do rquivoF ist tg deve ser ni pr
d rquivoF
1.8

Tipos de dados em C
19 Jan 2038 at 3:14:07 AM. The end of the world according to Unix
(2

32

seconds after Jan 1st 1970)

E nix dte system

y tipo de um vrivel inform quntidde de memriD em bytesD que est ir oupr e omo
est deve ser interpretdX om ou sem fro @vrgulAF ys tipos sios de ddos n lingugem
Notas de Aula ELT024 - Programao para Sistemas Embarcados

14

Introduo

temp.h
#ifndef TEMP_H
#define TEMP_H
#include serial.h
char LerTemperatura(void);
void AjustaCalor(char val);
#endif

serial.h
#ifndef SERIAL_H
#define SERIAL_H
#include temp.h

temp.h

char LerSerial(void);
void EnviaSerial(char val);
#endif

#ifndef TEMP_H
//tag j definida,
//pula o contedo
#endif

pigur IFWX oluo ds refernis irulres om 5ifndef

g so presentdos n el IFQF
el IFQX ipos de ddos e fix de vlores
Tipo

Bits Bytes

Faixa de valores

hr

EIPV IPU

int

IT

EQPFUTV QPFUTU

)ot

QP

QDR x IH-38 QDR x IH38

doule TR

QDR x IH-308 QDR x IH308

odemos notr que s vriveis que possuem mior tmnho podem rmzenr vlores miE
oresF xotmos tmm que pens os tipos )ot e doule possuem ss deimisF

Representao binria e hexadecimal


e grnde miori dos proessdores trlh om ddos inriosD ou sejD queles que pens
ssumem vlores H ou IF or isso os tipos presentdos nteriormente podem ser representdos
utilizndo se PF m vlor do tipo hr que possui V its ser representdo por um nmero
de V lgrismosD todos H @zerosA ou I @unsAF r relizrmos onverso de um nmero n se
deiml pr se P podemos seguir o seguinte lgoritmoX
IF Dividir o nmero por 2
PF Anotar o valor do resto (0 ou 1)
QF Se o valor maior que 0 voltar ao nmero 1
RF Escrever os valores obtidos atravs do passo 2 de trs para frente.
Notas de Aula ELT024 - Programao para Sistemas Embarcados

15

Introduo

SF Apresentar o resultado
or exemplo o nmero IVF
IVGP a WD resto 0
WGP a RD resto 1
RGP a PD resto 0
PGP a ID resto 0
IGP a HD resto 1
vendo do ltimo resultdo pr o primeiro temos que
IV10 a IHHIH2
hevido grnde utilizo de nmeros inrios n progrmo de ixo nvel muito omum
esrevermos estes nmeros n se IT ou hexdeimlF e vntgem de esrever o nmero nest
se que existe um onverso simples de inrio pr hexdeiml e o nmero resultnte
oup em menos espo n telF
e se hexdeiml possui IT 4uniddes4diferentesF gomo existem pens IH lgrismos no
sistem de numero rio @HD ID PD QD RD SD TD UD VD WA utilizmos T letrs pr omplementElos
@eD fD gD hD iD pAF e onversoD entre vlores inriosD deimis e hexdeimisD presentd
n el IFRF
el IFRX epresento deiml ! inri E hexdeiml
Decimal Binrio Hexadecimal Decimal Binrio Hexadecimal

HHHH

IHHH

HHHI

IHHI

HHIH

IH

IHIH

HHII

II

IHII

HIHH

IP

IIHH

HIHI

IQ

IIHI

HIIH

IR

IIIH

HIII

IS

IIII

r onverter de inrio pr hexdeiml st dividir o nmero em grupos de R em RD da


direita para a esquerdaD e utilizr tel imF
or exemplo o nmero IVF emos que este nmero em inrio representdo por IHHIH2 F
eprndo o nmero de R em R lgrismos temosX
IEHHIH
el telX
I2 a I16
HHIH2 a P16 F
vogoX
IHHIH2 F a IP16 F

Modicadores de tamanho e sinal


m modi(dor de tipo lter o signi(do dos tipos se e produz um novo tipoF ixistem
qutro tipos de modi(doresD dois pr o tmnho @long e shortA e dois pr sinl @unsigned
e signedAF m tipo delrdo om o modi(dor long pode ter tmnho wesy ou sqev
o tipo originlF m tipo delrdo omo short deve ter tmnho wixy ou sqev o tipo
originlF e deiso e o ompildor utilizdoF
ys tipos delrdos omo signed possuem um it reservdo pr o sinlF heste modo o vlor
mximo que podem tingir menorF ys tipos delrdos omo unsigned no podem ssumir
Notas de Aula ELT024 - Programao para Sistemas Embarcados

16

Introduo

vlores negtivosD em ompenso podem tingir o doro do vlor de um tipo signedF x


el IFS so presentds lgums vries possveisF
el IFSX eltero de tmnho e sinl dos tipos sios
Tipo

Bytes

Excurso mxima

unsigned hr

H PSS

signed hr

EIPV IPU

unsigned int

H TSFSQS

signed int

EQPFUTV QPFUTU

long int

EPFIRUFRVQFTRV PFIRUFRVQFTRU

unsigned long int

H RFPWRFWTUFPWS

short int

EQPFUTV QPFUTU

x lingugem gD por pdroD os tipos so sinlizdosD ou sejD possuem prte positiv e


negtivF or isso rro enontrr o modi(dor signedF

Modicadores de acesso
hurnte o proesso de ompilo existe um etp de otimizo do progrmF hurnte est
etpD o ompildor pode retirr prtes do digo ou desfzer loops om perodos (xosF or
exemplo o digo ixoX

#define *
void main void
while X X
X (

( near

unsigned char *

) 0 xF83 )

!=

);

undo ompildo present o seguinte digo em ssemlerX


//

Starting

pCode

block

S_Teste__main code
_main :
. line
19
// T e s t e . c

while

(X!=X) ;

RETURN

inqunto vrivel x for diferente de x o progrm no si do loopF y ompildor


entende que est ondio nun ir onteer e elimin o loop do digo (nlF gomo possvel
ver no digo gerdoD rotin de return est logo ps iniilizo do progrm minF r
vriveis omuns o vlor s lterdo em triuies direts de vlor ou de outrs vriveisX @x
a RYA ou @x a yYAF
intretnto existe um ondio onde vrivel x pode lterr seu vlor independentemente
do progrmF e est vrivel representr um endereo de memri ssoido um perifrio
fsioD seu vlor pode mudr independentemente do )uxo do progrmF r indir est situo
o progrm utilizmos plvr reservd volatileF

#define * volatile
void main void
while X X
X (
(

near

unsigned char *

) 0 xF83 )

!=

);

qerndo o digo em ssemler desrito ixoX


Notas de Aula ELT024 - Programao para Sistemas Embarcados

17

Introduo

//

Starting

pCode

block

S_Teste__main code
_main :
_00105_DS_ :
. line
19
MOVLW
0 x83
MOVWF
r0x00
MOVLW
0 x0f
MOVWF
r0x01
MOVFF
r0x00 , FSR0L
MOVFF
r0x01 , FSR0H
MOVFF
INDF0 , r0x00
MOVLW
0 x83
MOVWF
r0x01
MOVLW
0 x0f
MOVWF
r0x02
MOVFF
r0x01 , FSR0L
MOVFF
r0x02 , FSR0H
MOVFF
INDF0 , r0x01
MOVF
r0x00 , W
XORWF
r0x01 , W
BNZ
_00105_DS_
RETURN

//

Teste . c

// p r i m e i r a

while
parte

(X != X) ;

do

// s e g u n d a

parte

// r e a l i z a

primeira

// p r i m e i r a

do

parte

parte

// r e a l i z a

segunda

// f a z

teste

endereo

leitura

do

// s e g u n d a

do

para

endereo

endereo

endereo

leitura

igualdade

odemos pereer queD deste modoD o ompildor fordo ler vrivel x dus vezes e relizr
o teste pr ver se el permnee om o mesmo vlorF
im lgums situes neessrio indir que lgums vriveis no podem reeer vlores
pelo progrmF r isto utilizmos plvr reservd constF tilizmos este modi(dor
pr indir que vrivel represent um lol que pens pode ser lido e no modi(doD por
exemplo um port pr entrd de ddosF xest situo omum utilizr s plvrs volatile
e const juntoF

#define * volatile const


void main void
X (

// i n c i o

do

near

programa

unsigned char *

) 0 xF83 )

= 3;

e tentrmos ompilr este digo preer seguinte mensgem de erroX


Teste . c : error

33:

Attempt to assign value to a constant variable

(=)

Modicadores de posicionamento
es vriveis podem ser delrds utilizndo os modi(dores near e farF istes modi(dores
indim o ompildor em qul regio de memri devem ser olods s vriveisF
e regio near gerlmente se refere zero pgeF um regio mis fil de ser essdF e
regio far exige mis tempo pr exeutr mesm funo que nearF
odemos pensr nests regies omo memri ew e memri ghe do omputdorF
e segund mis rpidD ms possui um lto usto e por isso gerlmente menorF im lgums
situes interessnte que lgums vriveis nun sim do heD pois so utilizds om
grnde frequni ou so rtis pr o sistemF

Modicador de persistncia
im gerlD s vriveis utilizds dentro ds funes perdem seu vlor o trmino d funoF r
que este vlor no se per podemos utilizr um modi(dor de persistniX sttiF gom esse
modi(dor vrivel pss possuir um endereo (xo de memri ddo pelo ompildorF elm

Notas de Aula ELT024 - Programao para Sistemas Embarcados

18

Introduo

rogrm IFRX yperes ritmtis om tipos diferentes

1
2
3
4
5
6
7
8

void main void


char var08
int var16
long int var32
float pont16
double pont32
(

var08
var08
var16
var32
var32
pont16
pont16
pont16

9
10
11
12
13
14
15
16

var08 + var16 ;
var08 + var08 ;
var08 * var08 ;
var32 / var16 ;
pont32 * var32 ;
var08 / var16 ;
pont32 * var32 ;

=
=
=
=
=
=
=
=

40

//

//

//

//

//

//

//

80;

//

disso o ompildor no reutiliz este endereo em nenhum outr prte do digoD grntindo
que n prxim vez que funo for hmd o vlor ontinue o mesmoF
// c r i a

um

contador

persistente

que

int ContadorPersistente int reseta


static char varivel_persistente
if reseta

// i n c r e m e n t a d o

cada

chamada

de

funo

varivel_persistente

else
return
return

= 0;

}
{

( varivel_persistente ++) ;

}
}

1.9

1;

Operaes aritmticas
If people do not believe that mathematics is simple, it is only because they do not realize how complicated life is.

xeumnn

E tohn vouis von

m uiddo se tomrD n progrmo em g pr sistems emrdosD o resultdo de


operes ritmtisF or pdro n lingugem g o resultdo de um opero ritmti
possui tmnho igul o mior operndoF yservndo o rogrm IFR notmos lguns exemplosF
xo so I @linh VA um vrivel hr somd um int ger omo resultdo um int @mior
operndoAF xo possvel rmzenr esse resultdo num hrD hver perd de informoF
var32

var8

var16 ;

//

corrigido

e som de dois hrD onforme linh WD segundo so pode gerr um prolem se mos
forem muito prximo do vlor limiteF or exemploX IHH C IHH a PHHD que no e num hrD
j que este s permite rmzenr vlores de EIPV IPUF
var16

var8

var8 ;

//

corrigido

Notas de Aula ELT024 - Programao para Sistemas Embarcados

19

Introduo

y tereiro so @linh IHA est orretoD multiplio de dois hr possui um vlor mximo
de IPUBIPUaITFIPWF y prolem que multiplio de dois hr ger um outro hrD perdendo
informoF neessrio relizr um typest ntesF
var16

= ((

int

) var8 )

* var8 ;

//

corrigido

y qurto so @linh IIA pode presentr um prolem de preisoF e diviso de dois inteiros
no rmzen prte frionriF e isto no for rtio pr o sistem est orretoF vemrr que
diviso de nmeros inteiros mis rpid que de nmeros frionriosF
y quinto so @linh IPA pode presentr um prolem de preisoF y resultdo d ont de
um nmero inteiro om um ponto )utunte um ponto )utunteF ermzenr esse vlor num
outro nmero inteiro ger perd de informoF
y sexto so @linh IQA present um prolem muito omumF e diviso de dois nmeros
inteiros ger um nmero inteiroF xo import se rmzenremos o vlor num vrivel de ponto
)utunte hver perd de informo pois os operandos so inteirosF r evitr esse prolem
neessrio um typestF
pont16

= ((

float

) var8 )

var16 ;

//

corrigido

xo stimo so @linh IRA pode hver perd de preiso pois o resultdo d opero um
douleD e estmos rmzenndo este vlor num )otF
y oitvo so @linh ISA similr o sextoF istmos relizndo um ont om dois nmeros
inteiros esperndo que o resultdo sej HDSF gomo os operndos so inteiros expresso ser
vlid omo resultnte em eroF m o prti sempre usr FH ou f ps o nmero
pr indir operes om vrgulF
pont16

= 40 f

80.0;

//

corrigido

hevemos tomr uiddo tmm om ompres envolvendo nmeros om ponto )utunteF

float
while

(x

0.1;

!=

1.1)

printf ( "x = %f\n" , x ) ;


x = x + 0.1;

y treho de digo im present um loop in(nitoF gomo existem restries de preiso nos
nmeros de ponto )utunte @)ot e douleA nem todos os nmeros so representdos (elmenteF
ys erros de rredondmento podem fzer om que ondio @x 3aIFIA nun sej stisfeitF
empre que houver neessidde de ompro om nmeros de ponto )utunte utilizr miorD
menor ou vriesF

float
while

(x <

0.1;
1.1)

printf ( "x = %f\n" , x ) ;


x = x + 0.1;

epesr de sutis estes tipos de erro podem usr um mu funionmento do sistemF x


pigur IFIH presentdo um erro gerdo trvs de um loop in(nitoF
1.10

Funo main()

odo sistem neessit de iniir em lgum lugrF im gerlD os miroontroldoresD ssim que
ligdosD prourm por sus instrues no primeiro ou ltimo endereo de memriD dependendo
d rquitetur utilizdF y espo de memri disponvel neste endereo gerlmente muito
Notas de Aula ELT024 - Programao para Sistemas Embarcados

20

Introduo

pigur IFIHX voop in(nito de um devie driver gerndo erro no sistem

pequenoD pens o neessrio pr inserir um instruo de pulo e o endereo onde est funo
priniplF iste espo onheido omo posio de resetF ixistem ind outros espos de
memri similres este queD gerlmenteD so lodos prximosF y onjunto destes espos
onheido omo vetor de interrupo @pigur IFIIAF

Endereo Instruo
0x00
Pulo
0x01
0x8A
0x02
Pulo
0x03
0x55
0x04
...
0x55
0x56
0x57
0x58
0x59

Limpa A
A recebe
30
Testa A

0x8A
0x8B
0x8C
0x8D
0x8E

A recebe
50
Salva em
Porta B

...

...

pigur IFIIX ixemplo de funionmento do vetor de interrupo


e mneir de indir o ponto de inio de um progrm depende do ompildorF im gerl os
Notas de Aula ELT024 - Programao para Sistemas Embarcados

21

Introduo

ompildores lom funo min@A em lgum lugr d memri onde hj espo disponvelF
hepois disso dispem de um instruo de pulo pr o primeiro endereo de memriD onde foi
lod funo minF

void

main

// a q u i

void

entra

)
o

cdigo

do

programa

yutr ois interessnte que pr sistems emrdos funo prinipl no reee nem
retorn ndF gomo el primeir ser hmd no h omo envir lgum vlor por prE
metroF il tmm no retorn nd pois o trmino dest o sistem no est mis opertivoF
im gerl sistems emrdos so projetdos pr omerem funionr ssim que ligdos e
pens prr su tref qundo desligdosF gomo tods s funionliddes so hmds dentro
d funo min@A1 esperEse que o progrm ontinue exeutndo s instrues dentro del t
ser desligdo ou reeer um omndo pr desligrF iste omportmento pode ser otido trvs
de um loop in(nitoF eixo esto s dus lterntivs mis utilizdsF

void main void


for
(

void main void


while

(;;)

(1)

// a q u i

entra

// c d i g o

// a q u i

principal

entra

// c d i g o

principal

Rotinas de tempo

1.11

Time is an illusion, lunchtime doubly so.

E pord refet

muito omum neessitr que o miroontroldor (que um tempo sem fzer ndF m mneir
de tingir esse ojetivo utilizr um lo FOR 2 F

unsigned char
for i i
(

=0;

<

i;
10;

i++) ;

xotr que no estmos utilizndo os olhetesF vogo ps fehr os prnteses j existe um


ponto e vrgulF r entender omo esse proedimento funionD e estimr o tempo de esper
preiso entender omo o ompildor trduz ess funo pr ssemlerF
// c d i g o

em

assembler

MOVF
r0x00 , W
SUBLW
0 x0a
MOVWF
r0x00
_00107_DS_ :
DECFSZ r0x00 , F
BRA _00107_DS_
1

equivalente

f o r ( i =0;

// i n i c i a l i z a W com
// c o l o c a

// muda

valor

valor

10

(1

i <10;

para

F,
o

(0 x0a )

se

i ++) ;

ciclo )

de W para

// d e c r e m e n t a
// " p u l a "

no

r e g i s t r o W (1

(1

ciclo )

F > 0

lugar

executa

marcado

prxima

linha

como _00107_DS_

(2

(1

ciclo )

ciclos )

Em sistemas mais complexos algumas tarefas so executadas independentemente da funo principal, tendo

sua execuo controlada atravs de interrupes.

ciclo )

Este mtodo no aconselhado em sistemas de maior porte.

Notas de Aula ELT024 - Programao para Sistemas Embarcados

22

Introduo

ereemos pelo digo im que pr relizr um for preismos de Q pssos de iniilizoF


gd itero exige P pssosX um ompro e um pulo 3 D totlizndo Q ilos de iniilizo
e Q ilos de interoF
e temos um proessdor trlhndo V wrzD d instruo exeutd em HFSsF4 r
termos um tempo de esper de HFSs preismos de I milho de instruesF e olormos loops
endedos podemos multiplir quntidde de instrues que sero exeutdsF r otermos
um vlor de I milho de instrues devemos utilizr pelo menos Q loops endedosF ys vlores
dos loops so otidos de mneir itertivF

unsigned char i
for i i
for j j
for k k
(

=0;

<

34;

j, k;
i++) // 3

=0;

j++)

< 100;

=0;

<

+ 34

(30.003

// 3 + 1 0 0

k++) ;

98;

//

3 + 98

+ 3) =

1.020.207

instrues

(297 + 3) =

30.003

instrues

(3)

= 297

instrues

y digo im foi projetdo pr gerr um trso de tempo de meio segundoF gompilndo


e relizndo testes prtios podemos on(rmr que o tempo rel proximdmente HFSI @sAF
ist disrepni ontee porque gor temos Q loops endedos e d qul om su vrivel
de ontroleF heste modo o ompildor preis slvr e rregr d vrivel pr relizr
omproF
ereemos ssim que pr onheer orretmente o funionmento do sistem neessrioD
em lgums situesD rir o digo em ssemler gerdo pelo ompildor pr entender omo
este exeutdoF xem sempre o ompildor tom s mesms deises que nsF elm disso ele
pode gerr otimizes no digoF ixistem dois tipos de otimizoX um visndo diminuir o
tempo de exeuo do sistemD deixndoEo mis rpido e outr que reduz o tmnho do digo
(nlD poupndo espo n memriF
e seguir presentmos um exemplo de funo que ger delys om tempo prmetrizdoF

void delay unsigned int


unsigned char i j k
while DL
for i i
i
for j j
for k k

DL )

) // e x e c u t a DL

vezes .

=0;

<

34;

++) // 3 + 34

=0;

< 100;

=0;

<

98;

j++)

(30.003

// 3 + 1 0 0

k++) ;

//

3 + 98

+ 3) =

1.020.207

instrues

(297 + 3) =

30.003

instrues

(3)

= 297

instrues

}
}
}

1.12

Operaes com bits


All of the books in the world contain no more information than is
broadcast as video in a single large American city in a single year.
Not all bits have equal value.

E grl gn

xos sistems miroontroldosD existem lgums vriveis onde d it tem um interpreto


3

Este valor s vlido quando estamos trabalhando com variveis char. Se utilizarmos variveis int o cdigo

em assembler ser diferente e teremos que realizar uma nova anlise.

Para 8MHz, 1 ciclo = 0.125s. No PIC, cada instruo precisa de 4 ciclos de clock, portanto 0.5s.

Notas de Aula ELT024 - Programao para Sistemas Embarcados

23

Introduo

ou funionlidde diferenteF or isso neessrio relizr lgums operes que modi(quem


pens os its desejdosD mntendo o restnte dos its d vrivel inlterdosF
es operes d lingugem g que nos permitem trlhr om s vriveisD levndo em ont
os vlores individuis de d itD so hmds de itwise opertionF
importnte ressltr que s operes de itwise possuem funionlidde semelhnte sus
respetivs operes lgisF e diferen que lgi oper em im d vrivel omo um
todo5 enqunto itwise oper it itF

NOT
e opero xy lgi retorn 9I9 @umA se o vlor for 9H9 @zeroA e 9H9 se o vlor for 9I9F
A !A

H I
I H
e opero itwise xy @operdor A exeut um xy lgiF ssso signi( que opero
relizd pr d um dos its d vrivelD no mis pr vrivel omo um todoF x tel
seguinte presentd diferen entre s dus operesF
Declarao

Lgico

char

result

= 12;

// A = 0 b 0 0 0 0 1 1 0 0

//

Bitwise

result

result

= ~A ;

A;

//

= 0

// A = 0 b 0 0 0 0 1 1 0 0

//

result

= 243

r = 0 b11110011

AND
e opero exh lgi @operdor 88A retorn H se lgum dos vlores for zeroD e I se os dois
vlores forem diferentes de zeroF
A B A&&B

H H

H I

I H

I I

e opero itwise exh @operdor 8A exeut um exh lgi pr d pr de its e olo


o resultdo n posio orrespondenteX
Declarao

char
char

Lgico

= 5;

//

// B = 0 b 0 0 0 0 0 1 0 1

result

//

result

= 8;

// A = 0 b 0 0 0 0 1 0 0 0

Bitwise

result

&&

= 1

B;

result

&

B;

= 0

// A = 0 b 0 0 0 0 1 0 0 0
// B = 0 b 0 0 0 0 0 1 0 1
//

r = 0 b00000000

Lembrar que para linguagem C uma varivel com valor 0 (zero) representa falso, e qualquer outro valor

representa verdadeiro.

Notas de Aula ELT024 - Programao para Sistemas Embarcados

24

Introduo

OR
e opero y lgi @operdor ||A retorn I se lgum dos vlores for diferente de zeroD e H se
os dois vlores forem zeroF
e f e||f
H H

H I

I H

I I

e opero itwise y @operdor |A exeut um y lgi pr d pr de its e olo o


resultdo n posio orrespondenteX
Declarao

char
char

Lgico

result

//

result

= 8;

// A = 0 b 0 0 0 0 1 0 0 0

Bitwise

= 5;

//

result

B;

||

result

B;

= 13

// A = 0 b 0 0 0 0 1 0 0 0

= 1

// B = 0 b 0 0 0 0 0 1 0 1

// B = 0 b 0 0 0 0 0 1 0 1

//

r = 0 b00001101

XOR
e opero y no possui orrespondente lgi n lingugem gF ist opero pode ser
representd omo e y f a @e 88 3fA||@3e 88 fA
e

ef

e opero itwise y @operdor A exeut um y lgi pr d pr de its e olo


o resultdo n posio orrespondenteX
Declarao

char
char

Bitwise

result

= 8;

// A = 0 b 0 0 0 0 1 0 0 0

Lgico

= 5;

// B = 0 b 0 0 0 0 0 1 0 1

//
//

no

existe

em C

result

B;

= 13

// A = 0 b 0 0 0 0 1 0 0 0
// B = 0 b 0 0 0 0 0 1 0 1
//

r = 0 b00001101

Shift
e opero shift deslo os its pr esquerd @operdor ``A ou direit @operdor bbAF
neessrio indir qunts ss sero deslodsF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

25

Introduo

Declarao

char

Shift Esquerda

result

= 8;

//

result

Shift Direita

<
<

result

2;

= 32

//

result

>
>

2;

= 2

// A = 0 b 0 0 0 0 1 0 0 0

// A = 0 b 0 0 0 0 1 0 0 0

//

// A = 0 b 0 0 0 0 1 0 0 0

//

r = 0 b00100000

r = 0 b00000010

r vriveis unsigned e inteirsD est opero funion omo multiplioGdiviso por


potni de doisF gd shift multipliGdivide por P o vlorF ist um prti muito omum
pr evitr diviso que n miori dos sistems emrdos um opero r do ponto de
vist de tempo de proessmentoF
No utilizar esta operao com o intuito de multiplicar/dividir variveis com ponto xo ou
utuante nem variveis sinalizadas (signed).

im diverss osies neessrio que trlhemos om os its de mneir individulD prinE


iplmente qundo estes its representm sds ou entrds digitisD por exemplo hves ou
ledsF
uponhD por exemploD que um sistem possu V leds ligdos o miroontroldorF gd led
representdo trvs de I it de um vrivelF r ligrmos ou desligrmos pens um led por
vezD no lterndo o vlor dos demisD devemos nos utilizr de lguns pssos de lger digitlF

Ligar um bit (bit set)


r ligr pens um itD utilizremos um opero yF upondo dois operndos e e fF e e
I o resultdo de @e | fA I independente de fF e e H o resultdo igul o vlor de fF
e o ojetivo ligr pens o it d posio devemos rir um vlor onde tods s posies
so H's om exeo d posio desejdF r um msr inri de x its temos @xbaAX
osio x F F F CI EI F F F H
lor

H FFF

FFF H

e opero y for exeutd om msr ridD o resultdo presentr vlor I n posio


e mnter os vlores ntigos pr s demis posiesF ixemploX vigr pens o it P d vrivel
yh

#define
#define
void main void
char mascara
// d e f i n e ' s

para

TRISD

// i n c i o

do

volatile
volatile

portas

PORTD ( * (
(*(

de

unsigned char *
unsigned char *

entrada

near
near

programa

sada

) 0 xF83 )
) 0 xF95 )

TRISD
PORTD

// v a r i v e l

mascara

// l i g a

primeiro

bit

mascara

// L i g a r

bit

PORTD

PORTD

// mantm

2,

2;

todos

bit

varivel

<
<

guarda
porta

os

leds

mscara

D como

sada

( lgica

negativa )

varivel
//

mascara

for

da

= 1;

r o t a c i o n a s e

que

// c o n f i g u r a

= 0 x00 ;

// l i g a

//

= 0 x00 ;

= 0 b00000001

para

//

bit

desligando

que

bit

chegue

na

posio

= 0 b00000100
3o

led

mascara ;

sistema

ligado

indefinidamente

(;;) ;

Notas de Aula ELT024 - Programao para Sistemas Embarcados

desejada

26

Introduo

Desligar um bit (bit clear)


r desligr pens um it o proedimento similr o utilizdo pr ligrF eo invs de utilizrE
mos um opero yD utilizremos um opero exhF e opero exh tem rtersti
deD ddos e e f vlores inriosD se e ID respost de @e 8 fA ser o prprio vlor de fD se
eaHD respost zeroD independente de fF
xovmente neessrio gerr um msrF ws pr est situo el deve possuir todos
os its iguis I om exeo de D o it que queremos desligrF
posio x F F F CI EI F F F H
lor

I FFF

FFF I

e opero exh for exeutd om msr ridD o resultdo presentr vlor H n


posio e mnter os vlores ntigos pr s demis posiesF ixemploX hesligr pens o it
P d vrivel yhF

#define
#define
void main void
char mascara
// d e f i n e ' s

para

TRISD

// i n c i o

do

volatile
volatile

portas

PORTD ( * (
(*(

de

near

programa

unsigned char *
unsigned char *

entrada

near

sada

) 0 xF83 )
) 0 xF95 )

TRISD
PORTD

// v a r i v e l

mascara

// d e s l i g a

primeiro

bit

da

= 1;
a

todos

varivel

para

que

mascara << 2 ; // m a s c a r a =
// i n v e r t e s e o s v a l o r e s d e c a d a b i t
mascara = ~ mascara ;
// m a s c a r a =
PORTD

for

// mantm

bit

PORTD
o

&

2,

mscara

D como

os

leds

sada

( lgica

negativa )

mascara = 0 b00000001

// D e s l i g a

guarda
porta

varivel
//

r o t a c i o n a s e

mascara

que

// c o n f i g u r a

= 0 xFF ;

// l i g a

//

= 0 x00 ;

ligando

3o

bit

chegue

na

posio

desejada

0 b00000100

0 b11111011

led

mascara ;

sistema

ligado

indefinidamente

(;;) ;

importnte notr que germos msr de mneir idnti quel utilizd no so


nteriorD onde todos os vlores so zero e pens o desejdo umF hepois relizmos inverso
dos vloresF iste proedimento relizdo dest mneir porque no semos o tmnho d
plvr ser utilizd no miroontroldorX V ou IT itsF wesmo ssim devemos grntir que
todos os its otenhm o vlor orretoD o que grntido pel opero de negoF e opo de
iniilizr vrivel om pens um zero e rotionr pode no funionr poisD n miori dos
sistemsD funo de roto insere zeros medid que os its so deslodos e preismos que
pens um vlor sej zeroF

Trocar o valor de um bit (bit ip)


r tror o vlor de um it utilizremos omo rtifio lgrio opero yF hdo dus
vriveis inris e e f D se e ID o vlor resultnte de e y f o oposto do vlor de fD se
eaHD respost se mntm igul o vlor de fF
odemos pereer que pr tror o vlor de pens um it msr ser idnti quel
utilizd pr ligr um itX
posio x F F F CI EI F F F H
lor

H FFF

FFF H

e opero y for exeutd om msr ridD o vlor n posio ser trodoD de


zero pr um ou de um pr zeroF ixemploX ror o it P e T d vrivel yh
Notas de Aula ELT024 - Programao para Sistemas Embarcados

27

Introduo

#define
#define
void main void
char mascara
// d e f i n e ' s

para

TRISD

// i n c i o

do

volatile
volatile

portas

PORTD ( * (
(*(

de

unsigned char *
unsigned char *

entrada

near
near

programa

sada

) 0 xF83 )
) 0 xF95 )

TRISD
PORTD

// v a r i v e l

mascara

// d e s l i g a

primeiro

mascara
// L i g a

PORTD

//

bit

2,

PORTD

mascara

mascara

// l i g a

PORTD

for

// mantm

2;

bit
//

bit

PORTD

mascara

sada

primeiros

leds

( lgica

negativa )

varivel

para

//

que

bit

chegue

na

posio

desejada

na

posio

desejada

mascara = 0 b00000100

desligando

mascara

// D e s l i g a

da

os

D como

mascara = 0 b00000001

<
<

primeiro

guarda
porta

todos

varivel

= 1;

mascara

3o

led

mascara ;

r o t a c i o n a s e

//

bit

= 1;

r o t a c i o n a s e

//

que

// c o n f i g u r a

= 0 xF0 ;

// l i g a

= 0 x00 ;

da

varivel

mascara = 0 b00000001

varivel

<
<

6,

6;

para

//

que

bit

chegue

mascara = 0 b01000000

ligando

7o

led

mascara ;

sistema

ligado

indefinidamente

(;;) ;

ereemos trvs do exemplo que utilizo do proedimento presentdo tro o vlor


do it esolhidoF poi utilizdo o mesmo proedimento dus vezesF x primeirD um it foi ligdo
eD n segundD outro foi desligdoF

Vericar o estado de um bit (bit test)


r veri(r se o it est om o vlor I utilizremos novmente mesm msr utilizd
pr it set e it toggleX
posio x F F F CI EI F F F H
lor

H FFF

FFF H

elizmos ento um opero exh om vrivelF y resultdo ser zero se o it D d


vrivel originlD for zeroF e o it d vrivel originl for I respost ser diferente de H6 F
ixemploX estr o it P d vrivel yh

#define
#define
void main void
char mascara
char teste
// d e f i n e ' s

para

TRISD

// i n c i o

do

volatile
volatile

portas

PORTD ( * (
(*(

de

unsigned char *
unsigned char *

entrada

near
near

programa

sada

) 0 xF83 )
) 0 xF95 )

TRISD
teste

= 0 x00 ;
= 0 x00 ;

// r o d a r
// t e s t e
//

cria

mascara
//

que

guarda

mascara

// c o n f i g u r a
// d e s l i g a

depois

mesmo

uma

varivel

= 1;
=

//
a

mascara

( teste &

PORTD

porta

todos

os

programa

D como

sada

bits
com

os

bits

ligados .

= 0xff ;

// V e r i f i c a

// v a r i v e l

r o t a c i o n a s e

mascara

if

apenas

o n d e APENAS o

varivel

<
<
o

primeiro

bit

mascara = 0 b00000001

2;
bit

//

para

que

bit

chegue

na

posio

desejada

mascara = 0 b00000100

mascara )

= 0 x00 ;

// s e

resultado

for

verdadeiro

liga

todos

os

leds

A maioria dos compiladores C adotam uma varivel com valor diferente de zero como sendo verdadeiro.

Notas de Aula ELT024 - Programao para Sistemas Embarcados

28

Introduo

else

}
{

PORTD

= 0 xff ;

// s e

resultado

for

falso

desliga

todos

os

leds

for

// mantm

sistema

ligado

indefinidamente

(;;) ;

Criando funes atravs de dene's


m opo no uso de de(ne9s rir funes simples que podem ser esrits em pens um
linhF tilizndo um pouo de lgerismo e prntesesD possvel esrever s qutro operes
nteriores num ni linhF he posse dest simpli(o podemos rir um funo pr filitr
o uso dests operes trvs de um de(ne onforme podemos ver ns tels IFTD IFUD IFV e
IFWF
el IFTX ypero it set om de(ne
ypero

fit set

char
char
sso sso

bit = 2 ;
mascara ;
mascara = 1 << bit ;
arg = arg | mascara ;

//em

arg

linha

arg

(1<< bit ) ;

// ou

arg

|= (1<< bit ) ;

// L i g a n d o

ixemplo de uso

PORTD

bit

PORTD

da

porta

(1<<2) ;

// ou

PORTD

gom de(ne

=
|=

#define

(1<<2) ;

B i t S e t ( arg , b i t )

ixemplo de uso om deE // L i g a n d o o b i t 2


BitSet ( PORTD , 2 ) ;
(ne

da

( ( arg )

porta

|= (1<< b i t ) )

Notas de Aula ELT024 - Programao para Sistemas Embarcados

29

Introduo

el IFUX ypero it ler om de(ne


ypero

fit ler

char
char
sso sso

bit = 2 ;
mascara ;
mascara = 1 << bit ;
arg = arg & ~ mascara ;

//em

arg

linha

arg

& ~(1<< bit ) ;

// ou

arg

&= ~(1<< bit ) ;

// D e s l i g a n d o

ixemplo de uso

PORTD

PORTD

bit

da

porta

& ~(1<<2) ;

// ou

PORTD

gom de(ne

&= ~(1<<2) ;

#define

B i t C l r ( arg , b i t )

ixemplo de uso om deE // D e s l i g a n d o o b i t


BitClr ( PORTD , 2 ) ;
(ne

da

( ( a r g ) &= ~(1<< b i t ) )

porta

Notas de Aula ELT024 - Programao para Sistemas Embarcados

30

Introduo

el IFVX ypero it )ip om de(ne


ypero

fit )ip

char
char
sso sso

bit = 2 ;
mascara ;
mascara = 1 << bit ;
arg = arg ^ mascara ;

//em

arg

linha

arg

^ (1<< bit ) ;

// ou

arg

^= (1<< bit ) ;

// T r o c a n d o

ixemplo de uso

PORTD

PORTD

valor

do

bit

da

porta

^ (1<<2) ;

// ou

PORTD

gom de(ne

^= (1<<2) ;

#define

BitFlp ( arg , b i t )

ixemplo de uso om deE // T r o c a n d o o v a l o r


BitFlp ( PORTD , 2 ) ;
(ne

do

( ( a r g ) ^= (1<< b i t ) )

bit

da

porta

Notas de Aula ELT024 - Programao para Sistemas Embarcados

31

Introduo

el IFWX ypero it test om de(ne


ypero

fit test

sso sso

char bit
char mascara
mascara
bit
if arg mascara
if arg
bit
= 2;
;

= 1 <
<

//em

&

if

linha

& (1<<

// T e s t a n d o

ixemplo de uso

( PORTD

bit

))

da

porta

(1<<2) )

// . . .

#define

gom de(ne

if

BitTst ( arg , b i t )

// T e s t a n d o

ixemplo de uso om deE


(ne

bit

da

( ( a r g ) & (1<< b i t ) )

porta

( BitTst ( PORTD , 2 ) )

// . . .

Notas de Aula ELT024 - Programao para Sistemas Embarcados

32

Introduo

Debug de sistemas embarcados7

1.13

In the beginner's mind there are many possibilities; in the expert's
mind there are few.

E hunryu uzuki

e veri(o de sistems emrdos present lgums restries e de modo gerl no possvel


inferir sore opero do sistem sem prlisEloF gomo este tipo de sistem possui vrios
dispositivos gregdosD que funionm independentemente do proessdorD neessrio utilizr
ordgens diferentes pr relizr o deugF
hevemos lemrr que lm do softwre devemos levr em ont possveis prolems dvindos
do hrdwreF heouneD tempo de hvementoD limite do rrmento de omunio so
exemplos de pontos serem onsiderdos no momento de depuroF

Externalizar as informaes
e primeir neessidde onheer o que est onteendo em teu sistemF x progrmo
trdiionl pr desktop omum utilizrmos de mensgens no onsole visndo o estdo do
progrmF

#include " stdio .h"


#include " serial .h"
int main int argc char *
// i n c i o

do

programa

argv [ ] )

printf ( " Inicializando sistema " ) ;


( CheckForData ( ) )

if

printf ( " Chegou informacao " ) ;

else

}
{

printf ( " Problemas na comunicacao " ) ;

return

}
}

0;

hevemos ter em mente onde neessrio olor estes lerts e lemrr de retir-los do digo
(nlF
r pl em questo utilizremos o rrmento de leds que est ligdo port hF e opeE
ro deste dispositivo ser estudd posteriormente em detlhesF or enqunto st sermos
que d it d vrivel yh est ligd um led diferenteF or us d onstruo fsi
d plD o led eso om vlor H @zeroA e desligdo om o vlor I @umAF elm disso temos que
on(gurr port hF ssto feito iniindo vrivel sh om o vlor HxHH8 F

#define
#define
void main void
// d e f i n e ' s

para

volatile
volatile

near

todos

os

pinos

como

// d e s l i g a

todos

os

portas

PORTD ( * (
TRISD

// i n c i o

do

(*(

de

near

programa

unsigned char *
unsigned char *

entrada

sada

) 0 xF83 )
) 0 xF95 )

// c o n f i g u r a n d o

TRISD
PORTD
// l i g a

= 0 xFF ;
apenas

BitClr ( PORTD , 1 )

for

// mantm

sadas

= 0 x00 ;

bit

leds

1.

sistema

ligado

indefinidamente

(;;) ;

Mais informaes sobre debug de sistemas embarcados referir ao artigo The ten secrets of embedded debug-

ging de Stan Schneider e Lori Fraleigh

As variveis PORTD e TRISD so denidas como unsigned char e possuem portanto 8 bits.

Notas de Aula ELT024 - Programao para Sistemas Embarcados

33

Introduo

hevemos utilizr os leds omo sinis de viso pr entendermos o funionmento do progrmF


ssto pode ser feito trvs ds seguintes ideisX e pssr dest prte lig o led D e entrr
no sp lig o led D se no entrr lig o led D essim que sir do loop lig o led F

Programao incremental
eo invs de esrever todo o digo e tentr ompilrD interessnte relizr testes inrementisF
e d ltero no digo relizr um novo testeF ivitr lterr o digo em muitos lugres
simultnementeD no so de preer um erro ( mis difil ser onde ele estF

Checar possveis pontos de memory-leak


e for neessrio relizr loo dinmiD grntir que tods s loes sejm lierds em
lgum ponto do progrmF

Cuidado com a fragmentao da memria


istems om grnde frequni n looGliero de memri podem frgmentr memri
t o ponto de inviilizr os espos livres disponveisD eventulmente trvndo o sistemF
undo trlhr om rotins de nvel mis ixoD mis prximo o hrdwreD tente utilizr
pens mpemento esttio de memriF

Otimizao de cdigo
epens se preoupe om otimizo se estiver tendo prolems om o umprimento de trefsF
wesmo ssim onsidere em migrr pr um pltform mis poderosF istems emrdos
preonizm segurn e no veloiddeF
gso sej neessrio otimizr o digo nlise ntes o lol de relizr otimizoF xo
dint otimizr um funo grnde se el hmd pens um vezF tilizeEse de ferrments
do tipo pro(ler sempre que possvelF ssto evit perd de tempo e uxili o progrmdor
visulizr rel neessidde de otimizo de digoF

Reproduzir e isolar o erro


undo houver lgum erro deveEse primeiro entender omo reproduziEloF xo possvel tentr
orrigir o erro se no houver mneir de veri(r se ele foi elimindoF
xo momento em que se onsegue um proedimento de omo reproduzir o erro podemos
omer visulizr onde ele pode estrF e prtir deste momento devemos isolr onde o erro
est onteendoF m mneir de se fzer isto em sistems emrdos olor um loop
in(nito dentro de um testeD que vis veri(r lgum ondio de nomliF e o sistem entrr
neste teste devemos sinlizr trvs dos meios disponveisD ligrGdesligr lgum led por exemploF

if

//

}
//

aqui

tem um monte

( PORTB >= 5 )

BitClr ( PORTD , 3 )

for

(;;) ;

aqui

continua

de

cdigo . . .

//PORTB no

// l i g a

// t r a v a

led

deveria

ser

um

valor

maior

que

programa

com um monte

de

cdigo . . .

Notas de Aula ELT024 - Programao para Sistemas Embarcados

5.

34

Introduo

Ponteiros e endereos de memria

1.14

Writing in C or C++ is like running a chain saw with all the safety
guards removed.

E fo qry

od vrivel rid rmzend em lgum lugr d memriF iste lugr de(nido de mneir
ni trvs de um endereoF
r onheermos o endereo de um vrivel podemos utilizr o operdor 8F guiddo3 iste
operdor tmm utilizdo pr relizo d opero itwise exhF ixemploX
// c r i a

int

varivel

num

endereo

de

// d e c i d i d o

pelo

a =
a = a +
printf (
printf (

);

// i m p r i m e

valor

);

// i m p r i m e

endereo

elF

memria

ser

compilador

0;
1;

&a

1
de

( por

exemplo

157821)

gonheer o endereo de um vrivel muito til qundo queremos rir um ponteiro pr

onteiro um vrivel queD o invs de rmzenr vloresD rmzen endereos de memriF


etrvs do ponteiro possvel mnipulr o que est dentro do lugr pontdo por eleF
r de(nir um ponteiro tmm preismos indir o ompildor um tipoF e diferen
que o tipo indi qunto e no lol pontdo pelo ponteiro e no o prprio ponteiroF
intxeX
tipo * nome da varivel ;

ixemploX

int * apint
float * apfloat
;

heveEse tomr uiddoD pois nos exemplos imD pint e p)ot so vriveis que rmzenm
endereos de memri e no vlores tipo int ou )otF y lugr eyxehy pel vrivel pint
que rmzen um inteiroD do mesmo modo que o lugr pontdo por p)ot rmzen um vlor
frionrioF
e quisermos mnipulr o vlor do endereo utilizremos pint e p)ot ms se quisermos
mnipulr o vlor que est dentro deste endereo devemos usr um steriso ntes do nome d
vrivelF ixemploX
apfloat = 3 . 2 ;
* apfloat = 3 . 2 ;

e primeir instruo indi o ompildor que queremos que o ponteiro p)ot ponte pr
o endereo de memri nmero QFPD que no existeD gerndo um erroF e quisermos gurdr o
vlor QFP no endereo de memri pontdo por p)ot devemos utilizr segund expressoF
r trlhr om ponteiros preiso muito uiddoF eo ser de(nidoD um ponteiro tem omo
ontedo no um endereoD ms lgo inde(nidoF e tentrmos usr o ponteiro ssim mesmoD
orremos o riso de que o ontedo do ponteiro sej interpretdo omo o endereo de lgum lol
d memri vitl pr outro progrm ou t mesmo pr o funionmento d mquinF xeste
so podemos provor dnos no progrmD nos ddosD ou mesmo trvr mquinF
neessrio tomr uiddo o iniilizr os ponteirosF y vlor triudo eles deve ser
relmente um endereo disponvel n memriF
or exemploD podemos rir um ponteiro que pont pr o endereo de um vrivel j
de(nidX
// d e f i n i n d o

varivel

ivar

Notas de Aula ELT024 - Programao para Sistemas Embarcados

35

Introduo

int
int

ivar ;

// d e f i n i n d o

// o

ponteiro

iptr
//

ponteiro

iptr

* iptr ;

as

iptr

recebe

valor

do

endereo

da

varivel

ivar

= &ivar ;
prximas

linhas

so

equivalentes

ivar = 4 2 1 ;
* iptr = 4 2 1 ;

gom sistems emrdos existem lguns endereos de memri que possuem rterstis
espeiisF istes endereos possuem registros de on(guroD interfes om o meio externo e
vriveis importntes pr o projetistF pelo meio d utilizo de ponteiros que possvel
essr tis endereos de mneir simplesD trvs d lingugem gF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

Captulo 2

Arquitetura de microcontroladores
Any suciently advanced technology is indistinguishable from magic.

E erthur gF glrke

ys miroontroldores so formdos simente por um proessdorD memri e perifrios


interligdos trvs de um rrmento onforme pigur PFIF
im gerlD os perifrios so trtdos do mesmo modo que memriD ou sejD pr o proE
essdor no existe diferen se estmos trtndo om um vlor gurddo n memri ew ou
om o vlor d leitur de um onversor nlgio digitlF ssto ontee porque existem iruitos
eletrnios que rim um nvel de stro em hrdwreF heste modo todos os dispositivos
preem omo endereos de memriF

QT

37

Arquitetura de microcontroladores

pigur PFIX erquitetur do miroontroldor sg IVfRSSH

Notas de Aula ELT024 - Programao para Sistemas Embarcados

38

Arquitetura de microcontroladores

Acesso memria

2.1

e quntidde de memri disponvel que um miroontroldor pode essr depende de dois


ftoresD os tmnhos ds plvrs de ddos e ds plvrs de endereoF
y tmnho d plvr de ddos represent quntos its podem ser olodos num ni
posio d memriF
y tmnho d plvr de endereo indi qunts posies de memri o proessdor onE
segue enxergrF
or exemploD um miroontroldor ujo tmnho de ddos e o tmnho d plvr de endeE
reo so mos V its possui um possiilidde de essr um memri de tX
tamanho_da_palavra * 2^ tamanho_do_endereco
* 2^8 = 2 0 4 8 bytes ou 2 kbytes

y termo possiilidde foi usdo pois pesr de poder lnr tod ess extensoD nem sempre
existe memri fsi pr rmzenmentoF odemos imginr memri omo um rmrioF m
rmrio om T suportes pode rigr t T gvetsF hepende do mreneiro frir e olor
s gvets neste rmrioF odemos t indir posio onde queremos gurdr lgum ojetoD
ms se gvet no foi olod no possvel rmzenr nd @pigur PFPAF
Suporte
nmero:

Existe
gaveta?

sim

sim

no

no

sim

no

pigur PFPX wemri omo um rmrio


eo invs de gvets o mreneiro pode pensr em olor outros sistems de rmzenmento
nos espos @pigur PFQAF elguns destes sistems podem permitir que o usurio enxergue o que
est dentro ms no mexF elguns vo permitir que o usurio oloque oiss ms no retireF
yutros ind podem permitir que pesso retire ojetos ms no poss repElosF
ist vriedde de sistems de rmzenmento representm vriedde de tipos de memri
e de interfes de perifrios que possumosF
e memri identi(d trvs de um endereoF or estrmos trtndo de sistems digitisD
o vlor do endereo odi(do em inrioF gomo visto nteriormenteD esrever em inrio
trlhoso e muito propenso gerr errosF isndo filitr esse proessoD omumente dotdo
o sistem hexdeiml pr indir o lol de memriF
ys dispositivos so ento ligdos um determindo nmero de endereo que pss identi(E
lo de form niF y mesmo ontee pr memri ew e memri ywF ils esto ligds
um srie de endereosF eD portntoD preiso slvr um vrivel n memriD temEse que ser
quis endereos esto ligdos memri ewF e quisermos ler lgum informo grvd n
memri ywD preiso onheer lolizo ext ntes de relizr leiturF
e port h do miroontroldor sg RSSH por exemplo est no endereo HxpVQD destindo os
registros de funo espeil ou special function registerD p pigur PFRAF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

39

Arquitetura de microcontroladores

Suporte
nmero:

Existe
gaveta?

Vitrine

Gaveta

Dispenser

No

Gaveta

Cofre

pigur PFQX wemri e perifrios omo um rmrio

Vetor de
Interrupo

Stack 1
...
Stack 31

GPR1
GPR2
0x0000
0x0008
0x0018

Memria EEPROM

0x100
0x1FF

GPR3

0x200
0x2FF

GPR4

0x300
0x3FF

No implementado

Reset
Baixa prioridade
Alta prioridade

0x000
0x0FF

...

SFR

0xF60
0xFFF

0x0028
0x7FFF

0X8000
No implementado
0X1FFFFF

pigur PFRX egies de memris disponveis no sg IVfRSSH

Notas de Aula ELT024 - Programao para Sistemas Embarcados

40

Arquitetura de microcontroladores

Clock e tempo de instruo

2.2

y miroontroldor pz de relizr pens um tref por vezF ists trefs so exeutds


sempre intervlos regulres de(nidos pelo lok do sistemF y lok de(ne ento veloidde
om que o proessdor trlhF
elgums operes so mis demords pois so omposts de um quntidde mior de
trefsF or exemplo somF
e som de nmeros inteiros feit de mneir diret enqunto pr somr dois nmeros
frionriosD que esto em noto ient(1 D neessrio igulr s potnis ntes de relizr
somF or este motivo segund opero mis demord que primeirF
ixemploX
wultiplio de inteiros

A
B
C

wultiplio de frionrios
A
B
C

= 123456;
=
=

= 1.23456
= 3.4567
=

A x B

//C =

//

A x B;

// 1 .

Converter

//

//

Multiplicar

os

nm er os

3.4567

// 2 .

34567

//

Multiplicar
somar

//

4267503552

10

^9

10

expoente

10
os

mesmo
^

nm er os

mantissa

12.3456

10

3.4567

10

42.67503552

10

//
// 3 .
//

para

12.3456

// e

123456
*

10 ^ 4

4.267503552

//

//

10 ^ 5

34567;

//C = 4 2 6 7 5 0 3 5 5 2

// 1 .

x
x

Corrigir

quantidade

4.267503552

10

de

casas

dec .

gonheer qunto tempo o digo lev pr ser exeutdo permite o desenvolvedor ser de
mneir determinsti qul exigni nvel de hrdwre pr o sistem emrdoF
or exemploX m sistem preis exeutr PHH operes d milsimo de segundoF gd
opero possui um quntidde diferente de trefs onforme podemos ver n el PFIF
el PFIX untidde de operes e trefs
Operao com: Quantidade Total de tarefas

I tref

IHR

IHR

P trefs

TQ

IPT

Q trefs

PI

TQ

R trefs

IP

RV

otl

PHH

QRI

y totl de trefs serem relizds de QRI trefs por milissegundoF ssso d um quntiE
dde de QRI mil trefs por segundoF e d tref relizd em um ilo de lokD preismos
de um miroontroldor ujo proessdor trlhe no mnimo em QRI krzF

Nmeros fracionrios podem ser armazenados de dois modos no ambiente digital. O modo mais comum o

ponto utuante que se assemelha notao cientca.

Notas de Aula ELT024 - Programao para Sistemas Embarcados

41

2.3

Arquitetura de microcontroladores

Esquema eltrico e circuitos importantes

m miroontroldor representdo trvs de esquem eltrioF y esquem eltrio present


o projetist todos os omponentes e sus liges onforme presentdo n pigur PFSF

pigur PFSX isquem eltrioX wiroontroldor sg IVfRSSH


r funionremD todos os miroontroldores devem ser limentdos om tenso ontnuF
y vlor vri de modelo pr modeloF elguns podem t mesmo eitr diversos vloresF y sg
IVfRSSHD por exemploD pode ser limentdo om qulquer tenso ontnu entre P e SDS voltsF
r gerr o lok neessrioD que de(nir veloidde n qul o proessdor ir trlhrD
em gerl utilizdo um osildor ristlD que possui um tim preisoF
elguns miroontroldores podem dispensr o ristl externo optndo por utilizr um mlh
g intern o hipF ist lterntiv muito menos preis e gerlmente no permite vlores
muito ltos de lokF e vntgem que sistems que utilizm mlh g intern omo osildores
primrios possuem um usto menor que sistems que dependem de mlhs de osilo externD
sej el exitd por outr mlh g ou por um ristlF
ixistem lguns iruitos que no so esseniis pr o funionmento do sistemD ms uxiE
lim muito no desenvolvimentoF intre estes tipos de iruito o mis importnte o que permite
grvo do progrm no prprio iruitoF elguns miroontroldores exigem que o hip sej
retirdo do iruito e olodo num pl espeil pr grvElo e somente depois reolodo
n pl pr testeF iste um proedimento muito trlhoso eD devido o desgste menio
inerenteD reduz vid til do hipF
r evitr estes prolemsD os frintes desenvolverm estruturs no hip que permitem
que este sej grvdo mesmo estndo solddo pl (nlF r issoD st que o desenvolvedor
disponiilize o ontto de lguns pinos om um onetorF iste onetor ser ligdo um grE
vdor que filitr o trlho de grvo do progrmF r fmli sg est tenologi
denomind sg @in iruit seril progrmmingAF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

42

Arquitetura de microcontroladores

Multiplexao nos terminais do microcontrolador


gonforme pode ser oservdo n pigur PFSD lguns pinosGterminis possuem mis de um desE
rioF or exemplo o terminl VD desrio deste terminl iHGexSGguIF ssto indi
que dependendo d on(guro esolhid ele pode ser um terminlX

de entrada ou sada referente ao primeiro bit da porta E (RE0)

de leitura analgica pertencente ao quinto conversor analgico - digital (AN5)

utilizado para enviar um clock externo de comunicao paralela (CK1SPP)

e esolh de qul funionlidde ser utilizd depende do projetistF im sistems mis vnE
dos possvel inlusive utilizr mis de um funionlidde no mesmo terminl em perodos
lterndosD desde que o iruito sej projetdo levndo est opo em onsideroF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

43

Arquitetura de microcontroladores

Registros de congurao do microcontrolador

2.4

e miori dos terminis dos miroontroldores podem ser on(gurdos pr trlhr de diE
verss mneirsF ist on(guro relizd trvs de registros espeiisF istes registros
so posies de memri prEde(nids pelo frinteF r onheer quis so e o que fzem
preiso reorrer o dtsheet do omponenteF
elm dos registros de on(guro dos terminisD existem registros que indim omo o miE
roontroldor deve operrF y miroontroldor sg IVfRSSH possui dez registros que ontrolm
seu modo de operoD veloiddeD modo de grvoD etF istes registros so presentdos n
pigur PFTF

pigur PFTX egistros de on(guro do miroontroldor sg IVfRSSH


hos registros presentdos n pigur PFTD qutro preism neessrimente ser on(gurdos
pr que o sistem poss funionrF hois deles tem relo om on(guro do sistem de
lokX um espei( qul fonte do sinl de lokD que no so d pl em questo um
ristl externoD e o outro indi qul o presler ser usdo @vvAF
elm de on(gurr frequni si do lok neessrio desligr o wthdogF iste
um iruito pr umentr segurn do sistem emrdo desenvolvidoF r funionr
orretmenteD o progrm deve ser preprdo pr tl (nliddeF ile ser explido em detlhes
n seo 3.13 e por isso ser mntido desligdo nos prximos exemplosF
e ltim on(guro neessri desilitr progrmo em ix tensoF hevido s
liges feits n plD deixr est opo ligd impede o funionmento d pl enqunto
estiver ligd o grvdorF eixo o treho de digo que reliz ests on(gures pr o
ompildor hggF
//

//

at
at

Watchdog

code
//

desligado

Oscilador

code
//

char
char
char
char

Pll

code

Sem

code

at

0 x300000
c/

0 x300001
controlado

0 x300003

programao

at

CONFIG1L

cristal

em

0 x300006

externo

CONFIG1H
por

HS

= 0 x0C ;

software

CONFIG2H
baixa

= 0 x01 ;

= 0 x00 ;

tenso

CONFIG4L

= 0 x00 ;

e primeir olun de nmeros indi posio do registro que rmzen s on(guresF


e segund olun represent os digos utilizdos pr on(guroF r onheer s demis
opes de on(gures devemos onsultr o mnul do usurioF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

44

Arquitetura de microcontroladores

ists on(gures so dependentes do ompildor ser usdoF e seguir demonstrmos os


digos neessrios pr o ompildor gIV d wirohip@AF

#pragma
#pragma
#pragma
#pragma
//

Oscilador

//

Pll

//

Watchdog

//

Sem

c/

config

cristal

externo

HS

FOSC = HS

desligado

config

CPUDIV = OSC1_PLL2

controlado

por

software

c o n f i g W T = OFF
D
programao

config

em

baixa

tenso

LVP = OFF

xotr que s diretivs utilizds so ompletmente diferentesD ms relizm o mesmo trE


lhoF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

Captulo 3

Programao dos Perifricos


In theory, there is no dierence between theory and practice; In
practice, there is.

E ghuk eid

erifrios so os omponentesD iruitos ou sistems ligdos o miroontroldorD intern ou


externmenteF iles podem ser utilizdos pr relizr interfe entre o homem e o equipmento
ou inluir funionliddes extrs o sistemD omo omunioD segurnD etF
ys perifrios de sd1 que sero orddos neste urso seroX

Barramento de Led's(3.3)

Display de 7 segmentos(3.4)

Display LCD 2x16(3.6)

Sadas PWM(3.9)

intre os perifrios de entrd2 temosX

Leitura de teclas(3.5)

Conversor AD(3.8)

elm de sistems de entrd e sd de ddos ser orddo um dispositivo de omunio


seril @3.7AD um trtdor de snterrupo@3.12AD um imer@3.10A e um dispositivo de segurnX
thdog@3.13AF

1
2

Perifricos que fornecem informaes aos usurios ou enviam comandos da placa eletrnica para o meio externo
Perifricos que recebem informaes ou comandos do meio externo

RS

46

Programao dos Perifricos

Acesso s portas do microcontrolador

3.1

y miroontroldor possui ports que permitem o interfemento do meio externo pr o meio


internoF elgums ports podem trlhr omo reeptors ou trnsmissors de sinisF elgums
podem operr dos dois modosD sendo neessrio on(gurEls ntes de su utilizoF
y miroontroldor sg IVfRSSH possui S portsX

PORTA: bidirecional com 7 bits

PORTB: bidirecional com 8 bits

PORTC: bidirecional com 7 bits

PORTD: bidirecional com 8 bits

PORTE: 3 bits bidirecionais e 1 bit apenas entrada

gd port est ligd dois endereos de memriF y primeiro rmzen o vlor que
queremos ler do meio externo ou esrever pr o meio externo dependendo d on(guroF y
segundo endereo reliz ess on(guro indindo quis its sero utilizdos pr entrd e
quis sero utilizdos pr sd @el QFIAF
el QFIX indereos de memri pr s ports do sg IVfRSSH
Porta

Endereo dos dados Endereo de congurao (TRIS)

ye

HxpVH

HxpWP

yf

HxpVI

HxpWQ

yg

HxpVP

HxpWR

yh

HxpVQ

HxpWS

yi

HxpVR

HxpWT

equi o oneito de ponteiros se fz extremmente neessrioF t que onheemos os endereos


(xos onde s ports se enontrmD podemos rir ponteiros pr tis endereos de form que
possmos utilizr s ports omo se fossem vriveisF ixemploX

void

// i n c i o

void

do

main (

programa

// Para

que

// e l e s

so

definidos

ponteiro

// a )

unsigned

// b )

volatile :

volatile
volatile

// c )

near :

char :

near
near

0 =

//

1 =

* TRISD

sada

pois

os

unsigned char
unsigned char
que

todos

porta

D e

Tris

funcione

os

bits

podem

registro

est

* PORTD
* TRISD

pinos

representam
mudar

como

na

valores

qualquer
memria

de

momento
dados

= 0 xF83 ;
= 0 xF95 ;
sadas

( Output )

entrada

( Input )

= 0 b00000000 ;

// l i g a

apenas

* PORTD

= 0 b11110000 ;

for

// mantm

variveis

indica

// c o n f i g u r a n d o
//

as

para
como :

os

quatro

sistema

ltimos

ligado

leds

indefinidamente

(;;) ;

xotr queD por serem ponteirosD sempre que preisrmos utilizr o vlor de tis vriveis
neessrio que oloquemos o sterisoF
Notas de Aula ELT024 - Programao para Sistemas Embarcados

47

Programao dos Perifricos

m outr mneir de mnipulr s ports rir de(ne9s que permitem o uso ds ports
omo vriveisD sem neessidde de utilizr ponteiros de modo explitoD nem sterisos no
digoF

#define
#define
void main void
// d e f i n e ' s

para

TRISD

// i n c i o

do

volatile
volatile

near

todos

pinos

portas

PORTD ( * (
(*(

de

near

programa

unsigned char *
unsigned char *

entrada

sada

) 0 xF83 )
) 0 xF95 )

// c o n f i g u r a n d o

TRISD
// l i g a

PORTD

for

como

sadas

apenas

os

quatro

ltimos

leds

= 0 b11110000 ;

// mantm

os

= 0 b00000000 ;

sistema

ligado

indefinidamente

(;;) ;

gomo estmos rindo um de(neD um o prti de progrmo utilizr pens letrs


misuls pr difereniElo de um vrivel omumF
xotem que usmos dois sterisos no de(neF isto que permite que utilizemos o de(ne omo
um vrivel qulquerD sem neessidde de utilizr um steriso extr em tods s hmds
d 4vrivel4D omo no so dos ponteirosF
e segund ordgem @om de(neA preferid em relo primeir poisD dependendo do
ompildorD ger digos mis rpidos lm de eonomizr memriF elm dissoD permite que
de(nio sej feit pens um vez e utilizd em todo o progrmF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

48

3.2

Programao dos Perifricos

Congurao dos perifricos


Make everything as simple as possible, but not simpler.

iinstein

E elert

im gerlD os terminis ds ports so multiplexdos om outros dispositivosF r ser omo


on(gurr d port preiso onheer os registros de on(guro que tum sore port
desejdF e pigur QFI present todos os registros disponveis do miroontroldor IVfRSSHF

pigur QFIX egistros de on(guro dos perifrios do sg IVfRSSH


r pl que estmos utilizndoD on(guro dos terminis do sg segue onforme
el QFPF ist on(guro re)ete opo do utor de ordo om s possiiliddes d pl
e tmm o sistem mnimo pr relizo de tods s experinis d postilF
ys terminis no itdos n el QFP @ID QD SD TD ISD IVD PQ e PRA possuem perifrios
que no sero utilizdos neste ursoF ys terminis II e QI representm limento positivF
y omum @terrA est ligdo o IP e o QPF y miroontroldor utilizdo @IVfRSSHA possui o
enpsulmento hsF r outros enpsulmentos fvor onsiderr o dtsheetF
h el QFPD temos que port e possui o primeiro it omo entrd nlgi e o tereiro
e sexto omo sd digitlF ys dois its digitis servem omo ontrole de tivo do displyF
Notas de Aula ELT024 - Programao para Sistemas Embarcados

49

Programao dos Perifricos

el QFPX el de on(guro do sg pr s experinis


Terminal

2
4
7
8
9
10
13
14
16
17
19
20
21
22
25
26
27
28
29
30
33
34
35
36
37
38
39
40

Descrio do pino

AN0

RA0/

RA2
RA5
RE0
RE1
RE2
OSC1
OSC2

Funo

Potencimetro / Sensor de Temperatura

/AN2/VREF-/CVREF Display 2
/AN4/SS/C2OUT

Display 1

/AN5/CK1SPP

RS-LCD / Display 3

/AN6/CK2SPP

EN-LCD

/AN7/OESPP
/CLKI

RW-LCD / Display 4
Cristal

/CLKO/RA6

CCP2
CCP1
RD0
RD1
RD2
RD3
TX
RX
RD4
RD5
RD6
RD7
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
RC1/T1OSI/
RC2/

/P1A

Aquecedor
Ventilador / Buzzer

/SPP0
/SPP1
/SPP2

Barramento de dados para o


LCD/7seg/Led

/SPP3

RC6/

RC7/

/CK

RS232

/DT/SDO

/SPP4

/SPP5/P1B

/SPP6/P1C

Barramento de dados para o


LCD/7seg/Led

/SPP7/P1D

/AN12/INT0/SDI

/AN10/INT1/SCK

Sadas para alimentao do teclado

/AN8/INT2/VMO

/AN9/CCP2/VPO

/AN11/KBI0/CSSPP
/KBI1/PGM

Entradas para leitura do teclado

/KBI2/PGC

/KBI3/PGD

Notas de Aula ELT024 - Programao para Sistemas Embarcados

50

Programao dos Perifricos

TRISA =
ADCON1 =

0 b00000001 ;

0 b00001110 ;

// c o n f i g u r a n d o
// a p e n a s

os

terminais

primeiro

terminal

como

entrada

sada

analgico

e port f possui os R primeiros its omo sd e os qutro ltimos omo entrdF ist
port serve pr leitur d mtriz de hvesF possvel relizr leitur trvs de interrupoF
TRISB

0 b11110000 ;

// c o n f i g u r a o

INTCON =
INTCON2 =

// c o n f i g u r a n d o

interrupo

os

terminais

como

entrada

sada

pela

porta

no

habilitada

0 b11000101 ;
0 b00000001 ;

// c o n f i g u r a o

INTCON =
INTCON2 =
SPPCFG =

com

sem

interrupo

0 b00000000 ;
0 b00000001 ;

0 b00000000 ;

//RB0

RB4

so

controlados

pelo

SPP

e port g possui o segundo e tereiro it omo sd w e o stimo e oitvo omo


omunio serilF
TRISC =
CCP1CON =
CCP2CON =
TXTA =
RCSTA =
BAUDCON =
SPBRGH =
SPBRG =

0 b10000000 ;
0 b00001100 ;
0 b00001100 ;

0 b00101100 ;
0 b10010000 ;
0 b00001000 ;

0 b00000000 ;
0 b00100010 ;

// c o n f i g u r a n d o

os

terminais

segundo

como

// c o n f i g u r a

// c o n f i g u r a

terceiro

// c o n f i g u r a

transmisso

de

// c o n f i g u r a

recepo

dados

// c o n f i g u r a

sistema

// c o n f i g u r a

para
para

terminal

de

sada ,

apenas

RC7

entrada

como P M
W
como P M
W

dados
da

velocidade

da

serial

serial

56 k

// c o n f i g u r a

de

terminal

da

serial

56 k

e port h utilizd omo rrmento de ddosF ys vlores esritos nel so trnsmitidosD


simultnementeD pr os ledsD os displys de U segmentos e o disply de vghF
TRISD

0 b00000000 ;

// c o n f i g u r a n d o

os

terminais

como

sada

e port i possui pens os Q primeiros its on(gurdos omo sds digitisF o utilizdos
pr ontrole de tivo dos displys e tmm omo sinis de ontrole do vghF
TRISE

0 b00000000 ;

// c o n f i g u r a n d o

os

terminais

como

sada

Notas de Aula ELT024 - Programao para Sistemas Embarcados

51

Programao dos Perifricos

3.3

Barramento de Led's

ixiste n pl utilizd um rrmento de V itsD onde d linh possui um led ssoidoF iste
rrmento est ligdo diretmente om port h do miroontroldor onforme pigur QFPF

pigur QFPX frrmento de ved's


odemos notr pel pigur QFP que existe um jumper @tIA que hilit ou no o funioE
nmento destes ledsF elm disso pereemos que se o jumper estiver enixdoD os led's esto
permnentemente ligdos o S voltsF heste modoD pr que o led endD neessrio olor o
vlor H @zeroA no respetivo it d port hF undo um dispositivo ligdo om o vlor H @zeroA
e desligdo om o vlor I @umAD dizemos que este dispositivo oper om lgi invertidF
gonforme visto preiso on(gurr os pinos d port h omo sdD pr isso st esrever
zero em d um deles no registro shF

void

main (

TRISD
PORTD

for

void

= 0 x00 ;

= 0 xF0 ;

(;;) ;

// c o n f i g u r a
// l i g a

// mantm

os

apenas
o

pinos
os

sistema

da

quatro
num

porta

D como

ltimos

loop

sada

bits .

infinito

Notas de Aula ELT024 - Programao para Sistemas Embarcados

52

Programao dos Perifricos

3.4

Display de 7 segmentos

ys displys de U segmentos @pigur QFQA so omponentes opto eletrnios utilizdos pr preE


sentr informes pr o usurio em formto numrioF

pigur QFQX hisply de U egmentos


Fonte: Peter Halasz - http://commons.wikimedia.org/wiki/File:Seven_segment_02_Pengo.jpg

istes displys form oneidos om o intuito de gerr os dez lgrismos riosX HD ID PD


QD RD SD TD UD VD WD sendo que os lgrismos HD TD U e W podem ser representdos de mis de um
mneirF
elm dos lgrismos possvel representr pens lgums letrs de modo no mguoX s
misuls eD gD iD pD rD tD vD D D D e s minsulsX D D D dD hD iD nD oD rD tD uF
ys displys podem ser do tipo todo omum ou nodo omumF gontudoD est diferen no
ser rti pr este estudoF x pigur QFR podemos visulizr o esquem eltrio e disposio
fsi de d led no omponenteF

pigur QFRX higrm eltrio pr disply de U segmentos om nodo omum


http://www.hobbyprojects.com/the_diode/seven_segment_display.html

el pigur QFR podemos notr que pr que pre o nmero P no disply neessrio
ender os leds D D gD eD dF e estivermos utilizndo um disply om todo omumD preismos
olor um nvel lto pr ligr o ledD ou sejD o led lig om vlor I @umA e deslig om vlor H
@zeroAF ssto tmm onheido omo lgi positivF x el QFQ so presentdos os vlores
em inrio e em hexdeiml pr d represento lfnumri3 F hentre s letrs disponveis
esto presentds pens os rteres eD D gD dD iD pF ists form esolhids por serem s
mis utilizds pr presentr vlores em hexdeiml nos displysF xeste urso utilizremos
3

Notar que os valores hexadecimais apresentados servem apenas quando existe uma sequncia na ligao entre

a porta do microcontrolador e os pinos do display. Em alguns sistemas, o display pode ser controlado por duas
portas diferentes, ou possuir alguma alterao na sequncia de ligao. Para tais casos necessrio remontar a
tabela apresentada.

Notas de Aula ELT024 - Programao para Sistemas Embarcados

53

Programao dos Perifricos

el QFQX gonverso inrio E hexdeiml pr displys de U segmentos


yrdem invers

yrdem diret

hisply d e f g rex @HdefgA g f e d rex @HgfedA


H

I I I I I I H

Ui

H I I I I I I

Qp

H I I H H H H

QH

H H H H I I H

HT

I I H I I H I

Th

I H I I H I I

Sf

I I I I H H I

UW

I H H I I I I

Rp

H I I H H I I

QQ

I I H H I I H

TT

I H I I H I I

Sf

I I H I I H I

Th

I H I I I I I

Sp

I I I I I H I

Uh

I I I H H H H

UH

H H H H I I I

HU

I I I I I I I

Up

I I I I I I I

Up

I I I I H I I

Uf

I I H I I I I

Tp

I I I H I I I

UU

I I I H I I I

UU

I H I I I I H

Si

I I I I I H H

Ug

I H H I I I I

Rp

H I I I H H I

QW

H I I I I H I

Qh

I H I I I I H

Si

I H H I I I I

Rp

I I I I H H I

UW

I H H H I I I

RU

I I I H H H I

UI

ordem diret presentd n el QFQF e utilizo de um ou outr depende d ligo feit


n plF e pigur QFS present o esquem eltrio disponvelF

pigur QFSX vigo de R displys de U segmentos multiplexdos


r simpli(r utilizo deste tipo de disply omum rir um tel ujs posies
representm o vlor de onverso pr o displyF gonforme pode ser visto no digo seguirX

void

main (

void

Notas de Aula ELT024 - Programao para Sistemas Embarcados

54

Programao dos Perifricos

const char conv


x7F
unsigned int var
// v e t o r

que

armazena

TRISD
TRISA
PORTA

for

0 x6F ,

= 0 x00 ;

converso

= { 0 x3F ,

[]

time ;

0 x06 ,

0 x77 ,

dos

algarismos

0 x5B ,

0 x7C ,

0 x4F ,

0 x39 ,

para

0 x66 ,

0 x5E ,

display

0 x6D ,

0 x79 ,

0 x7D ,

0 x71 } ;

seg

0 x07 ,

= 0 x00 ;
= 0 xFF ;

( var = 0 ;

var

<

var ++)

16;

// c o l o c a

PORTD

for

// a p e n a s

os

caracteres

em

sequncia

na

sada

conv [ var ] ;
para

contar

( time = 0 ;

time

tempo

< 65000;

time ++) ;

Multiplexao de displays
gd disply exige U ou V terminis de ontroleD so tmm sej utilizdo o ponto deimlF
r utilizr R displysD por exemplo um relgio om dois dgitos pr hors e dois pr minutosD
preisrmos de QP terminis de sdD o que pode ser um usto4 muito lto pr o projetoF
m tni que pode ser utilizd multiplexo dos displysF ist tni lev em ont
um efeito iolgio denomindo perepo retininF y olho humno inpz de pereer
mudns mis rpids que IGQH @sAF yutro ftor importnte que s imgens mis lrs
(m grvds n retin devido o tempo que lev pr sensiilizr e dessensiilizr s luls
@stonetesAF
heste modo podemos ligr e desligr rpidmente o disply que imgem ontinur n
retinF e ligrmos d displyD um por vezD sequenilmenteD de mneir su(ientemente
rpidD teremos impresso que todos esto ligdosF e frequni de hvemento deve ser
mis rpid que QHrzF
e pigur QFS present o iruito om R displys multiplexdosF ereemos que os terminis
iguis esto ligdos juntosF ereemos tmm que os terminis de todo omum esto d
um ligdo um sd diferenteF gom est rquitetur reduzimos quntidde de terminis
neessrios de QP pr IPD um eonomi de PH terminisF
ws est eonomi tem um ustoD o sistem se torn mis omplexo pois no podemos ligr
dois displys o mesmo tempoF
y ontrole de qul disply ser ligdo feito trvs do trnsistor que permite ligo do
todo omum o terrD ou o nodo omum o gg @depende do tipo de dispositivoAF r o
orreto funionmento no st gor ender os leds orretos pr formr o nmeroD temos
que seguir um lgoritmo mis omplexoX
IF colocar no barramento de dados o valor a ser mostrado no display X
PF ligar o display X atravs da linha de comando
QF esperar um tempo adequado para evitar icker5
RF desligar o display
SF escolher o prximo display (X+1)
TF voltar ao passo 1
4

Microcontroladores com mais terminais possuem um custo superior, mesmo possuindo os mesmos perifricos

internamente.

Se a taxa de atualizao dos displays for muito baixa, estes vo apresentar uma variao na intensidade, como

se estivessem piscando. Este efeito chamado de icker.

Notas de Aula ELT024 - Programao para Sistemas Embarcados

55

Programao dos Perifricos

Criao da biblioteca
y progrm QFI present um exemplo de digo pr rir um iliote pr os displys de U
segmentosF y progrm QFP present o heder d ilioteF t o progrm QFQ present um
demonstro de uso d ilioteF
rogrm QFIX dispUsegF

1
2

#include
// v e t o r

" disp7seg .h"


para

armazenar

converso

do

static const char

display

0 x06 ,

0 x7D ,

5
6
7
8
9
10
11

AtualizaDisplay (

42

// d e s l i g a

44

PORTA
PORTE

45

dos

if

16

if

17

18
19

20

if

21

22
23

24
25

v0

pos )

val ;

v2

55
57
59
60

v3

62

break
case

63

val ;

64
65

void

67

InicializaDisplays (

30

// c o n f i g u r a o

34

BitClr ( TRISA , 2 )
BitClr ( TRISA , 5 )
BitClr ( TRISE , 0 )
BitClr ( TRISE , 2 )

35

// a p e n a s

31
32
33

36

ADCON1

37

// P o r t a

TRISD

38

AN0

dos

void

pinos

68

de

69
controle

72

73

74

;
1:

;
2:

;
3:

break
default
display
break
:

71

= 0;

}
}

analgico

= 0 x0E ;
de

display

0:

70

PORTD = valor [ v3 ] ;
BitSet ( PORTE , 2 ) ;
display = 0 ;

66

apenas

PORTD = valor [ v2 ] ;
BitSet ( PORTE , 0 ) ;
display = 3 ;

61

leds

( display )

break
case

58

( pos == 3 )

os

PORTD = valor [ v1 ] ;
BitSet ( PORTA , 2 ) ;
display = 2 ;

56

val ;

todos

= 0 x00 ;

break
case

53
54

( pos == 2 )

displays

PORTD = valor [ v0 ] ;
BitSet ( PORTA , 5 ) ;
display = 1 ;

52

val ;

os

51

= 0 x00 ;

// l i g a

49

void

= 0 x00 ;

switch
case

48
50

( pos == 1 )

v1

PORTD

47

== 0 )

43

46

displays

todos

// d e s l i g a

15

39

void

atual

display

14

28

// v a l o r e s

13

29

0 x39 ,

static char display


static char v0 v1 v2 v3
void MudaDigito char val char
if pos
// i n d i c a

12

26

40
41

0 x7C ,
4

0 x5B ,

0 x07 ,

valor [ ] = { 0 x3F ,
0 x4F , 0 x66 , 0 x6D ,
0 x7F , 0 x6F , 0 x77 ,
0 x5E , 0 x79 , 0 x71 } ;

dados

= 0 x00 ;

Notas de Aula ELT024 - Programao para Sistemas Embarcados

da

vez

56

Programao dos Perifricos

rogrm QFPX dispUsegFh

1
2
3
4
5
6

#ifndef
define DISP7SEG_H
void MudaDigito char val char
void AtualizaDisplay void
void InicializaDisplays void
#endif
DISP7SEG_H

pos ) ;

);

);

rogrm QFQX tilizndo iliote dispUseg

1
2
3
5
6
7
8
9

#include
#include
#include

" basico .h"


" config .h"
" disp7seg .h"

void main void


unsigned int
// i n c i o

do

10
11
12
14
15

tempo ;
InicializaDisplays ( ) ;
MudaDigito ( 0 , 0 ) ;
MudaDigito ( 1 , 1 ) ;
MudaDigito ( 2 , 2 ) ;
MudaDigito ( 3 , 3 ) ;

for

13

programa

(;;)

16

AtualizaDisplay ( ) ;

17

// g a s t a

18
19
20

for

um t e m p o

para

evitar

efeito

flicker

( tempo =0; tempo < 1 0 0 0 ; tempo ++) ;

Notas de Aula ELT024 - Programao para Sistemas Embarcados

57

Programao dos Perifricos

3.5

Leitura de teclas

r relizr leitur de um tel neessrio rir um iruito que relize leitur de um


sinl eltrio pr o vlor zero e outro pr o vlor umF ys nveis de tenso ssoidos dependem
muito dos iruitos envolvidosF ys nveis mis omuns so os omptveis om vD onde o zero
lgio representdo por Hv @zero voltsA e o um lgio representdo por Sv @ino voltsAF
m mneir de se oter este funionmento om o uso de um hve ligd o gg e um
pullEdown ou um hve ligd o terr @qxhA e um pullEupF

pigur QFTX giruito de leitur de hve


http://www.labbookpages.co.uk/electronics/debounce.html - Dr. Andrew Greensted

el pigur QFT pereemos que tenso de sd igul gg qundo hve est desligdF
xo hvendo irulo de orrente no iruito qued de tenso em I zeroF
undo hve pressiond um orrente )ui de gg pr o terr pssndo por IF gomo
no existe nenhum outr resistni no iruitoD tod tenso ( em im de IF heste modo
tenso de sd pss ser zeroF
epesr do funionmento prentemente simplesD este tipo de iruito present um prolem
de osilo do sinl no momento em que tel pressiondF ist osilo onheid omo
ouning @pigur QFUAF
ists osiles indevids podem gerr ionmentos identisD usndo mu funionE
mento do progrmF r evitr isso podemos utilizr tnis de deouneD por hrdwre ou
softwreF
e opo de deoune por hrdwre pode ser visulizd n pigur QFVF
xeste iruitoD o pitor desempenh o ppel de morteedor do sinlF m iruito om um
resistor e um pitor possui um tempo de trso pr o sinlF iste o tempo neessrio pr
rregr o pitorF heste modo s lteres rpids no sinlD devido osilo meni d
hveD so (ltrds e no oorre o prolem dos hvementos indevidosD omo pode ser visto
n pigur QFWF xotr que o nvel do sinl (ltrdo no heg zero em nenhum momentoD devido
onstnte de tempo do (ltro g ser mior que o perodo de deouneF

Debounce por software


y deoune por softwre em gerl utilizdo em situes onde se desej umentr roustez
de um entrd que j possu um deoune por hrdwre ou reduzir o usto d pl utilizndo
pens soluo por softwreF e grnde desvntgem deste tipo de sistem inserir um trso
n deteo d informoF
r relizr o deoune por softwre preismos ter um noo do tempo que hve
preis pr estilizrF h pigur QFU temos que este tempoD pr um determind hve de
proximdmente ISH @sAF m ilo de lok do sistem em questo @sg IVfRSSH om ristl de
Notas de Aula ELT024 - Programao para Sistemas Embarcados

58

Programao dos Perifricos

pigur QFUX ysilo do sinl no momento do hvemento


http://www.labbookpages.co.uk/electronics/debounce.html - Dr. Andrew Greensted

pigur QFVX giruito de deoune


http://www.ikalogic.com/debouncing.php - Ibrahim Kamal

Notas de Aula ELT024 - Programao para Sistemas Embarcados

59

Programao dos Perifricos

pigur QFWX tilizo de (ltro g pr deoune do sinl


http://www.labbookpages.co.uk/electronics/debounce.html  A. Greensted (modicado)

VwrzA de HDS6 @sAF entes de utilizr o vlor que estmos lendo n port em questo devemos
esperr QHH ilos de lok ps lgum mudn pr ter ertez que o sinl se estilizouD ou
sejD fse de ouning ouF
xotr queD no digoD o ontdor iniido om o vlor PPF etrvs d nlise do ssemler
podemos ser que d ilo de onferni do sinl possui IR instruesF essim neessrio
que o sinl permne om o mesmo vlor durnte QHV ilos pr que vrivel vletul ree
o vlor d port fF istes vlores podem ser determindos empirimente trvs de testes om
osilospiosF

void main void


unsigned char
unsigned char
unsigned char
(

valTemp ;
valAtual ;
tempo ;

TRISB = 0 xF0 ;
// mantm o s 4 l t i m o s b i t s como e n t r a d a
TRISD = 0 x00 ;
// C o n f i g u r a a p o r t a D como s a d a
PORTB = 0 x00 ;
// l i g a o s 4 p r i m e i r o s b i t s
BitClr ( INTCON2 , 7 ) ;
// h a b i l i t a
p u l l up
ADCON1 = 0 b00001110 ; // c o n f i g u r a t o d o s o s b i t s da p o r t a B

for

como

digitais

(;;)

while

// a g u a r d a

uma

mudana

na

porta

( valAtual==PORTB ) ;

// q u a n d o

acontecer

alguma

mudana ,

conta

um t e m p o

pra

ver

se

valTemp = PORTB ;
tempo = 2 2 ;
( tempo > 0 )

while
if

( valTemp ==

PORTB )

//

se

no

mudar

continua

contar

tempo ;

Lembrar que cada ciclo do PIC necessita de 4 ciclos de clock externo

Notas de Aula ELT024 - Programao para Sistemas Embarcados

permanente

60

Programao dos Perifricos

else

}
{

valTemp
tempo =

PORTB ;

//

se

mudar ,

atualiza

sistema

reinicia

tempo

22;

}
}

valAtual = valTemp ; // v a l o r a t u a l i z a d o ;
PORTD = valAtual ; // c o l o c a o v a l o r no b a r r a m e n t o

de

leds

}
}

Arranjo de leitura por matriz


r d telGoto que olodo no projetoD neessrio um terminl do miroontroldorF
r um teldo mior possvel que o miroontroldor no possu terminis disponveis em
quntidde su(ienteF ho mesmo modo que no so dos displys possvel multiplexr s
hves umentndo quntidde de hve por terminlF xovmenteD este gnhoD em termos de
hrdwreD ument omplexidde pr o softwre e juntmente om esteD o usto em termos
de tempo de omputoF
m ds tnis mis e(ientes pr gero deste teldo o rrnjo em formto mtriE
ilF gom est on(guro podemosD om x terminisD ler t (N/2)2 hvesF
gonforme podemos ver n pigur QFIHD d hve pode ser identi(d unimente pel
su posio @linhD olunAF ys terminis ligdos s linhs sero on(gurdos omo entrdD
que serviro pr ler os vlores ds telsF ys terminis ligdos s oluns sero on(gurdos
omo sdsD forneendo energi pr s hvesF e leitur relizd ento por um proesso
onheido omo vrredurX ligEse um olun por vez e veri(Ese quis hves dquel olun
esto ligdsF

void main void


unsigned char
unsigned char
(

i,j;
chave [ 2 ] [ 4 ] = { { 0 , 0 , 0 , 0 } , { 0 , 0 , 0 , 0 } } ;
INTCON2 &= 0 x7F ;
// h a b i l i t a
p u l l up
ADCON1 = 0 b00001110 ; // a p e n a s AN0 a n a l g i c o ,
TRISB = 0 xF0 ;
// o s 4 l t i m o s b i t s s o e n t r a d a
TRISD = 0 x00 ;
// c o n f i g u r a a p o r t a D como s a d a
PORTD = 0 xff ;

for
for

(;;)

(i = 0;

<

2;

i++)

PORTB = 0 xff ;
// " d e s l i g a " t o d a s a s c o l u n a s
( j = 0 ; j < 1 0 0 ; j++) ;
BitClr ( PORTB , i ) ;
// " l i g a " o b i t da c o l u n a c o r r e s p o n d e n t e

for

for j
for j
if

// g a s t a

= 0;

= 0;

tempo

< 100;

// r e a l i z a

(!

<

4;

para

garantir

que

pino

atingiu

bit

atualiza

nvel

j++) ;

teste

para

cada

matriz .

j++)

BitTst ( PORTB , j +4) )

chave [ i ] [ j ] = 1 ;
BitSet ( PORTD , j +4* i ) ;

else

}
{

chave [ i ] [ j ] = 0 ;
BitClr ( PORTD , j +4* i ) ;

}
}

Notas de Aula ELT024 - Programao para Sistemas Embarcados

alto

61

Programao dos Perifricos

pigur QFIHX eldo em rrnjo mtriil

Notas de Aula ELT024 - Programao para Sistemas Embarcados

62

Programao dos Perifricos

rogrm QFRX teldoF

1
2
3
4
5
6
7
8
9
10
11
12

#include " teclado .h"


#include " basico .h"
static unsigned int valor x0000
unsigned int LerTeclas void
return valor
void DebounceTeclas void
unsigned char i j
static unsigned char tempo
static unsigned int valorNovo
static unsigned int valorAntigo
for i
i
i
= 0

){

= 0;

<

4;

++){

PORTB |= 0 x0F ;
BitClr ( PORTB , ( i ) ) ;

15

// g a s t a

tempo

16

17

19

// l i g a

22
23

realizar

nvel

todas

coluna

funo

as

colunas

correspondente

necessrio

para

garantir

atualiza

que

pino

varivel

alto

< 1 0 0 ; ++) ;
o

= 0;

teste

<

4;

para

cada

bit

++) {
,

+4) )

,(

21

i * 4 )+j ) ;

,(

i * 4 )+j ) ;

BitClr ( valorNovo

24

if valorAntigo
tempo
else

25

26

27

==

valorNovo ) {

28

29
30

if

31

32
33
34

tempo = 1 0 ;
valorAntigo

valorNovo ;

( tempo == 0 ) {
valor = valorAntigo ;

}
}

void

void

InicializaTeclado (
){
TRISB = 0 xF0 ;
// q u a t r o e n t r a d a s e q u a t r o
INTCON2 &= 0 x7F ;
// h a b i l i t a
p u l l up
ADCON1 = 0 b00001110 ; // a p e n a s AN0 a n a l g i c o
SPPCFG = 0 x00 ;

39
40
41
42

(!

20

37

=0;

// r e a l i z a

18

38

sem

// d e s l i g a

for j j
j
for j
j
j
if BitTst PORTB j
BitSet valorNovo
else
atingiu

35

= 0 x0000 ;

= 0 x0000 ;

14

13

){

sadas

}
}
}

importnte notr que o digo im no present deoune em softwre pr s telsF


possvel relizr um deoune minimizndo o gsto om memri e tempoD representndo d
hve omo um it diferente num vrivelF ist ser ordgem utilizd n gero d
iliote pr o teldoF

Criao da biblioteca
y progrm QFR present um exemplo de digo pr rir um iliote pr um teldo de
IT tels om leitur mtriilF y heder pode ser visto no progrm QFSF t o progrm QFT
present um demonstro de uso d ilioteF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

63

Programao dos Perifricos

rogrm QFSX teldoFh

1
2
4
5
6
7

#ifndef

TECLADO_H

#define

TECLADO_H

unsigned int LerTeclas void


void DebounceTeclas void
void InicializaTeclado void
#endif
(

);

);

);

//TECLADO_H

rogrm QFTX ixemplo de uso d iliote teldo

1
2
3
5
6
7

#include
#include
#include
void

// i n c i o

8
9
11
12
13
14
16

programa

InicializaTeclado ( ) ;
TRISD = 0 x00 ; // C o n f i g u r a a p o r t a D como
PORTD = 0 xFF ; // d e s l i g a t o d o s o s l e d s

15

void

do

main (

while

10

" basico .h"


" config .h"
" teclado .h"

sada

(1==1)

DebounceTeclas ( ) ;
PORTD = LerTeclas ( ) ;

}
}

Notas de Aula ELT024 - Programao para Sistemas Embarcados

64

3.6

Programao dos Perifricos

Display LCD 2x16

y disply de vgh utilizdo neste urso possui dus linhs por IT oluns de rteresD ompE
tvel om o rhRRUVHF x pigur QFII presentdo um modelo genrio deste tipo de displyF
e pigur QFIP present o verso do disply om os terminis expostosF

pigur QFIIX hisply elfnumrio vgh PxIT

pigur QFIPX hisply elfnumrio vgh PxIT E verso


iste mesmo tipo de disply pode ser enontrdo em diverss verses om tmnhos e ores
diferentesD sendo os mis omuns de IxVD PxIT e RxRHF ode ind ter IT ou IR terminisD
dependendo se existe ou no retro iluminoF istes terminis so identi(dos omoX

Notas de Aula ELT024 - Programao para Sistemas Embarcados

65

Programao dos Perifricos

IF Terra

WF Bit 2

2. VCC (+5V)

10. Bit 3

3. Ajuste do contraste

11. Bit 4

4. Seleo de registro(RS)

12. Bit 5

5. Read/Write (RW)

13. Bit 6

6. Clock, Enable (EN)

14. Bit 7

7. Bit 0

15. Backlight + (opcional)

8. Bit 1

16. Backlight Gnd (opcional)

rlhremos pens om II terminisX os Q de ontrole do disply @DDixA e os V


pr o rrmento de ddosF iste tipo de disply possuiD integrdoD um miroontroldor pr
relizr s rotins de mnuteno do estdo do displyD ontrole d luminosidde e interfe om
o restnte do sistem eletrnioF e omunio relizd trvs de um rrmento prlelo
de V itsD por onde so envidos os ddosGomndosF
y terminl indi o disply se o rrmento ontm um omndo ser exeutdo @HA
ou um informo pr ser exiid @IAF
y terminl indi o disply se ele reeer um vlor @HA ou se estmos requisitndo
lgum informo @IAF
y terminl ix indi o disply que ele pode lerGexeutr o que est no rrmento de
ddosF
AtenoD o disply utilizdo present os terminis olodos de mneir no sequenilD
onforme pode ser visto n pigur QFIPF heste modo no qulquer disply que omptvelF
es informes so envids trvs d odi(o egssD sendo que os rteres de H
IPU so pdronizdosF ys rteres de IPV PSS dependem do frinte do displyF possvel
tmm rir lgums representesD smolos de(nidos pelo usurio e rmzenr n memri
intern do displyF r um disply om yw do tipo eHH temos os rteres de(nidos n
pigur QFIQF r yw eHP temos pigur QFIRF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

66

Programao dos Perifricos

pigur QFIQX grteres disponveis pr yw eHH


http://www.sparkfun.com/datasheets/LCD/HD44780.pdf - Datasheet Hitachi

Notas de Aula ELT024 - Programao para Sistemas Embarcados

67

Programao dos Perifricos

pigur QFIRX grteres disponveis pr yw eHP


http://www.sparkfun.com/datasheets/LCD/HD44780.pdf - Datasheet Hitachi

Notas de Aula ELT024 - Programao para Sistemas Embarcados

68

Programao dos Perifricos

ys omndos reonheidos pelo disply so presentdos n el QFRF


el QFRX vist de omndos eitos pelo o vgh
Instruo

RS

RW

Barramento de dados (bit)

Tempo

7
Limpa todo o display e congura o endereo

37 us

play para o incio se houve alguma operao 0

1.52 ms

ID

37 us

ou ligado, cursor (C) ligado ou desligado e 0

37 us

37 us

1 DL

37 us

X 0

BF

para 0.
Congura o endereo para 0. Retorna o disde shift.
Congura a movimentao do cursor e o modo
de shift do display
Congura o display (D) inteiro para desligado
blinking (B) do cursor.
Move o cursor e/ou o display sem alterar o
contedo
Congura o tamanho da palavra (DL), nmero de linhas (N) e fonte dos caracteres (F)
Desloca o cursor para a posio desejada: linha e coluna.
Verica se o display est disponvel ou se est
ocupado com alguma operao interna.

SC RL

Coluna

37 us

10 us

Denies das opes


ID: 1  Incrementa, 0  Decrementa

N: 1  2 linhas, 0  1 linha

S: 1  O display acompanha o deslocamento

F: 1  5x10 pontos, 0  5x8 pontos

SC: 1  Desloca o display, 0  Desloca o cursor

BF: 1  Ocupado, 0  Disponvel

RL: 1  Move para direita, 0  Move para esquerda

X: 1  2a linha, 0  1a linha

DL: 1  8 bits, 0  4 bits

Coluna: nible que indica a coluna

httpXGGwwwFsprkfunFomGdtsheetsGvghGrhRRUVHFpdf E htsheet rithi @modi(doA


ys terminis de ddos esto ligdos port hD juntmente om o disply de U segmentos e
rrmento de ddosF r estes dispositivos funionrem em onjunto neessrio multiplexE
los no tempoF ys terminis de ontrole esto ligdos port i onforme o esquem presentdo
n pigur QFISF

Criao da biblioteca
r filitr o ontrole do displyD podemos rir trs funesD um pr iniilizoD um pr
esrever um rtere e ltim pr envir um omndoF ists funes esto presentds no
progrm QFVD que onstitui um exemplo de ilioteF elm dests trs funes neessrio ter
um funo de delyD que grnt um determindo tempo pr que s informes sejm lids
orretmente pelo vghF
y heder dest iliote e um exemplo de omo usEl so presentdos nos progrms QFU
e QFWD respetivmenteF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

69

Programao dos Perifricos

pigur QFISX isquemtio de ligo do disply de vgh

rogrm QFUX ldFh

1
2
3
4
5
6

#ifndef
define LCD_H
void EnviaComando char cmd
void EnviaDados char valor
void InicializaLCD void
#endif
LCD_H

);
);

);

//LCD_H

Notas de Aula ELT024 - Programao para Sistemas Embarcados

70

Programao dos Perifricos

rogrm QFVX ldF

1
2
3
4
5
7
8
9

#include " lcd .h"


#include " basico .h"
#define
#define
#define
void InicializaLCD void
RS 0

EN 1

Inicializa

12
13
14
//

18
19
20

config .

// c o n f i g u r a

22

// 8 b i t s ,

// modo

// z e r a

38
39
41
42
43
44

blinking

contadores

internos

display

EnviaComando ( 0 x01 ) ;
// p o s i o

inicial

EnviaComando ( 0 x80 ) ;
}

void Delay40us void


unsigned char i
for i i
i
(

=0;

<

){

25;

++) ;

void Delay2ms void


unsigned char i
for i i
(

=0;

66

em

em

baixo

nvel

baixo

void

EnviaComando (

67

68
on

nvel

BitClr ( PORTE , RW ) ;
Delay40us ( ) ;

63

char

// comando

BitClr ( PORTE , RS ) ;

69
70

//

72
73

// h a b i l i t a

75

78

// t e r m i n a

leitura

leitura

BitClr ( PORTE , EN ) ;
// d e i x a

em

nvel

baixo

BitClr ( PORTE , RS ) ;

79
80

escrita

BitSet ( PORTE , EN ) ;
Delay2ms ( ) ;

74
76

habilita

BitClr ( PORTE , RW ) ;
PORTD = cmd ;

71

// d e i x a

em

nvel

baixo

BitClr ( PORTE , RW ) ;
Delay2ms ( ) ;

81
83

){

< 200;

Delay40us ( ) ;

// d e i x a

62
64

leitura

BitClr ( PORTE , RS ) ;

82

// d e i x a

77

45
46

61

leitura

BitClr ( PORTE , EN ) ;

60

5 x8

EnviaComando ( 0 x03 ) ;

33

37

59

incremental

// l i m p a r

31

36

linhas ,

// t e r m i n a

58

display

EnviaComando ( 0 x0F ) ;

29

34

// d i s p l a y , c u r s o r

27

32

(E/ S )

escrita

BitSet ( PORTE , EN ) ;
Delay40us ( ) ;

56
57

EnviaComando ( 0 x06 ) ;

25

30

// h a b i l i t a

55

EnviaComando ( 0 x38 ) ;

23

28

54

habilita

BitClr ( PORTE , RW ) ;
PORTD = valor ;

52

direo

valor )

BitSet ( PORTE , RS ) ;
//

53

de

21

26

o LCD

char

// d a d o s

50

BitClr ( TRISE , RS ) ; //RS


BitClr ( TRISE , EN ) ; //EN
BitClr ( TRISE , RW ) ; //RW
TRISD = 0 x00 ;
// d a d o s
ADCON1 = 0 b00001110 ;

16
17

24

49

Delay2ms ( ) ;
Delay2ms ( ) ;
Delay2ms ( ) ;
Delay2ms ( ) ;
Delay2ms ( ) ;

11

EnviaDados (

51

//

void

48

10

15

47

R
W 2

i++){

}
}

Notas de Aula ELT024 - Programao para Sistemas Embarcados

cmd )

71

Programao dos Perifricos

rogrm QFWX ixemplo de uso d iliote de vgh

1
2
3
5
6
7
8
9
10
11
12

#include
#include
#include

void main void


unsigned int i j
char msg
" Hello
InicializaLCD
for i i i
// i n c i o

do

programa

[]

World !" ;

() ;

13
14
15

=0;

< 1 1 ; ++)

EnviaDados ( msg [ i ] ) ;
( j = 0 ; j < 6 5 0 0 0 ; j++) ;

for
for

16
17

" basico .h"


" config .h"
" lcd .h"

(;;) ;

Notas de Aula ELT024 - Programao para Sistemas Embarcados

72

Programao dos Perifricos

3.7

Comunicao serial

im gerl omunio entre dois dispositivos eletrnios relizd de modo serilD isto D s
informes so pssds it it do trnsmissor pr o reeptorF iste tipo de omunio
possui lgums vntgens em relo omunio prlelD n qul plvr @yteA envid
tod de um vezF
e primeir simpli(o do hrdwreF gomo os ddos so envidos um umD quntidde
de (os envolvidos n trnsmisso menorF
e segund mior tx de trnsmissoD o que primeir vist pode preer inonsistente
j que omunio prlel envi mis de um it o mesmo tempoF r frequnis muito
lts nem sempre o envio ds informes so sinronizds em todos os (osF ixiste tmm
o prolem do rosstlkingD onde o mpo mgntio gerdo por um o induz um tenso
no o djenteD trplhndo omunioF istes prolems umentm om frequniD
limitndo ssim mxim trnsferni possvel pelo rrmento prleloF este o motivo que
levou os projetists de hrdwre desenvolverem o protoolo eeD em detrimento o shiGeeD
pr omunio entre o rh e pl me onforme pode ser visto n el QFSF
el QFSX xs de trnsmisso pr diferentes protoolos
Protocolo

Taxa (bits/s)

Taxa (bytes/s)

eril wshs

QIFPS kitGs

QFW kfGs

eril iseEPQP mxF

PQHFR kitGs

PVFV kfGs

eril e mx

PFUTRV witGs

QRSFT kfGs

sP

QFR witGs

RPS kfGs

eril iseERPP mxF

IH witGs

IFPS wfGs

s fus @p to IHHwrzA

IHH witGs

IPFS wfGs

f super speed @f QFHA

S qitGs

TPS wfGs

rhws vF IFQ

IHFP qitGs

IFPUS qfGs

Ultra DMA ATA 133 (16 bits)

IDHTR witGs

IQQ wfGs

eril ee Q @eeETHHA

TDHHH witGs

THH wfGs

Ultra-640 SCSI (16 bits)

SDIPH witGs

TRH wfGs

eril etthed gs @eA Q WDTHH witGs

IDPHH wfGs

r sistems emrdos em gerl no existe grnde neessidde de lts txs de trnsE


misso ms de sistems de ixo usto e on(veisF ixistem diverss lterntivs entre els
estudremos dus ds mis omunsX PQP e sPgF

I2C
y protoolo sPg foi desenvolvido pel hillips n dd de IWVH pr permitir que omponentes
eletrnios de um mesm pl pudessem se omunir de modo simples e filF y protoolo
iniilmente foi desenvolvido pr um omunio de IHHkpsF e verso RFH de PHIP 7 espei(
veloiddes de t SwrzF
iste um protoolo seril snronoD ou sejD o lok envido junto om o sinlD possiilitndo
o dispositivo reeptor ser o momento erto de ler os sinis no rrmentoF ssto permite o
desenvolvimento de um sistem ou dispositivo mis simples e onsequentemente mis rtoF
e espei(o normtiz um protoolo do tipo mestreGesrvo e permite mis de um mestre
ou esrvo no rrmentoF r isto d um dos dispositivos possue um registro de U ou IH
7

I2C Specication Version 4.0: http://www.nxp.com/documents/user_manual/UM10204.pdf

Notas de Aula ELT024 - Programao para Sistemas Embarcados

73

Programao dos Perifricos

its que permite identi(Elo de mneir niF heste modo possvel onstruir um sistem
integrdo om ixo usto de onexoF e (gur QFIT mostr um exemplo de um rrmento om
mis de dois omponentes no mesmo rrmentoF

pigur QFITX frrmento sPg om vrios dispositivos


ssto s possvel por us d estrur eletrni esolhid pr s onexesX oletor ertoF
ist estrutur permite que mis de um dispositivo se onete o rrmento sem usr urtosF
e um omponente est ligdo e outro desligdo estrutur evit que onte um urto e o
sinl no rrmento permnee om nvel ixoD (gur QFIUF

pigur QFIUX gonexo om oletor erto


y envio ou reepo de ddos so sempre iniidos pelo mestreF y primeiro it inform se
o o mestre desej lerGesrever um vlor do o omponenteF ys prximos sete its so o endereo
do dispositivoF
eps o envio do primeiro yte o dispositivo envi um it indindo que reeeu o omndo
orretmente e est pronto pr o prximo yteF e opero for de esritD o prximo yte
envido pelo mestreD se opero for de leitur o yte envido pelo esrvoF
ods esss operes so sinronizds pelo lok do mestreD mesmo qundo o yte envido
pelo esrvoF egundo norm do protoolo o vlor n linh de ddos deve ser sempre vlido
qundo linh de lok estiver ltF
heste modo muito simplesD e tmm stnte omumD implementr o protoolo inteiro em
softwreF

HT1380
y dispositivo rIQVH um relgio de tempo rel @gA om um protoolo proprietrio sedo
no sPgF m g um dispositivo espeilizdo em mnter ontgem de tempo pr longos
perodos de tempoF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

74

Programao dos Perifricos

elm dos dois terminis do protoolo @lok e ddosA este g possui um terminl pr hE
ilitrGdesilitr omunio do hipF e omunio tmm no exige um it de respost
omo no sPgF e (gur QFIV present form de ond que deve ser gerd pr omunio
entre os dispositivosF

pigur QFIVX invio de ddos pr o rIQVH


y yte de omndo omposto de I it indindo leitur ou esritD trs its indindo qul
o registro de interesse e I it pr hilitrGdesilitr o lok interno do hip onforme
(gur QFIWF

pigur QFIWX fyte de omndo do rIQVH


y g possui V registros internosD om endereos de HHHH HIIIF ys vlores destes
endereos esto odi(dos em fgh pr filitr pssgem dos vloresF istes registros so
presentdos n (gur QFPHF

pigur QFPHX egistros internos do rIQVH


e implemento em softwre d rotin pr envir um yte stnte simplesX
Notas de Aula ELT024 - Programao para Sistemas Embarcados

75

Programao dos Perifricos

rogrm QFIHX rite g


2
3

void

writeByte char dados


unsigned char i
for i
i
i
if dados x01
RTC_IO_ON
else
(

//

Escreve

= 0;
(

comando

<

// A n a l i s a

8;

++) {

bit

ser

& 0

transmitido

() ;

10

RTC_IO_OFF ( ) ;

11

12

// p e g a

13

dados

14

// g e r a o

prximo

bit

>
>= 1 ;
do

pulso

16
17

// i n f o

de

clock

RTC_SCLK_ON ( ) ;
DELAY ( ) ;

15

19
20
21

valida

RTC_SCLK_OFF ( ) ;
DELAY ( ) ;

18
}
}

rogrm QFIIX ed g

1
2
3
4
5

unsigned char readByte


unsigned char i
unsigned char dados
dados
for i
i
i
()

= 0;

= 0;

<

8;

++) {

RTC_SCLK_ON ( ) ;
DELAY ( ) ;

//

informao

// RTC_IO_STATUS( ) ;

if

( RTC_IO_STATUS ( ) )

10
11
12

|=

0 x80 ;

// l e r

duas

vezes ,

problema

do H
W de

leitura

dados >>= 1 ;
RTC_SCLK_OFF ( ) ;
DELAY ( ) ;

13
14
15
16

return

17
18

dados

vlida

dados ;

IF golor o vlor do it ser envido n linh de hehy


PF qerr um pulso de lok n linh de gvygu
QF e houver mis its pr envir voltr o psso I
y digo que implement rotin im est n listgem QFIHF
e reepo de vlores possui pens um diferenF gomo o vlor dos ddos gerdo pelo
esrvoD leitur deve ser feit om o lok em vlor lto onforme pode ser oservdo no treho
de digo QFIIF
gomo itdo nteriormenteD pr envir ou ler um vlor neessrio esrever um yte indiE
ndo qul o registro ser lidoF r filitr ess tref dus funes form desenvolvidsD

Notas de Aula ELT024 - Programao para Sistemas Embarcados

76

Programao dos Perifricos

rogrm QFIPX otins de esrit e leitur no g

void

char

ht1380write (
RTC_RESET_OFF ( ) ;
RTC_SCLK_OFF ( ) ;
RTC_IO_OFF ( ) ;

// l i g a

2
3
4

11
12

o RTC

RTC_RESET_OFF ( ) ;
RTC_SCLK_OFF ( ) ;
RTC_IO_OFF ( ) ;

14
15
16

19

addr <<= 1 ;
addr |= 0 x80 ; // w r i t e
writeByte ( addr ) ;
writeByte ( dados ) ;

9
10

20

dados )

RTC_RESET_ON ( ) ;

17

char

addr ,

char

ht1380read char addr


unsigned char dados
(

RTC_RESET_OFF ( ) ;
RTC_SCLK_OFF ( ) ;
RTC_IO_OFF ( ) ;

21
22
23

28

RTC_RESET_ON ( ) ;
addr <<= 1 ;
addr |= 0 x81 ; // r e a d
writeByte ( addr ) ;

29

// muda

25
26
27

31
32

para

ler

sinais

RTC_RESET_OFF ( ) ;
RTC_SCLK_OFF ( ) ;
RTC_IO_OFF ( ) ;
RTC_IO_OUT ( ) ;
dados ;

34
35
36
37
38
39

pino

RTC_IO_IN ( ) ;
DELAY ( ) ; DELAY ( ) ; DELAY ( ) ; DELAY ( ) ;
dados = readByte ( ) ;

30

return

pr leitur e esrit do g e so presentds no digo QFIPF xote que n esrit neessrio


inverter direo do terminl de ddosD de sd pr entrdF
ys registros deste g rmzenm V vlores em dX segundosD minutosD disD mesesD nosD
di do ms e um registro de proteo pr esritF fgh um formto utilizdo em sistems
eletrnios pr rmzenr vlores deimis em vriveis inris @d a binary codded decimal AF
e onverso de fgh pr deiml simplesD st se utiliz d ritmti inri seprndoEse
os digitos e multiplindo dezen por dez ntes de somEl uniddeF r onverso de
deiml pr fgh neessrio primeiro seprr dezen do vlor d unidde de depois olor
os dois vlores defsdos de R its num vrivel inriF y digo QFIQ present dus funes
de onverso e esso o registro de segundosF

RS 232
y protoolo de omunio PQP @eommended tndrd PQPA muito utilizdo pr oE
munio entre dispositivos que trnsmitem ou reeem pou quntidde de informoF
um dos protoolos mis ntigos ind em usoD tendo seu primeiro uso em IWTP pr mquins
eletromenis de esreverF y pdro PQP reviso g dtdo de IWTWF im IWVT pree
Notas de Aula ELT024 - Programao para Sistemas Embarcados

77

Programao dos Perifricos

rogrm QFIQX otins de onverso fgh x inteiro

1
2
3
4
5
6
7
8

char

rtcGetSeconds void
char value
value
ht1380read
return value
void rtcPutSeconds char
(

(0) ;

//

read

seconds

>
> 4 ) &0 x07 ) * 1 0 + ( value & 0 x0f ) ) ;

(((

ht1380write ( 0 ,

seconds )

( seconds % 1 0 )

{
|

((

seconds

10) <
< 4) ) ;

reviso h pel ise @iletroni sndustries ellineAF e verso tul do protoolo dtd de
IWWU pel se @eleommunitions sndustry essoitionA sendo hmd seEPQPEpF
y proedimento de envio de um vlor pel seril trvs do pdro PQP pode ser visto
omo um opero de itEshiftF
or exemplo letr uX em egss odi(d omo UT10 e em inrio omo IIHIHHIH2 F x
miori dos dispositivos primeiro se envi o it menos signi(tivoF entes de iniir trnsmisso
dos itsD envido um it de omeoD indindo que hver trnsmisso prtir dquele instnteF
eps isso o it menos signi(tivo envido pr sd do miroontroldorF elizEse ento
um shift pr direit e o novo it menos signi(tivo reenvidoF ist opero relizd
oito vezesF eps esse proedimento enviEse um it de prdD que pode ter duro de um ou
dois itsF
e pigur QFPI present o sinl eltrio8 envido o longo do tempo pr letr uF xotr
regio em rnoD que se estende entre CQ e EQF il indi regio de tenso n qul o
sinl no est de(nidoF gso tenso lid estej entre estes limiresD sej devido rudos ou
outros prolemsD o sistem de reepo no entender mensgem e os ddos sero perdidos
ou orrompidosF

pigur QFPIX inl serilizdo pr trnsmisso em PQP


r o orreto funionmento do protoolo devemos grntir omptiilidde no nvel fsio
8

Para o protocolo RS232 o nvel alto ou 1 (um) aquele com tenses positivas entre +3 e +15. O nvel lgico

baixo ou 0 (zero) interpretado entre -3 e -15 volts.

Notas de Aula ELT024 - Programao para Sistemas Embarcados

78

Programao dos Perifricos

@do hrdwreA e lgio @no softwreAF


r o hrdwre st omptiilizr o tipo de onetorD os nveis de tenso e pingem dos
onetoresF
r o nvel de softwre temos que de(nir odi(o utilizd @egssD pEVD etAD
espei(r o )uxo de rteres @quntidde de its por rtereD tmnho do strtGstop itD
priddeA e tx de trnsmisso desejdF
ists on(gures so relizds trvs de S registros eD geD fehgyxD E
fqr e fqF
ys registros e e ge so responsveis por on(gurr o meio de trnsmissoX preE
senGusni de it de prdD tmnho d plvr de um rtereD trnsmisso snronGsE
snronF
y registro fehgyx responsvel por on(gurr o ontrole de veloidde de trnsmissoF
ys registros fqr e fq representm o yte mis lto e o mis ixo d plvr de
IT its que indi tx de trnsmissoF
e tx de trnsmisso pode ser luld segundo el QFTF
el QFTX glulo do vlor d tx de trnsmisso d port seril
fits de gon(guro

reiso x de trnsmisso

eXR fehgyxXQ eXP

FOSC
[64 (n + 1)]
FOSC
=
[16 (n + 1)]

Vits F232 =

Vits

ITits

ITits

F232

Vits F232 =
ITits

FOSC
[4 (n + 1)]

x ! no importD n ! vlor do pr fqrXfq


gomo visto n el QFT existem trs frmuls diferentes pr lulr tx de trnsmissoF
e melhor mneir de on(gurr tx de trnsmisso d port seril veri(r qul dos mtodos
ger o menor erro pr um dd tx de trnsmissoF
or exemploD queremos um tx de trnsmisso de SUDT kpsF e frequni disponvel um
ristl de VwrzF sndo s trs frmuls hegmos os seguintes vloresX

n1 = 1, F232 = 62.500, err = -7,64%

n2 = 8, F232 = 55.555, err = 3,63%

n3 = 32, F232 = 57.142, err = 0,79%

e equo que ger o menor erro tereirF gomo queremos trlhr om um omuniE
o ssnronD d el QFT otemos que os its de on(guro devem serX e@RA a HD
fehgyx@QA a I e e@PA a IF e seguir temos todo o proesso de on(guro d port
seril PQPF
BitClr ( BAUDCON , 0 )
BitSet ( BAUDCON , 3 )
BitClr ( BAUDCON , 6 )
BitClr ( RCSTA , 1 ) ;
BitClr ( RCSTA , 2 ) ;
BitClr ( RCSTA , 4 ) ;
BitClr ( RCSTA , 6 ) ;

; // D e s a b i l i t a

auto

deteco

; // R e g i s t r o

de

gerao

; // O p e r a o

de

recepo

// D e s a b i l i t a

bit

de

// D e s a b i l i t a

bit

erro

// H a b i l i t a
// S e l e c i o n a

bit

de

de

de

sinal

velocidade
com

16

bits

ativa

erro
na

de

overrun

comunicao

bits

recepo

Notas de Aula ELT024 - Programao para Sistemas Embarcados

79

Programao dos Perifricos

BitSet ( RCSTA , 7 )
BitSet ( TXSTA , 2 )
BitSet ( TXSTA , 3 )
BitClr ( TXSTA , 4 )
BitSet ( TXSTA , 5 )
BitClr ( TXSTA , 6 )
SPBRGH = 0 x00 ;
SPBRG = 0 x22 ;
BitSet ( TRISC , 6 )
BitClr ( TRISC , 7 )

// C o n f i g u r a

//Modo

// E n v i a

//Modo

// H a b i l i t a

// S e l e c i o n a

// C o n f i g u r a

para

56 k

// C o n f i g u r a

para

56 k

// C o n f i g u r a

pino

de

recepo

// C o n f i g u r a

pino

de

envio

de

RX/TX como

alta

bit

pinos

velocidade

de

parada

de

comunicao

habilitado

( break

character

bit )

assncrono
transmisso
bits
(SPBRGH | SPBRG = 3 2 )
(SPBRGH | SPBRG = 3 2 )
como

como

entrada

sada

y proedimento de serilizo dos its feito de mneir utomti pelo hrdwreF inE
qunto ele est relizndo este proesso no devemos mexer no registro que rmzen o yte
ser envidoF or isso devemos veri(r se o registro est disponvelF ssto feito trvs do it R
do registro sF undo este vlor estiver em I st esrever o vlor que desejmos trnsmitir
no registro iqF

void EnviaSerial unsigned char


while BitTst PIR1

c)

(!

TXREG=c ;

,4) ) ;

// a g u a r d a
// c o l o c a

o
o

registro
valor

ficar

para

ser

disponvel
enviado

y proesso de desserilizo tmm relizdo de modo utomtio pelo hrdwre do


dispositivoF essim que um yte estiver disponvel o sistem set o it S do registro sI e
podemos ento ler o vlor disponvel no registro giqF

unsigned char RecebeSerial void


char resp
if BitTst PIR1
(

= 0;

resp

return

RCREG ;

resp ;

,5) )

// V e r i f i c a

// r e t o r n a

// r e t o r n a

se

existe

algum

valor

disponvel

valor

zero

e metodologi presentd pr leitur e esrit de vlores onheid omo poolingF xeste


tipo de ordgem (mos prdos esperndo que o vlor estej disponvel pr leiturGesritF
iste o mtodo mis simples pr se ontrolr qulquer tipo de dispositivoF y prolem que
o proessdor ( trvdo em um tref gstndo tempo que seri til pr relizr outrs
operesF e melhor lterntiv pr resolver este prolem trvs de interrupesD que sero
ordds pens no tpio 3.12F

Criao da biblioteca
y progrm QFIR present um exemplo de digo pr rir um iliote pr omunio
serilF y rquivo de heder presentdo no progrm QFIS e o exemplo de uso demonstrdo no
progrm QFITF
e seguir o rquivo de hederF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

80

Programao dos Perifricos

rogrm QFIRX serilF

1
2
4
5
6
7
8
10
11
12
13
14

#include " serial .h"


#include " basico .h"
void EnviaSerial unsigned char
while BitTst PIR1
(!

// c o l o c a

o
o

registro
valor

ficar

para

ser

disponvel
enviado

= 0;

void

23
24
25
26
27
28

resp

return

22

29

// a g u a r d a

unsigned char RecebeSerial void


char resp
if BitTst PIR1

17

20

,4) ) ;

16

21

TXREG=c ;

15

18

c)

,5) )

RCREG ;

// V e r i f i c a

// r e t o r n a

resp ;

// r e t o r n a

InicializaSerial (

void

TXSTA = 0 b00101100 ;
RCSTA = 0 b10010000 ;
BAUDCON = 0 b00001000 ;
SPBRGH = 0 b00000000 ;
SPBRG = 0 b00100010 ;
BitSet ( TRISC , 6 ) ;
BitClr ( TRISC , 7 ) ;

se

existe

algum

valor

disponvel

valor

zero

// c o n f i g u r a

transmisso

de

// c o n f i g u r a

recepo

dados

// c o n f i g u r a

sistema

// c o n f i g u r a

para

de

para

dados
da

velocidade

da

serial

serial

56 k

// c o n f i g u r a

de

56 k

// p i n o

de

recepo

de

// p i n o

de

envio

da

serial

dados

de

dados

rogrm QFISX serilFh

1
2
3
4
5
6

#ifndef
define SERIAL_H
void EnviaSerial unsigned char c
unsigned char RecebeSerial void
void InicializaSerial void
#endif
SERIAL_H

);

);

);

//SERIAL_H

Notas de Aula ELT024 - Programao para Sistemas Embarcados

81

Programao dos Perifricos

rogrm QFITX ixemplo de uso d iliote de omunio seril

1
2
3
5
6
7
8
9
10
11

#include
#include
#include

" basico .h"


" config .h"
" serial .h"

void main void


unsigned int i j
char msg
" Hello
unsigned char resp
// i n c i o

do

programa

[]

World !" ;

TRISD = 0 x00 ; // a c e s s o
InicializaSerial ( ) ;
j =0;

12

for

13
14
15

aos

leds

(;;)

for

16

// d e l a y

17
18

(i = 0;

// e n v i a

< 65000;

21

EnviaSerial ( msg [ j ] )
j ++;
( j > 11)

22

19

i++) ;

dados

if

20

23
24

j =0;
EnviaSerial ( 1 3 ) ;

25

26

// r e c e b e

27

if

resp

28
29

30
31

PORTD

resp ;

32
33

dados

RecebeSerial ( ) ;
( resp ! = 0 )
=

}
}

Notas de Aula ELT024 - Programao para Sistemas Embarcados

82

Programao dos Perifricos

3.8

Conversor AD

m onversor de nlgio pr digitl um iruito pz de trnsformr um vlor de tenso


num informo inriF y iruito que utilizremos possui um preiso de IH itsD ou sejD
ele pz de sentir um vrio de prtimente um milsimo9 d exurso mxim do sinlF
r on(guro que iremos utilizrD om um fonte de SvD isto signi( um sensiilidde
de RFVVmF

Elementos sensores
e onverso eh muito utilizd pr relizrmos leitur de sensoresF odo sensor sedo
num trnsdutorF m elemento trnsdutor quele que onsegue trnsformr um tipo de grndez
em outroD por exemplo um lmpd inndesente @pigur QFPPAF

pigur QFPPX vmpd inndesente


odemos utilizr um lmpd inndesente omo sensor de tensoX pegEse um lmpd
de PPHF vigEse lmpd um tomd desonheidF e o rilho for forte tomd possui
PPHD se o rilho for de ix intensiddeD tomd possui IPUF e lmpd no sender
existe lgum prolem n (oD n tomd ou t mesmo n lmpdF e lmpd um
trnsdutor de tenso pr luminosiddeF
r eletrni estmos interessdos em trnsdutores uj sd sej um vrio de
tensoD orrente ou resistniF
m sistem muito simples de trnsdutor de ngulo pr resistni o potenimetro @piE
gur QFPQAF
e o potenimetro estiver limentdo pelos terminis d extremiddeD o terminl entrl funE
ion omo um divisor de tensoF y vlor de sd proporionl posio do ursorF odemos
proximr o potenimetro omo dus resistnis onforme presentdo n pigur QFPRF
heste modo tenso plid em v @supondo que v muito mior que PA X

VRL =

VS R2
R2
= VS (
)
R1 + R2
RPot

e n onstruo do potenimetro vrio d resistni o longo d trilh foi feit de modo


onstnteD resistni vri de mneir liner om posio do ursorF heste modo podemos
utilizr o potenimetro omo um trnsdutor de nguloF
hiverss medids podem ser relizds utilizndo o oneito de divisor de tensoX luminosiE
dde om vh'sD for om strinEgugesD deslomento om potenimetros lineresD etF
ixistem lguns sensores que possuem iruitos de mpli(o e ondiionmento do sinl
emutidos no mesmo envluro que o elemento sensorF e estes tipos de sensores dmos denoE
mino de tivosF
9

Com uma preciso de 10 bits conseguimos representar

210

valores diferentes, ou 1024 valores.

Notas de Aula ELT024 - Programao para Sistemas Embarcados

83

Programao dos Perifricos

pigur QFPQX otenimetro

pigur QFPRX otenimetro omo divisor de tenso


http://en.wikipedia.org/wiki/File:Potentiometer_with_load.png

pigur QFPSX giruito integrdo vwQS

Notas de Aula ELT024 - Programao para Sistemas Embarcados

84

Programao dos Perifricos

m sensor tivo possui no mnimo Q terminisX P pr limento e I pr sd do sinlF


m exemplo deste tipo de sensor o vwQS @pigur QFPSA que utilizdo pr monitormento
de temperturF
x pigur QFPT presentdo o digrm de loos do iruito integrdo do vwQSF y diodo
utilizdo omo unidde sensor de temperturF

pigur QFPTX higrm de loos do vwQS


undo polrizdo trvs de um orrente onstnteD hvendo mudn de tempertur
tenso em im do diodo mudF ys dois mpli(dores e s respetivs relimentes esto
inserids no iruito pr mpli(r e estilizr s vries de tensoF

Processo de converso AD
ixistem lguns iruitos que relizm onverso de um sinl nlgio dvindo de um trnsE
dutor pr um sinl digitl om um preiso ritrriF
e ordgem mis simples utilizo de omprdoresF gd omprdor possui um
nvel diferente de tenso de referniF istes nveis so esolhidos de form que represento
inri f sentidoF
ixemploX gonverso de um vlor nlgio que vri de zero ino volts num plvr
digitl de dois itsF
r N its temos 2N representes diferentesF interessnte ento dividir mplitude
iniil por 2N divises iguisF r N = 2 temos R representes de IFPSv dF omum
nestes omprdores que primeir tenso possu um o'setF
epresento inri om P its lor em tenso lor em enso om o'set
HH

HFHHH

HFTPSv

HI

IFPSH

IFVUSv

IH

PFSHH

QFIPSv

II

QFUSH

RFQUSv

e pigur QFPU present s fixs de vlores e d neessidde de o'set pr um fix mis


representtiv dos vlores reisF
Notas de Aula ELT024 - Programao para Sistemas Embarcados

85

Programao dos Perifricos

5
11

4,375

10

3,125

01

1,875

00

0,675

Intervalos
de valor

Limites de
comparao

pigur QFPUX he(nio de fix de vlores pr eh de P its

pigur QFPVX gonversor nlgio digitl de P its


http://en.wikipedia.org/wiki/File:Flash_ADC.png - Jon Guerber

Notas de Aula ELT024 - Programao para Sistemas Embarcados

86

Programao dos Perifricos

rogrm QFIUX dF

1
2
3
4

#include " adc .h"


#include " basico .h"
void InicializaAD void
(

5
6
7
8
9
11
12
13
14
15
16

BitSet ( TRISA , 0 ) ;
ADCON0 = 0 b00000001 ;
ADCON1 = 0 b00001110 ;
ADCON2 = 0 b10101010 ;

// s e t a

bit

// s e l e c i o n a
// a p e n a s
//FOSC

0
o

AN0

/32 ,

como
canal

entrada
0

liga

analgico ,

Alinhamento

ad

referncia

direita

tempo

baseada
de

na

fonte

c o n v = 12 TAD

int LeValorAD void


unsigned int ADvalor
BitSet ADCON0
while BitTst ADCON0
(

,1) ;

ADvalor
ADvalor
ADvalor

17
18
19
20

return

;
// i n i c i a

, 1 ) ) ; //

ADRESH ;

//

converso

espera
o

terminar

converso ;

resultado

<
<= 8 ;

+= ADRESL ;
ADvalor ;

rogrm QFIVX dFh

1
2
3
4
5

#ifndef
define ADC_H
void InicializaAD void
int LeValorAD void
#endif
ADC_H

);

);

//ADC_H

y iruito eletrnio responsvel pels ompres pode ser visulizdo n pigur QFPVF
y iruito d pigur QFPV onheido omo onversor nlgio digitl do tipo )sh onde
d nvel de tenso possui seu prprio omprdorF ixistem outrs ordgens que minimizm
o uso de onversores @prte mis r do iruitoA ms inserem trso no proesso de onversoF
y trso depende do tipo de iruito que implementdoF

Criao da biblioteca
od onverso lev um determindo tempo queD onforme itdo n seo nteriorD depende
d rquitetur que estmos utilizndoD d qulidde do onversor eD lgums vezesD do vlor de
tenso que queremos onverterF r que o miroontroldor relize orretmente onverso
neessrio seguir os seguintes pssosX
IF gon(gurr o onversorY
PF sniir onversoY
QF wonitorr o (nl d onversoY
RF ver o vlorF
ys progrms QFIU e QFIV presentm os rquivos de digo e heder de um iliote
exemplo pr onversores nlgios pr digitl no miroontroldor sgF y progrm QFIW
present um digo exempli(ndo o uso d iliote ridF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

87

Programao dos Perifricos

rogrm QFIWX ixemplo de uso d iliote de onversores eh

1
2
3
4
5
6
7
8
9
10

#include " basico .h"


#include " config .h"
#include " disp7seg .h"
#include " adc .h"
void main void
unsigned int i
int temp
// i n c i o

programa

= 0;

InicializaDisplays ( ) ;
InicializaAD ( ) ;

for

11
12
13

14
15
16
17
18
19
20
21
22
23
24
25
26

do

(;;)

temp = LeValorAD ( ) ;
temp %= 1 0 0 0 0 ;
MudaDigito ( temp / 1 0 0 0 , 3 ) ;
temp %= 1 0 0 0 ;
MudaDigito ( temp / 1 0 0 , 2 ) ;
temp %= 1 0 0 ;
MudaDigito ( temp / 1 0 , 1 ) ;
temp %= 1 0 ;
MudaDigito ( temp
,0) ;
AtualizaDisplay ( ) ;
( i = 0 ; i < 1 0 0 0 ; i++) ;

for

Notas de Aula ELT024 - Programao para Sistemas Embarcados

88

Programao dos Perifricos

3.9

Sadas PWM

es sds w so sds digitis que possuem um hvemento opldoF y sinl mud seu
estdo de positivo pr zero vris vezes por segundoF e porentgem do tempo que este sinl
permnee em nvel alto de(ne o ilo de trlhoD ou duty yleD d sdF e pigur QFPW
present Q sinis w om mesm frequni ms om duty yle diferentesF

pigur QFPWX inis w om vrio do duty yle


uponh um sd w ligd um resistorF undo sd estiver em nvel lto existe
pssgem de orrente eltri e resistni queeF undo estiver em nvel ixo orrente
prF gomo onstnte trmi do omponente ltD levEse lguns segundos pr que o
resistor que ou esfrieF essim possvel justr quntidde de energi mdi ddo um
frequni su(ientemente lt10 de sinl do wF
im outrs plvrsD se frequni do w for mis lt do que rg onseguir enxergrD
qundo olormos o duty yle em SH7D rg ir reeer SH7 d energi totlF e for um
resistorD podemos ontrolr tempertur (nl deste modoD num motor podemos justr
veloidde de roto que queremosF
gomo itdoD frequni do w tem que ser su(ientemente ltF ist frequni deE
pende do iruito implementdo no miroontroldorF xo so do sg IVfRSSH luld
segundo frmul ixoF

Freq.PWM =

FOSC
[(PR2 ) + 1] 4 (TMR2 Prescaler )

gom um frequni de osilo de Vwrz @disponvel n plA podemos tingir frequnis


que vrim de RVVrz t PwrzF
y prolem de trlhrD no so do sgD om frequnis muito lts que perdemos
resoluo n de(nio do duty yleF or exemploD pr frequni de w em Pwrz om
um lok de Vwrz temos um resoluo de pens P itsF yu sejD podemos on(gurr sd
pr H7D PS7D SH7 ou US7 do vlor mximoF e resoluo pode ser otid segundo frmul
ixoX

Resolu o PWM (max ) =

FOSC
log( FPWM )

log(2)

bits

y sg IVfRSSH permite um resoluo de t IH itsF gom um osildor prinipl de V wrz


frequni mxim do w pr utilizrmos os IH its de resoluo UVIPDS rzF r um
10

Para ser considerada sucientemente alta a frequncia do PWM deve possuir um valor mais alto que a maior

constante de tempo do sistema, de modo que este no perceba a oscilao.

um fator de 10 vezes em geral

suciente para que o sistema no sinta esse impacto. No entanto cada caso deve ser analisado em particular

Notas de Aula ELT024 - Programao para Sistemas Embarcados

89

Programao dos Perifricos

resoluo de V its frequni mxim ument pr QIFPS krzF


tilizndo primeir e segund frmuls podemos montr el QFUF
el QFUX pix de frequnis mxims e mnims pr d on(guro do presler
Prescaler Freq. mxima (PR2 = 0) Freq. mnima (PR2 = 0)

PFHHHFHHH

UFVIPDS

SHHFHHH

IFWSQDP

IT

IPSFHHH

RVVDQ

y duty yle @em porentgemA luldo de ordo om frmul ixoX

DutyCycle PWM =

[CCPRxL : CCPxCON (5 : 4)]


(PR2 + 1) 4

Criao da biblioteca
r on(gurr s sds w devemos espei(r frequni de trlho trvs de P
e gyxPD lm do duty yle em ggIv e ggPvF xo registro sg on(gurdo o
terminl omo um sd e em ggIgyx e ggPgyx de(nimos que ele deve trlhr omo
um wF y presler foi on(gurdo pr IT its de modo oter mior fix de frequni
udvel disponvel @el QFUAF xotr que importnte relizr primeiro multiplio e
somente depois divisoD pr no hver perd de informoF xo progrm QFPH presentdo
um digo exemplo de omo rir s rotins de opero do wF y heder dest iliote
presentdo no progrm QFPIF or (mD o progrm QFPP present um exemplo de utilizo
dest ilioteF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

90

Programao dos Perifricos

rogrm QFPHX pwmF

1
2
4
5

#include " pwm .h"


#include " basico .h"
void SetaPWM1 unsigned char

// f r m u l a

// DC_porcento = V /

unsigned int
val

10
11

val

val

13

// o s

CCPR1L

15

// o s

void
val

/=

|=

>
>

unsigned int
*

4 = DC *

apenas

10

( PR2+1)

/25

) porcento )

* ( PR2 +1) ;

bits

bits

so

colocados

no CCPR1L

2;

dois

so

colocados

( val & 0 x0003 ) <


<

unsigned char

256 =

na

posio

do CCP1CON

do CCP1CON

4;

26

// o s

25.600

val

porcento * PR2 ;

que

tem

apenas

10

bits

&= 0 x03ff ;
8

27

CCPR2L

28

// o s

primeiros

val

ltimos

CCP2CON

29

porcento )

25;

// g a r a n t e

val

|=

>
>

bits

so

colocados

no CCPR1L

2;

dois

so

colocados

( val & 0 x0003 ) <


<

na

posio

4;

void

SetaFreqPWM (

34

//PR2 =

PR2

35

unsigned int

freq )

f o s c / ( fpwm * 4 * p r e s c a l e r ) 1 =

= ( 1 2 5 0 0 0 / ( freq ) )

(8000000/( f r e q *4*16) )

1;

void

40
41
42
43
44
45
46

val

SetaPWM2 (

25

39

tem

ltimos

// 1 0 0

24

38

= ((

25;

unsigned int

23

36

val

que

22

33

( ( PR2+1) * 4 ;

( PR2+1)

21

32

cycle :

primeiros

CCP1CON

16

30

duty

&= 0 x03ff ;

14

20

// g a r a n t e

12

19

do

//V = DC/ 1 0 0

17

porcento )

InicializaPWM (

void

BitClr ( TRISC , 1 ) ;
BitClr ( TRISC , 2 ) ;
T2CON
|= 0 b00000011 ;
BitSet ( T2CON , 2 ) ;
CCP1CON |= 0 b00001100 ;
CCP2CON |= 0 b00001100 ;

// c o n f i g u r a

os

// c o n f i g u r a

// L i g a

pinos

como

prescale

timer

do

sadas

timer

para

// c o n f i g u r a

CCP1 como um P M
W

// c o n f i g u r a

CCP2 como um P M
W

rogrm QFPIX pwmFh

1
2
3
4
5
6
7

#ifndef
define PWM_H
void SetaPWM1 unsigned char porcento
void SetaPWM2 unsigned char porcento
void SetaFreqPWM unsigned int freq
void InicializaPWM void
#endif
P M H
W _

(
(

);
);

);

);

//P M H
W _

Notas de Aula ELT024 - Programao para Sistemas Embarcados

1:16

91

Programao dos Perifricos

rogrm QFPPX ixemplo de uso d iliote ds sds w

1
2
3
4
5
6
7
8
9

#include " config .h"


#include " basico .h"
#include " pwm .h"
#include " adc .h"
void main void
int temp
// i n c i o

do

programa

InicializaPWM ( ) ;
InicializaAD ( ) ;

for

10
11

(;;)

temp

12
13

{
=

LeValorAD ( ) ;

// a j u s t a n d o

frequncia

14
15

// a j u s t a n d o

de

acordo

com

entrada

analgica

SetaFreqPWM ( temp ) ;

17
18

d u t y c y c l e

para

50%

SetaPWM1 ( 5 0 ) ;

16
}
}

Notas de Aula ELT024 - Programao para Sistemas Embarcados

92

Programao dos Perifricos

rogrm QFPQX timerF

1
2
3
4
5
6
7
8
9
10
12
13
14

#include " basico .h"


#include " timer .h"
char FimTimer void
return BitTst INTCON
void AguardaTimer void
while BitTst INTCON
(

(!

void

// t e m p o

em

micro

,2) ) ;

unsigned char
// p a r a

placa

unsigned int
segundos

ResetaTimer (

com

8MHz 1

19
20
21
22

ciclos

tempo )

us = 2

ciclos

tempo * 2 ;
// o v e r f l o w a c o n t e c e com 2^15 1 = 6 5 5 3 5 ( max u n s i g n e d i n t )
ciclos = 6 5 5 3 5 ciclos ;
ciclos = 1 4 ; // s u b t r a i t e m p o d e o v e r h e a d ( e x p e r i m e n t a l )
TMR0H = ( ciclos >> 8 ) ; // s a l v a a p a r t e a l t a
TMR0L = ( ciclos & 0 x00FF ) ; // s a l v a a p a r t e b a i x a
BitClr ( INTCON , 2 ) ; // l i m p a a f l a g d e o v e r f l o w

18

void

27
28
29

17

25

16

26

,2) ;

15

23

InicializaTimer (

void

T0CON = 0 b00001000 ; // c o n f i g u r a
BitSet ( T0CON , 7 ) ; // l i g a o t i m e r

timer

sem

prescaler

3.10

Timer

xos miroontroldores existem estruturs prpris pr relizr ontgem de tempoD ests


estruturs so denominds imersF
y sg IVfRSSH possui qutro timersF r utilizrmos sd w temos que on(gurr o
timer PD que ger se de tempo que ser omprd om o duty yleF
eo invs de ontrmos qunts instrues so neessris pr rir um dely de um deterE
mindo tempoD podemos utilizr os timersF isolhemos o vlor de tempo que queremos ontrD
iniilizmos s vriveis e espermos onteer um over)ow 11 n ontgem do timerF
r trlhr om o timer preismos simente de um funo de iniilizoD um
pr resetr o timer e outr pr indir se o tempo on(gurdo nteriormente j pssouF m
qurt funo egurdimer@AD foi onstrud pr filitr o desenvolvimento de lgums
rotins omuns nos progrmsF ists rotins esto implementds no progrm QFPQ ujo heder
presentdo no progrm QFPRF y modo de utilizr est iliote presentdo no progrm
QFPSF

11

Overow conhecido como estouro de varivel. Toda varivel digital possui um valor mximo, por exemplo

255 para uma varivel do tipo unsigned char. Se uma varivel unsigned char possui o valor 255 e acrescida de
1, seu valor passa a ser zero e acontece o estouro ou overow.

Notas de Aula ELT024 - Programao para Sistemas Embarcados

93

Programao dos Perifricos

rogrm QFPRX timerFh

1
2
3
4
5
6
7
8

#ifndef
define TIMER_H
char FimTimer void
void AguardaTimer void
void ResetaTimer unsigned int
void InicializaTimer void
#endif
TIMER_H

);

// t e m p o

em

micro

);

segundos

( us )

tempo ) ;

);

//TIMER_H

rogrm QFPSX ixemplo de uso d iliote de um temporizdor


1
2
3
4
5

void main void


unsigned int
// i n c i o

do

6
7
9
10

cont ;
TRISD =0 x00 ;
InicializaTimer ( ) ;
ResetaTimer ( 1 0 0 0 0 ) ;
cont = 0 ;

for

programa

(;;)

14

AguardaTimer ( ) ;
ResetaTimer ( 1 0 0 0 0 ) ;
cont ++;
( cont >= 5 0 ) // 50

15

11
12

if

13

16
17
18

10ms = 0 , 5 s

PORTD ^= 0 xFF ;
cont = 0 ;

19
20

}
}

Notas de Aula ELT024 - Programao para Sistemas Embarcados

94

Programao dos Perifricos

3.11

Reproduo de Sons

e ligrmos sd w um utoEflnte possvel reproduzir sonsF gonheendo frequni


de d um ds nots musiis e duro dests possvel reproduzir um msiF r
reproduzir o tempo om um preiso melhor podemos utilizr o swiH omo unidde de
tempoF
gonforme visto n seo 3.9D o w utilizdo n pl onsegue reproduzir s frequnis
udveis prtir de RVVDQrzF or isso esolhemos omer esl musil prtir do gS @h
enorA que possui frequni de SPQ rzF e segund esl possui o doro d frequni @um
oitv imAF r reproduzir usni de som esolhemos frequni de IPSFHHH rz12 D que
inudvelF ssto simpli( o progrmF
rogrm QFPTX eproduo de sons

1
2
3
4
6
7
8
9
10
11
12
13
14
15
16
17
18
19

#include
#include
#include
#include

" config .h"


" basico .h"
" pwm .h"
" timer .h"

#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define

40
41
42

das

43

musicais

44

45

// f r e q u n c i a
// n o t a s

39

523

void main void


unsigned char
unsigned char
unsigned char
// i n c i o

// I m p e r i a l

10 ,

587

5,

DS 6 2 2

FS

5,

784

GS 8 3 0
A

880

AS 9 3 2

47

48

987

49

for

50
22
23
24
25
26
27
28
29
30
31
32
33
34

37
38

12

#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define

// s e g u n d a

#define
// sem

C2

oitava

52

D* 2

54

E* 2

F2

10 ,

50 ,

50 ,

25 ,

2,

50 ,
50 ,

100 ,
10 ,

V)

10 ,
5,

5,
5,

2,

G* 2

59

A* 2

61

B* 2

63

53

if

55

58
60
62
64

pos ++;
SetaFreqPWM ( notas [ pos ] )
SetaPWM1 ( 5 0 ) ;
cont =0;

}
}
}

som

50 ,

25 ,
25 ,

25 ,

10 ,

(;;)

A2S AS * 2
B2

5,

50 ,

5,

57

G2S GS* 2
A2

10 ,
5,

50 ,

56

F2S FS * 2
G2

50 ,

5,

F* 2

D2S DS * 2
E2

25 ,

= {50 ,

AguardaTimer ( ) ;
ResetaTimer ( 1 0 0 0 0 ) ;
cont ++;
( cont >= tempo [ pos ] )

C2S CS * 2
D2

51

C* 2

50 ,
25 ,

(SW E p i s o d e

tempo [ ]

2,

10 ,

5,
5,

5,

50 ,

50 ,
50 ,

25 ,

100 ,

50 ,
100 ,
10 ,

50 ,
5,

10 ,
250};

50 ,

notas [ ] = { G , v , G , v , G , v , E , v , B ,
v , G , v , E , v , B , v , G , v , D2S , v , D2S , v ,
D2S , v , E2 , v , B , v , FS , v , E , v , B , v , G , v ,
G2S , v , G , v , G , v , G2S , v , G2 , v , F2S , v , F2 ,
v , E2 , v , F2S , v } ;
InicializaPWM ( ) ;
InicializaTimer ( ) ;
SetaFreqPWM ( notas [ 0 ] ) ;
SetaPWM1 ( 5 0 ) ; // g a r a n t e d u t y c y c l e d e 50%

46

740

5,

cont =0;
pos =0;

March

unsigned int

659
698

50 ,

programa

CS 5 5 4

do

125000

Esta a mxima frequncia possvel para o PWM operado com prescaler de 16x.

Notas de Aula ELT024 - Programao para Sistemas Embarcados

95

Programao dos Perifricos

Interrupo

3.12

et o momento todos os progrms que form desenvolvidos seguim um )uxo sequenil sendo
lterdo pens por hmds de funesD estruturs de deiso ou loopF m dos prolems de
se utilizr este tipo de estrutur que lguns perifrios possuem um tempo muito grnde pr
relizrem su funo omo o onversor eh por exemploF xest situo o que fzemos iniir
onverso e (r monitorndo um vrivel que indiv qundo onverso tinh termindoF
ist tni onheid omo poolingF
y prolem de se relizr leitur de lgum perifrio por pooling que o proessdor perde
tempo relizndo operes desneessris hendo vrivel de ontroleF m lterntiv
utilizr um sistem queD qundo opero desejd estivesse (nlizdD nos vissse pr que
pudssemos tomr um providniF iste proedimento hmdo de interrupoF
elguns dispositivos possuem possiilidde de operrem om interrupesF undo onE
dio do dispositivo for stisfeit @(m d onverso pr o ehD hegd de informo n serilD
mudn no vlor d vrivel n port fA ele ger um interrupoF e interrupo pr o
progrm no ponto em que ele estiverD slv todos os ddos tuis e vi pr um funo prE
de(nidF ist funo reliz seu trlho e ssim que terminr volt o progrm no mesmo
ponto onde estv ntes d interrupoF
hos dispositivos estuddos t gor os que germ interrupo soX

ort erilX qundo heg lgum informo em giq ou qundo o u'er de trnsE
misso iq estiver disponvelF

gonversor ehX qundo o resultdo d onverso estiver disponvel pr leiturF

ort fX qundo lgum dos its on(gurdos omo entrd lter seu vlorF

imer HX qundo ontee over)ow em seu ontdorF

r gerenir interrupoD deveEse rir um rotin que ir veri(r qul foi o hrdwre
que gerou interrupo e tomr s providnis neessrisF e mneir de delrr que um
determind funo ser responsvel pelo trtmento d interrupo depende do ompildorF
r o ompildor hgg st que oloquemos expresso interrupt I ps o nome d
funoF

void

NomeDaFuncao (

// c d i g o

void

interrupt

...

r o ompildor gIV d wirohip temos que gerr um digo em ssemler que indir
qul funo ser responsvel pel interrupoF

void

NomeDaFuncao (

// c d i g o

void

...

#pragma
void interrupt_at_high_vector void
// I n d i c a r

code

posio

no

vetor

de

interrupes

h i g h _ v e c t o r =0x 0 8

_asm GOTO Interrupcao _endasm

#pragma
#pragma
}

code
interrupt

NomeDaFuncao

A funo que ir tratar da interrupo no retorna nem recebe nenhum valor.

Notas de Aula ELT024 - Programao para Sistemas Embarcados

96

Programao dos Perifricos

rogrm QFPUX pontes de snterrupo

1
2

void

Interrupcao (

//

no

//

if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if

aqueles

5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

void

necessrio
das

interrupt

utilizar

interrupes

( BitTst ( PIR1 , 0 ) )

( BitTst ( PIR1 , 1 ) )
( BitTst ( PIR1 , 2 ) )
( BitTst ( PIR1 , 3 ) )

todos

os

if 's ,

apenas

desejadas

/* c d i g o */

// F l a g

de

overflow

/* c d i g o */

// F l a g

de

comparao

do

TIMER2 com PR2

/* c d i g o */

// F l a g

de

comparao

do

CCP1

/* c d i g o */

// F l a g

de

fim

de

operao

de

transmisso

do

TIMER1

na

porta

paralela

( BitTst ( PIR1 , 4 ) )

/* c d i g o */

// F l a g

de

fim

( BitTst ( PIR1 , 5 ) )

/* c d i g o */

// F l a g

de

recepo

/* c d i g o */

// F l a g

de

fim

( BitTst ( PIR1 , 7 ) )

/* c d i g o */

// F l a g

de

leitura /escrita

( BitTst ( PIR1 , 6 ) )

de

da

da

Serial

Serial

converso

do AD
da

porta

paralela

( BitTst ( PIR2 , 0 ) )

/* c d i g o */

// F l a g

de

comparao

( BitTst ( PIR2 , 1 ) )

/* c d i g o */

// F l a g

de

overflow

do

TIMER3

/* c d i g o */

// F l a g

de

condio

de

Tenso

( BitTst ( PIR2 , 3 ) )

/* c d i g o */

// F l a g

de

deteco

de

coliso

( BitTst ( PIR2 , 2 ) )

do

CCP2

A l t a / Baixa
no

barramento

( BitTst ( PIR2 , 4 ) )

( BitTst ( PIR2 , 5 ) )

( BitTst ( PIR2 , 6 ) )

/* c d i g o */

// F l a g

de

fim

/* c d i g o */

// F l a g

de

interrupo

/* c d i g o */

// F l a g

de

mudana

escrita

na

na

memria

flash

da USB
entrada

de

comparao

( BitTst ( PIR2 , 7 ) )

( BitTst ( INTCON , 0 ) )

( BitTst ( INTCON , 1 ) )

/* c d i g o */

// F l a g

de

falha

/* c d i g o */

// F l a g

de

mudana

no

oscilador
na PORTA B

/* c d i g o */

// F l a g

de

interrupo

( BitTst ( INTCON , 2 ) )

/* c d i g o */

// F l a g

de

overflow

/* c d i g o */

// F l a g

de

interrupo

externa

INT1

( BitTst ( INTCON3 , 1 ) )

/* c d i g o */

// F l a g

de

interrupo

externa

INT2

( BitTst ( INTCON3 , 0 ) )

externa

INT0

no TIMER0

ixiste um orrelo entre o nmero que vem depois d expresso interrupt pr o omE
pildor hgg e o nmero o (nl d expresso 5prgm ode highvetor pr o gIVF istes
nmeros representm posio pr qul o miroontroldor vi qundo ontee um interE
rupoF ists posies esto num re onheid omo vetor de interrupesF
r o miroontroldor sg IVfRSSH este vetor possui trs posies importntesX HxHH@HAD
HxHV@IA e HxIV@PAF y ompildor gIV us posio fsi e o hgg o nmero entre prntesesF
e posio H @HxHHA represent o endereo que o miroontroldor us qundo este
de ser ligdoF posio de resetF qerlmente smos deste vetor e vmos direto pr funo
min@AF
es posies I e P @HxHVDHxIVA so reservds pr s interrupes de lt e ix prioriddeD
respetivmenteF neessrio que o progrmdor esolh quis dispositivos so de lt e quis so
de ix prioriddeF ixiste ind um modo de omptiilidde om os miroontroldores mis
ntigos no qul todos os perifrios so mpedos n primeir interrupo @HxHVAF tilizremos
este modo por questo de filiddeF
gomo todos os perifrios esto mpedos n mesm interrupoD funo deve ser pz de
diferenir entre s diverss fontes de requisioF m mneir de se relizr est veri(o
trvs ds )gs de ontroleD ou sejD its que indim situo de d perifrioF
y progrm QFPU present um funo que trt de tods s fontes possveis de interrupo
pr o sg IVfRSSHF
im gerl no neessrio trtr tods s interrupesD pens quels que in)ueniro
o sistemF y progrm QFPV present um exemplo de um funo que trt s interrupes
dvinds d port fD do timer HD d seril e do ehF
r que funo presentd no progrm QFPV funione orretmente devemos iniilizr
s interrupes de modo dequdoD onforme presentdo no progrm QFPWF
Notas de Aula ELT024 - Programao para Sistemas Embarcados

97

Programao dos Perifricos

rogrm QFPVX rtmento ds interrupes

1
2
3
4
5
6
7
8

static unsigned int ADvalor


static unsigned char Serial
static unsigned int Tecla
void Interrupcao void interrupt
char i j
if BitTst PIR1
;
;

9
10
11
12
}

14
15

,6) )

//AD

fim

de

converso

ADvalor = ADRESH ; // l o r e s u l t a d o
ADvalor <<= 8 ;
ADvalor += ADRESL ;
BitClr ( PIR1 , 6 ) ; // l i m p a a f l a g

if

13

( BitTst ( PIR1 , 5 ) )

// S e r i a l :

recepo

16

// B i t C l r ( PIR1 , 5 ) ;

Serial

17

if

18

19
20

21
22

RCREG ;

// l i m p a

( BitTst ( INTCON , 0 ) )

sozinho

//PORTA B

quando

mudou

valor

for

( i = 0 ; i < 4 ; i++){
PORTB |= 0 xFF ;
BitClr ( PORTB , ( i ) ) ;
( j =0; j < 1 0 ; j++) ;
( j = 0 ; j < 4 ; j++){
( ! BitTst ( PORTB , j +4) ) {
BitSet ( Tecla , ( i * 4 )+j ) ;

for
for
if
else

23
24
25
26
27
28

29
30

BitClr ( Tecla , ( i * 4 )+j ) ;

31

32

PORTB = 0 x00 ;
BitClr ( INTCON , 0 )

33
34

if

35

36
37

( BitTst ( INTCON , 2 ) )

//TIMER0 :

Overflow

38

// t e m p o

mximo

de

interrupo

do

timer

BitClr ( INTCON , 2 ) ; // l i m p a a f l a g
TMR0H = 0 x00 ; // r e i n i c i a c o n t a d o r d e t e m p o
TMR0L = 0 x00 ; // r e i n i c i a c o n t a d o r d e t e m p o
ADCON0 |= 0 b00000010 ; // i n i c i a c o n v e r s o

39
40
41
42
43
44

}
}

Notas de Aula ELT024 - Programao para Sistemas Embarcados

98

Programao dos Perifricos

rogrm QFPWX sniilizo do sistem om interrupes

1
2
3
4

void main void


unsigned int
(

i , temp , teclanova =0;

// c o n f i g u r a n d o

todas

as

interrupes

TRISD = 0 x00 ;
TRISB = 0 xF0 ; // mantm o s 4 l t i m o s b i t s como e n t r a d a
PORTB = 0 x00 ; // mantm l i g a d a s a s 4 c o l u n a s
InicializaSerial ( ) ;
InicializaDisplays ( ) ;
InicializaLCD ( ) ;
InicializaAD ( ) ;
InicializaTimer ( ) ;
BitClr ( RCON , 7 ) ; // d e s a b i l i t a IPEN ( modo d e c o m p a t i b i l i d a d e )
BitSet ( PIE1 , 6 ) ; // l i g a a i n t e r r u p o p a r a o AD
BitSet ( PIE1 , 5 ) ; // l i g a a i n t e r r u p o p a r a a r e c e p o na s e r i a l
BitSet ( INTCON , 5 ) ; // l i g a a i n t e r r u p o p a r a o t i m e r 0
BitSet ( INTCON , 3 ) ; // l i g a a i n t e r r u p o p a r a a p o r t a B
BitSet ( INTCON , 7 ) ; // h a b i l i t a t o d a s a s i n t e r r u p e s g l o b a i s
BitSet ( INTCON , 6 ) ; // h a b i l i t a t o d a s a s i n t e r r u p e s d e p e r i f r i c o s

5
6
7
8
9
10
11
12
13
14
15
16
17
18

for

19
20

(;;){

AtualizaDisplay ( ) ;
temp = ADvalor ;
temp %=10000;
MudaDigito ( temp / 1 0 0 0 , 3 ) ;
temp %=1000;
MudaDigito ( temp / 1 0 0 , 2 ) ;
temp %=100;
MudaDigito ( temp / 1 0 , 1 ) ;
temp %=10;
MudaDigito ( temp , 0 ) ;
( teclanova != Tecla ) {
teclanova = Tecla ;
( i =0; i < 1 6 ; i++){
( BitTst ( Tecla , i ) ) {
EnviaDados ( i +48) ;

21
22
23
24
25
26
27
28
29

if

30
31
32
33
34
35

for
if

36

37

38

for

39
40
41

(i = 0;

< 1000;

i++) ;

Notas de Aula ELT024 - Programao para Sistemas Embarcados

99

Programao dos Perifricos

rogrm QFQHX sniilizo do sistem om interrupes

1
3
4
5
6
7
8

#define

C R T
L W D( )

void main void


unsigned int i
unsigned char temp
// i n c i o

do

programa

TRISD =0 x00 ;
PORTD =0 x00 ;
BitSet ( WDTCON , 0 )

for

10
11
12

PORTD ++;
(i = 0; i

15

for

16
17

// l i g a

sistema

de

watchdog

(;;)

14

13

< 10000;

i++)

CLRWTD ( ) ;

18
19

_asm C R D
L W T _endasm

}
}

3.13

Watchdog

or lgum motivo o softwre pode trvr em lgum pontoD sej por um loop in(nito ou por
esperr respost de lgum omponente trvs de pooling de um vrivelF
e primeir ondio pode ser evitd trvs de um projeto uiddoso de softwre lido
um o vlidoF t segund exige que os hrdwres djentes funionem orretmenteF
e lgum hrdwre present um flh e no envi respost que o miroontroldor est
esperndoD este ltimo ir trvrF xests situes possvel utilizr o wthdogF
y wthdog um sistem que vis umentr segurn do projetoF ile funion omo
um temporizdor que preis onstntemente ser reiniidoF gso no sej reiniido no tempo
exigidoD o wthdog reinii o miroontroldor dndo possiilidde de sir de um loop in(nito
ou de um pooling sem respostF
r hilitr o wthdog neessrio lterr os registros de on(guroD espei(mente
o gyxpsqPr @HxQHHHHPAF yutro mtodo onsiste em deixr o wthdog desligdo no registro e
ligElo trvs de softwreD omo presentdo no progrm QFQHF
xotr o 5de(ne rido n primeir linh do progrm QFQHF e expresso gvh o
omndo em ssemler responsvel por resetr o wthdogF es diretivs sm e endsm
informm o ompildor que os omndos utilizdos devem ser trnsritos extmente iguis
pr o rquivo ssemler ser gerdoF
e ps ligr o wthdog no relizrmos opero de reset deleD omentndo ou exluindo
funo gvh@AD o sistem ir trvr to logo o tempo ssoido o wthdog tenh expirdo
pel primeir vezD reiniindo o sistemF gomo pens reiniir no soluion o prolemD pois o
progrm rido no ter funo pr reiniir o wthdogD o sistem ontinu sendo reiniido
inde(nidmenteF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

Captulo 4

Arquitetura de desenvolvimento de
software
Constrained by memory limitations, performance requirements, and
physical and cost considerations, each embedded system design requires a middleware platform tailored precisely to its needs, unused
features occupy precious memory space, while missing capabilities
must be tacked on.

E hrF ihrd oley

xo desenvolvimento de um sistem de mior porteD importnte de(nir o tipo de rquitetur


que iremos utilizrF xeste ptulo presentmos trs ordgens possveisF e esolh deve ser
sed no tipo de dispositivo ser desenvolvidoD n omplexidde do sistemD n possiilidde
de gerr suprodutos e dos requisitos de tempoF

IHH

101

Arquitetura de desenvolvimento de software

rogrm RFIX ixemplo de rquitetur singleEloop


1
2
3
4
5
6
7
8

#include " basico .h"


#include " config .h"
#include " teclado .h"
#include " disp7seg .h"
void main void
// s e o

de

// f u n o

includes

principal

int ia
float fa

// d e c l a r a o

10

11
12

das

variveis

ib , ic ;
, fb , fc ;

// i n i c i a l i z a o

dos

perifricos

14

InicializaTeclado ( ) ;
InicializaDisplays ( ) ;

15

// l o o p

13

for

16
17

18

// chamada

das

tarefas

DebounceTeclas ( ) ;
ia = LerTeclas ( ) ;
ImprimeDisplay ( ia ) ;

19
20
21
22
23

principal

(;;)

// tem

que

ser

executado

pelo

menos

cada

1 0 ( ms )

cada

1 0 ( ms )

}
}

rogrm RFPX rolem n sinroni de tempo pr o singleEloop


1
2
3

for

// l o o p

// chamada

das

tarefas

DebounceTeclas ( ) ;
ia = LerTeclas ( ) ;
ImprimeDisplay ( ia ) ; // tem
ic = RecebeSerial ( ) ;
fa = 2 . 0 * ic / 3 . 1 4 ;
EnviaSerial ( fa & 0 x00FF ) ;
EnviaSerial ( fa >> 8 ) ;

5
6
7
8
9
10
11
12

principal

(;;)

que

ser

executado

pelo

menos

4.1

One single loop


1 Innite Loop, Cupertino, CA 95014.

E indereo d epple

ist estrtgi utilizd t gor nos exemplos presentdosF hentro d funo prinipl
olodo um loop in(nitoF ods s trefs so hmds trvs de funesF
e vntgem de se utilizr est ordgem filidde de se iniir um projetoF r
sistems miores ome (r omplido oordenr s trefs e grntir exeuo num
tempo determinstioF yutro prolem modi(oGmplio do softwreF qerlmente
insero de um funo no meio do loop pode gerr erros em outrs funes devido restries
de tempo dos perifrios ssoidosF
xo exemplo imD insero d omunio seril e os lulos podem trplhr esrit
no disply de sete segmentosD gerndo )ikerF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

102

Arquitetura de desenvolvimento de software

rogrm RFQX ixemplo de sistem snterruptEdriven

1
2
3
4
5
6

int ia
void Interrupcao void
if BitTst INTCON
;

// t r a t a m e n t o

12

via

interrupo

interrupt

11

teclado

8
9

do

ia

,0) )

//PORTA B

mudou

valor

LerTeclas ( ) ;

}
}

void

main (

13

void

// i n i c i a l i z a o

dos

perifricos

15

InicializaTeclado ( ) ;
InicializaDisplays ( ) ;

16

// i n i c i a l i z a o

14

18
19

for

20
21
22

interrupo

( ; ; ) // l o o p

principal

23

// chamada

das

tarefas

ImprimeDisplay ( ia ) ;

24
25
26

da

BitClr ( RCON , 7 ) ; // d e s a b i l i t a IPEN ( modo d e c o m p a t i b i l i d a d e )


BitSet ( INTCON , 3 ) ; // l i g a a i n t e r r u p o p a r a a p o r t a B
BitSet ( INTCON , 7 ) ; // h a b i l i t a t o d a s a s i n t e r r u p e s g l o b a i s
BitSet ( INTCON , 6 ) ; // h a b i l i t a t o d a s a s i n t e r r u p e s d e p e r i f r i c o s

17

}
}

4.2

Interrupt control system

m prte dos desenvolvedores de sistems emrdosD que possuem restries de tempo de


tendimento mis rigorososD optm por grntir ests restries trvs de interrupesF
x miori dos sistems miroontroldoresD s interrupes so tendids num tempo muito
urtoD er de lguns ilos de instruoD o que pr miori dos sistems su(ienteF heveEseD
entretntoD tomr uiddo om quntidde de perifrios que germ interrupes e prioridde
dd d um delesF
yutr ordgem muito utilizd gero de um interrupo om tempo (xoD por exemE
plo d SmsF
e grnde vntgem d ordgem itd que insero de mis digo dentro do loop
prinipl no trplh veloidde om que o disply tulizdoD que est (xo em S@msAF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

103

Arquitetura de desenvolvimento de software

rogrm RFRX ixemplo de sistem snterruptEdriven om se de tempo

1
2
3
4

int ia
void Interrupcao void
;

// e x i s t e

6
7

10
11

uma

fonte

apenas

de

interrupo :

interrupt

Timer

ResetaTimer ( 5 0 0 0 ) ; // r e i n i c i a t i m e r p a r a p r x i m a i n t e r r u p o
ImprimeDisplay ( ia ) ;
BitSet ( INTCON , 5 ) ; // r e l i g a a i n t e r r u p o p a r a o t i m e r 0

void

main (

12

void

// i n i c i a l i z a o

dos

perifricos

15

InicializaTeclado ( ) ;
InicializaDisplay ( ) ;
InicializaTimer ( ) ;

16

// i n i c i a l i z a o

13
14

18
19
20

for

21
22
23

24
25
26
27

da

interrupo

BitClr ( RCON , 7 ) ; // d e s a b i l i t a
BitSet ( INTCON , 5 ) ; // l i g a a
BitSet ( INTCON , 7 ) ; // h a b i l i t a
BitSet ( INTCON , 6 ) ; // h a b i l i t a
ResetaTimer ( 5 0 0 0 ) ;

17

(;;)

// l o o p

IPEN

( modo

interrupo

de

compatibilidade )

para

timer

todas

as

interrupes

globais

todas

as

interrupes

de

perifricos

principal

DebounceTeclas ( ) :
ia = LerTeclas ( ) ;

}
}

Notas de Aula ELT024 - Programao para Sistemas Embarcados

104

4.3

Arquitetura de desenvolvimento de software

Cooperative multitasking

im omputoD multitref ou multitsking um proesso pelo qul diferentes trefs omprE


tilhm um mesmo reursoD sej ele memriD proessmento ou qulquer perifrio disponvelF
m mneir de relizr este omprtilhmento trvs de um diviso do tempoX tref
e possui um intervlo o (nl do qul deve eder os reursos pr tref fF undo mudn
de tref feit pel prpri trefD o sistem dito oopertivoF undo existe um sistem
externo que reliz ess tro o sistem denomindo preemptivoF
e mudn de trefs for extremmente rpid o efeito resultnteD pr o ser humnoD
de que tods s trefs esto sendo exeutds simultnementeF m ds mneirs de se
oter este tipo de opero trvs d rio de um mquin de estdosD omo mostrdo n
pigur RFIF

Inicio
Ler
Teclado

Atualiza
Display
Escreve
Serial

Atualiza
Display

Ler Serial

Atualiza
Display

pigur RFIX ixemplo de mquin de estdos


xotEse que ps fse de iniilizo o sistem entr num iloD omo n ordgem oneE
singleEloopF yutr peuliridde que lgums trefs podem ser exeutds mis de um vez
pr grntir s restries de tempoF xo exemplo tref de tulizo dos displys exeutd
trs vezesF
e trnsposio de um mquin de estdo pr o digo em g relizd trvs de um
swithEseF
possvel retirr tods s triuies pr vrivel slot e olor no slotEottom exE
presso slotCCF e ordgem presentd foi esolhid por umentr roustez do sistemD j
que vrivel slot ontrol todo o )uxo do progrmF
e insero de um nov tref relizd de mneir simplesD st diionr outro slotD ou
sejD st inserir um seGrek om tref desejdF
gomo mquin est dentro do loop in(nitoD d vez que o progrm pssr pelo seD
ele exeutr pens um slotF ist ordgem ger ind outro efeitoF gomo pode ser visto
no digoD nturlmente surgem dus regiesX topEslot e ottomEslotF e lgum digo for
olodo nest regio ele ser exeutdo tod vezD de modo interldoD entre os slotsF el
pigur RFID pereemos que extmente este o omportmento que queremos pr funo
etulizhisply@AF heste modoD podemos remodelr o digo fzendo est lteroF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

105

Arquitetura de desenvolvimento de software

rogrm RFSX ixemplo de oopertive multitsking

1
2

void

main (

char

void

// d e c l a r a o

4
5

das

variveis

slot ;

// f u n e s

de

inicializao

InicializaSerial ( ) ;
InicializaTeclado ( ) ;
InicializaDisplay ( ) ;

6
7

for

8
9

(;;){

// i n c i o

10

// * * * * * * * * * * * * * * *

11

// * * * * * * * * * * * * * * * *

13

// * * * * * * * * * * *

switch
case

14
15

loop

fim

incio

tops l o t

tops l o t

do

da

infinito

do

mquina

de

******************
******************

estado

************

( slot ) {
0:

ProcessaTeclado ( ) ;
slot = 1 ;

16

break
case

17
18
19

;
1:

AtualizaDisplay ( ) ;
slot = 2 ;

20

break
case

21
22
23

;
2:

RecebeSerial ( ) ;
slot = 3 ;

24

break
case

25
26
27

;
3:

AtualizaDisplay ( ) ;
slot = 4 ;

28

break
case

29
30
31

;
4:

EnviaSerial ( ) ;
slot = 5 ;

32

break
case

33
34
35

;
5:

AtualizaDisplay ( ) ;
slot = 0 ;

36
37
38

break
default
slot
break
;

39
40
41

:
= 0;

42

43

// * * * * * * * * * * * *

45

// * * * * * * * * * * * * * *

46

// * * * * * * * * * * * * * * *

47
48

do

incio

// f i m

loop

fim

da

mquina

incio
fim

infinito

do

do

de

estado

bottoms l o t

bottoms l o t

**************

*****************
*****************

(!?)

Notas de Aula ELT024 - Programao para Sistemas Embarcados

106

Arquitetura de desenvolvimento de software

rogrm RFTX ixemplo de oopertive multitsking om uso do top slot

1
2

void

main (

char

void

// d e c l a r a o

4
5

das

variveis

slot ;

// f u n e s

de

inicializao

InicializaSerial ( ) ;
InicializaTeclado ( ) ;
InicializaDisplay ( ) ;

6
7

for

8
9

(;;)

// i n c i o

do

10
11

// * * * * * * * * * * * * * * *

loop

infinito

incio

13

// * * * * * * * * * * * * * * * *

16

// * * * * * * * * * * *

switch
case

17
18

tops l o t

******************

fim

incio

tops l o t

do

da

mquina

de

******************

estado

************

( slot )

19

0:

ProcessaTeclado ( ) ;
slot = 1 ;

20

break
case

21
22
23

;
1:

RecebeSerial ( ) ;
slot = 2 ;

24

break
case

25
26
27

;
2:

EnviaSerial ( ) ;
slot = 0 ;

28
29
30

break
default
slot
break
;

31
32
33

:
= 0;

34

35

// * * * * * * * * * * * *

38

// * * * * * * * * * * * * * *

40

// * * * * * * * * * * * * * * *

42
43

do

AtualizaDisplay ( ) ;

12

// f i m

loop

fim

da

mquina

incio

fim

infinito

do

do

de

estado

bottoms l o t

bottoms l o t

**************

*****************

*****************

(!?)

Notas de Aula ELT024 - Programao para Sistemas Embarcados

107

Arquitetura de desenvolvimento de software

rogrm RFUX ixemplo de sistem goopertiveEmultitsking om slot temporizdo

1
2

void

main (

char

void

// d e c l a r a o

4
5

das

variveis

slot ;

// f u n e s

de

inicializao

InicializaDisplay ( ) ;
InicializaTimer ( ) ;

for

7
8
9

(;;)

// i n c i o

do

10

// * * * * * * * * * * * * * * *

infinito

incio

ResetaTimer ( 5 0 0 0 ) ;
AtualizaDisplay ( ) ;

11
12
13

// * * * * * * * * * * * * * * * *

16

// * * * * * * * * * * *

switch
case

17
18

fim

incio

ms

para

mquina

******************

cada

tops l o t

do

da

tops l o t

do

// 5

de

slot

******************

estado

************

( slot )

19

0:

ProcessaTeclado ( ) ;
slot = 1 ;

20

break
case

21
22
23

;
1:

RecebeSerial ( ) ;
slot = 2 ;

24

break
case

25
26
27

;
2:

EnviaSerial ( ) ;
slot = 0 ;

28
29
30

break
default
slot
break
;

31
32
33

:
= 0;

34

35

// * * * * * * * * * * * *

38

// * * * * * * * * * * * * * *

40

// * * * * * * * * * * * * * * *

fim

da

mquina

incio

fim

do

do

de

estado

bottoms l o t

bottoms l o t

**************

*****************

*****************

AguardaTimer ( ) ;

41
42
43

loop

// f i m

loop

infinito

(!?)

Fixao de tempo para execuo dos slots


ho modo presentdo t gorD ssim que um funo terminD o sistem utomtimente
pss pr prxim trefF m rtersti desejd que ests funes possum um
tempo determindo pr funionrF heste modoD todo o sistem se torn mis previsvelF
e mneir mis simples de relizr este proedimento rir um rotin de tempoF od vez
que um slot terminrD o sistem (r gurdndo o tempo esolhido pr reiniir o sistemF
xo exemplo presentdo inserid funo egurdimer@A no ottomEslot de modo que
prxim funo s exeutr qundo pssr os S @msAF
gomo este um modo simples de implementr um sistem multitref podemos notr que
se funo ultrpssr S @msA todo o ronogrm ser fetdoF neessrio ento grntir que
todo e d slot ser exeutdo em menos de S @msAF ssto deve ser feito trvs de testes de
ndF
x pigur RFP est um exemplo de omo um sistem om Q slots se omport o longo do
Notas de Aula ELT024 - Programao para Sistemas Embarcados

108

Arquitetura de desenvolvimento de software

tempoF xotr que o slot I @FIA gst um tempo de PFH@msAD o slot P de QFI @msA e o slot Q pens
IFP @msAF t o topEslot onsome HFS @msA e o ottomEslot HFQ @msAF

Top
S.1
S.2
S.3
Bottom
"vago"
0

10

15

20

25

30

pigur RFPX ixemplo d mudn de slots no tempo


odemos notr que pr o ilo do primeiro slot so gstos HFSCPFHCHFQ a PFV@msAF heste
modo o sistem ( gurdndo n funo egurdimer@A durnte PFP @msA sem relizr
nenhum proessmento tilF r o segundo slot temos um tempo 4livre4de SE@HFSCQFICHFQAaIFI
@msAF y tereiro slot o que menos onsome tempo de proessmentoD possuindo um tempo livre
de SE@HFSCIFPCHFQAaQFH @msAF

Utilizao do tempo livre para interrupes


gonforme visto nteriormenteD dependendo do tempo esolhido pr o slot e do tmnho d
funoD podem existir espos vgos n linh de tempo do proessdorF e pigur RFQ present
um linh de tempo de um sistem que possui pens I slotF t pigur RFR demonstr o mesmo
sistem sendo interrompido trvs de interrupes ssnronsF

Top

S.1

1
3

1
3

Bottom

"vago"

1
3

1
3

pigur RFQX vinh de tempo de um sistem om I slot

Top
S.1

1
1

Bottom

"vago"
Interr.

3
1
2

3
1
2

pigur RFRX gomportmento d linh de tempo om interrupes

Notas de Aula ELT024 - Programao para Sistemas Embarcados

2
1

109

Arquitetura de desenvolvimento de software

gd interrupo gst um tempo de I @msA onforme pode ser visto n pigur RFRF gomo
temos um tempo vgo de Q @msA em d ilo st grntir que os eventos que germ
interrupo no ultrpssem frequni de Q eventos d V @msAF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

Captulo 5

Anexos

IIH

111

Anexos

rogrm SFIX on(gFh


1
2
3
4
5
6
7
8

#ifndef
// p a r a

#define

code
code
code
code

#endif

compilador

SDCC + G P U t i l s

CONFIG_H

CONFIG_H
at 0 x300000
at 0 x300001
at 0 x300003
at 0 x300006

char
char
char
char

CONFIG1L
CONFIG1H
CONFIG2H
CONFIG4L

= 0 x01 ;
= 0 x0C ;
= 0 x00 ;
= 0 x00 ;

//

Pll

//

Oscilador

//

Watchdog

//

Sem

c/

cristal

controlado

programao

em

externo

HS

por

software

baixa

tenso

//CONFIG_H

10

// p a r a

11

//#pragma

config

FOSC = HS

12

//#pragma

config

CPUDIV = OSC1_PLL2

13

//#pragma

c o n f i g W T = OFF
D

//

Watchdog

14

//#pragma

config

//

Sem

5.1

desligado

compilador

C18

LVP = OFF

//

Oscilador
//

Pll

c/

cristal

externo

HS

desligado
controlado

programao

em

por
baixa

software
t e n s o \\\ h l i n e

cong.h

y rquivo on(gFh possui s diretivs de ompilo pr on(guro do miroontroldorF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

112

Anexos

rogrm SFPX sioFh


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define

// f u n o

para

// f u n e s

de

watchdog

_asm C R D
L W T _endasm

bit

B i t S e t ( arg , b i t )

( ( arg )

B i t C l r ( arg , b i t )

( ( a r g ) &= ~(1<< b i t ) )

BitFlp ( arg , b i t )

( ( a r g ) ^= (1<< b i t ) )

BitTst ( arg , b i t )

( ( a r g ) & (1<< b i t ) )

// d e f i n e ' s

5.2

limpar

C R T
L W D( )

para

PORTA
PORTB
PORTC
PORTD
PORTE
TRISA
TRISB
TRISC
TRISD
TRISE

(*(

near

(*(

near

(*(

near

(*(

near

(*(

near

(*(

near

(*(

near

(*(

near

(*(

near

INTCON2

PIR1
TMR0L
TMR0H
T0CON

(*(

(*(

(*(

(*(

near

ADCON2

ADCON1

ADCON0

ADRESL

ADRESH

RCREG
SPBRG

(*(

(*(

BAUDCON

(
(*(

W T O
D C N
T2CON
PR2

(
(*(

CCPR2L

CCP1CON

CCPR1L

) 0 xF94 )
) 0 xF95 )
) 0 xF96 )
) 0xFF2 )
) 0xFF1 )

) 0xF9D )
) 0xF9E )
) 0xFD6 )
) 0xFD7 )
) 0xFD5 )
) 0 xF63 )
) 0xFC0 )

near

) 0xFC1 )

near

) 0xFC2 )

near

) 0xFC3 )

near

near

near

near

near

) 0 xF93 )

near

near

CCP2CON

) 0 xF92 )

near

(*(

) 0 xF84 )

) 0 xF65 )

near

) 0 xF83 )

near

near

(*(

) 0 xF82 )

near

(*(

) 0 xF81 )

near

near

(*(

) 0 xF80 )

near

SPBRGH
RCON

near

near

SPPCFG

TXSTA

near

TXREG

near

near

SPPCON

RCSTA

near

(*(

unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *
unsigned char *

especiais

near

(*(

INTCON
PIE1

volatile
volatile
volatile
volatile
volatile
volatile
volatile
volatile
volatile
volatile
* volatile
* volatile
volatile
volatile
volatile
volatile
volatile
* volatile
* volatile
* volatile
* volatile
* volatile
* volatile
* volatile
volatile
volatile
volatile
volatile
volatile
* volatile
* volatile
volatile
* volatile
volatile
volatile
* volatile
* volatile
* volatile
* volatile

registros

|= (1<< b i t ) )

) 0xFC4 )

) 0xFAB)
) 0xFAC)
) 0xFAD)
) 0xFAE)
) 0xFAF )
) 0xFB0 )
) 0xFB8 )

) 0xFD0 )
) 0xFD1 )

) 0xFCA)
) 0xFCB)

near

) 0xFBA)

near

) 0xFBB)

near

) 0xFBD)

near

) 0xFBE )

basico.h

y heder sioFh possui o endereo de todos os registros do miroontroldor sg IVfRSSH que


utilizdo nest postilF elm disso ontm lguns de(ne9s importntes omo s funes inline
pr limpr )g de wthdog e pr mnipulo de itsF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

113

5.3

Anexos

Instalar gravadores/depuradores de PIC em sistemas x64

ys pssos seguir devem ser seguidos pr instlr os devie drivers orretmente em sistems
operionis de TR itsF etulmente pens os seguintes prelhos so suportdosX

wvef iev sgi inEiruit emultor

wvef sgi PHHH with f onverter

wvef sgh P @Gx IHEHHQWUA

wvef sgh Q

wvef wQ @Gx IHEHHQWVA

sgQPw trter uit

Antes de Comear

y dispostivo no deve ser plugdo num port f ntes de omer instlo do hriverF
e vo j plugou o dispositivo e preeu informo 4xovo hrdwre enontrdo4D lique
em nelrF hesligue o dispositivo e ontinue om os pssos seguirF
e vo j utilizou o setup do windowsD provvelmente os drivers errdos form instldosF
ig s instrues de remoo dos drivers ntes de prosseguirF
Passo 1

gonete o dispositivo o g usndo o o fF r os dispositivos que exigem limento


externD ligueEF e estiver usndo um hu fD tenh ertez que este possui energi su(iente
pr limentr o dispositivoF
Passo 2

e primeir vez que o dispositivo onetdo pree um mensgem indindo que o sistem
enontrou um novo hrdwreF undo preer um jnelD esolh opo volizr e instlr
o driver @reomenddoAF
xotX e preer um mensgem perguntndo sore permisso no indows UD lique em simGE
ontinurF
Passo 3

isolh opoX rourr o driver no meu omputdor @vndoA


Passo 4

undo preer um jnel pedindo pr vo indir o minhoD proure em gXerquivos


de progrm @xVTAwirohipwvef shihriversTRF glique em ontinur
Passo 5

e prxim tel ir perguntr se vo quer ontinur instlr o dispositivoF glique em snstlr


pr ontinurF
Passo 6

e prxim tel indir que o softwre foi instldo orretmenteF glique em fehr pr termiE
nr instloF
Passo 7

eri(r se o driver est instldo e visvel no qerenidor de dispositivos em gustom f


hriversbwirohip gustom f hriver er jnel do gerenidor de dispositivos @sniirE
binel de ontroleEbistemEbqerenidor de dispositivosAF e o driver no for instldo
orretmenteD ontinue n seo de soluo de erros @ seguirA

Notas de Aula ELT024 - Programao para Sistemas Embarcados

114

Anexos

Soluo de erros

e houve lgum prolem n instlo do driver sig os pssos seguirF


y indows tentr instlr o driver mesmo se no enontrr o rquivo orretoF xo gereniE
dor de dispositivos dentro d opo yutros dispositivos vo deve enontrr um hispositivo
no onheidoF
glique om o oto direito no hispositivo no onheido e seleione opo etulizr o
hriver do menuF
x primeir tel de dilogo seleione rourr no meu omputdor pelos rquivos do driverF
gontinur prtir do psso RF

Notas de Aula ELT024 - Programao para Sistemas Embarcados

Vous aimerez peut-être aussi