Académique Documents
Professionnel Documents
Culture Documents
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
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:
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
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.
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.
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
(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.
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
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
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:
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.
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|).
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.
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
53
54
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.
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
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