Anda di halaman 1dari 100

FFCGF/M//C

L
L
L
I
I
I
N
N
N
G
G
G
b
b
b
A
A
A
p
MlCFCCCNIFCL/DCFES

C Co om m b bo os se e n n
e e S SD DC CC C









1
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O

FFCGF/M//C
A
A
A
G
G
G
E
E
E
M
M
M


C
C
C


pcrc
MlCFCCCNIFCL/DCFES

n no o I ID DE E J JF FE E E Ed d| |t to or r
C C C Co om mp p| || |e er r

E|emenIc: cc Lingucgem C
/ruiIeIurc lnIernc cc 8051
FcrI: ce enIrccc e :c|cc
Iimer:
Ccmunicccc Seric|
Di:p|cy LCD
Funce:
Exerc|cic: re:c|vicc:

O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O
O1O1O1O1O1O1O

2
Prefcio
Este liro eplica os assuntos de forma clara e objetia, para que se possa
aprender a programar microcontroladores da famlia 8O51, utili-ando a
linguagem C.
Com a linguagem C possel programar microcontroladores de forma rpida e
sem dificuldades, pois os comandos desta linguagem so de fcil assimilao e
entendimento.
Para facilitar ainda mais a compreenso do contedo apresentado, foi utili-ado
uma kit de desenolimento para editar e compilar programas em C para os
microcontroladores da famlia 8O51.
Os assuntos esto estruturados em quatro tpicos fundamentais:
Arquitetura nterna do Microcontrolador Arquitetura nterna do Microcontrolador Arquitetura nterna do Microcontrolador Arquitetura nterna do Microcontrolador 8051: :: : aborda as principais
caractersticas fsicas do 8O51.

Elementos da Linguagem C: Elementos da Linguagem C: Elementos da Linguagem C: Elementos da Linguagem C: estuda os elementos da linguagem, entre
definies de arieis, funes, diretias da linguagem, entre outros.

Perifricos Perifricos Perifricos Perifricos d dd de desenoliment e desenoliment e desenoliment e desenolimento: o: o: o: tpicos abordados de forma clara e
objetia que enfati-am as principais ferramentas do 8O51, tais como:
ports, interrupo, timers e comunicao serial.

Eemplos Eemplos Eemplos Eemplos de programa: de programa: de programa: de programa: apresenta eemplos prticos com teclados,
LEDs, comunicao serial e display LCD grficos.



Para o total aproeitamento do liro, recomendel que o leitor tenha noes
bsicas de eletrnica digital e resola todos os eerccios tericos e prticos
propostos do liro complementar 8051 Prtica Prtica Prtica Prtica disponel no site de estudos.
O contedo foi planejado para o slido aprendi-ado inicial, mas tambm poder
serir de material de referncia no dia-dia do programador.

3
Indlce Anultlcn
Captu!n 1 - Intrndun................................................................................07
1.1. A Linguagen C........................................................................................O8
1.2. A IanIia 8O51..........................................................................................O8
1.3. Ieiianenlas Reconendadas..................................................................O8
1.3.1. Iiineiios passos...............................................................................O9
1.3.2. Una Viso CeiaI...............................................................................O9
1.3.3. Llapas de Ciavao..........................................................................1O
Captu!n 2 - CaractcrstIcas dn AT89552...................................................12
2.1. O AT89S52................................................................................................12
2.2. Meniia do AT89S52..............................................................................14
2.2.1. Meniia de dados Inleina e Lxleina............................................15
2.3. Regisliadoies de funes Lspeciais......................................................15
2.4. Iinagen do MicioconlioIadoi AT89S52..............................................18
2.5. O CIock......................................................................................................2O
2.6. CicIos de Mquina...................................................................................21
2.7. Resel.........................................................................................................22
Captu!n 3 -JFE EDITOR..............................................................................23
3.1. Conhecendo o }IL LDITOR...................................................................23
3.1.1. Iiincipais Caiacleislicas................................................................23
3.2. InslaIao do }IL LDITOR.....................................................................23
3.2.1. LocaIizao do }IL LDITOR...........................................................24
3.3. IaineI de ConlioIe...................................................................................24
3.4. aiia de Ieiianenlas e Menus..............................................................25
3.4.1. Menu IiIe...........................................................................................25
3.4.2. Menu Ldil..........................................................................................25
3.5. Cono ConpiIai e Ldilai un Iiogiana no }IL LDITOR..................25
3.5.1. Ldio.................................................................................................25
3.5.2. ConpiIao........................................................................................26
3.5.3. Liios de ConpiIao........................................................................26
3.5.4. None dos Aiquivos Ceiados na ConpiIao..............................27

4

Captu!n 4 - E!cmcntns da LInguagcm C..................................................28
4.1. Inlioduo a Linguagen C....................................................................28
4.2. A Linguagen C e Case Sensilive..........................................................29
4.3. IaIavias Reseivadas................................................................................3O
4.4. Conenliios.............................................................................................31
4.5. Tipos de Dados........................................................................................32
4.5.1. Conslanles.........................................................................................33
4.5.2. Definies..........................................................................................33
4.6. Iunes.....................................................................................................34
4.6.1. Lsliuluia das Iunes.....................................................................34
4.6.2. O Tipo tcid.........................................................................................35
4.7. O conando inc|udc...................................................................................35
4.7.1. Cono IncIuii un ncadcr no Iiogiana...........................................38
Captu!n 5 - Opcradnrcs...............................................................................39
5.1. Tipos de Opeiadoies...............................................................................39
5.1.1. Opeiadoies Aiilnelicos..................................................................39
5.1.2. Opeiadoies ReIacionais...................................................................41
5.1.3. Opeiadoies Lgicos e ooIeanos...................................................42
5.1.4. O Opeiando NOT.............................................................................43
Captu!n 6 - Estrutura dc Cnntrn!c c LcItura dc Tcc!as..........................44
6.1. Tipos de Lsliuluias de ConlioIe..........................................................44
6.2. A Lsliuluia if (se)....................................................................................44
6.2.1. Una Olseivao Inpoilanle..........................................................46
6.3. A Lsliuluia if eIse.................................................................................46
6.4. A Lsliuluia if eIse if..........................48
6.5. A Lsliuluia svilch................................49
6.6. Lsliuluias de Loops.............................5O
6.6.1. Tipos de Loops..................................................................................5O
6.6.2. O Conando foi................................................................................5O
6.2.2.1. Conando lieak...........................................................................52
6.2.2.2. Conando conlinue.....................................................................53
6.6.3. O Conando vhiIe..........................................................................53

5
6.6.3.1. Lsliuluia de iepelio Infinila..................................................54
Captu!n 7 - Pnrts...........................................................................................55
7.1. Ieiifeiicos Inleinos do 8O51...................................................................55
7.2. Ioils...........................................................................................................55
7.2.1. Ioil IO..............................................................................................56
7.2.1. Ioil I1..............................................................................................57
7.2.1. Ioil I2..............................................................................................57
7.2.1. Ioil I3..............................................................................................57
7.3. Lxeiccio ResoIvido.................................................................................57
Captu!n 8 - Intcrrupcs.............................................................................62
8.1. Tipos de Inleiiupo...............................................................................62
8.2. Iiioiidade das Inleiiupes..................................................................65
8.3. Inleiiupes Lxleinas.............................................................................66
8.3.1. Tipos de Dispaio das Inleiiupes Lxleinas..............................66
8.4. Lxeiccio ResoIvido.................................................................................68
Captu!n 9 - TImcrs/Cnuntcrs.....................................................................71
9.1. Lsliuluia do TineiO................................................................................72
9.2. Modos de Opeiao do TineiO.............................................................73
9.2.1. Modo 1 (16 lils)..............................................................................75
9.3. Lxeiccio ResoIvido.................................................................................74
Captu!n 10 - CnmunIcan 5crIa!..............................................................77
1O.1. Regisliadoi de ConlioIe da Ioila SeiiaI - SCON.............................78
1O.2. Tiansnisso e Recepo de Dados.....................................................8O
1O.2.1. Iuno _gelkey ( ).......................................................................82
1O.2.2. Iuno pulchai ( ).......................................................................83
1O.3. Haidvaie paia Conunicao SeiiaI...................................................83
1O.4 audiale e Iieqncia do CiislaI........................................................83
Captu!n 11 - DIsp!ay dc LCD.....................................................................85
11.1. Os DispIays de LCD..............................................................................85
11.2. Desciio dos Iinos dos LCDs...........................................................85
11.3. Iuncionanenlo no Modo 8 lils..........................................................86

6
11.4. Iuncionanenlo no Modo 4 lils..........................................................86
11.5. Insliues e Iunes de ConlioIe paia o LCD..................................88
11.5.1. Iuno LCD_inil( ).....................................................................88
11.5.2. Iuno LCD_iov1( )..................................................................88
11.5.3. Iuno LCD_iov2( )..................................................................88
11.5.4. Iuno LCD_pulc( )...................................................................89
11.5.5. Iuno LCD_puls( )...................................................................91
11.6. Lxeiccio ResoIvido...............................................................................91

ApndIcc A -Tabc!a A5CII 5tandard c Extcndcd..................................93
ApndIcc B - Gravadnr vIa pnrta para!c!a cnm n snftwarc
AEC_I5P.EXE..................................................................................................98














Intrndun

1.1. A Linguagem C
A maioria das literaturas sobre os microcontroladores
linguagem de programao o Asseo|y
considerada, de uma forma geral, de difcil compreenso. Deido ao grau de
dificuldade oferecido pelo Asseo|y
quando h necessidade de tornar o cdigo mais rpido e eficiente.
Com programas etensos e com muitas rotinas, a utili-ao somente da
linguagem Asseo|y dificulta muito a ida do programador.
foi criada para ser to pequena quanto possel. Seu conjunto de comandos
bastante redu-ido, mas, apesar disso, a linguagem bastante fleel poderosa.
O C muito difundido no mundo e este um dos motios pelo qual a
linguagem C tem se tornado cada e- mais ut
microcontroladores.
Com o C possel desenoler programas com rapide- sem conhecer
profundamente os microcontroladores, utili-ando poucos comandos desta
linguagem de programao.
A linguagem C para computadores comeou a ser d
ano em que formulou-se um padro para a criao de programas, denominado
C-A!S (Aer|:a Na||oa| S|aJarJ Is|||o|e).
linguagem C pela comunidade de usurios impulsionaram os grandes
fabricantes de microcontroladores
microcontroladores nesta linguagem.

Para diulgar mais a linguagem C para microcontroladores
difunde os seus recursos utili-ando um kit didtico, que possibilita desenoler
atiidades de forma organi-ada e padroni-ada.

C/FlIULC
7



Intrndun
A maioria das literaturas sobre os microcontroladores 8O51 utili-a como
Asseo|y (linguagem de mquina) que pode ser
considerada, de uma forma geral, de difcil compreenso. Deido ao grau de
Asseo|y, recomenda-se o uso desta linguagem
quando h necessidade de tornar o cdigo mais rpido e eficiente.
Com programas etensos e com muitas rotinas, a utili-ao somente da
dificulta muito a ida do programador. ] a linguagem C,
para ser to pequena quanto possel. Seu conjunto de comandos
bastante redu-ido, mas, apesar disso, a linguagem bastante fleel poderosa.
no mundo e este um dos motios pelo qual a
linguagem C tem se tornado cada e- mais utili-ada na programao dos
Com o C possel desenoler programas com rapide- sem conhecer
profundamente os microcontroladores, utili-ando poucos comandos desta
A linguagem C para computadores comeou a ser difundida em r,8,, no eato
se um padro para a criao de programas, denominado
(Aer|:a Na||oa| S|aJarJ Is|||o|e). A popularidade e aceitao da
linguagem C pela comunidade de usurios impulsionaram os grandes
microcontroladores e hoje temos programao de

Para diulgar mais a linguagem C para microcontroladores 8O51, o liro
difunde os seus recursos utili-ando um kit didtico, que possibilita desenoler
atiidades de forma organi-ada e padroni-ada.
C/FlIULC
1

V|s||e o s||e Je es|oJos www.u8051.com.br


o KIT Je Jesevo|v|e|o ara a:oaaar es|e ||vro.
1.2. A Famlia 8051
!a dcada de 8O, a empresa norte
Microcontrolador de 8 bits, o qual se tornaria o mais popular de todos os
eistentes no mercado, o 8O51.
Para redu-ir o tamanho e o custo do hardare de um sistema baseado em um
microcontrolador, a I|e| embutiu alguns recursos a mais nesse
microcontrolador, como por eemplo, um canal de comunicao serial e
tempori-adores, recursos que alguns de seus antecessores dispunham, no
entanto eram difceis de programar.
Hoje, depois de mais de ,o anos de melhori
empresas no mundo. Denominamos esses noos microcontroladores de famlia
8O51, pois possuem arquitetura comum, mesmo conjunto de instrues
(cdigos e instrues de programas) e so programados de forma similar ao
tradicional e elho MCS-51 da I|e|. Ao longo desses anos, diersos fabricantes
modificaram seus microcontroladores, acrescentando outros recursos como:
conersores A/D. mdulos de PVM incorporado, memria EaPROM,
comunicao E|aere|, etc. Atualmente eistem
chip.
O componente que amos estudar o
I|e|, e pertence famlia 8O51, assemelha
do 8O51.
1.3. Ferramentas Recomendadas
O kit de desenolimento, apesar de
tornar o seu aprendi-ado muito mais produtio
lo a compreender as informaes apresentadas
precisar preocupar-se com eentuais problemas de montagem,
dedicar-se totalmente ao aprendi-ado












8
www.u8051.com.br ara oo|er |joraes soore :oo aJo|r|r
o KIT Je Jesevo|v|e|o ara a:oaaar es|e ||vro.
, a empresa norte-americana I|e| Corora||o criou um
Microcontrolador de 8 bits, o qual se tornaria o mais popular de todos os
anho e o custo do hardare de um sistema baseado em um
embutiu alguns recursos a mais nesse
microcontrolador, como por eemplo, um canal de comunicao serial e
tempori-adores, recursos que alguns de seus antecessores dispunham, no
Hoje, depois de mais de ,o anos de melhoria, o 8O51 fabricado por mais de 6o
empresas no mundo. Denominamos esses noos microcontroladores de famlia
, pois possuem arquitetura comum, mesmo conjunto de instrues
(cdigos e instrues de programas) e so programados de forma similar ao
. Ao longo desses anos, diersos fabricantes
modificaram seus microcontroladores, acrescentando outros recursos como:
conersores A/D. mdulos de PVM incorporado, memria EaPROM,
Atualmente eistem mais de yoo ariaes deste
O componente que amos estudar o A189S52, uma ariao do MCS-51 da
assemelhando-se em quase todos os aspectos
Ferramentas Recomendadas
O kit de desenolimento, apesar de no ser obrigatrio, uma ferramenta que
tornar o seu aprendi-ado muito mais produtio. O kit tem por objetio, ajud-
lo a compreender as informaes apresentadas, tendo em ista que oc no
se com eentuais problemas de montagem, podendo assim,
aprendi-ado da programao do microcontrolador.

1.3.1. Primeiros Passos


1 ) Adquira o kit para microcontrolador
juntamente com o grupo de estudantes da sua turma.

2 ) !o site de estudos faa o
necessrios para edio, compilao e
propostas.

ToJos os rograas o||||:aJos
reoere |axa Je ||:ea.

1emos tudo o que precisamos para prosseguir os estudos



1.3.2. Uma Viso Ceral
Acompanhe o eemplo de programa escrito na linguagem C em seguida:








Este um eemplo de programa em C que mantm o pino
microcontrolador por aproimadamente dois segundos ligado (nel
desliga-o (nel O).

O programa de eemplo precisa ser editado em um programa de editorao.
\eremos mais adiante como editar os programas utili-ando os recursos da
linguagem C no softare jFE EJ||or.

Para graar um programa no microcontrolador
primeiramente, criar o programa e :o|| :o|| :o|| :o||

O que significa :o||ar o programa?
9
) Adquira o kit para microcontrolador 8O51 encomendando-o
juntamente com o grupo de estudantes da sua turma.
!o site de estudos faa o donload do pacote de programas
para edio, compilao e graao das atiidades
ToJos os rograas o||||:aJos es|e areJ|:aJo so gra|o||os e o

1emos tudo o que precisamos para prosseguir os estudos.
Acompanhe o eemplo de programa escrito na linguagem C em seguida:
Este um eemplo de programa em C que mantm o pino IO.O do
microcontrolador por aproimadamente dois segundos ligado (nel 1) e depois
O programa de eemplo precisa ser editado em um programa de editorao.
\eremos mais adiante como editar os programas utili-ando os recursos da

Para graar um programa no microcontrolador A189S52, necessrio
:o|| :o|| :o|| :o||- -- -|o |o |o |o.

O Ke||-C o exe|o Je :o||aJor ara a ja|||a


reoer ||:ea Je oso e ojere:e o||os re:orsos oe |ora o
Jesevo|v|e|o Je roje|os a|s j:|| e r|Jo. Vo: oJe oo|er oa
:|a Je ava||ao Jo Ke|| C o s||e
Para criar o programa, utili-amos os comandos da linguagem C, os quais sero
estudados neste liro. Futuramente esse programa criado ser compilado por
um compilador, ou seja, tudo o que digitamos no programa ser conertido em
comandos binrios que a nica linguagem que o microcontrolador entende.
Eistem diersos compiladores no mercado para as mais ariadas linguagens de
programao. Entretanto, utili-aremos um compilador
licena para uso.



!ota



Depois que o programa foi criado e compilado corretamente, o compilador cria
um arquio com a etenso .HEX (utili-ado na maioria dos graadores e
simuladores), que obedece ao padro de formatao headecimal da
portanto, o arquio que deer ser graado na memria do microcontrolador.


1.3.3. Etapas de Cravao
Aps a compilao do programa, podemos eniar o arquio criado pelo
compilador (arquio a etenso .HEX)
graarmos o chip, necessrio ter em mos um
de microcontroladores (ou o kit de desenolimento)

Com um programa de graao especfico do graador
possel transferir o arquio gerado pelo compilador (etenso .HEX
para o chip, atras de um cabo de graao conectado s portas de comunicao
do computador, podendo ser:

1 ) Atras da porta paralela do computador
AECSP.EXE.





|igura 1.1
1O
C o exe|o Je :o||aJor ara a ja|||a 8051 oe
reoer ||:ea Je oso e ojere:e o||os re:orsos oe |ora o
Jesevo|v|e|o Je roje|os a|s j:|| e r|Jo. Vo: oJe oo|er oa
|a Je ava||ao Jo Ke|| C o s||e http://www.keil.com/c51
Para criar o programa, utili-amos os comandos da linguagem C, os quais sero
estudados neste liro. Futuramente esse programa criado ser compilado por
mpilador, ou seja, tudo o que digitamos no programa ser conertido em
comandos binrios que a nica linguagem que o microcontrolador entende.
Eistem diersos compiladores no mercado para as mais ariadas linguagens de
mos um compilador jreeware, que no eige
Depois que o programa foi criado e compilado corretamente, o compilador cria
um arquio com a etenso .HEX (utili-ado na maioria dos graadores e
simuladores), que obedece ao padro de formatao headecimal da I|e| e
graado na memria do microcontrolador.
Aps a compilao do programa, podemos eniar o arquio criado pelo
compilador (arquio a etenso .HEX) para o microcontrolador A189S52. Para
graarmos o chip, necessrio ter em mos um computador PC e um graador
kit de desenolimento).
Com um programa de graao especfico do graador A189S52 utili-ado,
possel transferir o arquio gerado pelo compilador (etenso .HEX ou .B!)
um cabo de graao conectado s portas de comunicao
) Atras da porta paralela do computador com o softare



|igura 1.1 - pcr|a para|c|a

a ) Atras da porta serial do computador











|igura 1.


Acompanhe o resumo das etapas de graao:


1) Criar o programa em um editor (e.:
2) Compilar o programa.
3) \erificar se o compilador gerou o arquio para a graao do chip
(arquio .HEX).

4) Conectar o graador ao PC.
5) 1ransferir o arquio gerado pelo compilador (.HEX
chip atras do programa de graao (AECSP.EXE
CRA\A.EXE).


importante que at este ponto oc tenha compreendido, de uma forma geral,
o processo de graao dos microcontroladores. Este processo lido e pode
ser aplicado para qualquer tipo de microcontroladores, inclusie de outras
famlias: PIC, AVR, FreeS:a|e, etc, \ariando apenas, os programas.

\amos estudar a estrutura do microcontrolador




11
a ) Atras da porta serial do computador com o softare CRA\A.EXE.

|igura 1.2 - pcr|a scria|a
Acompanhe o resumo das etapas de graao:
Criar o programa em um editor (e.: jFE EJ||or).
\erificar se o compilador gerou o arquio para a graao do chip

1ransferir o arquio gerado pelo compilador (.HEX ou .B!) para o
chip atras do programa de graao (AECSP.EXE ou
rtante que at este ponto oc tenha compreendido, de uma forma geral,
o processo de graao dos microcontroladores. Este processo lido e pode
ser aplicado para qualquer tipo de microcontroladores, inclusie de outras
c, \ariando apenas, os programas.
\amos estudar a estrutura do microcontrolador A189S52 da I|e|.


Curucterxtlcux dn
2.1. U AT89S52
Os microcontroladores 8O51 apresentam diersos
programador a elaborar programas para interagir com o mundo eterior
conectado ao chip. Esses recursos, criados por seus fabricantes, tm como
hardare bsico o antigo 8O51 (tecnolgica CMOS) fabricado pela

Estrutura Intcrna dn MIcrncnntrn!adnr AT89552
CPL de 8 bits otimi-ada para aplicaes de controle
8Kbytes de memria de programa
a,6Bytes de RAM de dados (espao para arieis de programa)
,a pinos de entrada e sada (/O) programeis
Modo de programao serial SP
1rs timers/counters para gerao de tempos e contagens
Comunicao serial
Programel Vatch Dog 1imer
Estrutura de interrupo com dois neis de prioridade
Oscilador de relgio o-:a|
Operao de OHz a 33MHz
Proteo contra cpias (lock bit)
Alimentao de 4 a 5,5\

O microcontrolador AT89S52 possui internamente diersos dispositios que
permitem mais atiidades com um nico chip, eliminando consideraelmente a
necessidade de componentes eternos.
C/FlIULC
12



Curucterxtlcux dn A1S9S2

apresentam diersos recursos que ajudam o
programador a elaborar programas para interagir com o mundo eterior
, criados por seus fabricantes, tm como
(tecnolgica CMOS) fabricado pela I|e|.
dn MIcrncnntrn!adnr AT89552
CPL de 8 bits otimi-ada para aplicaes de controle
8Kbytes de memria de programa o-:a|
a,6Bytes de RAM de dados (espao para arieis de programa)
,a pinos de entrada e sada (/O) programeis
SP (I-Sys|e Prograao|e)
1rs timers/counters para gerao de tempos e contagens
Programel Vatch Dog 1imer
Estrutura de interrupo com dois neis de prioridade
cpias (lock bit)
possui internamente diersos dispositios que
permitem mais atiidades com um nico chip, eliminando consideraelmente a

C/FlIULC
2

I3.O a I3.7
IO.O a IO.7
RAM
ConlioIadoi do
ConlioIadoi do
Estrutura Intcrna dn MIcrncnntrn!adnr AT89552
A seguir obsere a arquitetura interna do
simplificado:







|igura 2.1 - diagrana dc o|cccs dc AT89S52

Ports: Ports: Ports: Ports: na famlia 8O51, eistem ,a /O's que tm como funo fa-er a
comunicao entre o mundo interno e eterno do chip.
quatro ports: IO, I1, I2, I3 de forma que cada port composto de oito pinos
fsicos e esto ligados internamente ao chip em um barramento de 8 bits.
1imers/Counters: 1imers/Counters: 1imers/Counters: 1imers/Counters: nos microprocessadores em ger
utili-ados para gerar contagem de tempo
troca de tarefa e muitas outras funes
internamente trs contadores/tempori-adores denominados timer
timer 2. Ambos podem ser configurados para operar indiidualmente e podem
ser habilitados por softare ou hardare.
13
I3.O a I3.7 I1.O a I1.7
IO.O a IO.7 I2.O a I2.7
ILASH
Calo de
giavao
ConlioIadoi do IORT 1 ConlioIadoi do IORT 3
ConlioIadoi do IORT O ConlioIadoi do IORT 2
CanaI
ISI
nntrn!adnr AT89552
A seguir obsere a arquitetura interna do AT89S52 em um diagrama de blocos

diagrana dc o|cccs dc AT89S52.


, eistem ,a /O's que tm como funo fa-er a
entre o mundo interno e eterno do chip. So diididos em
de forma que cada port composto de oito pinos
fsicos e esto ligados internamente ao chip em um barramento de 8 bits.
os microprocessadores em geral, os tempori-adores so
de tempo, medir largura de pulsos eternos,
troca de tarefa e muitas outras funes. O microcontrolador AT89S52 possui
internamente trs contadores/tempori-adores denominados timer O, timer 1 e
. Ambos podem ser configurados para operar indiidualmente e podem
ser habilitados por softare ou hardare.

14
!a funo de contador, a contagem ser incrementada em resposta a uma
transio de 1 para O (borda de descida) do seu correspondente pino de
acionamento, TO (I3.4) e T1 (I3.5). !esta funo, os pinos eternos (1O e 11)
so monitorados a 1/24 da elocidade do oscilador.
nterrupes: nterrupes: nterrupes: nterrupes: a interrupo um pedido para parar o processamento corrente e
efetuar outro, referente a interrupo solicitada, desde que ela esteja habilitada e
possa ser aceita. A antagem da interrupo est na simplificao do hardare,
pois no preciso fa-er com que o sistema fique monitorando o funcionamento
de certos dispositios e perifricos, eles que chamam a ateno do sistema. H
sete fontes de interrupo: por softare, interrupo solicitada por perifrico
eterno e interrupo solicitada indiretamente (por tempo, por comunicao
serial, etc.). A interrupo uma das mais importantes ferramentas dos
sistemas de controle microprocessados e consiste em interromper um programa
de acordo com as necessidades de eentos eternos e internos.
Porta serial: Porta serial: Porta serial: Porta serial: porta de comunicao de dados jo|| Jo|ex que pode eniar e receber
informaes serialmente. Podemos facilmente conectar a essas portas seriais
componentes que codificam dados de entrada em protocolos RS232, RS485,
RSaa, etc. Alguns eemplos de dispositios que utili-am este protocolo so
computadores, mdulo CPS, impressora fiscal, leitores de cdigo de barras,
leitores de cartes magnticos, etc.
Memria flash: Memria flash: Memria flash: Memria flash: espao de memria destinado a arma-enar o rograa.HEX
eniado pelo graador durante o processo de graao. Lma e- graado, o
microcontrolador passa a funciona de forma independente das ferramentas de
desenolimento tais como: PC, graador e kit de desenolimento e manter
ntegros os dados em sua memria ROM (reaJ-o|y eory) por mais de 5O
anos.

2.2. A Memria do AT89S52
!a famlia 8O51, temos 8Kbytes de memria de programa ROM e 256 Bytes de
memria RAM e que esto remanejados da seguinte maneira:
1) 128 Bytes de uso geral.
2) 128 Bytes reserados para registro de funes especiais (SFR's Se:|a|
Reg|s|er Fo:|o), tais como portas de entrada e sada, timers,
comunicao serial, etc.


Es|e ||vro roe aeas a||v|JaJes oe o||||:a a er|a ||era


Jo AT89S52, |eJo e v|s|a oe o
a|oa|e|e, e Jesoso os |:ro:o|ro|aJores oJeros.
2.2.1. Memria de dados Interna e Externa
A memria de dados (RAM - RaJo A::ess Meory)
memria interna e memria eterna. A interna apresenta uma baia capacidade
de 128 Bytes destinada ao usurio para implementao de programas, e out
parte, tambm com 128 Bytes, reserada aos registradores de funes especiais
(SFR's) que permitem, entre outras coisas, a configurao do sistema.


!ota



2.3. Registradores de funes especiais

So posies fsicas absolutas da memria RAM, que rec


que tem funes especficas dentro do microcontrolador. Com eles possel
programar o microcontrolador para efetuar determinadas funes desejadas, tais
como: uma comunicao serial, eniar um dado pela porta paralela do
microcontrolador. Estes registradores so a parte mais importante do chip.
Estes registradores de funes especiais so na erdade, posies da memria
RAM, ou seja, um nmero em notao headecimal. Entretanto, alguns deles
possuem um nome, ou seja, um apelido que facil
entendimento do programa. A figura
na famlia 8O51 atras dos seus apelidos de Bit e Byte, assim como seus
endereos fsicos absolutos.






















|igura 2.2 - Mapa dcs
15
Es|e ||vro roe aeas a||v|JaJes oe o||||:a a er|a ||era
, |eJo e v|s|a oe o a:esso a er|a ex|era es|
a|oa|e|e, e Jesoso os |:ro:o|ro|aJores oJeros.
Memria de dados Interna e Externa
RaJo A::ess Meory) do 8O51 diidida em
memria interna e memria eterna. A interna apresenta uma baia capacidade
Bytes destinada ao usurio para implementao de programas, e outra
, reserada aos registradores de funes especiais
(SFR's) que permitem, entre outras coisas, a configurao do sistema.
Registradores de funes especiais
So posies fsicas absolutas da memria RAM, que recebem um apelido,
que tem funes especficas dentro do microcontrolador. Com eles possel
programar o microcontrolador para efetuar determinadas funes desejadas, tais
como: uma comunicao serial, eniar um dado pela porta paralela do
Estes registradores so a parte mais importante do chip.
Estes registradores de funes especiais so na erdade, posies da memria
RAM, ou seja, um nmero em notao headecimal. Entretanto, alguns deles
possuem um nome, ou seja, um apelido que facilita o desenolimento e o
A figura 2.2 mostra alguns registradores presentes
atras dos seus apelidos de Bit e Byte, assim como seus
Mapa dcs rcgis|radcrcs cspcciais S|R dc 8051.

16
Podemos trabalhar com os registradores especiais utili-ando seus apelidos ou
seu endereo fsico absoluto da memria RAM.
Em seguida eja os SFR's que fa-em referncias aos or|s paralelas do 8O51,
com seus apelidos seguidos pelos seus endereos fsicos absolutos em
headecimal.

PURTS P0, P1, P2 e P3
IO (8OH)
I1 (9OH)
I2 (AOH)
I3 (OH)

Po, Pr, Pa e P, so posies na memria RAM que contm os dados dos or|s do
microcontrolador. Qualquer escrita reali-ada em um desses registros
automaticamente altera todo o contedo presente na sada do chip.

STACK PUINTER
SI (81H)

um registrador utili-ado como pilha de endereos de retorno de sub-rotinas,
que informa para o microcontrolador o ponto de retorno no programa principal
depois de eecutada uma sub-rotina ou trmino de uma interrupo. Ele
acessado pelas instrues PLSH e POP e indiretamente manipulado pelas
instrues CALL/RE1LR! que so utili-adas em sub-rotinas na linguagem
Asseo|y. !a linguagem C este registrador manipulado automaticamente pelo
compilador e no necessita da intereno do programador.

TIMER 0 e TIMER 1
TH1 (8DH)
TL1 (8H)
THO (8CH)
TLO (8AH)

17
O A189S52 possui 3 timers que podem ser programados para trabalharem
como geradores de tempo (timer's) ou como contadores de pulsos (contadores).
O conjunto de dois registradores de 8 bits, 1H e 1L, formam um nico
registrador de r6 bits. !este liro os timers/counters sero apresentados no
modo de r6 bits.

TIMER CUNTRUL RECISTER


TCON (88H)
TL1 (8H)
THO (8CH)
TLO (8AH)

TIMER MUDE RECISTER
TMOD (89H)
Permite programar os modos de atuao de cada timer eistente no
microcontrolador.

PUWER CUNTRUL RECISTER


ICON (87H)
um registrador usado para controlar os modos de funcionamento do
microcontrolador com relao ao consumo de energia e detentor tambm do
registrador SMOD utili-ado na configurao do modo da comunicao serial.

SERIAL BUFFER
SUI (99H)
A transmisso de dados no 8O51 reali-ada pelo registrador especial SBLF
(ser|a| oojjer). Fisicamente dentro do chip temos dois SBLF, um para
transmisso e outro para recepo, mas para o softare s eiste um SBLF.


IP e IE {Interrupt Priority e Interrupt Enable]

IL (A8H)
II (8H)
So registradores de funes especiais responseis pelas interrupes do
microcontrolador. O registrador P (I|erro|s Pr|or||y)
atendimento das interrupes pelo processador. O registrador E
Eao|e) habilita ou desabilita todas as interrupes do microcontrolador. Seu
funcionamento parecido com o de uma chae geral
quando chegarmos ao captulo que trata das interrupes.


2.4. Pinagem do Microcontrolador


|igura 2.3

VCC - Alimentao de +5V


GND nu V55 - 1erra
18
So registradores de funes especiais responseis pelas interrupes do
(I|erro|s Pr|or||y) define a prioridade no
atendimento das interrupes pelo processador. O registrador E (I|erro|s
habilita ou desabilita todas as interrupes do microcontrolador. Seu
funcionamento parecido com o de uma chae geral. \eremos mais adiante
quando chegarmos ao captulo que trata das interrupes.
do Microcontrolador AT89S52



























(cncapsu|ancn|c SMD)


3 - Tipcs dc cncapsu|ancn|c.

19
Pnrt P0: composto por oito pinos. utili-ado para comunicao de entrada e
sada (/O's) de dados. o Port que fornece mais corrente em relao aos
demais. Suas sadas so em coletor aberto e por no possuir resistores de Po|| U
apenas fornecem nel O e flutuante (aberto). Para produ-ir nel alto na sada
deste Port necessrio conectar resistores de 4,7K nos respectios pinos em
relao ao +\CC. Esta caracterstica (sadas em coletor aberto) permite ao
microcontrolador manipular tenses maiores que +5V.

Pnrt P1: barramento composto por oito pinos. utili-ado para comunicao de
entrada e sada (/O's) de dados. Durante o processo de graao atras de
pinos deste Port que o arquio . HEX graado na memria do chip. Por este
motio, o Port P1 ultimo a ser utili-ado tendo em ista que durante o processo
de graao, este Port parcialmente ocupado pelo cabo de graao.

Pnrt P2: barramento composto por oito pinos. utili-ado para comunicao de
entrada e sada (/O's) de dados e por no possuir funes especiais,
preferielmente utili-ado para sada de dados.

Pnrt P3: possui funes especiais em seu barramento, pois nele esto ligados o
canal de comunicao serial, as interrupes, os timers e os contadores (eja
abaio as funo especial de cada pino). Pode ser utili-ado tambm como port
de escrita e leitura de dados (/O). 1ipicamente neste port so conectados
dispositios de entrada, tais como: teclas e sensores.

I3.O RxD, enliada seiiaI
I3.1 TxD, sada seiiaI
I3.2 INTO, inleiiupo exleina O
I3.3 INT1, inleiiupo exleina 1
I3.4 TO, enliada paia o linei O
I3.5 T1, enliada paia o linei 1

I3.6 e I3.7, so utili-ados para escrita e leitura na memria de dados
eterna, atualmente em desuso, e portanto, e foge do escopo deste liro.

R5T: assim como seu no seu computador, nos microcontroladores eiste um


pino de RESE1, cuja funo reiniciar o programa.

EA/VPP: Ex|era| A::ess Eao|e. nforma a CPL se o programa .HEX est


dentro do microcontrolador (ROM), ou se est numa memria eterna.
Se utili-armos memria de programa
j se formos trabalhar com memria de programa eterna (no caso de
programas muito etensos), esse pino dee ser fiado em
de acordo com o modelo de microcontrolador usado, o tamanho da memria
interna aria.

XTAL1 c XTAL2: pinos atras dos quais ser conectado o cristal que gera o
clock eterno para o componente. O
ligado a esses pinos e todo o sincronismo de eecuo das tarefas ser baseado
na frequncia de pulsos desse oscilador. Podemos utili-ar cristais como
geradores de clock eterno, respeitando as frequncias mima e mnima de
trabalho de cada componente da famlia

2.5. U ClocK
nternamente ao microcontrolador eiste um circuito oscilador (clock), o qual
depende apenas da ligao de um cristal e de dois capacitores para funcionar. O
Cristal energi-ado, comea a oscilar e gera
frequncia de oscilao fia e corresponde a frequncia nominal do cristal
utili-ado. Esse sinal que em do cristal entra no oscilador interno que o
transforma numa onda quadrada, a qual serir como um relgio para o
microcontrolador. Desta forma sincroni-a a eecuo de qualquer atiidade
interna da mquina, ou seja, o tempo eigido para a eecuo de cada instruo
do programa est diretamente ligado frequncia de trabalho desse conjunto:
oscilador interno e cristal.



|igura

LIgan dn crIsta!:


!ota
|igura 2.5.
Forma de onda
gerada pelo Cristal
2O
Os :aa:||ores ||gaJos aos |os
XTAL1 e XTAL2 roJo:e a
os:||ao, eoa|o oe o Cr|s|a| |e a
joo Je es|ao|||:ar es|a jreo:|a.
nforma a CPL se o programa .HEX est
dentro do microcontrolador (ROM), ou se est numa memria eterna.
Se utili-armos memria de programa interna, fiamos este pino fsico em 1,
j se formos trabalhar com memria de programa eterna (no caso de
programas muito etensos), esse pino dee ser fiado em O. Lembrando que,
de acordo com o modelo de microcontrolador usado, o tamanho da memria
pinos atras dos quais ser conectado o cristal que gera o
clock eterno para o componente. O A189S52 possui um oscilador interno
ligado a esses pinos e todo o sincronismo de eecuo das tarefas ser baseado
na frequncia de pulsos desse oscilador. Podemos utili-ar cristais como
geradores de clock eterno, respeitando as frequncias mima e mnima de
abalho de cada componente da famlia 8O51.
nternamente ao microcontrolador eiste um circuito oscilador (clock), o qual
depende apenas da ligao de um cristal e de dois capacitores para funcionar. O
Cristal energi-ado, comea a oscilar e gera um sinal senoidal peridico, a
frequncia de oscilao fia e corresponde a frequncia nominal do cristal
utili-ado. Esse sinal que em do cristal entra no oscilador interno que o
transforma numa onda quadrada, a qual serir como um relgio para o
controlador. Desta forma sincroni-a a eecuo de qualquer atiidade
interna da mquina, ou seja, o tempo eigido para a eecuo de cada instruo
do programa est diretamente ligado frequncia de trabalho desse conjunto:





|igura 2.4.
!ota



Forma dentro do
microcontrolador

21
Aspcctn dn crIsta!:

A seguir obsere alguns modelos cristal:







(a) (b) (c)

|igura 2.5 - Tananncs dc cris|a|. ncrna| (a), ccnpac|c (o) c SMD (c).


2.. Ciclos de Mquina
Como citado no item anterior, o conjunto oscilador interno e cristal que gera e
controla os ciclos de trabalho da mquina, porm a contagem de tempo no
medida pela frequncia de oscilao do cristal e sim atras do que chamamos
de CICLO DE MAQUINA. Cada ciclo de oscilao do cristal gera um pulso (P)
e cada dois pulsos caracteri-am um estado S (s|a|e). Lma sequncia de seis
estados (S1 a S6) corresponde a um CICLO DE MAQUINA. 1odas as
atiidades do microcontrolador so comandadas por esses pulsos e seus seis
estados.

Assim, um CCLO DE MQL!A constitudo de seis estados (S1 a S6) que
correspondem a do-e pulsos ou ciclos do cristal. A frequncia real de trabalho
do 8O51 (medida em ciclos de mquina) pode ser calculada da seguinte forma:

CIc!n dc mquIna = f[Hz] dn crIsta! /12

Representao de um CICLO DE MAQUINA:











|igura 2.6 - Rcprcscn|aac dcs Cic|cs dc M4quina dc 8051.
1 cicIo de nquina
cicIo de
nquina

22
2.7. Reset
Ao energi-armos um microcontrolador, o estado de seus registradores internos
impreisel. Para que isto no ocorra, foi necessria a insero de um sinal de
RESE1, o qual iniciali-a o sistema de forma padroni-ada. Esse sinal ligado a
um pino fsico do chip chamado RS1, e para que ele seja atiado, deemos
manter nel lgico 1 nesse pino por mais de dois ciclos de mquina.

Sempre que ligamos ou energi-amos o circuito microcontrolado, interessante
que o chip seja resetado. Para isso necessria a insero de um circuito
eletrnico bem simples, mas capa- de reali-ar esse procedimento que
costumamos chamar de POVER ON RESET.

Alm disso, interessante que eista um boto para que o usurio possa
reiniciar o sistema sempre que for necessrio (reset manual). Em seguida
apresentamos um eemplo de circuito para os dois modos de reset.

!o reset, rios registradores so forados a estados predefinidos. O programa
retorna para o incio da ROM. Durante o reset, todos os pinos de entrada e
sada o a nel alto (apenas nesse instante).















|igura 2.7 - Circui|c dc rcsc|.








JII IOI1OB
3.1. Conbecendo o )FE EDITUR
O ]FE Editor uma interface de desenolimento de programas para
microcontroladores. !o entanto, esta interface
com realce colorido dos comandos (SINTAXE HIGHLIGHT
A compilao do programa que criamos e
reali-ada pelo SDCC (Sa|| Dev|:e C Co||er)
desenoledores de softares para o sistema operacional L!LX, bem como
para a criao do prprio L!LX.


3.1.1. Principais Caractersticas
Linguagem C estruturada com funes
Cdigo de mquina rpido e otimi-ado pelo SDCC
Os programas so facilmente adaptados para outros microcontroladores
da famlia 8O51.
Programao estruturada com instrues: F
SV1CH CASE.
\arieis como o||, :aar, || e |og
Realce colorido dos comandos (s||axe a|ga||ga|)


3.2. Instalao do )FE Editor
!o site de estudos possel baiar a erso completa do
com o SDCC Co||er, que permite criar programas para microcontroladores
8O51.
C/FlIULC
23
3.
4.
5.
JII IOI1OB

Conbecendo o )FE EDITUR
O ]FE Editor uma interface de desenolimento de programas para
, esta interface apenas de um editor de tetos
SINTAXE HIGHLIGHT) da linguagem C.
A compilao do programa que criamos e a gerao do arquio .HEX
(Sa|| Dev|:e C Co||er), amplamente utili-ado por
desenoledores de softares para o sistema operacional L!LX, bem como
Principais Caractersticas
Linguagem C estruturada com funes
Cdigo de mquina rpido e otimi-ado pelo SDCC
Os programas so facilmente adaptados para outros microcontroladores
Programao estruturada com instrues: F -ELSE, FOR, VHLE,
|og
(s||axe a|ga||ga|) da linguagem C
Instalao do )FE Editor
possel baiar a erso completa do jFE EJ||or juntamente
, que permite criar programas para microcontroladores
C/FlIULC
3

O jFE EJ||or es| :oj|goraJo ara ser |s|a|aJo ao|oa||:ae|e


a as|a (J|re|r|o)
J|re|r|o.
Aps baiar o ]FE Editor, instale o programa, rode
seu cone sem alterar as opes de instalao.


!ota



3.2.1. Localizao do )FE Editor
Aps a instalao, rode o jFE EJ||or
locali-ado em C:\8O51. O nome do arquio eecutel jfe.ee




|igura 3.1 - ccnc dc prcgrana ]|| |di|cr.


3.3. Painel de Controle
O jFE EJ||or (jea's F||e EJ||or) um editor de tetos com reconhecimento dos
comandos da linguagem C para microcontroladores. !o entanto, toda
inteligncia deste editor est no compilador SDCC, que em conjunto com o
EJ||or, resulta num ecelente ambiente de desenolimento
possui um painel de controle muito simplificado, permitido desenoler seus
programas com muita facilidade.








|igura
24
O jFE EJ||or es| :oj|goraJo ara ser |s|a|aJo ao|oa||:ae|e
a as|a (J|re|r|o) C.8051 e SOMENTE jo:|oar es|e
Aps baiar o ]FE Editor, instale o programa, rode-o com um clique duplo em
seu cone sem alterar as opes de instalao.
o do )FE Editor
jFE EJ||or com um clique duplo sobre o seu cone
O nome do arquio eecutel jfe.ee

ccnc dc prcgrana ]|| |di|cr.
um editor de tetos com reconhecimento dos
comandos da linguagem C para microcontroladores. !o entanto, toda
inteligncia deste editor est no compilador SDCC, que em conjunto com o jFE
, resulta num ecelente ambiente de desenolimento jreeware. O ]FE
possui um painel de controle muito simplificado, permitido desenoler seus


|igura 3.1 - ]|| |di|cr.

25
3.4. Barra de Ferramentas e Menus
!a barra de ferramentas encontramos diersos recursos que ajudam na edio
dos programas. \amos conhecer as ferramentas mais importantes e sua
descrio.

3.4.1. Menu File
File !e Cera uma noa janela para edio do programa
File Open Abre um arquio criado anteriormente
File Close Fecha o arquio que oc est editando
File Sae Sala as modificaes do seu programa
File Sae As... Sala o arquio, podendo salar com outro nome
File Eit Sai do programa ]FE Editor

3.4.2. Menu Edit
Lndo Desfa- a alterao do teto
Redo Refa- a modificao do comando Lndo
Cut Recorta o teto selecionado
Paste Cola o teto numa parte selecionada do programa
Find Permite reali-ar a busca de palaras no programa
Replace Substitui um teto no seu programa

3.5. Como Editar e Compilar um Programa no )FE


Editor

3.5.1. Edio
Editar um programa no jFE EJ||or muito simples:

1) Abra o jFE EJ||or (locali-ado em C:\8O51\jfe.exe).
2) Atras do menu F||e F||e F||e F||e New New New New gere um noo arquio.
3) Sale seu noo programa atras do menu F||e F||e F||e F||e Save Save Save Save.
4) Digite o nome do arquio (SEM ESPAOS, sem acentos, sem
cedilhas), acrescente a etenso .C e depois clique no boto salar
(eja o eemplo ilustrado a seguir).

Para :o||ar o seo rograa, o aro|vo .C Jeve e:essar|ae|e


es|ar ara:eaJo e a|goa
gerar o erro ao |e|ar :o||ar aro|vos a ar||r Je PeJr|ves,
|og|s Je osor|os oo oa|oer o|JaJe J|jere|e Ja o|JaJe C.






|igura 3.2 - Sa|tandc un prcgrana nc ]|| |di|cr.


!ota



3.5.2. Compilao
Depois que seu programa for editado, preciso compil
arquio necessrio para a graao do chip (arquio com etenso
isso, basta pressionarmos o boto :o||ar
C|r| e F juntas. !a mesma pasta em que o programa .C est salo aparecem os
arquios criados na compilao (arquio

3.5.3. Erros de Compilao
O SDCC Co||er no pode compilar o programa caso o programador tenha
cometido algum dos seguintes erros:
Erro de edio do programa (muito frequente).
1enha nomeado o arquio com ESPA
Esteja compilando o programa a partir de
unidade diferente de disco local

Caso o programa tenha erros de edio de programa
erros de sintae), ao compil-lo, surge uma mensagem na caia inferior de
mensagens o erro cometido pelo programador e a linha de programa onde o erro
ocorreu.
26
Para :o||ar o seo rograa, o aro|vo .C Jeve e:essar|ae|e
es|ar ara:eaJo e a|goa as|a Jo :oo|aJor. O SDCC |r
gerar o erro ao |e|ar :o||ar aro|vos a ar||r Je PeJr|ves,
|og|s Je osor|os oo oa|oer o|JaJe J|jere|e Ja o|JaJe C.
Sa|tandc un prcgrana nc ]|| |di|cr.
Depois que seu programa for editado, preciso compil-lo para ser gerado o
arquio necessrio para a graao do chip (arquio com etenso .aex). Para
:o||ar com o mouse ou pressionar as teclas
juntas. !a mesma pasta em que o programa .C est salo aparecem os
arquios criados na compilao (arquio . aex).
Erros de Compilao
no pode compilar o programa caso o programador tenha

o do programa (muito frequente).
enha nomeado o arquio com ESPAOS, acentos o CEDLHAS.
Esteja compilando o programa a partir de PeJr|vres ou qualquer outra
diferente de disco local C:\8O51.
Caso o programa tenha erros de edio de programa (tambm chamados de
lo, surge uma mensagem na caia inferior de
mensagens o erro cometido pelo programador e a linha de programa onde o erro

A linha de programa com erros de sintae e/ou edio ser


inferior do ]FE Editor. O programa a seguir contm um erro de sintae
error).










|igura 3.3 -|xcnp|c dc crrc na ccnpi|aac.

A linha de programa com erros de sintae e/ou edio ser indicada na caia
inferior do ]FE Editor. Clicando duas e-es sobre a mensagem de erro, o
programa pula automaticamente para a linha correspondente, mostrando o erro.
3.5.4. Nome dos arquivos gerados na Compilao
Quando uma compilao eecutada sem erros pelo programador, O
Co||er gera dentro da pasta do Aro|vo.C

Aro|vo.HEX Compatel com o softare de graao
ia cabo paralelo e softare CRA\A

Aro|vo.BIN Compatel apenas com o softare de graao
SERAL.EXE ia cabo serial.

O procedimento de graao eecutado por um terceiro softare que
nos apndices A e B ao final do liro
Linha en que o
eiio foi conelido
27
A linha de programa com erros de sintae e/ou edio ser indicada na caia
inferior do ]FE Editor. O programa a seguir contm um erro de sintae (sy|ax
|xcnp|c dc crrc na ccnpi|aac.
A linha de programa com erros de sintae e/ou edio ser indicada na caia
inferior do ]FE Editor. Clicando duas e-es sobre a mensagem de erro, o
programa pula automaticamente para a linha correspondente, mostrando o erro.
Nome dos arquivos gerados na Compilao
Quando uma compilao eecutada sem erros pelo programador, O SDCC
Aro|vo.C os seguintes arquios:
Compatel com o softare de graao AECSP.EXE
e softare CRA\A SERAL.EXE ia cabo serial.
Compatel apenas com o softare de graao CRA\A

O procedimento de graao eecutado por um terceiro softare que est
nos apndices A e B ao final do liro.

A ar||r Jes|e o|o Jo ||vro, |oJos os rograas Jeve ser eJ||aJos


o jFE EJ||or e o so :oa||ve|s :o oo|ros Co||aJores :oo
Toroo C, Dev C++, e|: (o|s es|es so :o||aJores ara
:oo|aJores e o ara |:ro:o|ro|aJores).

I Il le em me en nt tn nx x d d
4.1. Introduo a Linguagem C
!este captulo amos estudar detalhadamente a linguagem C com nfase no
microcontroladores 8O51.

!ota



O emprego da ||goage C na programao dos
complicado, mas eige o conhecimento mnimo da estrutura de programao e
conhecimento sobre as estruturas internas do
eficientes e compactos, tendo como resultado economia de memria e maior
rapide- no processamento do programa pelo chip.
\ejamos um eemplo do programa exe|o






Com o uso inteligente dos comentrios e funes, o programa se torna mais
compreensel. Programas etensos podem ser diididos em sub
C/FlIULC

#include<at89x52.h>

void main(){
P2_0=1;
}

28
A ar||r Jes|e o|o Jo ||vro, |oJos os rograas Jeve ser eJ||aJos
o jFE EJ||or e o so :oa||ve|s :o oo|ros Co||aJores :oo
Dev C++, e|: (o|s es|es so :o||aJores ara
:oo|aJores e o ara |:ro:o|ro|aJores).



d du u I Il ln ng gu uu ug ge em m C C

Linguagem C
!este captulo amos estudar detalhadamente a linguagem C com nfase nos
na programao dos microcontroladores no
complicado, mas eige o conhecimento mnimo da estrutura de programao e
nto sobre as estruturas internas do 8O51, para fa-er programas
eficientes e compactos, tendo como resultado economia de memria e maior
rapide- no processamento do programa pelo chip.
exe|o1.C:
Com o uso inteligente dos comentrios e funes, o programa se torna mais
compreensel. Programas etensos podem ser diididos em sub-rotinas
C/FlIULC
4
//contm as definies do chip
//declara incio do programa
//liga o pino P2.0
//declara fim do programa

29
No se reo:oe :aso o |eaa e|eJ|Jo o prcgrana1c. Ao |ogo
Jes|e ||vro os rograas sero aoorJaJos Je jora a|s Je|a|aaJa.
(funes) que ocasionalmente consumiro menos memria do microcontrolador
e tornaro o seu processamento mais rpido.
O programa cxcnp|c1.C descrito anteriormente, tem como funo atiar o pino
I2.O do microcontrolador.
Conforme comentado nos captulos anteriores, para o programa cxcnp|c1.C ser
graado no microcontrolador, precisamos primeiramente :o||-|o, ou seja,
transformar os comandos digitados na linguagem C em linhas de comandos de
mquina que obedecem o padro headecimal da I|e|.
Conledo do aiquivo exenpIo1.hex geiado no }IL Ldiloi:
:040000000200383290
:01000B0032C2
:0100130032BA
:01001B0032B2
:0100230032AA
:01002B0032A2
:100038007581CF120034E582600302002C7900E953
:100048004400601B7A00900080780075A000E4935B
:10005800F2A308B8000205A0D9F4DAF275A0FF7877
:1000680000E84400600C7900900000E4F0A3D8FC9C
:08007800D9FAF6D8FD02002CB4
:0C002C0012003180FED28022758200227A
:00000001FF


!ota





4.2. A Linguagem C Cuxe Senxltlve
sto significa di-er que C diferencia letras minsculas de maisculas. Os
identificadores: CONTADOR, :o|aJor, Co|aJor so diferentes entre si e
especial ateno dee ser dada a esse fato, pois ao criarmos uma ariel de uma
maneira e escre-la de outro, gera-se um erro na compilao. Essa regra aplica-
se tambm a todos os comandos da ||goage C. Os comandos deem ser
escritos com letras minsculas, e.: wa||e, jor, |j.

3O
4.3. Palavras Reservadas
A linguagem C possui um conjunto de palaras reseradas que no podem ser
usadas como arieis de programa ou para outros fins. As palaras reseradas
da linguagem C (padro A!S) so:
ao|o oreal :ase :aar :os|
:o||oe Jejao|| Jo Jooo|e e|se
eo ex|er j|oa| jor go|o
|j || |og reg|s|er re|or
saor| s|geJ s|:eoj s|a||: s|ro:|
sw||:a |yeJej o|o os|geJ vo|J
vo|a|||e wa||e a|

Taoc|a 4.1 - Pa|atras rcscrtadas dc padrac ANS|-C.


As palaras realadas com a cor cin-a so as mais frequentemente utili-adas
para o aprendi-ado da Prograao C ara |:ro:o|ro|aJores 8051.

Para facilitar o uso de algumas caractersticas da famlia 8O51, o SDCC Co||er
adiciona noas palaras ao conjunto-padro de palaras reseradas do C:
o|| ||erro| os|g sjr

Taoc|a 4.2 - Ccnjun|c adicicnadc ac padrac ANS|-C.


Lma palara reserada da linguagem C no pode ser utili-ada pelo
programador como uma ariel do programa. A seguir temos um eemplo de
erro erro erro erro no emprego destas palaras:
while = 1;
int = 200;

31
Assim como as palaras reseradas, temos um conjunto de registradores que
tambm no deem ser utili-ados para outros fins. So eles:
TCON Timer/counter control
SCON Serial port control
IE Interrupt Enable
IP Interrupt priority control
PSW Program status word
ACC Accumulador
B B
SP Stack pointer
DPL Data pointer Low Word
DPH Data pointer High Word
PCON Power control
TMOD Timer/counter mode control
TL0 Timer/counter 0 low Byte
TL1 Timer/counter 1 low Byte
TH0 Timer/counter 0 high Byte
TH1 Timer/counter 1 high Byte
SBUF Serial data port
P0 Port P0
P1 Port P1
P2 Port P2
P3 Port P3

Taoc|a 4.3 - Ccnjun|c dc rcgis|radcrcs dc 8051.

A seguir temos um eemplo de erro no emprego destas palaras:
int B = 10;
int SBUF = 3;

!o podemos declarar arieis com o nome de SBLF, pois SBLF uma
palara reserada da linguagem.

4.4. Comentrios
Os comentrios recebem o nome de documentao do programa e de ital
importncia para entendermos futuramente o programa. O compilador SDCC
Co||er aceita dois tipos de marcadores de comentrios: os comentrios de
mltiplas linhas e os comentrios de linha.

32
Os comentrios de mltiplas linhas deem iniciar com /` (barra-astersco) e
terminar com `/ (asterisco-barra), eemplo:
/*
TUDO OQUE ESTIVER ENTRE OS MARCADORES DE
COMENTRIO IGNORADO PELO COMPILADOR
*/
Os comentrios de linha iniciam com // (dupla barra) e o que estier depois
dele na mesma linha ignorado pelo compilador, eemplo:


4.5. Tipos de Dados


1oda ariel usada em um programa dee ser declarada como de um
determinado ||o, ou seja, assume um certo nmero de Bits (tamanho) que
define suas caractersticas. As arieis podem ser definidas como:

Tipo de dado lils yles AIcance
lil 1 O a 1
signed chai 8 1 -128 a +127
unsigned chai 8 1 O a 255
signed inl 16 2 -32768 a + 32767
unsigned inl 16 2 O a 65535
signed Iong 32 4 -2147483648 a +2147483648
unsigned Iong 32 4 O a 4294967295
fIoal 32 4 1,175494
L-38
a 3,4O2823
L+38

Taoc|a 4.4. - Tipcs dc dadcs
4.5.1. Constantes - conxt

#include<at89x52.h> //contm as definies do chip

void main(){ //declara incio do programa
P2_0=1; //liga o pino P2.0
} //declara fim do programa

33
Na ||goage C, os :oaJos ||:|aJos e|o :ara:|ere = == = so os
|:os oe o re:eoe o|o-e-v|rgo|a o j|a| Ja s||axe.
Podemos definir a um smbolo alores constantes pela funo :os| :os| :os| :os|, utili-ada
quando definimos um alor numrico ou uma string para um smbolo.
!o momento da compilao, o compilador encarrega-se de trocar todos os
smbolos criados pelo seu respectio alor. Eemplo:
const LIGADO=1;
const DESLIGADO=0;
const TEMPO_MAXIMO=100;

Aps a definio dessas constantes, possel utili-ar as palaras como tendo
mesmo significado do alor numrico igualado.

4.5.2. Definies - #Jeflne


!o tpico anterior imos a utili-ao de constantes. As definies serem para
criar noos smbolos que sejam equialentes a outros j eistentes. !o
momento da compilao, o compilador encarrega-se de trocar todos os smbolos
criados pelo seu respectio alor. Eemplo:

#define MOTOR P2_0
#define LAMPADA P2_1



!ota




Os comandos de definio =Jej|e e :os| serem para tornar o programa mais
compreensel e podem ser utili-ados sempre que forem teis e por tendo em
ista que so eliminados durante a compilao, acabam por no consumir
memria etra do microcontrolador.


A seguir temos dois programas iguais. \eja como os comandos de definio
auiliam na compreenso do programa.

Eemplo de um programa utili-ando os comandos de definio:

34
Nes|e ||vro as joes Ja ||goage C so aoorJaJas :o jase e
|:ro:o|ro|aJores, o oe reJo: a J|vers|JaJe Je :oaJos es|oJaJos
soore a ||goage C.










Eemplo de um programa sem os comandos de definio:











4.. Funes
Quando temos no programa comandos que so repetidos rias e-es, podemos
utili-ar o recurso da funo. As funes so blocos modulares de comandos que
podem ser chamados de diferentes pontos do programa, para que no sejamos
forados a reescre-los todas as e-es necessrias.

!ota



4..1. Estruturas das Funes
As funes deem ser declaradas antes de serem chamadas.
As funes podem conter parmetros que carregam informaes para o bloco de
comandos da funo.
Para chamar uma funo inserimos seu respectio nome no trecho do programa
em que a mesma dea ser eecutada (chamada ou CALL em Asseo|y).
#include<at89x52.h> //contm as definies do chip
#define LAMPADA P0_0
const LIGADO=1;

void main(){ //declara incio do programa
P0=0; //desliga todos os pinos
LAMPADA=LIGADO; //liga o pino P0.0
} //declara fim do programa


#include<at89x52.h> //contm as definies do chip

void main(){ //declara incio do programa
P0=0; //desliga todos os pinos
P0_0=1; //liga o pino P0.0
} //declara fim do programa

35
Finali-ada a funo, o programa retorna na linha seguinte ao comando que a
chamou.



















importante obserar que todas as noas funes do programa deem ser
declaradas antes da funo principal (a|) (a|) (a|) (a|).

4..2. U Tipo volJ


O vo|J, que tradu-ido para o portugus quer di-er a-io, um tipo de dado
utili-ado em funes que no retornam nada e tambm em funes que no
possuem nenhum parmetro declarado. A funo a| para o 8O51 um
eemplo de funo que no retorna nada e no recebe nenhum parmetro.
Deido o direcionamento dado Linguagem C para microcontroladores 8O51,
as funes abordadas neste liro no retornaro alores e por isso sempre
utili-aro o identificador vo|J para preceder o nome da funo.

4.7. U Comando #lncluJe


Os arquios cabealho (ou aeaJer em ingls) contm definies para que o
arquio na linguagem C possa ser compilado.

#include<at89x52.h> //contm as definies do chip
#include<delay.h> //contm as definies do chip


void piscaLED(){ //declara incio da funo piscaLED
P2_0=1; //liga o pino P2.0
delay_ms(1000); //aguarda 1 segundo
P2_0=0; //desliga o pino P2.0
delay_ms(1000); //aguarda 1 segundo
} //declara fim da funo piscaLED


void main(){ //declara incio do programa
piscaLED(); //chama a funo pisca led
} //declara fim do programa

Os |:ro:o|ro|aJores Ja sr|e
jo:|oae|o e a rograao. E|re|a|o, o |oJo Je gravao Jo :a|
J|jere|e. As r|:|a|s J|jereas e:o|ra
gravao e a |eso Je gravao (V).Por |sso, o oss|ve| gravar o
AT89C52 :o o gravaJor J
!a compilao, baseado nesse arquio header, o compilador gera o cdigo
correto para a utili-ao das funes. Algumas dessas fun
compiladas e embutidas no prprio compilador, gerando ento, o cdigo correto
no momento da sua ||lage (unio do arquio header com o arquio em C e
outros arquios do compilador).
1odos os programas em C para microcontroladores tem pelo men
arquio de cabealho. O nome deste arquio depende do microcontrolador
utili-ado.
1odos os microcontroladores da famlia
mesmo modelo, obsere as letras 'S' e 'C'

AT89C51 ou AT89S51
AT89C52 ou AT89S52


Ambos chips so compateis (eceto no mtodo de graao).
microcontroladores da srie S so classificados como
e podem ser reprogramados no prprio circuito em que sero utili-ados
caso dos microcontroladores da srie
enolendo rios pinos de graao, os quais no deem estar conectados a
outros circuitos durante esse perodo Por este motio, os microcontroladores da
srie C esto cada e- mais caindo em desuso. Ambos microcontroladores
podem ser reprogramados mais de mil e-es.
Em funo da ariao entre srie C e S, o arquio cabealho
qual contm as definies dos registradores e palaras reseradas do chip
nomeado de AT89X52.H. A letra X presente no nome
entendida como letra curinga, tornando
microcontroladores das duas sries (C e S).




!ota


36
Os |:ro:o|ro|aJores Ja sr|e C51 e S51 so 100 :oa||ve|s o
jo:|oae|o e a rograao. E|re|a|o, o |oJo Je gravao Jo :a|
J|jere|e. As r|:|a|s J|jereas e:o|ra-se os ro|o:o|os Je
gravao e a |eso Je gravao (V).Por |sso, o oss|ve| gravar o
:o o gravaJor Jo AT89S52.
!a compilao, baseado nesse arquio header, o compilador gera o cdigo
correto para a utili-ao das funes. Algumas dessas funes j esto
compiladas e embutidas no prprio compilador, gerando ento, o cdigo correto
(unio do arquio header com o arquio em C e
1odos os programas em C para microcontroladores tem pelo menos, um
arquio de cabealho. O nome deste arquio depende do microcontrolador
1odos os microcontroladores da famlia 8O51 possuem uma ariao na srie do
obsere as letras 'S' e 'C':

|igura 4.1. - Difcrcnas cn|rc a scric S c C.
Ambos chips so compateis (eceto no mtodo de graao). !o caso dos
microcontroladores da srie S so classificados como I-Sys|e Prograao|e
no prprio circuito em que sero utili-ados. !o
caso dos microcontroladores da srie C, estes utili-am graao paralela
enolendo rios pinos de graao, os quais no deem estar conectados a
circuitos durante esse perodo Por este motio, os microcontroladores da
srie C esto cada e- mais caindo em desuso. Ambos microcontroladores
podem ser reprogramados mais de mil e-es.
Em funo da ariao entre srie C e S, o arquio cabealho (aeaJer), o
qual contm as definies dos registradores e palaras reseradas do chip
. A letra X presente no nome deste arquio dee ser
tornando esse aeaJer compatel com os
as sries (C e S).

37
Conledo paiciaI do aiquivo AT89X52.H conlido no SDCC Ccnpi|cr:
sfr at 0x80 P0
sfr at 0x81 SP
sfr at 0x82 DPL
sfr at 0x83 DPH
sfr at 0x87 PCON
sfr at 0x88 TCON
sfr at 0x89 TMOD
sfr at 0x8A TL0
sfr at 0x8B TL1
sfr at 0x8C TH0
sfr at 0x8D TH1
sfr at 0x90 P1
sfr at 0x98 SCON
sfr at 0x99 SBUF
sfr at 0xA0 P2
sfr at 0xA8 IE
sfr at 0xB0 P3
sfr at 0xB8 IP
sfr at 0xC8 T2CON
sfr at 0xC9 T2MOD
sfr at 0xCC TL2
sfr at 0xCD TH2
sfr at 0xD0 PSW
sfr at 0xE0 ACC
sfr at 0xE0 A
sfr at 0xF0 B

/* P0 */
sbit at 0x80 P0_0
sbit at 0x81 P0_1
sbit at 0x82 P0_2
sbit at 0x83 P0_3
sbit at 0x84 P0_4
sbit at 0x85 P0_5
sbit at 0x86 P0_6
sbit at 0x87 P0_7

/* TCON */
sbit at 0x88 IT0
sbit at 0x89 IE0
sbit at 0x8A IT1
sbit at 0x8B IE1
sbit at 0x8C TR0
sbit at 0x8D TF0
sbit at 0x8E TR1
sbit at 0x8F TF1


/* P1 */
sbit at 0x90 P1_0
sbit at 0x91 P1_1
sbit at 0x92 P1_2
sbit at 0x93 P1_3
sbit at 0x94 P1_4
sbit at 0x95 P1_5
sbit at 0x96 P1_6
sbit at 0x97 P1_7

/* P2 */
sbit at 0xA0 P2_0
sbit at 0xA1 P2_1
sbit at 0xA2 P2_2
sbit at 0xA3 P2_3
sbit at 0xA4 P2_4
sbit at 0xA5 P2_5
sbit at 0xA6 P2_6
sbit at 0xA7 P2_7

O arquio AT89X52.H nomeia todos os registradores do microcontrolador com
um apelido que isa facilitar a ida do programador. Sem o uso deste aeaJer o
programador precisaria trabalhar diretamente com os endereos de memria
onde encontram-se os registradores especiais (SRF's).
O primeiro item dos registradores da lista acima apelida o endereo Ox8O (em
headecimal) como sendo o POR1 IO.
sfr at 0x80 P0 Special function register at 0x80 P0 define o
registrador que est na posio de memria Ox8O com o apelido de IO.

38
No ao|e|e V|Jows, os oes Je aro|vo o |e J|s||o e|re
|e|ras |s:o|as e a|s:o|as. No e|a|o, a ||goage C sogere o
oso reJo|a|e Je |e|ras |s:o|as.
somente aps esta definio que o compilador entende que o significado do
smbolo IO e esta associao ocorre com todos os registradores especiais do
microcontrolador.
Deido a importncia de criar apelidos para os registradores do
microcontrolador, o comando #include<microcontrolador.h> dee ser
a primeira instruo de qualquer programa escrito para microcontroladores
8O51 na linguagem C.

4.7.1. Como Incluir um heuJer no Programa
Para incluir um cabealho no programa em C, utili-amos a seguinte sintae:
#include<nome do arquivo.h>

Assim temos:
#include<at89x52.h> ou
#include<AT89X52.h>


!ota












Operudnrex
5.1. Tipos de Uperadores
A linguagem C possui operadores para atribuir, comparar ou modificar um ou
mais dados ou arieis. Os objetos manipulados por essa finalidade so
chamados de operadores operadores operadores operadores (que podem ser arieis, constantes ou outros
elementos, como os registradores de fun
ter ao menos, dois operandos.
Podemos diidir os operadores em quatro categorias:
Aritmtica: Aritmtica: Aritmtica: Aritmtica: para clculos.
Relacional: Relacional: Relacional: Relacional: para comparar alores numricos.
Logical: Logical: Logical: Logical: para testar condies ou manipular
Booleana: Booleana: Booleana: Booleana: como suplemento de operaes simples.


5.1.1. Uperadores Aritmticos
So utili-ados para a reali-ao de operaes matemticas os seguintes
operadores aritmticos:
Operao
Soma
Subtrao
Multiplicao
Diiso
Resto da diiso (inteiro)
ncremento em
Decremento em
C/FlIULC
39



Operudnrex


A linguagem C possui operadores para atribuir, comparar ou modificar um ou
mais dados ou arieis. Os objetos manipulados por essa finalidade so
(que podem ser arieis, constantes ou outros
elementos, como os registradores de funes especiais). Os operadores deem
Podemos diidir os operadores em quatro categorias:
para comparar alores numricos.
ies ou manipular o||s indiiduais.
como suplemento de operaes simples.
Aritmticos
So utili-ados para a reali-ao de operaes matemticas os seguintes
Smbolo
+
-
Multiplicao *
/
(inteiro) %
um ++
m um --
C/FlIULC
5

4O
Os operadores aritmticos so utili-ados quando precisamos reali-ar operaes
matemticas. !a linguagem C, os operadores usam duas arieis e retornam
um terceiro alor mantendo inalteradas as arieis originais.

Soma: Soma: Soma: Soma:
int y=10;
int z=5;
int x=0;

x=(y+z);

Subtrao Subtrao Subtrao Subtrao
int a=10;
int b=5;
int c=0;

c=(b-a);

Multiplicao Multiplicao Multiplicao Multiplicao
int a=1;
int b=20;
int c=2;

a=(b*c);

Diiso Diiso Diiso Diiso
int a=0;
int b=20;
int c=2;

a=(b/c);


Resto da diiso (inteiro) Resto da diiso (inteiro) Resto da diiso (inteiro) Resto da diiso (inteiro)
int a=1;
int b=25;
int c=2;

a=(b%c);

Soma o contedo da ariel y yy y com a ariel : :: : e
arma-ena o resultado na ariel x xx x.
Subtrai da ariel o oo o o contedo da ariel a aa a e
arma-ena o resultado na ariel : :: :.
Multiplica o contedo da ariel o oo o pelo da
ariel : :: : e arma-ena o resultado na ariel a aa a.
Diide o contedo da ariel o oo o pelo da ariel : :: :
e arma-ena o resultado na ariel a aa a.
Diide o contedo da ariel o oo o pelo da ariel : :: :
e arma-ena o resto da diiso resto da diiso resto da diiso resto da diiso na ariel a aa a.

41
ncremento em um ncremento em um ncremento em um ncremento em um
int contagem=0;

contagem++;


Decremento em um Decremento em um Decremento em um Decremento em um
int contagem=10;

contagem--;


5.1.2. Uperadores Relacionais
Os operadores relacionais reali-am operaes de comparao, retornando o
alor dessa comparao com alores falsos (O) ou erdadeiros (1). Esses
operadores no afetam o contedo das arieis aps a sua concluso.
Operador Descrio Smbolo
==
gual a +
!=
Deferente de -
<
Menor que *
> Maior que /
<=
Menor ou igual %
>= Maior ou igual a ++

1odos os operadores e operandos enolidos na comparao deem ser
colocados entre parnteses. Eemplo:
A=0;
B=10;
C=1;

if(A>B) C=1; se A AA A for maior do que B BB B, ento C CC C recebe 1.
if(A<C) B=15; se A AA A for menor do que C CC C, ento B BB B recebe 15.
if(A!=6)A=2; se A AA A for diferente de 6, ento A AA A recebe 2.

ncrementa a ariel contagem contagem contagem contagem em uma
unidade.
Decrementa a ariel contagem contagem contagem contagem em uma
unidade.

42
5.1.3. Uperadores Lgicos e Booleanos
A tabela seguinte mostra os operadores lgicos na linguagem C.
Operador Descrio
!
Operao !O1 (!O)
&
Operao A!D (E)
|
Operao OR (OL)
^
Operao XOR (OL eclusio)

1odos os operadores e operandos (constantes e arieis) enolidos na
comparao deem ser colocados entre parnteses.
Eemplo:

if((P3_0==1)|(P3_1==1)) C=1;
Significado: se a entrada I3.O receber nel lgico 1 OL OL OL OL a entrada I3.1 receber
nel lgico 1, ento C recebe 1.

if((A>0)&(A<10)) A++;
Significado: se A for maior do que -ero E EE E A for menor do que de-, ento
incrementa A em um.

if((A!=B)|(A!=C)) A--;
Significado: se A for diferente de B OL OL OL OL se A for diferente de C, ento decrementa
A em um.

Assim como os operadores relacionais, os operadores lgicos reali-am testes entre
as arieis, assumindo alores erdadeiros ou falsos apenas. Os operadores lgicos
no alteram o alor das arieis testadas.

Eemplo:

bit x=0;
bit y=1;
int cont=0;

if(x & y)cont++;
Significado: se x for igual a um E EE E e y for igual a um, ento :o| incrementado em
uma unidade.

43

if(x | y)cont=cont+5;
Significado: se x for igual a um OL OL OL OL se y for igual a um, ento :o| incrementado
em cinco unidades.

if(x & !y)cont--;
Significado: se x for igual a um E EE E se y no no no no for um, ento :o| decrementado em
uma unidade.

5.1.4. U Uperando NUT


O operando (!O1- complemento) inerte os bits de uma ariel, ou seja, reali-a
a operao de negao, ou complemento booleano com o smbolo '-'.

bit x=0;


if(P3_0==1)x=~x;
Significado: Se a entrada I3.O for igual a um (+5Vcc), ento recebe o seu
complemento, que neste caso ser um, pois foi iniciali-ada com -ero (bit x=0).

if(P3_0==0)x=~x;
Significado: Se I3.O for igual a -ero (O\), ento recebe o seu complemento, que
neste caso ser um.

Outra maneira de escreer o comando: Outra maneira de escreer o comando: Outra maneira de escreer o comando: Outra maneira de escreer o comando:
if(P3_0) x=~x;
Significado: Se I3.O for igual a um, ento recebe o seu complemento, que neste
caso ser um.

if(!P3_0)x=~x;
Significado: Se I3.O no for igual a um, ento recebe o seu complemento, que
neste caso ser um.

Se a ariel x fosse iniciali-ada com bit x=1, o comando x=~x; faria com que
x recebesse o seu complemento, que neste caso seria -ero.


Ixtruturux de Cnntrnle
.1. Tipos de Estruturas de Controle
As estruturas de controle so usadas nos programas em l
mquina dee reali-ar repetidas operaes ou precisa de tomadas de deciso.

A linguagem C oferece um grande nmero de estruturas de controle do fluo de
um programa.

|j
sw||:a :ase



.2. A Estrutura lf {se]
A estrutura |j |j |j |j ('se' em portugus) um
no resultado lgico de um teste. Sua forma geral :

if(condio) comando;
ou
if(condio){
comando 1;
comando 2;
comando n;
}

Em C, qualquer nmero diferente de -ero tido como erdadeiro. O que
significa que uma condio em C s falsa, quando o resultado dos operadores
C/FlIULC
44



Ixtruturux de Cnntrnle e Ielturu de 1eclux

Tipos de Estruturas de Controle
s estruturas de controle so usadas nos programas em lugares em que a
reali-ar repetidas operaes ou precisa de tomadas de deciso.
A linguagem C oferece um grande nmero de estruturas de controle do fluo de
e|se Jo
wa||e jor
uma estrutura de tomada de deciso baseada
. Sua forma geral :
Em C, qualquer nmero diferente de -ero tido como erdadeiro. O que
ue uma condio em C s falsa, quando o resultado dos operadores
C/FlIULC

45
que foram aplicados for -ero (O). Qualquer outro alor, mesmo quando
negatio, ou seja, o :ero considerado erdadeiro.

!o comando |j, se a condio resultar erdadeira (o :ero), ento o comando
eecutado. Se a condio for falsa, a eecuo de comando ignorada.

Eemplo:











!o eemplo acima, a estrutura |j erifica se a entrada I3.O erdadeira (ou o
:ero). Se a entrada P,.o estier conectada ao +5\cc, o teste |j retornar alor
erdadeiro e o comando :o|age++ ser eecutado.

\ejamos agora um programa onde a instruo :o|age++ ser eecutada apenas
se a entrada I3.O for -ero (ou seja, tier nel lgico -ero).















A estrutura |j permite que a condio seja uma epresso da linguagem C, com
todas as possibilidades de combinao de operadores. \eja os eemplos:

int i=10;

#include<at89x52.h> //contm as definies do chip

void main(){ //declara incio do programa

int contagem=0; //declara varivel e inicializa em 0

if(P3_0) contagem++; //se P3.0 receber nvel alto,
//incrementa contagem em 1
} //declara fim do programa


#include<at89x52.h> //contm as definies do chip

void main(){ //declara incio do programa

int contagem=10; //declara varivel e inicializa em 10

if(P3_0==1) contador--; //se entrada P3.0 estiver em 1
//decrementa uma unidade,
} //fim do programa

46
int j=5;
if(i==1)j++;
if(i!=10)i=5;
if(i==j)i--;

.2.1. Ubservao Importante
O operador de atribuio de igualdade em C (-) diferente do operador
relacional de igualdade (--) igual a. Para testar uma ariel usamos o operador
relacional de igualdade (--). Eemplo:

int a=10;
if(a==10)a++;


\ejamos agora, o uso incorreto do operador relacional de atribuio. Este erro
muito comumente cometido pelos programadores. Eemplo:

if(a=10)a++;

Se utili-armos o operador de atribuio (-), pensando em comparar uma
ariel, eja como o compilador interpreta essa epresso:
if(a=10)a++; Se a=10, ento o alor 1O arma-enado na ariel a. O
que equiale a comparar: if(10)a++; Se 1O for um alor erdadeiro (ou
o :ero), ento a condio erdadeira e a ariel a incrementada em um.


.3. A Estrutura lf-elxe
A estrutura |j e|se mais completa do que a simples estrutura |j. sto ocorre por
que a estrutura e|se (seno) permite definir comandos a serem eecutados caso o
teste seja falso (O).

int i=10;
int j=5;

if(i==10)j++; //se i for igual a 10, incrementa j
else j--; //seno, decrementa j

Alm disso, podemos ter um conjunto de comandos em cada teste |j e|se.
Eemplo:

47
ToJo :oaJo e|se Jeve ser es:r||o
|ogo as o :oaJo |j
if(P3_0==1){ //se a entrada P3.0 receber +5V,
P0_0=1; // Ativa sada P0.0
P0_1=1; // Ativa sada P0.1
}
else{ // seno, se entrada P3.0 receber 0V
P0_0=0; // desliga sada P0.0 (0 Volt)
P0_1=0; // desliga sada P1.0 (0 Volt)
}


Caso haja mais de um comando |j, o comando e|se estar sempre relacionado ao
ltimo comando |j. Eemplo:


if(P3_5==1)P0=15; //se P3_6 receber +5V, ativa P0.0 a P0.3
if(P3_6==1)P0=240; //se P3_5 receber +5V, ativa P0.4 a P0.7
else P0=0;

!ote que no h necessidade de abre e fecha-chaes quando as epresses
possuem apenas um comando a ser eecutado ao final do teste. 1ipicamente os
programadores iniciantes optam por sempre utili-ar chaes independentemente
do tamanho da condio.

Obsere um erro de Obsere um erro de Obsere um erro de Obsere um erro de programao: programao: programao: programao:
if(i==1)P0_0=1;
P0_1=1;
else P0=0;

!este caso, como no eistem chaes delimitando os comandos do bloco |j, o
compilador assume que apenas a atribuio P0_0=1 pertence ao teste
if(i==1). Por esta ra-o, o comando IO_1=1 sempre ser eecutado e, alm
disso, o compilador ir gerar um erro referente a palara e|se, pois ela no estar
associada a nenhum bloco |j.

Corrigindo o erro anterior, temos:

if(i==1){
P0_0=1;
P0_1=1; !ota
}
else P0=0;

48
.4. A Estrutura lf, elxe, lf
Este tipo de estrutura permite um enorme nmero de alinhamentos (es||g) de
comandos. Podemos colocar estruturas |j dentro de outras estruturas |j e assim
sucessiamente. Seu formato geral :

if(condio 1){
commandos;
}
else if(condio 2){
commandos;
}
else if(condio 3){
commandos;
}
}

A estrutura |j uma das mais utili-adas para tomada de decises lgicas. A
estrutura |j e|se |j, muitas e-es alternatia que o programador pode adotar
para tornar os blocos de tomadas de deciso mais rpidos. sto ocorre por que,
no momento em que a condio satisfeita, os demais blocos if no so
testados. \ejamos um eemplo comparando com a estrutura |j simples:


if(P3_0==1) P2=1; //se o pino P3.0 tiver nvel 1
if(P3_1==1) P2=2; //se o pino P3.1 tiver nvel 1
if(P3_2==1) P2=4; //se o pino P3.2 tiver nvel 1
if(P3_3==1) P2=8; //se o pino P3.3 tiver nvel 1
if(P3_4==1) P2=16; //se o pino P3.4 tiver nvel 1

!este caso, se o primeiro teste if(P3_0==1) for erdadeiro, o Port I2.1
receber nel r. !o entanto, o processador continuar testando as demais
condies desnecessariamente.

Agora ejamos o mesmo teste utili-ando a estrutura |j e|se |j.


if(P3_0==1) P2=0;
else if(P3_1==1) P2=1;
else if(P3_2==1) P2=2;
else if(P3_3==1) P2=4;
else if(P3_4==1) P2=8;

!o eemplo acima, o processador ir testar o primeiro teste e caso seja
erdadeiro, nenhum bloco e|se testado. importante obserar que esta
estrutura s mais eficiente se a condio satisfeita mais prima do topo da
lista. Portanto, para que o programa funcione com maior rapide-, importante
que o programador insira os testes mais proeis para o topo da lista.

49
.5. A Estrutura xwltch
A estrutura sitch muito parecida com a estrutura |j e|se |j estudada
anteriormente e utili-ada para testar uma condio de uma ariel no
programa. Diferente da estrutura |j, a estrutura sw||:a no aceita epresses
para a tomada da deciso. Para a tomada de decises a estrutura sw||:a somente
aceita constantes. O comando sw||:a testa o alor da ariel e eecuta a
declarao (ou declaraes) que encontrar correspondente em :ase A clusula
Jejao|| ser eecutada quando nenhuma das condies for correspondente a :ase
e o seu uso opcional.

Formato da estrutura sitch sitch sitch sitch:

switch(varivel){
case constante 1: commando 1;
commando 2;
break;

case constante 2: commando 3;
break;

case constante n: commando 4;
break;

default: commando 5;
break;
}

Eemplo de uso da estrutura sw||:a:

contador=2;
switch(contador){
case 0: x++;
P2_0=1;
break;

case 1: P2_1=1;
break;

case 2: P2_2=1;
break;

default: P2_3=1;
break;
}
Por testar apenas um alor em cada :ase, a estrutura sw||:a se torna mais rpida
do que a estrutura |j e|se |j. Entretanto, a capacidade de testar apenas um alor
constante (e no uma condio) fa- com que o uso da estrutura |j e|se seja mais
utili-ada pelos programadores do que a estrutura sw||:a.

5O
.. Estruturas de Loops

..1. Tipos de Loops
As estruturas de loops (repeties) serem para repetir uma ou mais e-es
determinada instruo ou bloco de instrues. As estruturas de controle de
loops na linguagem C so:

jor
wa||e
Jo (o aoorJaJo es|e ||vro)


..2. U Comando for
O lao for utili-ado quando necessitamos de um ciclo controlado de
repeties, pois em sua iniciali-ao podemos iniciali-ar e incrementar ou
decrementar a ariel de controle. Antes de serem eecutados os comandos do
lao for, primeiramente aaliada a condio do teste. Caso seja erdadeira, so
eecutados os comandos do lao. A cada ciclo que eecutado o lao (iteraes),
a ariel de controle ser incrementada no alor programado.

\eja a estrutura do comando jor jor jor jor:

for(inicializao;condio;incremento){
comandos que devem ser repetidos;
}


\eja um eemplo de uso do comando jor jor jor jor:

for(i=0;i<10;i++){
P2_0=1; //liga P2_0
delay_ms(1000); //aguarda 1 segundo
P2_0=0; //desliga P2_0
delay_ms(1000); //aguarda 1 segundo
}
!a estrutura anterior, a ariel i inicialmente carregada com o alor dado
pela iniciali-ao (i=O) e os comandos do lao jor so eecutados. Aps a
eecuo de todos os comandos presentes no lao jor, a ariel i
incrementada na condio do incremento (i++), e noamente os comandos do
lao jor so eecutados. A estrutura de repetio for termina quando a ariel i

assume o alor da condio final. !este eemplo, o


microcontrolador) ir ligar e desligar de- e-es.

Ainda possel utili-ar o lao jor em passos decrescentes. \eja um eemplo:

#include <at89x52.h>
#include <delay.h>

void main(){
int i=0;
for(i=10;i>0;i--){
P2_0=1; //liga P2_0
delay_ms(1000);
P2_0=0; //desliga P2_0
delay_ms(1000); //aguarda 1 segundo
}
}

Suponha que o programa acima tenha a funo de fa-er um LED piscar de-
e-es. Ento temos o seguinte aarJware







Chave de RLSLT












|igura 6.1.

.2.2.1. U Comando breuk {quebrar]


O Comando oreal utili-ado para quebrar
todas as repeties. Quando o lao quebrado, o programa desia para a
51
assume o alor da condio final. !este eemplo, o Ioil I2.O (pino 21 do
lador) ir ligar e desligar de- e-es.
em passos decrescentes. \eja um eemplo:
P2_0=1; //liga P2_0
delay_ms(1000); //aguarda 1 segundo
; //desliga P2_0
delay_ms(1000); //aguarda 1 segundo
Suponha que o programa acima tenha a funo de fa-er um LED piscar de-
aarJware:
|igura 6.1. - Circui|c pisca ||D.
{quebrar]
quebrar um lao jor antes deste completar
Quando o lao quebrado, o programa desia para a

prima linha de programa aps o lao.


ocorrer um eento que dea ser eecutado, deemos inserir o comando
algum teste para alidar o cancelamento do comando

#include <at89x52.h>
#include <delay.h>

void main(){
int i=0;
for(i=0;i<10;i++){
if(P3_0==1) break;//se o pino P3.0
P2_0=1; //liga P2_0
delay_ms(1000); //aguarda 1 segundo
P2_0=0; //desliga P2_0
delay_ms(1000); //aguarda 1 segundo
}
}

!este caso, o lao jor encerrado (quebrado) se o Port
alto (1). Se tiermos uma tecla conectada a este Port, o led ir parar de piscar
quando esta tecla for pressionada.

A seguir temos um eemplo de hardare para este programa:



TecIa iesel




TecIa 'lieak







|igura 6.2.
52
prima linha de programa aps o lao. Por eemplo, se durante as repeties
ocorrer um eento que dea ser eecutado, deemos inserir o comando oreal e
algum teste para alidar o cancelamento do comando jor. \eja o eemplo:
;//se o pino P3.0 receber nvel 1
P2_0=1; //liga P2_0
delay_ms(1000); //aguarda 1 segundo
; //desliga P2_0
delay_ms(1000); //aguarda 1 segundo
encerrado (quebrado) se o Port I3.O estier em nel
). Se tiermos uma tecla conectada a este Port, o led ir parar de piscar
A seguir temos um eemplo de hardare para este programa:


|igura 6.2. - Pisca ccn ccnandc orca|.

53

.2.2.2. U Comando contlnue {continuar]


Ao contrrio do comando oreal, o comando :o||oe fa- com que o lao inicie
imediatamente uma noa repetio, mesmo que todos os blocos da repetio
no tenham sido eecutados.

\eja o eemplo:

#include <at89x52.h>
#include <delay.h>

void main(){
int i=0;
for(i=0;i<10;i++){
P2_0=1; //liga P2.0
delay_ms(1000); //aguarda 1 segundo
if(P3_0==1) continue; //se P3.0 receber nivel alto
P2_0=0; //desliga P2.0
delay_ms(1000); //aguarda 1 segundo
}
}

!o trecho de programa acima os dois ltimos comandos I2_O=O, e
deIay_ns(1OOO), no sero eecutados caso a entrada I3.O receber nel O.


..3. U Comando whlle
A estrutura wa||e erifica inicialmente se a condio de |es|e erdadeira. Caso
erdadeiro, todos os comandos dentro do lao wa||e sero eecutados. Ao
retornar para o inicio do lao, erificado noamente se a condio de |es|e
erdadeira, eecuta noamente todos os blocos de comandos, se for falsa,
interrompe o lao wa||e e salta para a linha do programa logo aps o bloco wa||e.

A estrutura do lao wa||e :

while(condio){
commandos;
}

A :oJ|o poder ser uma operao relacional ou um teste booleano. Eemplo:

while(x<50){ //enquanto x for menor do que 50
x++; //incrementa uma unidade de x
} //fim do comando while

Este trecho de programa far com que a ariel incremente 5O e-es.

54

Os testes booleanos so de uso mais frequentes na linguagem C para


microcontroladores. !este caso, o comando wa||e testa se a :oJ|o erdadeira
ou o-:ero. Eemplo:

bit a=1;

while(a){ //enquanto a for diferente de zero
x++; //incrementa uma unidade de x
} //fim do comando while

!este trecho de programa o comando wa||e testa se a ariel 'a' diferente de
-ero. Como o teste sempre erdadeiro, o comando do bloco wa||e eecutado
eternamente.

..3.1. Estrutura de Repetio Infinita


Poderiamos reescreer o trecho do programa anterior da seguinte forma para
criar uma estrutura de repetio wa||e infinita:

while(1){ //enquanto 1 for verdadeiro(diferente de zero)
x++; //incrementa uma unidade de x
} //fim do comando while


Em seguida temos um eemplo de aplicao do lao wa||e com loop infinito:


#include <at89x52.h>
#include <delay.h>

void main(){
while(1){
P2_0=1; //liga P2.0
delay_ms(1000); //aguarda 1 segundo
P2_0=0; //desliga P2.0
delay_ms(1000); //aguarda 1 segundo
}
}








Pnrtx
7.1. Us Ports do 8051
Sabemos que o microcontrolador 8O51
como:

Ports.
1imers.
nterrupes.
Porta Serial.

Estudaremos detalhadamente cada um destes recursos internos.


7.2. Ports
Os microcontroladores 8O51 possuem pinos fsicos destinados
dados com circuitos eternos. Atras desses pinos podemos eniar neis
lgicos (O ou 1) para, por eemplo, acender ou apagar um LED.

Os microcontroladores baseados na famlia
entrada e sada (/O), os quais esto diididos em quatro ports chamad

IO
I1
I2
I3

C/FlIULC
55



Pnrtx

8O51 possui diersos recursos internos, tais
Estudaremos detalhadamente cada um destes recursos internos.
em pinos fsicos destinados comunicao de
dados com circuitos eternos. Atras desses pinos podemos eniar neis
) para, por eemplo, acender ou apagar um LED.
Os microcontroladores baseados na famlia 8O51 da I|e| possuem 32 pinos de
uais esto diididos em quatro ports chamados:
C/FlIULC
7

56



Port P1> <Port P0












<Port P2

Port P3>







|igura 7.1. - Pcr|s dc nicrcccn|rc|adcr 8051.


\ale lembrar que para a famlia 8O51 todo o processamento de dados interno da
LLA (Lnidade Lgica Aritmtica), assim como todos os registradores,
perifricos, entre outros, trabalham com informaes em 8 bits.

!os registradores de funes especiais temos IO, I1, I2 e I3 que so posies
absolutas na RAM que contm os dados dos ports (/O's) do microcontrolador.
Qualquer escrita reali-ada em um desses registros automaticamente altera todo
o contedo presente na sada do chip.

A seguir temos as caractersticas de cada port:

7.2.1. Pnrt P0
Pode ser utili-ado para comunicao de entrada e sada (/O's) de dados. o
Port que fornece mais corrente em relao aos demais. Suas sadas so em
coletor aberto, e apenas fornecem nel O e flutuante (aberto). Para produ-ir

57
nel alto na sada deste Port necessrio conectar resistores de ,yK nos
respectios pinos em relao ao +\CC. Esta caracterstica (sadas em coletor
aberto) permite ao microcontrolador manipular tenses maiores que +5V.

7.2.2. Pnrt P1
utili-ado para comunicao de entrada e sada (/O's) de dados. Durante o
processo de graao atras de pinos deste Port que o arquio . HEX
graado na memria do chip. Por este motio, o Port I1 ultimo a ser utili-ado
tendo em ista que durante o processo de graao, este Port parcialmente
ocupado pelo cabo de graao.

7.2.3. Pnrt P2
Pode ser utili-ado para comunicao de entrada e sada (/O's) de dados e por
no possuir funes especiais, preferielmente utili-ado para sada de dados.

7.2.4. Pnrt P3
Possui funes especiais em seu barramento, pois nele esto ligados o canal de
comunicao serial, as interrupes, os timers e os contadores (eja abaio
funo especial de cada pino). Pode ser utili-ado tambm como port de escrita e
leitura de dados (/O). 1ipicamente neste port so conectados dispositios de
entrada, tais como: teclas e sensores.

I3.O RxD, enliada seiiaI
I3.1 TxD, sada seiiaI
I3.2 INTO, inleiiupo exleina O
I3.3 INT1, inleiiupo exleina 1
I3.4 TO, enliada paia o linei O
I3.5 T1, enliada paia o linei 1

I3.6 e I3.7, so utili-ados para escrita e leitura na memria de dados
eterna e foge do escopo deste liro.

Acompanhe o eemplo:








#include<at89x52.h> //contm as definies do chip

void main(){ //declara incio do programa
P2=255; //liga todos os pinos(nvel 1) do Port P2
} //declara fim do programa

58
Para a:|oar :argas :oo Bo::ers
e Re|s, eregaJo |ras|s|ores
NPN, e:essr|o :oe:|ar
res|s|ores Je Po||-o e :aJa
sa|Ja o||||:aJa, :oja j|a||JaJe
rejorar a eoea :orre|e
jore:|Ja e |ve| a||o e|o 8051.
O comando I2=255, quando eecutado pelo 8O51, enia para o Port P2 o alor
255, que deia todos os pinos deste Port em nel lgico 1.

Podemos interpretar esse comando como :oaJo Je es:r||a para escreer na
porta paralela.


Acompanhe o primo eemplo:


Int valor=09;





O comando vaIoi=I2, fa- com que os dados contidos no Port P2 do 8O51 sejam
arma-enados na ariel va|or.

Podemos interpretar esse comando como :oaJo Je |e||ora para ler os dados
presentes nos pinos da porta paralela.


7.3. Exerccio Resolvido
\amos elaborar um programa que fa- com que um LED seja acionado por um
transistor do tipo !P!, acendendo e apagando a cada meio segundo
aproimadamente. O transistor acionado pelo pino I2.O do 8O51.

Acompanhe o esquema eltrico:













|igura 7.2

#include<at89x52.h> //contm as definies do chip
int valor=0;
void main(){ //declara incio do programa
valor=P2; //guarda na varivel o valor lido no port
} //declara fim do programa

2,2K
Pu||-up
10K

59
Resoluo:

#include <at89x52.h>
#include <delay.h>

void main(){
while(1){
P2_0=1; //liga P2.0
delay_ms(500); //aguarda 500 milisegundos
P2_0=0; //desliga P2.0
delay_ms(500); //aguarda 500 milisegundos
}
}


\amos erificar o programa do eerccio resolido por partes:

Para acionar o LED necessrio colocar nel lgico 1 no pino I2.O do
microcontrolador, e para apag-lo, necessrio colocar nel lgico O.

Para acender e apagar um LED a cada meio segundo (equialente a 2H-),
deemos utili-ar uma rotina de Loo, que tem o papel de repetir infinitas e-es
os comandos que iro ligar e desligar o pino I2.O do microcontrolador.
Ltili-amos ento a estrutura wa||e, j comentada nos captulos anteriores.

A instruo I2_O=O, coloca o respectio pino do microcontrolador em nel
lgico O (rcsc|a), apagando o LED.

A instruo deIay_ns(5OO), fa- com que o programa pare por 5OO
milisegundos.

A instruo I2_O=1, coloca o respectio pino do microcontrolador em nel
lgico 1 (sc|a), acendendo o LED.


Podemos utili-ar todos os Ports do microcontrolador para o acionamento de
LED's, displays, conectar teclas (propsito geral), inclusie o Port I3 que
possui funes especiais.

!a linguagem C para microcontroladores 8O51 temos algumas palaras
reseradas que no podem ser utili-adas para outros propsitos a no ser para
efetuar as funes que so pr-definidas.

6O
No oJeos Je:|arar, or exe|o, P1 :oo oa var|ve|, o|s
oa a|avra reservaJa Ja ||goage C.
!ota: Este comando altera apenas apenas apenas apenas o nel lgico do
respectio pino, sem afetar os demais.
As palaras reseradas que fa-em referncia as /O's (ports) so:

IO, I1, I2, I3

!ota


Cada Port dispe de 8 bits, cada um associado um pino do microcontrolador.
Assim temos:
F0
IO_1
IO_2
IO_3
IO_4
IO_5
IO_6
IO_7

F1
I1_1
I1_2
I1_3
I1_4
I1_5
I1_6
I1_7

F2
I2_1
I2_2
I2_3
I2_4
I2_5
I2_6
I2_7

F3
I3_1
I3_2
I3_3
I3_4
I3_5
I3_6
I3_7

Cada pino do Port pode assumir apenas dois neis lgicos: 1 ou O (alto e
baio), tanto para entrada como para sada de dados.
Por eemplo:

P2_7=0; //coloca o pino 28 em nvel 0 (0V)
P2_7=1; //coloca o pino 28 em nvel 1 (+5V)




Alm do comando de acesso bit a bit do Port, possel acessar todos os pinos
de uma nica e- (acesso ao Byte).
Por eemplo:

P2=0; //coloca todo Port P2 em nvel 0 (0V)
P2=255; //coloca todo Port P2 em nvel 1 (+5V)


\amos compreender o comando de manipulao do Byte. Cada Port na
erdade, um registrador especial de 1 Byte (8bits). Assim temos:


bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
I2_7 I2_6 I2_5 I2_4 I2_3 I2_2 I2_1 I2_O
Valor em decimal 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 =255

I2

61
Este comando altera o nel lgico de todos os pinos todos os pinos todos os pinos todos os pinos.
Somando todos os alores em decimal, obtemos o alor a,, que corresponde a
todos os bits do Port Pa em nel lgico 1 (setados).

!ote que nos pinos do microcontrolador os dados esto no formato binrio, ou
seja, os pinos s podem estar em nel lgico 1 ou O. Ento o alor em decimal
conertido para binrio e eniado ao Port.

\ejamos alguns eemplos com o Port IO:



Iino alivo IO_7 IO_6 IO_5 IO_4 IO_3 IO_2 IO_1 IO_O
128 64 32 16 8 4 2 1
Conando
IO=O, O O O O O O O O
IO=1, O O O O O O O 1
IO=2, O O O O O O 1 O
IO=4, O O O O O 1 O O
IO=8, O O O O 1 O O O
IO=16, O O O 1 O O O O
IO=32, O O 1 O O O O O
IO=64, O 1 O O O O O O
IO=128, 1 O O O O O O O

IO=129 1 O O O O O O 1
IO=6, O O O O O 1 1 O
IO=31, O O O 1 1 1 1 1
IO=15, 1 1 1 1 O O O O



Taoc|a 7.1. Accssc ac Pcr| P0 ccn ccnandc 8q|c.

!ota










Interrupex
8.1. Tipos de Interrupo
Os microcontroladores 8O51 possuem rios tipos de interrupo:

RST, pino 9
I3.2 INTO, inleiiupo exleina O
I3.3 INT1, inleiiupo exleina 1
I3.4 TO, enliada paia o linei O
I3.5 T1, enliada paia o linei 1
I3.O RxD, enliada seiiaI
I3.1 TxD, sada seiiaI


A interrupo um eento eterno ou interno que obriga o microcontrolador a
suspender suas atiidades temporariamente, para atender a esse eento que a
interrompeu. Em resumo uma ocorrncia que fa- o microprocessador parar
sua rotina e desiar para outra funo do pro
de interrupo que foi gerado pela ocorrncia. Aps o tratamento da rotina de
interrupo, normalmente o microcontrolador retorna ao ponto do programa
em que haia sido interrompido.

Para ligarmos as interrupes, necessrio selecionar as interrupes desejadas
nos registradores especiais chamados (SFR's) que fa-em parte do registrador
(I|erro| Eao|e), bastando colocar o alor
cada tipo interrupo.

Os nomes dos registradores especiais podem ser acessados na linguagem C
deido s definies do arquio aeaJer
C/FlIULC
62



Interrupex

Tipos de Interrupo
possuem rios tipos de interrupo:
INTO, inleiiupo exleina O
INT1, inleiiupo exleina 1
TO, enliada paia o linei O
T1, enliada paia o linei 1
um eento eterno ou interno que obriga o microcontrolador a
suspender suas atiidades temporariamente, para atender a esse eento que a
interrompeu. Em resumo uma ocorrncia que fa- o microprocessador parar
sua rotina e desiar para outra funo do programa, em que se locali-a o serio
de interrupo que foi gerado pela ocorrncia. Aps o tratamento da rotina de
interrupo, normalmente o microcontrolador retorna ao ponto do programa
essrio selecionar as interrupes desejadas
nos registradores especiais chamados (SFR's) que fa-em parte do registrador
, bastando colocar o alor 1 para habilitar e O para desabilitar
speciais podem ser acessados na linguagem C
aeaJer (arquio com a etenso .h). \eja o
C/FlIULC
8

63
contedo parcial do header AT89x52.h que define o registrador E (I|erro|
Eao|e):

/* IE */
sbit at 0xA8 EX0 ; apelida o bit na posio 0xA8 como EX0
sbit at 0xA9 ET0 ; apelida o bit na posio 0xA9 como ET0
sbit at 0xAA EX1 ; apelida o bit na posio 0xAA como EX1
sbit at 0xAB ET1 ; apelida o bit na posio 0xAB como ET1
sbit at 0xAC ES ; apelida o bit na posio 0xAC como ES
sbit at 0xAD ET2 ; apelida o bit na posio 0xAD como ET2
sbit at 0xAF EA ; apelida o bit na posio 0xAF como EA


!a linguagem C para microcontroladores 8O51, para habilitar as interrupes,
preciso utili-ar as seguintes instrues:

EA=1; //habilita a chave geral das interrupes
EA=0; //desabilita todas as interrupes

Esta instruo funciona como uma chae geral das interrupes. Quando a
utili-amos, habilitamos o uso de todas as interrupes do microcontrolador.

Mas para habilitar as interrupes, necessrio, alm do acionamento da chae
geral, habilitar indiidualmente as interrupes que se deseja acionar.

!a tabela a seguir temos o nome de todas as interrupes disponeis no
registrador E (I|erro| Eao|e):


Registrador IE

!ome da !ome da !ome da !ome da
interrupo interrupo interrupo interrupo

Funo Funo Funo Funo
Palara de Palara de Palara de Palara de
associao associao associao associao
EX0 External interrupt 0
TR0 Timer 0 interrupt 1
EX1 External interrupt 2
TR1 Timer 1 interrupt 3
RI
TI
Serial data received interrupt
Serial data transmit interrupt

interrupt 4
TR2 Timer 2 interrupt 5
EA Chave geral das interrupes

64
A e|raJa RST (rese|) a ||erroo a|s |or|a|e Jo
|:ro:o|ro|aJor e sere ser a|eJ|Ja r|e|ro.
magine que o registrador especial EA (Eao|e A|| I|erro|s) funcione como a
chae geral de uma casa, ou seja, como o disjuntor e as demais interrupes so
os interruptores internos da casa.

sto significa que para podermos acender uma lmpada, no interior da casa,
preciso que, primeiramente, a chae geral esteja ligada (LA=1).


8.2. Prioridade das Interrupes
\amos supor que temos duas interrupes sendo solicitadas simultaneamente.
Qual interrupo ser atendida primeiro? por esse motio que deemos
conhecer a hierarquia de importncia das interrupes. Alm disso, eiste o
registrador de funo especial chamado P (I|erro| Pr|or||y) que permite
alterar a prioridade de interrupes padro do microcontrolador.

Abaio temos o contedo parcial do header AT89X52.h que define o registrador
P (I|erro| Pr|or||y):

/* IP */
sbit at 0xB8 PX0 ;
sbit at 0xB9 PT0 ;
sbit at 0xBA PX1 ;
sbit at 0xBB PT1 ;
sbit at 0xBC PS ;
sbit at 0xBD PT2 ;


!a tabela a seguir temos o significado de cada bit do registrador P (I|erro|
Pr|or||y):

Interrupo Prioridade
0 PX0 : Entrada externa 0 Maior prioridade
1 PT0 : Passagem de tempo Timer 0 \......./
2 PX1 : Entrada externa 0 \...../
3 PT1 : Passagem de tempo Timer 1 \.../
4 PS : Comunicao Serial \./
5 PT2 : Passagem de tempo Timer 2 Menor prioridade

Taoc|a 7.1- Pricridadc padrac das in|crrup5cs.

!ota

65
Podemos fa-er com que uma ou mais interrupes sejam transferidas para o
grupo de alta prioridade. Caso haja mais de uma interrupo nesse grupo, a
hirerarquia de atendimento seguir a ordem da prima tabela. Por eemplo: a
interrupo eterna o (ILO) mais importante do que a interrupo de TIMLRO
(TRO), mas se colocarmos TIMLRO no grupo de alta prioridade, nesse caso a
interrupo de TIMLRO ser mais importante, e portanto, ser atendida
primeiro. Se colocarmos a interrupo eterna o e interrupo de TIMLRO,
ambas no grupo de alta prioridade, ento o 8O51 usa a ordem hierrquica
padro: Atende a interrupo eterna primeiro (ILO).

Eemplo para tornar a interrupo Serial mais importante do que a interrupo
eterna O:

PX0=0; //define Interrupo Externa 0 como do grupo
//de baixa prioridade (priority external)

PS=1; //Define a Interrupo Serial como sendo do
//grupo de alta prioridade (priority serial)


\ejamos outro eemplo:

Suponha que as interrupes eternas LXO e LX1 sejam solicitadas ao
microcontrolador simultaneamente. De acordo com a hierarquia de prioridades
da tabela 7.1, o microcontrolador ir atender primeiramente, a interrupo LXO,
ou seja, ir desiar o programa para a rotina de tratamento desta interrupo
(LXO) e depois, ir desiar para a rotina de tratamento da interrupo LX1.

!o entanto, caso esta hierarquia de interrupes no atenda s necessidades do
programador, possel alter-las no registrador P (I|erro| Pr|or||y). O
eemplo abaio altera a hierarquia das prioridades das interrupes, fa-endo
com que a interrupo eterna 1 (LX1) se torne importante do que a interrupo
eterna O (LXO):

PX0=0; //define baixa prioridade para interrupo
//externa 0

PX1=1; //define alta prioridade para interrupo
//externa 1




66
Es|e ||vro aoorJar as ||erroes ex|eras :o J|saro a oorJa Je
Jes:|Ja, :oj|gorao aJro Jo |:ro:o|ro|aJor.
8.3. Interrupes Externas
Os microcontroladores da famlia 8O51 possuem duas interrupes eternas:

I3.2 INTO, inleiiupo exleina O
I3.3 INT1, inleiiupo exleina 1

Mas para que sere uma interrupo eterna?

A interrupo eterna far com que o programa em eecuo seja
momentaneamente interrompido e desiado para o endereo de uma sub-
rotina/funo em que se encontra o tratamento desta interrupo sempre que o
microcontrolador receber um sinal eterno atras das entradas I3.2 ou I3.3.

Aps o tratamento da rotina de interrupo, normalmente o microcontrolador
retorna ao ponto do programa em que haia sido interrompido, dando sequncia
normal eecuo do programa.

As interrupes na famlia 8O51 podem ser disparadas interna ou eternamente,
uma e- que o microcontrolador possui perifricos internos que tambm geram
esses eentos.

8.3.1. Tipos de disparo das Interrupes Externas
As interrupes eternas so sempre disparadas pela transio de nel alto para
baio do sinal aplicado aos seus respectios pinos (de 1 para O). O 8O51 permite
ainda a programao do tipo de disparo dessas interrupes pelo nel ou pela
borda do sinal.

Deido ao fato de interrupes possurem hierarquia, se duas interrupes
acontecerem simultaneamente, o 8O51 atender aquela que tem prioridade mais
alta (conforme apresentado na tabela 7.1).


!ota

67
1odas as interrupes do microcontrolador 8O51 encontram-se no registrador
especial E (I|erro| Eao|e). Cada interrupo atiada com quando recebe o
alor 1 e desatiada quando recebe o alor O.

Eemplo:

EX0=1; //habilita interrupo externa 0
EX0=0; //desabilita interrupo externa 0

ET0=1; //habilita interrupo do TIMER 0
ET0=0; //desabilita interrupo do TIMER 0

EX1=1; //habilita interrupo externa 1
EX1=0; //desabilita interrupo externa 1

ET1=1; //habilita interrupo do TIMER 1
ET1=0; //desabilita interrupo do TIMER 1

ES=1; //habilita interrupo via porta serial
ET1=0; //desabilita interrupo via porta serial

ET2=1; //habilita interrupo do TIMER 2
ET2=0; //desabilita interrupo do TIMER 2

EA=1; //habilita chave geral das interrupes
EA=0; //desab. chave geral das interrupes


Para habilitar uma interrupo em C utili-amos:










O programa de eemplo acima habilita a interrupo eterna inlO do
microcontrolador. A partir de agora, toda mudana de nel lgico 1 para O no
pino do I3.2 (inlO) gera uma interrupo no microcontrolador, na qual acarreta
um desio no processamento do programa principal para a reali-ao da
interrupo.


#include<at89x52.h> //contm as definies do chip

void main(){ //declara incio do programa
EA=1; //habilita chave geral das interrupes
EX0=1; //habilita interrupo externa 0
... //comandos do programa...
} //declara fim do programa

68
A instruo |A=1 (Eao|e A|| ||erro|s) fa- com que o microcontrolador atie o
uso das interrupes, pois na erdade estes recursos especiais no esto
habilitados automaticamente. Depois disso, a instruo |X0=1 informa ao
microcontrolador que o pino I3.2 ter uma funo especial, ou seja, serir para
interromper o processamento toda e- que neste pino, ocorrer a transio de
nel alto para baio (acionamento pela borda de descida).


8.4. Exerccio Resolvido
!o circuito a seguir (figura 3.1) eiste uma tecla (push-button) conectado no
pino de interrupo eterna O (INTO), locali-ado no pino I3.2. Cada e- que a
chae for acionada, uma interrupo ser gerada e a rotina de atendimento
interrupo deer acionar os pinos I2.O e I2.1.





















|igura 8.2 - Usc da |n|crrupac |x|crna |X0



69






















A seguir temos o diagrama das interrupes do microcontrolador AT89S52.

















#include<at89x52.h> //contm as definies do chip


void atendeInterrupcao() interrupt 0{
P2_0=0; //liga LED P2.0
P2_1=0; //liga LED P2.1
}

void main(){ //declara incio do programa
EA=1; //habilita chave geral das interrupes
EX0=1; //habilita interrupo externa 0
while(1){
P2_0=1; //Desliga LED P2.0
P2_1=1; //Desliga LED P2.1
}
} //declara fim do programa

7O

|igura 8.3 - Mapa dc |n|crrup5cs dc AT89S52
Seqncia de alendinenlo das inleiiupes


1lmerx/Cnunterx
O timer um perifrico do 8o,r utili-ado para gerar uma base de tempo
bastante precisa. 1oda e- que o timer conclui a sua tempori-ao, o fluo
normal do programa interrompido e
pelo programador, como por eemplo, incrementar um relgio.
Este um perifrico acionado indiretamente pelo cristal ligado ao
microcontrolador, s que esse :|o:l diidido por
(entenda esta diiso no captulo
microcontrolador de 12MH-, diidindo por
1MH-, ou seja, um tempori-ador que conta o tempo a cada

Para a famlia 8O51 temos dois 1imers/
AT89S52 dispe de 3 destes perifricos
program-los temos dois registradores de funes especiais chamados 1MOD e
1CO!. \ejamos o 1MOD na tabela abaio:

TMOD
lil 2 lil 1 lil O
C/T M1 MO
O - -
1 - -
- O O
- O 1
- 1 O
Taoc|a 9.1 - |s|ru|ura dc Rcgis|radcr TMOD.
Os 1imers (lineiO, linei1 e linei2
modos de trabalho:

MODO MODO MODO MODO 0: :: : Contador com capacidade mima de
da antiga famlia MCS-48).
MODO MODO MODO MODO 1: :: : Contador com capacidade mima de
C/FlIULC
71
4.
5.
.
1lmerx/Cnunterx

O timer um perifrico do 8o,r utili-ado para gerar uma base de tempo
bastante precisa. 1oda e- que o timer conclui a sua tempori-ao, o fluo
normal do programa interrompido e ento eecutada uma funo definida
pelo programador, como por eemplo, incrementar um relgio.
um perifrico acionado indiretamente pelo cristal ligado ao
diidido por 12 antes de entrar nos 1imers
(entenda esta diiso no captulo 2.6). Se, por eemplo, o :|o:l do
MH-, diidindo por 12, teremos o clock do 1imer de
MH-, ou seja, um tempori-ador que conta o tempo a cada 1 microssegundo.
temos dois 1imers/Counters. Entretanto, o modelo
destes perifricos completamente independentes. Para
los temos dois registradores de funes especiais chamados 1MOD e
\ejamos o 1MOD na tabela abaio:
Lfeilo
lil O
MO
Conlagen poi lenpo
Conlagen poi I3.4 (TO)
MODO 13 lils
MODO 16 lils
MODO Mislo
|s|ru|ura dc Rcgis|radcr TMOD.
lineiO, linei1 e linei2) podem ser programados em quatro
Contador com capacidade mima de 13 bits ( uma herana
Contador com capacidade mima de 16 bits (mais utili-ado).
C/FlIULC

72
MODO MODO MODO MODO 2: :: : Contador com capacidade mima de 8 bits e ao|o-re|oaJ (mais
utili-ado na comunicao serial).
MODO MODO MODO MODO 3: :: : Contador misto, para aplicaes especiais (pouco utili-ado).

Os 1imers O, 1 e 2 possuem dois registradores de funes especiais associados a
eles, conforme definido no arquio A189x52.H:

/* BYTE addressable registers */ registradores com BYTES
endereveis
sfr at 0x88 TCON ;
sfr at 0x89 TMOD ;
sfr at 0x8A TL0 ;
sfr at 0x8C TH0 ;
sfr at 0x8B TL1 ;
sfr at 0x8D TH1 ;
sfr at 0xCC TL2 ;
sfr at 0xCD TH2 ;

Para cada timer temos dois registradores especiais. sto ocorre por que para
alcanar contagens de 16 bits num microcontrolador de 8 bits, so necessrios
dois registradores de 8 bits ligados em cascata.


9.1. Estrutura do Timer0
Este pode atuar como tempori-ador, com base de tempo no cristal oscilador, ou
como contador por meio do pino P,. com capacidade mima de 16 bits
(65.536 contagens) atras do bit intitulado C/1 (Counter/1imer) no
registrador especial 1MOD. Os registradores TLO e 1HO formam um nico
registrador de 16 bits e arma-enam a contagem dos 1imers. Quando a
contagem do 1imer eceder o alor mimo suportado (65.536+1), ocorrer o
estouro, mais conhecido como overj|ow, que ser sinali-ado pelo j|ag
(bandeira) 1FO (T|er F|ow) do 1imer. A figura 9.1 ilustra a estrutura do
1imer O:









|igura 9.1 - |s|ru|ura dc Tincr 0 nc ncdc 1 (16 oi|s).

73
9.2. Modos de Uperao do Timer0
A presente reiso deste liro abordar o 1imerO eclusiamente no MODO1,
tendo em ista ser este, o mais apropriado e comumente utili-ado para a
automao de processos.

Para compreender o funcionamento do 1imerO, amos assumir que o
microcontrolador tenha um cristal de 12MH-. Em seguida, a frequncia interna
diidida por 12 (redu-indo assim, para 1MH-) e eniada chae C/1
(Counter/1imer) do registrador 1MOD. Se esta chae estier em -ero (bit a
de TMOD), o 1imer funciona no modo tempori-ador, cuja base de tempo
fornecida pelo cristal/12. Se esta chae estier em nel 1 (bit a de TMOD), o
timer se comporta como contador de pulsos, cujo incremento ocorre atras do
pino I3.4.







|igura 9.2 - |s|ru|ura dc Tincr 0 nc ncdc |cnpcrizadcr.

Lma segunda alternatia para utili-ar o timer como contador o registrador
CA1E. Analisando a estrutura a seguir, percebemos que quando CA1E est
resetado (O), o 1imer/Counter est habilitado para uso normal. Quando CA1E
est setado (1), o 1imer/Counter somente disparado quando o pino de
interrupo eternaO INTO (port I3.2) for atiado (nel lgico O), ou seja, o
timer somente disparado com a interrupo eterna. Podemos utili-ar este
artifcio para medir largura de pulsos conectados no pino I3.2 (INTO) em
conjunto com o 1imer/Counter.

Alm disso, 1RO (1imer Run O) controla a eecuo do 1imer/Counter.
Quando TRO=1, o timer entra no modo roda. Quando TRO=O, o timer entra
no modo pausado.



|igura 9.3 - |n|rada |NT0 para ncdir a |argura dc pu|sc.

74
A principal finalidade em medir a largura do pulso est na possibilidade de
decodificar sinais de controle remoto, sensores de ultrasom, entre outros, pois
estes sistemas utili-am a combinao de rios tipos de largura de pulso para
codificar seus sinais. O controle remoto sem fio de portes eletrnicos e
centrais de alarme, por eemplo, utili-am a codificao MA!CHES1ER, a
qual baseada na largura de pulso para emitir e receber sinais.

Por padro, o registrador CA1E colocado em nel O, bastando apenas atiar
o registrador 1RO para que o timer entre em eecuo.



|igura 9.4 - |s|ru|ura dc Tincr 0 nc ncdc 1 (16 oi|s).



Em seguida a contagem arma-enada em TLO e THO. Quando a contagem
ultrapassa a capacidade de 65.536, ocorre um estouro na capacidade de
arma-enamento e 1FO (1imer Flag O) colocado automaticamente em nel 1,
gerando assim, um pedido de interrupo CPL.


Para gerar uma interrupo por passagem de tempo, necessrio que ocorra o
estouro do 1imer, ou seja, a contagem atinja 65.536+1. Por tanto, para gerar um
estouro a cada ,o milissegundos, temos:

1 conlagen(incienenlo) dcncra 1 niciossegundo
5O.OOO conlagens dcncra 5O.OOO niciossegundos 5O niIissegundos

Sabemos que o estouro ocorre sempre em 65.536+1, ento temos que, para
produ-ir o estouro em 5O.OOO ins de 65.536+1, precisamos iniciali-ar o 1imer
em 15.536, pois com a contagem de mais 5O.OOO ocorrer o estouro e, por
consequncia, uma interrupo por passagem de tempo equialente a ,o
milissegundos.

75
!este eemplo, o alor 15.536 dee ser inserido nos registradores TLO e THO
em notao headecimal. Assim temos:

Decimal Headecimal

15.536
3CB0
TH0 TL0
3C B0

!a linguagem C carregamos os registradores da seguinte forma:

TH0=0x3C; //carrega os valores em TH0
TL0=0XB0; //carrega os valores em TL0



9.2.1. Modo 1 {1 bits]
!este modo o timer atua como um contador de 16 bits (65.536 contagens) em
incrementos a cada 1 microssegundo, possibilitando tempori-aes de
aproimadamente 65 milissegundos. !ote que o alor mimo da tempori-ao
bastante pequeno, o que demanda a necessidade de rias tempori-aes para
se obter por eemplo, a durao de um segundo.

Assim temos:




As linguagens de programao precisam de repeties inteiras. !este caso,
teramos:




!ote que o tempo obtido no satisfa- 1 segundo precisamente, ou seja, 1OOO
milissegundos. Entretanto, podemos utili-ar sucessias tempori-aes de 5O
milissegundos para obter o perodo de 1 segundo com preciso:

76
9.3. Exerccio Resolvido
!o eemplo de programa que ser apresentado em seguida, o 1imerO
programado para gerar interrupo a cada 5O microssegundos. !o final de 2O
interrupes, o pino I2.O ter seu nel lgico alterado (inertido).

























Abaio temos um circuito para funcionar em conjunto com o programa:














|igura 9.5 - Circui|c para c Tincr pisca-pisca 1 scgundc |igadc- 1 scgundc dcs|igadc.

#include<at89x52.h> //contm as definies do chip
int contador=0;

void atendeTimer() interrupt 1{
TR0=0; //pausa timer para recarregar (Timer Stop)
TH0=0x3C; //recarrega o timer com o valor
TL0=0xB0; //15.536
TR0=1; //ativa timer para contar (Timer RUN)

if(contador<20) contador++;
else{ //se passou 50ms x20= 1 segundo
P2_0=~P2_0; //inverte o nvel lgico de P2.0
contador=0; //prepara p/recomear contagem de 1seg.
}
}

void main(){ //declara incio do programa
EA=1; //habilita chave geral das interrupes
ET0=1; //habilita a interrupo por estouro de Timer0
TMOD=1; //habilita Timer0 no modo 16 bits
TR0=1; //Ativa Timer0 no modo roda

while(1){
//programa principal
}
} //declara fim do programa



Cnmunlcun Serlul
A famlia 8O51 oferece uma porta de comunicao serial que permite efetuar
comunicaes entre outros dispositios que possuem comunicao serial.
porta serial do microcontrolador
simultaneamente (full-duple) e permite comunicao sncrona e assncrona. A
recepo feita pelo pino I3.O (RD) e a transmisso pelo pino
Os registradores de transmisso/recepo da porta serial so ambos acesseis
atras de um registrador de funo especial denominado SBLF (Serial Buffer)
1oda e- que o circuito recebe um Byte, ele o apresenta no registrador SBLF e
todo Byte escrito no SBLF imediatamente transmitido
Fisicamente eistem dois registradores SBLF
transmisso e outro para a recepo, mas para o softare s eiste um SBLF.
Dependendo da instruo de programa utili-ada, leitura ou escrita, a CPL sabe
qual SBLF dee ser usado naquele momento.
A recepo serial oojjer|:aJa, o que permite a recepo de um segundo Byte
antes que o Byte recebido anteriormente tenha sido lido no registrador de
recepo (entretanto, se o primeiro Byte no tier sido lido at a recepo do
segundo Byte, um dos dois Bytes poder ser perdido).
A porta serial pode operar de quatro modos:
MODO MODO MODO MODO 0: :: : Sncrono. Recebe o nome de registrador de deslocamento, pois
os dados entram e saem pelo pino RD, e o pino 1D neste modo tem a
funo de gerar o clock. So sempre transmitidos e recebidos 8 Bits de
dados e o oaoJ ra|e fio em 1/

MODO MODO MODO MODO 1: :: : Assncrono. !este modo possel programar a taa de
transmisso (oaoJ ra|e). De- bits so transmitidos (1D) e recebidos
(RD): um bit de incio (start bit, em nel lgico -ero), 8 bits de dados
(do LSB para o MSB, nesta ordem) e um bit de parada (stop bit, nel
lgico 1).
C/FlIULC
77
7.
8.
.
Cnmunlcun Serlul

oferece uma porta de comunicao serial que permite efetuar
comunicaes entre outros dispositios que possuem comunicao serial. A
possibilita transmitir e receber dados
uple) e permite comunicao sncrona e assncrona. A
(RD) e a transmisso pelo pino I3.1 (1D).
Os registradores de transmisso/recepo da porta serial so ambos acesseis
strador de funo especial denominado SBLF (Serial Buffer).
1oda e- que o circuito recebe um Byte, ele o apresenta no registrador SBLF e
todo Byte escrito no SBLF imediatamente transmitido para a porta serial.
Fisicamente eistem dois registradores SBLF dentro do 8O51, um para a
transmisso e outro para a recepo, mas para o softare s eiste um SBLF.
Dependendo da instruo de programa utili-ada, leitura ou escrita, a CPL sabe
qual SBLF dee ser usado naquele momento.
o que permite a recepo de um segundo Byte
antes que o Byte recebido anteriormente tenha sido lido no registrador de
recepo (entretanto, se o primeiro Byte no tier sido lido at a recepo do
segundo Byte, um dos dois Bytes poder ser perdido).
porta serial pode operar de quatro modos:
Sncrono. Recebe o nome de registrador de deslocamento, pois
os dados entram e saem pelo pino RD, e o pino 1D neste modo tem a
funo de gerar o clock. So sempre transmitidos e recebidos 8 Bits de
/12 da frequncia do cristal.
Assncrono. !este modo possel programar a taa de
). De- bits so transmitidos (1D) e recebidos
(RD): um bit de incio (start bit, em nel lgico -ero), 8 bits de dados
(do LSB para o MSB, nesta ordem) e um bit de parada (stop bit, nel
C/FlIULC
10

78
MODO MODO MODO MODO 2: :: : Assncrono. A porta serial transmite nesse modo 11 bits para
cada Byte transmitido com taa de transmisso fia em 1/,a ou 1/6 da
frequncia do cristal oscilador: um bit de incio (start bit, nel lgico
-ero), 8 bits de dados ( do LSB para o MSB, nessa ordem), um nono bit
programel e um bit de parada (stop bit, nel lgico 1). Esse nono bit
pode ser usado para transmitir ou receber o bit de paridade. !a
transmisso esse nono bit copiado do 1B8 do registrador especial
SCO!. !a recepo o nono bit recebido e arma-enado em RB8 do
registrador SCO!.

MODO MODO MODO MODO 3: :: : Assncrono. De fato, o modo 3 semelhante ao modo a, eceto
pela taa de transmisso (oaoJ ra|e) que programel.

CnmpnsIn dn dadn scrIa!
Para receber um Byte o sinal iniciado com o S|ar| o|| e em seguida so
recebidos os 8 bits (1 Byte), arma-enados em SBLF e depois a transmisso do
Byte finali-ada com um S|o o||.

Ao identificar o S|o o||, o 8O51 seta o registrador R (R-1) para gerar uma
interrupo serial, informando ao microcontrolador que o registrador SBLF j
recebeu o Byte serial. A seguir temos a ilustrao da recepo de l Byte ia porta
serial.


|igura 10.1 - |crna dc cnda cn RxD.

1o.1. Registrudor de Controle du Portu Seriul - SCON
O registrador de controle de s|a|os da porta serial o registrador especial de
funes SCO!, mostrado na tabela 1O.1.


bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
IL/SMO SM1 SM2 RLN T8 R8 TI RI
SCO!

79
FE, 5M0 c 5M1 - 5crIa! Mndc

FE - Bit Framing Error (atiado quando o bit SMO=1) ou SMO=O - para
desatiar a deteco de erro.

5M0 c 5M1 - Serial Mode (bit O e bit 1). Atras destes dois bits seleciona-
se um dos quatro modos de operao da comunicao serial, conforme a
tabela abaio:

SMO SM1 MODO Desciio aud-iale
O O O Shifl Regislei CiislaI/12
0 1 1 UART 8 bIts VarIvc!
1 O 2 UART 9 lils CiislaI/64 ou CiislaI/32
1 1 3 UART 9 lils VaiiveI

Taoc|a 10.1 - Mcdcs dc cpcraac da pcr|a scria|.

5M2 - 5crIa! Mndc

Possui diferentes funes em cada um dos quatro modos de funcionamento:

MODO MODO MODO MODO 0: :: : no tem efeito, deendo ficar em nel lgico -ero.

MODO MODO MODO MODO 1: :: : quando em nel lgico 1, desabilita o pedido de interrupo se
for recebido um bit stop inlido. sto eita que o nono bit, utili-ado nos
modos a e , sejam confundidos com o stop bit do modo 1.

MODO MODO MODO MODO 2 c 3: :: : Quando em nel lgico 1, habilita a comunicao serial
entre rios microcontroladores e desabilita o pedido de interrupo se for
recebido um nono Bit de dado igual a -ero.

REN - RcccptInn Enab!c

!el lgico O - desabilita a recepo serial.
!el lgico 1 - habilita a recepo serial.


TB8 - TransmIt BIt 8
!os modos a e , indica o estado do nono bit a ser transmitido, programado por
softare.


8O
RB8 - RcccIvc BIt 8

!o utili-ado no modo O, e no modo 1 indica o estado do s|o o|| recebido. Se
o bit SM2 estier em nel lgico O. !os modos 2 e 3 indica o estado do nono
bit recebido.


TI - TransmIt Intcrrupt

o bit de requisio de interrupo da transmisso de dados, sendo setado pelo
microcontrolador aps a transmisso transmisso transmisso transmisso do oitao bit de dados no modo O ou ao
incio do stop bit nos modos 1, 2 e 3. Dee ser -erado por softare durante a
eecuo da rotina de atendimento para permitir noas interrupes.


RI - RcccIvc Intcrrupt

o bit de requisio de interrupo da transmisso de dados, sendo setado pelo
microcontrolador aps a recepo recepo recepo recepo do oitao bit de dados no modo O ou ao incio
do stop bit nos modos 1, 2 e 3. Dee ser -erado por softare durante a eecuo
da rotina de atendimento para permitir noas interrupes.

|igura 10.2 - Rcgis|radcr R| c sc|adc ac fina| da rcccpac dc dadc scria|.

10.2. Transmisso e Recepo de Dados



Para utili-ar a comunicao serial, esta edio do liro utili-a o arquio
serial232.h, cujo contedo ser apresentado na prima pgina. Para
utili--lo, seu contedo deer ser salo com o nome scria|232.n, no diretrio
C:\8O51\SDCC\INCLUDL.





81

#define XTAL 12000000
#define T1_CLOCK XTAL/12

void init_sio_poll(unsigned int baud_rate){
TR1=0; //pra Timer 1 para program-lo.
ET1=0; //desabilita interrupo Timer1
TMOD &=0x0F; //Setup timer1 no modo 2
TMOD |=0x20; //8-bit auto-reload timer.
TH1=256-((T1_CLOCK/32)/ baud_rate); //valor da recarga
TR1=1; //timer1 no modo roda
SCON=0x50; //Modo 1 com 8 bits
TI=1; //indicate TX buffer empty
}

char _getkey(void){
char dado;
while(!RI); //Aguarda enquanto nao receber dado
dado=SBUF; //Armazena dado recebido na varivel
RI=0; //Zera RI para receber novo dado
return dado;
}

void putchar(char outChar){
while(!TI); //Aguarda at transmitir o dado
SBUF=outChar; //Envia dado para a porta serial
TI=0; //Zera RI para transmitir novo dado
}


|igura 10.1 - Ccn|cudc dc arquitc scria|232.n


nicialmente o arquio utili-a o recurso de definio, o qual permite dar um
apelido um determinado dado (uma constante). sto significa que a constante
X1AL equiale a frequncia do Cristal, que neste eemplo, 12.OOO.OOOH-
(12MH-). Em seguida a constante 11CLOCK (T|er1 C|o:l) recebe o alor
da frequncia do cristal diidida por 12, que a frequncia interna do
microcontrolador.

!a funo |||_s|o_o|| temos a definio do baud-rate da porta serial, no qual a
base de tempo gerada pelo 1imer1. nicialmente o timer parado (1R1=O)
para que possa ser programado. Como no eiste uma funo especial a ser
reali-ada com o estouro do 1imer1, o pedido de interrupo do mesmo
desabilitado (E11=O - Eao|e T|er I|erro|). Logo aps temos as definies do
registrador especial 1MOD. A instruo 1MOD &-OxOF e 1MOD }-Ox2O

82
Poo||g oa |:|:a eregaJa ara o||orar a|goa ao Je
oJo oe o ro:essaJor Je|eaa |oJa a|eo a esera Jes|e eve|o.
A| Jo Po|||g, oJeos eregar o oso Ja ||erroo ser|a| ara
o|||:ar o Jeseeao Jo s|s|ea.
manipulam os bits indiiduais do registrador 1MOD afim de program-lo no
modo a, com contagem de 8 bits (a,6 contagens) e com auto-reload, ou seja, toda
e- que o timer estoura a contagem, ele reiniciado noamente com o alor da
carga definida em 1H1. O alor de 1H1 depende da elocidade de transmisso
(baud-rate) e da frequncia do cristal do circuito, conforme a equao descrita
no programa. A diiso por 32 dee-se ao res:a|er do timer, que quando no
modo 2, multiplica a frequncia interna por 32.

Aps a carga de 1H1(||er1 a|ga By|e), o timer colocado em funcionamento
1R1=1. A instruo SCO!-Ox5O tem por efeito, modificar os seguintes bits
deste registrador:

0x50
hexadecinaI
0101 0000
liniio



bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
IL/SMO SM1 SM2 RLN T8 R8 TI RI
Bits atios 0 1 0 1 0 0 0 0


Com efeito, RE!-1 (re:e|ve ser|a| eao|e) habilita a recepo de dado serial.
SM1-1 (ser|a| oJe-1) define a transmisso do tipo 8 bits com baud-rate
ariel.


10.2.1. Funo _getkey{ ]
A funo getkey( ) do arquio seriala,a.h retorna o alor do primeiro caractere
lido na entrada do buffer serial (SBLF). Caso o buffer serial esteja a-io, o
alor O (-ero) ser retornado. Este comando, por utili-ar a tcnica de o|||g fa-
com que o processamento aguarde at que um caractere chegue no buffer serial
do 8O51. Aps o recebimento, prossegue eecutando as demais instrues do
programa.



!ota





SCO!

83
Eemplo de uso da funo _getkey():

#include<at89x52.h> //contm as definies do chip
#include<serial232.h> //contm as definies da porta serial

void main(){
char dado=0;
init_sio_poll(300); //inicializa serial com baud rate=300bps
while(1){
dado=_getkey();
if(dado=='A') P2_0=1; //Liga P2.0
if(dado=='B') P2_0=0; //Desliga P2.0

}
}

// Prcgrana 10.2 - Ccnunicaac scria| - Rcccpac dc dadcs
O programa acima tem a funo colocar o pino I2.O em nel lgico r toda e-
que o 8O51 receber a letra A (maiscula) pelo canal serial e desliga-o sempre que
receber a letra B (maiscula).

importante obserar que o arquio seiiaI232.h um header que dee ser
copiado para o diretrio C:\8O51\SDCC\INCLUDL. Alm disso, para que a
comunicao funcione corretamente, necessrio definir neste arquio a
frequncia do cristal utili-ado. Por padro est definido o cristal de 12MH-.


10.2.2. Funo putcbar{ ]
A funo putchar( ) enia pela porta serial do 8O51 o alor de uma ariel ou
constante do programa.

Eemplo de uso da funo putchar( ):


#include<at89x52.h> //contm as definies do chip
#include<serial232.h> //contm as definies da porta serial

void main(){
init_sio_poll(300); //inicializa serial com baud rate=300bps
while(1){
if(P3_7)putchar('A'); //envia a letra A pela porta serial
} //se entrada P3.7 receber nvel 1
}

// Prcgrana 10.3 - Ccnunicaac scria| - |ntic dc dadcs

O programa anterior tem a funo de


enquanto o pino I3.7 estier em nel lgico


10.3. Hardware para Comunicao Serial
Para que o microcontrolador comunique o mundo eterior,
integrado MAX232. Este circuito trata
+5\ para -12\ e O\ para -12\ que
(Reali-e Standard 232).

Abaio temos o esquema do hardare:







Tx
Rx



|igura 10.2 - Harduarc para Ccnunicaac scria|

10.4. BaudRate e Frequncia do Cristal
Dependendo do oaoJra|e empregado na comunicao serial, necessrio utili-ar
um cristal com frequncia especfica para gerar o tempo do timer com roo de
preciso. Obsere a tabela abaio:


8cucrcIe
38400
300
00
1200
2400
4800
00
1200
28800
84
8O51
1 14

3
4

5



7
2
6


tem a funo de eniar A (maiscula) pelo canal serial
estier em nel lgico 1.
Hardware para Comunicao Serial
Para que o microcontrolador comunique o mundo eterior, utili-a-se o circuito
Este circuito trata-se de um conersor de neis lgicos de
\ que o padro da comunicao serial RS232
Abaio temos o esquema do hardare:

Harduarc para Ccnunicaac scria|
BaudRate e Frequncia do Cristal
empregado na comunicao serial, necessrio utili-ar
um cristal com frequncia especfica para gerar o tempo do timer com roo de
Cri:Ic|
38400Hz 1105200Hz
* *
* *
* *
* *
* *
* *
* *
. *



Olxpluy ICO
11.1. Us Displays de LCD
Os displays alfanumricos so muito utili-ados atualmente, graas a sua
interatiidade com nmeros e letras.
nmero de caracteres e quantidade de linhas para a eibio de informaes.
|igura 11.1 - Disp|aq dc cris|a| |iquidc (|CD) 16x2.

11.2. Descrio da Pinagem dos LCD's
O LCD possui um barramento de dados de 8 bits (DB
responsel pela transferncia de dados para o LCD
controle (E e RS) e outros pinos, cuja funo alimentar o LCD, lu- de fundo
(oa:l||ga|) e fa-er o ajuste de contraste.
\eja como composto o LCD grfico baseado no contr
Hitachi
Desciio Iuno
DO a D7 aiianenlo de dados
L Chip LnalIe (CIock)
R/W Read(1) ou Wiile(O)
RS Resel (O)
VO Conliasle
VDD +5Vcc
VSS Teiia (CND)
|igura 11.2
C/FlIULC
85
10.
11.
12.
Olxpluy ICO


Os displays alfanumricos so muito utili-ados atualmente, graas a sua
interatiidade com nmeros e letras. Os modelos ariam de tamanho quanto ao
nmero de caracteres e quantidade de linhas para a eibio de informaes.

Disp|aq dc cris|a| |iquidc (|CD) 16x2.
Descrio da Pinagem dos LCD's
O LCD possui um barramento de dados de 8 bits (DB a DBy) que
pela transferncia de dados para o LCD, possui dois pinos de
controle (E e RS) e outros pinos, cuja funo alimentar o LCD, lu- de fundo
) e fa-er o ajuste de contraste.
\eja como composto o LCD grfico baseado no controlador HD4478O da

- Pinagcn dc |CD.
C/FlIULC
11

86
Dependendo do modelo, a pinagem do LCD pode sofrer uma ligeira ariao.
Estas ariaes se deem s conees com o oa:l||ga| (pinos 15 e 16) e por isso
no esto na figura anterior. Apesar das diferenas na pinagem, todos LCD's
tra-em sua respectia pinagem no erso do dispositio.



|igura 11.3 - Pinagcn dc disp|aq |CD.

11.3. Funcionamento no Modo 8 bits
Aps ligar o LCD, este precisar receber os comandos de iniciali-ao, na qual
definido o modo de operao de 4 ou 8 bits. !o modo 8 bits as informaes so
transmitidas atras de 8 pinos do barramento de dados (DO a D7). Alm
destes, so utili-ados mais 2 pinos para o controle do LCD (E e RS), totali-ando
a coneo de 1O pinos entre o LCD e o 8O51.

11.4. Funcionamento no Modo 4 bits
!o modo 4bits as informaes so transmitidas atras de 4 pinos do
barramento de dados (D4 a D7) juntamente com 2 pinos para o controle do
LCD (E e RS), totali-ando a coneo de 6 pinos entre o LCD e o 8O51. !este
modo, o LCD configurado para receber o dado em duas partes: Primeiro
recebe os 4 bits menos significatios (LSB - Less S|g|j|:a||ve o||s) e depois, os 4
bits mais significatios (MSB - Mos| S|g|j|:a||ve o||s). A utili-ao da
comunicao entre LCD e microcontrolador neste modo a mais comumente
utili-ada em projetos, deido a menor ocupao de /O's do chip e por isso, este
liro abordar o uso de LCD's no modo 4 bits.
Podemos trabalhar facilmente com displays de LCD utili-ando o arquio
header LCD.a LCD.a LCD.a LCD.a.

Este arquio implementa os comandos de iniciali-ao no modo bits, bem
como os comandos de enio de mensagens ao LCD.

A seguir temos o contedo do arquio LCD.h, o qual deer ser salo em
C:\8O51\SDCC\INCLUDL.
GND +Vcc

87

#define LCD_en P2_4
#define LCD_rs P2_5
#define LCD_DELAY 335 /* atraso de 1 miliseg */
#define LCD_clear() LCD_command(0x1) /* Limpa display LCD
#define LCD_row1() LCD_command(0x80) /* inicia na Linha 1 */
#define LCD_row2() LCD_command(0xC0) /* inicia na Linha 2 */

void LCD_delay(unsigned char ms){
unsigned char n;
unsigned int i;
for (n=0; n<ms; n++)for (i=0; i<LCD_DELAY; i++); /* 1 miliseg */
}

void LCD_enable(){
LCD_en = 0; /* desliga P2.4 */
LCD_delay(1);
LCD_en = 1; /* liga P2.4 */
}

void LCD_command(unsigned char command){
LCD_rs = 0; /* desliga P2.5 */
P2 = (P2 & 0xF0)|((command>>4) & 0x0F);
LCD_enable();
P2 = (P2 & 0xF0)|(command & 0x0F);
LCD_enable();
LCD_delay(1);
}

void LCD_putc(unsigned char ascii){
LCD_rs = 1; /* liga P2.5 */
P2 = (P2 & 0xF0)|((ascii>>4) & 0x0F);
LCD_enable();
P2 = (P2 & 0xF0)|(ascii & 0x0F);
LCD_enable();
LCD_delay(1);
}

void LCD_puts(unsigned char *lcd_string){
while (*lcd_string) LCD_putc(*lcd_string++);
}

void LCD_init(){
LCD_en = 1; /* liga P2.4 */
LCD_rs = 0; /* desliga P2.5 */
LCD_command(0x33);
LCD_command(0x32);
LCD_command(0x28);
LCD_command(0x0C);
LCD_command(0x06);
LCD_command(0x01); /* limpa LCD */
LCD_delay(256);
}

|igura 11.4 - Ccn|cudc dc arquitc |CD.n

O header LCD.a utili-a 6 pinos do Port Pa para coneo com o LCD conforme
o esquema a seguir:

|igura 11.5 - |squcna dc |iga5cs cn|rc |CD c 8051

11.5. Instrues e Funes de
O header LCD.h oferece um conjunto completo de comandos para manipulao
do LCD. \amos estud-las:

15.5.1. LCD_InIt()
Eecuta a rotina de iniciali-ao do LCD no modo bits. Durante a
iniciali-ao todos os caracteres so apagados da
uma alternatia eficiente para limpar o LCD
informaes na primeira linha do LCD

15.5.2. LCD_rnw1( )
Posiciona a escrita de informaes na primeira linha do LCD

15.5.3. LCD_rnw2( )
Posiciona a escrita de informaes na segunda linha do LCD.

15.5.4. LCD_putc()
mprime um caractere na primeira posio disponel da coluna definida pelo
comando LCD_iov1() ou LCD_iov
posicionado ao lado direito do anterior, deendo
88
Port Pa para coneo com o LCD conforme








|squcna dc |iga5cs cn|rc |CD c 8051
Instrues e Funes de Controle para o LCD
O header LCD.h oferece um conjunto completo de comandos para manipulao
Eecuta a rotina de iniciali-ao do LCD no modo bits. Durante a
iniciali-ao todos os caracteres so apagados da tela. Este comando tambm
uma alternatia eficiente para limpar o LCD e posicionar a escrita de
informaes na primeira linha do LCD.
Posiciona a escrita de informaes na primeira linha do LCD.
ta de informaes na segunda linha do LCD.
mprime um caractere na primeira posio disponel da coluna definida pelo
LCD_iov2(). Cada noo caractere eniado ao LCD
posicionado ao lado direito do anterior, deendo-se respeitar o limite de 16
8
0
5
1

89
caracteres. Caso este limite seja ultrapassado, os caracteres posteriores sero
ignorados pelo LCD, ou seja, no so eibidos na linha seguinte. Entretanto,
atras de estruturas if-else possel produ-ir este efeito (troca de linha
automtica).
A seguir temos alguns eemplos de uso da funo LCDputc( ).

#include<at89x52.h> //contm as definies do chip
#include<LCD.h> //contm as definies do LCD

void main(){
LCD_init(); //inicializa o LCD
LCD_row1(); //posiciona na linha 1
LCD_putc(A); //imprime a letra A
LCD_putc(B); //imprime a letra B ao lado de A
}

Prcgrana 11.1 - |unac |CD_pu|c()
O programa acima tem por finalidade, eibir as letras 'AB' lado a lado na
primeira linha do display.
Deido ao fato da funo LCDputc( ) suportar apenas um caractere, esta
utili-ada praticamente para a eibio de nmeros seguindo a coneno da
tabela ASC. \ejamos como so compostos os algarismos nesta tabela.
Valor enviado ao LCD Algarismo exibido no LCD
48 0
49 1
50 2
51 3
52 4
53 5
54 6
55 7
56 8
57 9

Taoc|a 11.1 - Taoc|a ASC||

9O
O conjunto de algarismos ( ) na tabela ASC esto defasados em 48
unidades do alor decimal. sto significa que para eibir um algarismo, o LCD
deer receber o numero acrescido de 48. Para eibir o nmero 1, o LCD deer
receber o alor 49 (48 + nmero) e assim por diante, ou seja, deemos somar o
numero 48 ao algarismo que desejamos eibir no LCD.
\eja o programa de eemplo abaio:

#include<at89x52.h> //contm as definies do chip
#include<LCD.h> //contm as definies do LCD
#include<delay.h>

void main(){
int contagem=0;
LCD_init(); //inicializa o LCD

while(contagem<10){
LCD_row1(); //posiciona na linha 1
LCD_putc(contagem+48); //imprime a varivel convertida
delay_ms(1000); //para ASCII
contagem++; //incrementa contagem
}
}


Prcgrana 11.1 - Ccn|adcr dc zcrc a nctc ccn cxioiac cn |CD

O programa acima iniciado com os arquios de definies do
microcontrolador, LCD e da base de tempo. !a funo a| temos a declarao
de uma ariel com o propsito de arma-enar o alor da contagem e em
seguida o display de LCD iniciali-ado (|CD_ini|). O comando wa||e controla
a quantidade de repeties da contagem, sendo que a cada repetio a eibio
posicionada na linha 1 (|CD_rcu 1), ento a ariel :o|age enidada ao
LCD atras do comando |CD_pu|c( ) juntamente com a soma de 48. sto
necessrio para que o alor da contagem seja conertido para o alor da tabela
ASC. O comando dc|aq_ns responsel por gerar uma pequena pausa no
processamento e depois a contagem incrementada, quando em seguida, temos
o final do bloco wa||e.


91
11.. Exerccio Resolvido
Contador de o a ,, com eibio em display de LCD.

#include<at89x52.h> //contm as definies do chip
#include<LCD.h> //contm as definies do LCD
#include<delay.h>

void main(){
int contagem=0;
LCD_init(); //inicializa o LCD

while(contagem<99){
LCD_row1(); //posiciona na linha 1
LCD_putc((contagem/10)+48);//imprime a dezena convertida
LCD_putc((contagem%10)+48);//imprime unidade convertida
delay_ms(1000); //para ASCII
contagem++; //incrementa contagem
}
}


Prcgrana 11.2 - Ccn|adcr ccn cxioiac cn |CD

!este programa, a diferena est em que a contagem ai at 99. Como a funo
LCDputc suporta apenas um caractere, necessrio diidir o alor da ariel
:o|age e arma-enar cada um, numa ariel distinta. Por eemplo:
Se conlagen = 1O, enlo: dezena=1, unidade=O
Se conlagen = 34, enlo: dezena=3, unidade=4

Para obter a de-ena da contagem: contagem/10;
Para obter a unidade contagem: contagem-(contagem/10); ou ento,
podemos utili-ar a operao MOD, a qual retorna o resto da diiso de um nmero:
Contagem%10;

15.5.5. LCD_puts()
mprime um teto na primeira posio disponel da coluna definida pelo
comando LCD_iov1() ou LCD_iov2(). Cada noa mensagem eniada ao
LCD eibida ao lado da anterior.

92
\eja os programas de eemplo abaio:

#include<at89x52.h> //contm as definies do chip
#include<LCD.h> //contm as definies do LCD

void main(){
LCD_init(); //inicializa o LCD
LCD_row1(); //posiciona na linha 1
LCD_puts(LCD Teste); //exibe o texto
}


Prcgrana 11.3 - |xioiac dc |cx|c nc |CD

#include<at89x52.h> //contm as definies do chip
#include<LCD.h> //contm as definies do LCD
#include<delay.h>

void main(){
int contagem=0;
LCD_init(); //inicializa o LCD

while(contagem<10){
LCD_row1(); //posiciona na linha 1
LCD_puts(Contagem: ); //exibe o texto
LCD_putc(contagem+48); //imprime a varivel convertida
delay_ms(1000); //para ASCII
contagem++; //incrementa contagem
}
}


Prcgrana 11.4 - Ccn|adcr ccn cxioiac cn |CD

#include<at89x52.h> //contm as definies do chip
#include<LCD.h> //contm as definies do LCD

void main(){
LCD_init(); //inicializa o LCD

while(1){
LCD_row1(); //posiciona na linha 1
if(P3_0==1) LCD_puts(P3.0 nivel alto);//se entrada P3.0
} //exibe mensagem no LCD
}


Prcgrana 11.5 - |xioc ncnsagcn sc a cn|rada P3.0 rcccocr nitc| |cgicc 1.


12.
13.
14.

1ubelu ASCII Stundurd e Ixtended

Binrio DecimaI Referncia

00000000 0 Null - NUL

00000001 1 Start of Heading - SOH

00000010 2 Start of Text - STX

00000011 3 End of Text - ETX

00000100 4
End of Transmission
EOT

00000101 5 Enquiry - ENQ

00000110 6 Acknowledge - ACK

00000111 7
Bell, rings terminal bell
BEL

00001000 8 BackSpace - BS

00001001 9 Horizontal Tab - HT

00001010 10 Line Feed - LF

00001011 11 Vertical Tab - VT

00001100 12 Form Feed - FF

00001101 13 Enter - CR

00001110 14 Shift-Out - SO

00001111 15 Shift-n - S

00010000 16 Data Link Escape - DLE

00010001 17 Device Control 1 - D1
/FENDlCE
93
12.
13.
14.
1ubelu ASCII Stundurd e Ixtended

SOH


End of Transmission -
ACK
bell -

DLE
D1

00010010 18 Device Control 2 - D2

00010011 19 Device Control 3 - D3

00010100 20 Device Control 4 - D4

00010101 21
Negative Acknowledge -
NAK

00010110 22
Synchronous idle -
SYN

00010111 23
End Transmission Block -
ETB

00011000 24 Cancel line - CAN

00011001 25 End of Medium - EM

00011010 26 Substitute - SUB

00011011 27 Escape - ESC

00011100 28 File Separator - FS

00011101 29 Group Separator - GS

00011110 30 Record Separator - RS

00011111 31 Unit Separator - US

00100000 32 Space - SPC

00100001 33 !

00100010 34 "

00100011 35 #

00100100 36 $

/FENDlCE
A

94

00100101 37 %

00100110 38 &

00100111 39 '

00101000 40 (

00101001 41 )

00101010 42 *

00101011 43 +

00101100 44 ,

00101101 45 -

00101110 46 .

00101111 47 /

00110000 48 0

00110001 49 1

00110010 50 2

00110011 51 3

00110100 52 4

00110101 53 5

00110110 54 6

00110111 55 7

00111000 56 8

00111001 57 9

00111010 58 :

00111011 59 ;

00111100 60 <

00111101 61 =

00111110 62 >

00111111 63 ?

01000000 64 @

01000001 65 A

01000010 66 B

01000011 67 C

01000100 68 D

01000101 69 E

01000110 70 F

01000111 71 G

01001000 72 H

01001001 73

01001010 74 J

01001011 75 K

01001100 76 L

01001101 77 M

01001110 78 N

01001111 79 O

01010000 80 P

01010001 81 Q

01010010 82 R

01010011 83 S

01010100 84 T

01010101 85 U

01010110 86 V

01010111 87 W

01011000 88 X

01011001 89 Y

01011010 90 Z

01011011 91 [

01011100 92 \

95

01011101 93 ]

01011110 94 ^

01011111 95 _

01100000 96 `

01100001 97 a

01100010 98 b

01100011 99 c

01100100 100 d

01100101 101 e

01100110 102 f

01100111 103 g

01101000 104 h

01101001 105 i

01101010 106 j

01101011 107 k

01101100 108 l

01101101 109 m

01101110 110 n

01101111 111 o

01110000 112 p

01110001 113 q

01110010 114 r

01110011 115 s

01110100 116 t

01110101 117 u

01110110 118 v

01110111 119 w

01111000 120 x

01111001 121 y

01111010 122 z

01111011 123 {

01111100 124 |

01111101 125 }

01111110 126 ~

01111111 127 Delete

10000000 128

10000001 129

10000010 130

10000011 131

10000100 132

10000101 133

10000110 134

10000111 135

10001000 136

10001001 137

10001010 138

10001011 139

10001100 140

10001101 141

10001110 142

10001111 143

10010000 144

10010001 145

10010010 146

10010011 147

10010100 148

96

10010101 149

10010110 150

10010111 151

10011000 152

10011001 153

10011010 154

10011011 155

10011100 156

10011101 157

10011110 158

10011111 159

10100000 160

10100001 161

10100010 162

10100011 163

10100100 164

10100101 165

10100110 166

10100111 167

10101000 168

10101001 169

10101010 170

10101011 171

10101100 172

10101101 173

10101110 174

10101111 175

10110000 176

10110001 177

10110010 178

10110011 179

10110100 180

10110101 181

10110110 182

10110111 183

10111000 184

10111001 185

10111010 186

10111011 187

10111100 188

10111101 189

10111110 190

10111111 191

11000000 192

11000001 193 -

11000010 194

11000011 195 [

11000100 196 -

11000101 197 [

11000110 198

11000111 199

11001000 200 =

11001001 201 y

11001010 202 =

11001011 203 y

11001100 204 y

97

11001101 205 =

11001110 206 y

11001111 207

11010000 208

11010001 209

11010010 210

11010011 211

11010100 212

11010101 213

11010110 214

11010111 215

11011000 216

11011001 217

11011010 218

11011011 219

11011100 220

11011101 221

11011110 222

11011111 223

11100000 224

11100001 225

11100010 226

11100011 227

11100100 228

11100101 229

11100110 230

11100111 231

11101000 232

11101001 233

11101010 234

11101011 235

11101100 236

11101101 237

11101110 238

11101111 239

11110000 240

11110001 241

11110010 242 _

11110011 243

11110100 244

11110101 245

11110110 246

11110111 247

11111000 248

11111001 249

11111010 250

11111011 251

11111100 252

11111101 253

11111110 254 u

11111111 255




15.
1.
17.

Gruvudnr vlu Pnrtu Purulelu cnm n xnItwure
AIC_ISP.IXI

Para graar o K1 de desenolimento utili-ando a porta paralela so
necessrios os seguintes itens:

Computador com porta paralela,
Kit de desenolimento,
Cabo de graao paralela,
Arquio .HEX gerado durante a compilao (e.: ]FE Editor)



Cabo de gravao paralela

Abaio apresentado o esquema de ligaes do cabo de graao paralela
(includo no K1 de treinamento)











|squcna dc |iga5cs dc caoc dc grataac tia pcr|a para|c|a





/FENDlCE
Iino 6
Iino 7
Iino 8
Iino 1O






98
15.
1.
17.
Gruvudnr vlu Pnrtu Purulelu cnm n xnItwure
AIC_ISP.IXI
Para graar o K1 de desenolimento utili-ando a porta paralela so
porta paralela,
Arquio .HEX gerado durante a compilao (e.: ]FE Editor)
Cabo de gravao paralela
Abaio apresentado o esquema de ligaes do cabo de graao paralela
|squcna dc |iga5cs dc caoc dc grataac tia pcr|a para|c|a

/FENDlCE
B
Iino 6 do D-25
Iino 7
Iino 8
Iino 1O
Iino 18

As |s|a|ar o a:o|e Je rograas


J|re|ae|e Jo s||e Je es|oJos O soj|ware AEC_ISP.EXE es|ar
|o:a||:aJo a as|a
Configurando o software de gravao AEC_ISP.EXE

O softare AECSP.EXE um programa gratuito desenolido pela empresa
AEC Eletronics, destinado eclusiamente a graao do microcontrolador
atras da porta paralela.


!ota




Acesse a pasta C:\8O51 e de um clique
duplo sobre o arquio AECSP.EXE. Em
seguida ser eibida a tela ao lado:




Para configurar o softare, pressione a
tecla 'S' para acessar o menu Se|o
eibida a tela a seguir:

nicialmente, realce a opo oJe|o (atras
das setas do teclado) e pressione E!1ER.
Em seguida realce a opo (3) AT89S52
pressione E!1ER noamente.



99
As |s|a|ar o a:o|e Je rograas 8051.|X|, oa|xaJo
J|re|ae|e Jo s||e Je es|oJos O soj|ware AEC_ISP.EXE es|ar
|o:a||:aJo a as|a C.8051.
software de gravao AEC_ISP.EXE
O softare AECSP.EXE um programa gratuito desenolido pela empresa
destinado eclusiamente a graao do microcontrolador
e de um clique
duplo sobre o arquio AECSP.EXE. Em


Tc|a principa| dc scf|uarc A|C_|SP.|X| .
Para configurar o softare, pressione a
Se|o. Ser




Mcnu S|TUP dc scf|uarc A|C_|SP.|X|.

(atras
e pressione E!1ER.
AT89S52 e


Dcfinindc c ncdc|c dc nicrcccn|rc|adcr .

Em seguida, ajuste as demais


configuraes do softare
conforme a tela ao lado. (utili-e as
setas cima e baio para naegar no
menu e pressione E!1ER para
modificar a opo desejada).

Logo aps, realce a opo Sa|var e
pressione E!1ER.

!o menu principal pressione a letra X para

Pronto! O AECSP.EXE est configurado.


Agora locali-e o arquio.HEX gerado
pelo ]FE Editor e arraste o cone de
para cima do cone do programa
AECSP.EXE. Ser eibida a
mensagem Aro|vo :arregaJo, ress|oe
oa |e:|a.


Para iniciar a graao, pressione a seguinte sequncia de teclas:

\amos analisar o significado desta sequncia de teclas:

Ao arrastar o arquio.HEX para cima do arquio AECSP.EXE, aparece a
mensagem Aro|vo :arregaJo, ress|oe oa |e:|a

!o eo principal, a tecla E inicia a graa
pressiona pressiona pressiona pressiona- -- -se E. se E. se E. se E.

Ao trmino da graao, aparece a mensagem
pressiona pressiona pressiona pressiona- -- -se . se . se . se .

Aps a graao, o pino de RESE1 do microcontrolador encontra
lgico r (HCH), ou seja, o microcontrol
de RESE1 em nel lgico -ero (LOV), necessrio pressionar a tecla
Ento pressiona Ento pressiona Ento pressiona Ento pressiona- -- -se . se . se . se .

Para encerrar o AECSP.EXE, pressiona pressiona pressiona pressiona
1OO
!o menu principal pressione a letra X para Sa|r do programa.
Pronto! O AECSP.EXE est configurado.
Agora locali-e o arquio.HEX gerado
pelo ]FE Editor e arraste o cone dele
para cima do cone do programa
AECSP.EXE. Ser eibida a
Aro|vo :arregaJo, ress|oe

Para iniciar a graao, pressione a seguinte sequncia de teclas: E E X
\amos analisar o significado desta sequncia de teclas:
Ao arrastar o arquio.HEX para cima do arquio AECSP.EXE, aparece a
ress|oe oa |e:|a - Ento pressiona Ento pressiona Ento pressiona Ento pressiona- -- -se E se E se E se E.
principal, a tecla E inicia a graao do microcontrolador - Ento Ento Ento Ento
Ao trmino da graao, aparece a mensagem Press|oe a|goa |e:|a - Ento Ento Ento Ento
Aps a graao, o pino de RESE1 do microcontrolador encontra-se em nel
(HCH), ou seja, o microcontrolador est resetado. Para colocar o pino
de RESE1 em nel lgico -ero (LOV), necessrio pressionar a tecla -
pressiona pressiona pressiona pressiona- -- -se X se X se X se X. .. .