Você está na página 1de 78

MICROCONTROLADOR

8051

Eng. Jefferson Couto

INDICE
1) SISTEMAS DE NUMERAO................................................................................................................................................... 3
1.1) SISTEMA BINRIO (BASE 2) ............................................................................................................................................ 3
1.2) SISTEMA HEXADECIMAL (BASE 16)................................................................................................................................ 4
1.3) FORMAS DE APRESENTAO ........................................................................................................................................ 4
1.4) CONVERSO DO SISTEMA BINRIO PARA O SISTEMA DECIMAL ............................................................................... 5
1.5) CONVERSO DO SISTEMA HEXADECIMAL PARA O SISTEMA DECIMAL .................................................................... 5
1.6) CONVERSO DO SISTEMA DECIMAL PARA O SISTEMA BINRIO ............................................................................... 5
1.7) CONVERSO DE DECIMAL PARA UMA BASE QUALQUER............................................................................................ 6
1.8) CONVERSO ENTRE AS BASES 2 E 16 .......................................................................................................................... 6
2) OPERAES ARITMTICAS NO SISTEMA BINRIO ............................................................................................................. 8
2.1) ADIO.............................................................................................................................................................................. 8
2.2) SUBTRAO ..................................................................................................................................................................... 8
2.3) COMPLEMENTO DE 2 ....................................................................................................................................................... 9
2.4) DESLOCAMENTO............................................................................................................................................................ 11
3) OPERAES LGICAS ......................................................................................................................................................... 12
3.1) AND.................................................................................................................................................................................. 12
3.2) OR .................................................................................................................................................................................... 13
3.3) NOT.................................................................................................................................................................................. 13
3.4) XOR.................................................................................................................................................................................. 14
4) TERMOS IMPORTANTES ....................................................................................................................................................... 16
5) MICROCONTROLADORES..................................................................................................................................................... 21
5.1) MICROPROCESSADOR: ................................................................................................................................................. 21
5.2) BARRAMENTOS DE UM MICROCONTROLADOR.......................................................................................................... 23
5.3) MODOS DE ATENDIMENTO DE I/O................................................................................................................................ 24
6) MICROCONTROLADOR 8031/8051........................................................................................................................................ 25
6.1) PINAGEM:........................................................................................................................................................................... 25
6.2) BARRAMENTO MULTIPLEXADO:............................................................................................................................................. 26
6.3) CLOCK NO 80C51............................................................................................................................................................ 27
................................................................................................................................................................................................ 28
6.4) RESET DO MICROCONTROLADOR ............................................................................................................................... 28
6.5) INTERRUPOES ............................................................................................................................................................. 30
................................................................................................................................................................................................ 33
6.6) INTERRUPO EXTERNA .............................................................................................................................................. 34
6.7) TEMPORIZADOR E CONTADOR .................................................................................................................................... 35
6.8) COMUNICAO SERIAL ................................................................................................................................................. 37
6.9) INTERFACE SERIAL NO 8051......................................................................................................................................... 38
6.10) TAXA DE TRANSMISSO PARA OS MODOS 1 E 3 .................................................................................................... 39
6.11) TABELA PRTICA COM TAXAS PARA O CRISTAL DE 11,0592 MHZ .......................................................................... 39
7) PROGRAMAO C PARA O MICROCONTROLADOR 8051.............................................................................................. 40
7.1) TIPOS DE VARIVEIS EM C ........................................................................................................................................... 41
7.2) OPERADORES ARITMTICOS ....................................................................................................................................... 41
7.3) OPERADORES LGICOS E RELACIONAIS ................................................................................................................... 42
7.4) OPERADORES DE MANIPULAO DE BIT ................................................................................................................... 42
7.5) DIRETIVAS FUNDAMENTAIS DO PR COMPILADOR................................................................................................ 43
7.6) CONTROLE DE FLUXO ................................................................................................................................................... 44
7.7) MAPA DE ALOCAO DE VARIVEIS NO 8051 ............................................................................................................ 50

8) AMBIENTE DE DESENVOLVIMENTO INTEGRADO ( IDE )................................................................................................... 51


8.1) MIDE-51 ........................................................................................................................................................................... 52
8.1.1) PRIMEIRO PROGRAMA ............................................................................................................................................... 53
8.1.2) COMPILANDO E CARREGADO O PROGRAMA .......................................................................................................... 54
8.1.3) CONFIGURANDO O EDITOR PARA A PLACA DIDTICA ........................................................................................... 55
8.2) W INLOADER51 ................................................................................................................................................................... 56
9) EXEMPLO DE PROGRAMAS PARA A PLACA DIDTICA PWLOADER51............................................................................ 60
9.1) ENTRADA DE DADOS PELO TECLADO E SADA PELO DISPLAY DE LCD ....................................................................................... 60
9.2) LEITURA NO CONVERSOR ANALGICO/DIGITAL (A/D) ............................................................................................................. 61
9.3) ESCRITA NO CONVERSOR ANALGICO/DIGITAL (D/A) ............................................................................................................ 64
9.4) PHASE WIDTH MODULATION ( PWM) ........................................................................................................................... 65
9.5) MEDIR LARGURA DE PULSO .................................................................................................................................................. 67
10) FUNES DA BIBLIOTECA PWLIB..................................................................................................................................... 69
11) INFORMAES SOBRE O KIT ............................................................................................................................................ 78

PROWARE PROJ. E SIST. ELETRNICOS

1) SISTEMAS DE NUMERAO
Existem vrios sistemas de numricos, dentre os quais se destacam o decimal, o
binrio, o octal e o hexadecimal.
O sistema decimal utilizado por ns no dia a dia, e sem dvida o mais
importante dos sistemas numricos, com os quais podemos formar qualquer nmero
atravs da lei de formao.

AnBn + An-1Bn-1 + An-2Bn-2 + ... + A0B0


Onde:

An = Algarismo
B = Base do nmero
n = quantidade de algarismos - 1
Ex: 25934
n = 5 -1 = 4
B = 10
A0 = 4; A1 = 3; A2= 9; A3 = 5; e A4 = 2
2.104 + 5.103 + 9.102 + 3.101 + 4.100
2.10000 + 5.1000 + 9.100 + 3.10 + 4.1 = 25934
1.1) SISTEMA BINRIO (BASE 2)

um.

O sistema binrio de numerao apresenta apenas dois algarismos, o zero e o

Cada algarismo ou dgito de um nmero binrio chamado de BIT que a


abreviao de BInary DigiT.
O conjunto de 4 bits denominado de NIBBLE, e o de 8 bits de BYTE.
O sistema binrio utilizado em sistemas digitais e em microprocessadores,
onde o 0 representado por 0V e o 1 geralmente por 5V.

Jefferson Leal Couto

Pgina

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


1.2) SISTEMA HEXADECIMAL (BASE 16)
O sistema hexadecimal possui 16 smbolos para representar qualquer
quantidade. Como so conhecidos apenas dez smbolos numricos ( 0 a 9), adotouse outros seis ( A a F).
O sistema hexadecimal tambm muito utilizado na rea de
microprocessadores, e tem uma estreita relao com o sistema binrio.

1.3) FORMAS DE APRESENTAO


DECIMAL:

1234d ou (1234)10

BINRIO:

0101b ou (0101)2

HEXADECIMAL:

9CF7h ou (9CF7)16
CONVERSO ENTRE BASES
DECIMAL
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

Jefferson Leal Couto

BINRIO
0
1
10
11
100
101
110
111
1000
1001
1010
1011
1100
1101
1110
1111
10000

Pgina

HEXADECIMAL
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS

1.4) CONVERSO DO SISTEMA BINRIO PARA O SISTEMA DECIMAL


Para converter um nmero binrio em decimal basta utilizar a lei de formao.
EX: Convertendo o nmero 101b em decimal:
n= 3 -1= 2
A0 = 1; A1 = 0 e A2 = 1
1.22 + 0.21 + 1.20 =
1.4 + 0.2 + 1.1 =
4+0+1=5
1.5) CONVERSO DO SISTEMA HEXADECIMAL PARA O SISTEMA DECIMAL
Para converter um nmero hexadecimal em decimal basta utilizar a lei de
formao.
EX: Convertendo o nmero ABh em decimal:
n= 2 -1= 1
A0 = 11(B) e A1 = 10(A)
10.161 + 11.160 = 171d
1.6) CONVERSO DO SISTEMA DECIMAL PARA O SISTEMA BINRIO
Quando trabalhamos com sistemas digitais, muitas vezes existe a necessidade
de convertermos os valores decimais em binrios.
Para converter um nmero decimal basta dividi-lo pela base 2 tantas vezes
quantas necessrias para que o quociente da diviso seja menor que a base 2. O
ltimo quociente da diviso e os restos das divises sucessivas, tomados na ordem
inversa, correspondem ao nmero na base 2.
EX: 129d = ?b

Jefferson Leal Couto

Pgina

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS

129d = 10000001b

1.7) CONVERSO DE DECIMAL PARA UMA BASE QUALQUER


Para converter de decimal para a base B basta utilizar o mtodo das divises
sucessivas dividindo o nmero pela base B

3882d = F2Ah
1.8) CONVERSO ENTRE AS BASES 2 E 16
Existe uma relao estreita entre os sistemas binrio e hexadecimal. Esta
relao vem do fato de que o nmero 16 pode ser escrito como 24. Os nmeros
hexadecimais podem ser vistos como uma forma compacta de representar os
nmeros binrios.
Para converter de binrio para hexadecimal devemos seguir os seguintes passos:
1) Divide-se o nmero em grupos de 4 algarismos da direita para a esquerda.
2) Converte-se cada grupo no seu equivalente em hexadecimal, conforme a tabela
dada anteriormente.
Ex: 1001 1010 0010 1110b
9
A
2
E h
A converso de hexadecimal para binrio realizada na seqncia inversa.

Jefferson Leal Couto

Pgina

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


1) Converte-se cada algarismo no seu equivalente em binrio utilizando sempre 4
algarsmos. Coloca-se zeros a esquerda quando necessrio.
2) Reune-se os grupos de 4 algarismos.
Ex: A2C7h = ?b
A
2
C
7
1010 0010 1100 0111
A2C7h = 1010001011000111b
Exerccios: Converter os nmeros na base solicitada.
1) 23Fh = ?d
2) 47d = ?b
3) 11010011b = ?d
4) 11100010b = ?h
5) A2Ch = ?d
6) 2DAh = ?b
7) 1110 0001b = ?d
8) 352d = ?h
9) 510d = ?h
10) 120d = ?b

Jefferson Leal Couto

Se voc est confuso e no sabe qual o mtodo


usado para fazer a converso, lembre-se:
Para converter de binrio ou hexadecimal
para decimal utilize a lei de formao.
Para converter de decimal para hexadecimal
ou binrio faa divises sucessivas.
Para converter entre binrio e hexadecimal
utilize a tabela.

Pgina

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


2) OPERAES ARITMTICAS NO SISTEMA BINRIO
2.1) ADIO
Para efetuarmos a adio no sistema binrio, devemos agir como numa adio
convencional do sistema decimal. Convm observar que no sistema decimal 1+1 = 2d
e no sistema binrio como temos apenas dois algarismos
1+1 = 0 e transporta 1.
A operao de transporte tambm denominada carry.
Ex: 11b + 10b

Ex: 110b + 111b

2.2) SUBTRAO
O mtodo de resoluo anlogo a uma subtrao no sistema decimal.
importante observar o caso 0 - 1, onde o resultado ser igual a 1 porm
haver um transporte para a coluna da esquerda que deve ser acumulado (somado)
no subtraindo e, obviamente subtrado do minuendo.
A este estouro d-se o nome de borrow.

Jefferson Leal Couto

Pgina

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


Ex: 1000 - 0011

2.3) COMPLEMENTO DE 2
Uma forma para representar nmeros binrios negativos bastante utilizada nos
sistemas j citados a notao de complemento de 2 (C2), mas para obt-la,
devemos primeiramente converter o nmero na notao de complemento de 1.
A obteno do complemento de um ( C1) de um nmero binrio se d pela
troca de cada bit do nmero pelo seu inverso ou complemento.
Binrio:
1011
Complemento 1: 0 1 0 0
A notao de complemento de 2 utilizada para representar nmeros binrios
negativos. Para obter basta somar 1 ao complemento de 1 do nmero binrio inicial.
Decimal
Binrio
Comp. 2

Jefferson Leal Couto

-1
- 0001
1111

-2
- 0010
1110

Pgina

-4
- 0100
1100

-8
- 1000
1000

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


O mtodo do complemento de 2 muito til nas operaes de subtrao.
Ex: Subtrao do binrio 1110 - 0011 em complemento de 2

Ex: Subtrao de 0101 - 1100

Como o resultado negativo para obtermos o mdulo devemos fazer o C2 da adio


para obtermos o mdulo da subtrao de 0101 - 1100. Portanto teremos:
0110 (C1) + 1 = 0111

Jefferson Leal Couto

Pgina

10

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


2.4) DESLOCAMENTO
Deslocando-se os algarismos de um nmero para a sua esquerda, o resultado
ser o nmero multiplicado pela sua base.
Ex:

O nmero que inicialmente era 0010 ( 2d) foi multiplicado pela sua base (2), que
resultou no binrio 0100 (4d).
De forma anloga se deslocarmos os algarismos de um nmero para a direita,
o resultado ser a diviso do nmero pela sua base.
Ex:

O binrio 1000 que representa 8d como foi deslocado para a direita resultou em 0100
que representa 4d, portanto podemos verificar que o nmero foi dividido pela base 2.

Jefferson Leal Couto

Pgina

11

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


3) OPERAES LGICAS

3.1) AND
Esta funo executa a multiplicao de duas ou mais variveis booleanas. Sua
representao algbrica para duas variveis S = A.B, onde se l S = A e B.

A
0
0
1
1

B
0
1
0
1

S
0
0
0
1

Jefferson Leal Couto

Pgina

12

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


3.2) OR
A funo OR aquela que assume valor 1 quando uma ou mais entradas
forem iguais a um e assume valor zero se todas as entradas forem zero.
Sua representao algbrica para duas variveis de entrada S = A + B, onde
se l S = A ou B.

A
0
0
1
1

B
0
1
0
1

S
0
1
1
1

3.3) NOT
A funo not inverte ou complementa o estado da varivel, ou seja, se a
varivel estiver em zero, a sada vai para 1, e se estiver em 1, a sada vai a zero.
representada algebricamente da seguinte forma S = /A, onde se l no A.

A
0
1

S
1
0

Jefferson Leal Couto

Pgina

13

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


3.4) XOR
A funo lgica xor, tambm conhecida como ou-exclusivo, apresenta como
resultado nvel lgico 1 sempre que existir um nmero impar de nveis lgicos 1 nas
entradas. A sua representao algbrica a seguinte S = A B.

A
0
0
1
1

B
0
1
0
1

S
0
1
1
0

A funo xor utilizada para gerar PARIDADE PAR, onde este um dos
mtodos para deteco de erro em comunicao digital.

Jefferson Leal Couto

Pgina

14

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS

Exerccios: Obtenha o resultado lgico em hexadecimal para as seguintes operaes:


1) 10d AND 4d
2) 3Fh OR 80h
3) 1001b XOR 1010b
4) 13d OR 9Ch
5) 11000010 AND FFh
6) 24h OR 0d
7) 82h XOR 13h
8) 10101010 AND 55h
9) 5d OR 3h
10) 10111100 AND 00001010
11) NOT 5Ah
12) NOT 13d

Jefferson Leal Couto

Pgina

15

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


4) TERMOS IMPORTANTES
4.1) BUFFER: Em geral, chamamos de buffer o circuito que tem por objetivo o
armazenamento temporrio de informaes.
4.2) DRIVER: Amplificador de corrente. Usado quando temos que ampliar a
capacidade de fornecimento de uma porta.
4.3) FIRMWARE: Programa associado a um hardware para a execuo de funes
especficas. Ex: programa gravado em eprom
4.4) TRI-STATE: Nome dado, quando o sistema est fisicamente ligado, porm no
interfere no sistema devido a alta resistncia apresentada.
4.5) LATCH: Componente eletrnico que tem a funo de trava de informaes. O
latch funciona como uma porta, que estando ativa, deixa passar a informao
presente em suas entradas, e se inativa, faz com que a informao na sada no se
altere, independente das alteraes na entrada.
4.6) MAPEAMENTO REDUNDANTE: Cada endereo decodificado no nico. O
decodificador projetado para separar apenas os dispositivos entre si. Este tipo
apresenta hardware menos complexo.
4.7) MAPEAMENTO NO REDUNDANTE: Cada endereo decodificado nico.
Constri-se o decodificador utilizando o menor espao de memria. Este tipo de
decodificao necessita de um hardware bastante complexo.
4.8) CHIP SELECT (/CS): Este pino est presente na grande maioria dos dispositivos
associados a microprocessadores.
Como todos os dispositivos (EPROM, RAM, I/O) esto ligados via de dados
(D0 ... D7), os mesmos devem estar sempre em alta impedncia para evitar que
enquanto um bit esteja em 0, outro esteja em 1, ocasionando um conflito e at
mesmo danificando o sistema.
Normalmente todos os dispositivos esto com o /CS em 1, e somente ir a 0
aquele dispositivo que est sendo acionado e apenas durante o tempo necessrio.
Estes tempos e esta seleo so efetuados por circuitos lgicos conhecidos
como DECODIFICADORES DE ENDEREO.

Jefferson Leal Couto

Pgina

16

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


EX: Projetar um decodificador para I/O mapeado em memria nas seguintes
configuraes:
A) 32K bytes de RAM, 32K bytes para I/O mapeamento redundante.
A.1) Utilizando portas lgicas
A15 = 0 32k inferior
A15 = 1 32k superior

A.2 ) Utilizando o 74139


Tabela verdade:
A
0
0
1
1

B
0
1
0
1

Y0
0
1
1
1

Y1
1
0
1
1

Jefferson Leal Couto

Y2
1
1
0
1

Y3
1
1
1
0

Pgina

17

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


A.3 ) Utilizando apenas 2 decodificador 74139

A.4 ) Utilizando apenas 1 decodificador 74139

Jefferson Leal Couto

Pgina

18

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


B) 32K RAM, 32K para I/O com mapeamento redundante nos endereos 8000H e
8001H
B.1 ) Utilizando portas lgicas

B.2 ) Utilizando o 74139

C) 32K RAM, 32K para I/O com mapeamento no redundante nos endereos 8000H
e 8001H

Jefferson Leal Couto

Pgina

19

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


Exerccios:
1) Projetar um decodificador com 16K de RAM e 48K bytes de I/O, mapeando 16K
para cada dispositivo. Mapeamento redundante.
2) Projetar um decodificador com 16K de RAM e os endereos 8000, A000 e C000
para I/O mapeamento redundante.
3) Projetar um decodificador de I/O mapeado em memria com 24K de RAM e o
restante em 3 endereos para I/O. Mapeamento redundante.
3.1) Utilizar o 74xx139
3.2) Utilizar o 74xx138
4) Projetar um decodificador de I/O mapeado em memria com 32K de RAM e os
endereos 8000h, 8004h, 8008h e 800Ch para I/O.
4.1) Utilizar o 74xx139
4.2) Utilizar o 74xx138
5) Projetar um decodificador com 32K de RAM e 8 sadas para I/O. Mapeamento
redundante:
5.1) Utilizar o 74xx139
5.2) Utilizar o 74xx138

A maior dificuldade em projetar um decodificador que no existe uma formula ou


receita pronta. Um bom projeto, depende basicamente de experincia e conhecimento
de circuitos digitais. Algumas dicas que podero ajudar.
Em mapeamento redundante, devemos analisar o menor espao de memria
utilizado no projeto e ento definir a quantidade de endereos do barramento que
sero necessrios. O 8051 acessa 64K de memria RAM com seus 16 endereos.
Em mapeamento no redundante devemos utilizar sempre todos os endereos para
mapear o dispositivo de I/O, pois o endereo especfico.

Jefferson Leal Couto

Pgina

20

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


5) MICROCONTROLADORES
5.1) MICROPROCESSADOR:
uma mquina seqencial que executa um conjunto de comandos (instrues )
previamente gravados em uma memria (ROM). Embora todos os
microprocessadores utilizem um sinal de clock, comum encontrar na literatura, a
classificao de microprocessadores sncronos e assncronos.
Com a evoluo tecnolgica, principalmente na confeco de CIs, os
fabricantes de microprocessadores comearam a incorporar memrias e dispositivos
perifricos na mesma pastilha de seus microprocessadores. Surgiram ento os
microcontroladores.
Uma vez que incorporam grande parte dos dispositivos perifricos, a
construo de um sistema baseado em um microcontrolador, freqentemente se
resume a um circuito com um cristal, um boto de reset e a memria de programa.

Arquitetura Von Nuemann - A maioria dos microprocessadores segue esta


arquitetura. O microprocessador composto por um conjunto de blocos funcionais,
controlados por uma mquina seqencial que determina os tempos em que cada
sinal de controle est presente nos barramentos internos e externos. importante
ressaltar que nesta arquitetura no temos distino entre a memria de programa e
dados.
Para caracterizar uma arquitetura Von Nuemann o processador deve atender trs
postulados:
1) Um nico controle central.

Jefferson Leal Couto

Pgina

21

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


2) Uma nica memria para programa e dados
3) As instrues devem fazer operaes elementares sobre os dados.
O Z80 um exemplo de processador que utiliza arquitetura Von Nuemann.

Arquitetura Harvard Esta arquitetura apresenta memrias distintas para programa


e dados, isto , o processador projetado para gerar sinais de leitura e escrita
distintos para cada memria. Uma das vantagens desta arquitetura, evitar que a
memria se torne o fator limitante no desempenho do processador. Alguns
processadores mais modernos j utilizam esta arquitetura. O 8051 um exemplo.
Destas arquiteturas surgiram duas tendncias:
RISC - Reduce Instruction Set Computer
CISC - Complex Instruction Set Computer

A CPU do tipo CISC possui um conjunto muito grande de instrues (8051, Z80).
VANTAGENS: Possibilita a confeco de programas enxutos. Grande nmero de
modos de endereamento. Uma instruo executa muitas tarefas.
DESVANTAGEM: Difcil memorizao dos comandos. Instrues com diferentes
tamanhos de ciclos de mquina. Subutilizao da CPU. Difcil depurao.
A CPU do tipo RISC possui um conjunto de instrues reduzido.
VANTAGEM: Fcil memorizao, rapidez, fcil depurao.
DESVANTAGEM: Programa muito extenso. Nmero reduzido de registradores e
modos de endereamento. Muitas instrues para realizar uma tarefa simples.

Jefferson Leal Couto

Pgina

22

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


5.2) BARRAMENTOS DE UM MICROCONTROLADOR

Barramento de endereo: Barramento unidirecional, por onde trafega os sinais que


endeream os dispositivos de memria e I/O. Em geral, os microprocessadores de 8
bits endeream 64 Kbytes de memria.

Barramento de dados: Barramento bidirecional por onde trafegam dados entre os


dispositivos externos e o microcontrolador. O tamanho deste barramento define o
tamanho do microcontrolador. O 8051 de 8 bits.

Barramento de controle:
dispositivos externos.

Jefferson Leal Couto

Barramento por onde o microcontrolador controla os

Pgina

23

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


5.3) MODOS DE ATENDIMENTO DE I/O

Pooling: Neste tipo de atendimento, a CPU fica constantemente questionando o


dispositivo de I/O se o mesmo necessita receber ou enviar um dado.
Este tipo de atendimento fcil de implementar, porm desperdia o tempo da
CPU.
Interrupo: Neste tipo de atendimento, a CPU avisada pelo dispositivo de I/O, que
o mesmo necessitam receber ou enviar dados.
Este tipo de atendimento mais complexo, tendo como vantagem no
desperdiar o tempo da CPU.
Como um evento assncrono, a CPU sempre atende no momento solicitado.
Necessita de um hardware adicional.
DMA (Direct Memory Acess) : Este tipo de atendimento o mais complexo, porm o
mais rpido. O dispositivo de I/O solicita os barramentos da CPU (Tri - State) e
acessa diretamente a memria, transferindo ento os dados. Nem toda a CPU
suporta este tipo de atendimento.

Jefferson Leal Couto

Pgina

24

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


6) MICROCONTROLADOR 8031/8051

6.1) Pinagem:

Jefferson Leal Couto

Pgina

25

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


6.2) Barramento Multiplexado:
Para evitar que o chip tenha mais que 40 pinos, a Intel adotou a soluo de
multiplexar no mesmo barramento os dados e endereo.

Desta forma, devemos utilizar a seguinte ligao para obter as 16 linhas de


endereos e 8 de dados no 8051.

Jefferson Leal Couto

Pgina

26

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


6.3) CLOCK NO 80C51
Existem duas formas de gerar circuito de clock no microcontrolador. O clock pode ser
externo ou interno.
uso do clock externo interessante quando temos outros dispositivos que utilizam um
sinal TTL para gerar sua base de tempo. Sua implementao resume-se em colocar o
pino 19 (XTAL1) no nvel de terra e injetar o sinal externo no pino 18 (XTAL2), que ir
diretamente para o sistema de controle e temporizao do chip.

Para utilizar o clock interno, devemos colocar entre os pinos 18 e 19 um cristal ou um


ressonados cermico (o oscilador com cristal mais estvel e preciso ) na freqncia
desejada e dois capacitores de realimentao. Geralmente utilizamos capacitores
entre 27 e 33pF.

Jefferson Leal Couto

Pgina

27

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


O clock do microcontrolador chamado de ciclo de clock e ele a referncia ou
base para gerao do ciclo de mquina. O ciclo de mquina calculado dividindo a
freqncia do cristal por 12 (doze) no 80C51.
Para um sistema utilizando um cristal de 12Mhz, teremos um ciclo de mquina de
1Mhz, isto , o microcontrolador ir executar a seqncia de busca, decodificao e
execuo em tempos de no mnimo 1s.
Lembre se, o ciclo de clock depende basicamente do
cristal utilizado na CPU e o ciclo de mquina determina
o tempo necessrio para executar as instrues. No 8051
o Ciclo Mquina = Ciclo de clock / 12

6.4) RESET DO MICROCONTROLADOR


O reset no 80C51 ativado quando o pino 9 (RST) permanece em nvel lgico 1 por 2
ou mais ciclos de mquina. Neste caso a CPU executa o chamado reset interno, que
consiste em inicializar seus registros internos com valores predeterminados:
O PC, o ACC (acumulador), o registro B (Auxiliar), os Flags, O DPTR e todos os
registros de temporizao e contagem sero zerados.
O SP (stack pointer - pilha) carregado com o valor 07H.
As portas P0 a P3 tero o valor FFH.
O SBUF (buffer serial) estar com um valor indeterminado e o registro de controle
da porta serial - SCON ser zerado.
O registro PCON ter apenas seu bit mais significativo zerado.
Os registradores de interrupo IE (Interrupt Enable) e IP (Interrupt Priorit) tero o
valor XXX00000, onde X representa um valor irrelevante (Dont Care)
A memria interna no afetada pelo reset forado, sendo que ao ligar seu valor
aleatrio.

Jefferson Leal Couto

Pgina

28

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


Ao inicializarmos um sistema necessrio que uma seqncia de funes sejam
executadas, desta forma podemos afirmar que nosso sistema ir executar as tarefas
para o qual foi projetado.
Toda vez que realizamos um reset no 8051, ele ir comear a executar o software a
partir do endereo 0000H da memria de programa. Geralmente esta rotina
conhecida como Inicializao do sistema.
O microcontrolador pode ser resetado automaticamente toda vez que a fonte ligada.
Normalmente utilizamos um resistor de 10K entre o pino do reset e o terra, e um
capacitor de 10F entre o VCC e o pino de reset.

Jefferson Leal Couto

Pgina

29

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


6.5) INTERRUPOES
A interrupo , uma das formas mais importantes de atendimento aos dispositivos
de I/O. Este recurso permite interromper o fluxo normal de execuo do firmware para
a execuo de um fluxo especfico do programa.
No 8051, temos trs fontes geradoras de interrupo, a interrupo de software
(instruo) a solicitada por um perifrico externo e a interrupo gerada por
dispositivos internos do processador (timer, serial, etc).
Para o bom entendimento deste recurso, devemos esclarecer alguns conceitos:
Mascaramento - a capacidade de inibir, geralmente via software que uma
determinada interrupo seja atendida.
Prioridade - Define o grau ou a preferncia que uma determinada interrupo ser
executada.
Interrupo vetorada ou no vetorada - Define se ao atender uma interrupo o
microcontrolador ir executar uma rotina em um endereo fixo de memria e que no
pode ser alterado, ou se o programa ir para um endereo definido pelo programador.
O 8051 possui todas as suas interrupes vetoradas, isto , com o endereo de
desvio determinado pelo fabricante do componente.
Ativao - Existem trs formas que o sistema pode reconhecer uma interrupo:
pelo nvel (alto ou baixo)
pela borda (subida ou descida)
pela combinao de borda e nvel.

No 8051, todas as interrupes so


mascarveis e vetoradas.

O 8051 possui 5 formas de interrupo:


Interrupo externa 0 - INT0\
Interrupo externa 1 - INT1\
Interrupo do timer\contador 0 - T0
Interrupo do timer\contador 1 - T1
Interrupo do canal serial - TI ou RI

Jefferson Leal Couto

Pgina

30

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


Sendo que cada uma destas interrupes ser desviada para os seguintes
endereos:
INT0\ . 03H
T0 . 0BH
INT1\ .. 13H
T1 1BH
TI - RI . 23H

A seguir temos um mapa parcial da memria de programa do 8051 com seus


respectivos endereos de interrupo e reset.

Jefferson Leal Couto

Pgina

31

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


O processador possui um recurso de prioridade interna, que permite determinar qual
interrupo ser atendida ou se uma interrupo em andamento dever ser
interrompida para o atendimento de outra de maior prioridade.

Para determinar quais interrupes estaro habilitadas, devermos escrever no


registrador especial IE - (Interrupt Enable) do SFR.

EA - Localizado no bit 7 do IE, Habilita todas as interrupes quando em nvel lgico


1, desde que estas estejam habilitadas individualmente. Quanto em nvel lgico 0,
desabilita todas as interrupes, mesmo que estejam ativadas individualmente.
ES - Localizado no bit 4 do IE, Habilita a comunicao serial quando em nvel lgico 1
e desabilita em nvel lgico 0 mesmo que o bit EA esteja ativado.
ET1 - Localizado no bit 3 do IE, Habilita o timer/conter 1 quando em nvel lgico 1 e
desabilita em nvel lgico 0 mesmo que o bit EA esteja ativado.
EX1 - Localizado no bit 2 do IE, Habilita a interrupo externa 1 quando em nvel
lgico 1 e desabilita em nvel lgico 0, mesmo que o bit EA esteja em 1.
ET0 - Localizado no bit 1 do IE, Habilita o timer/conter 0 quando em nvel lgico 1 e
desabilita em nvel lgico 0 mesmo que o bit EA esteja ativado.
EX0 - Localizado no bit 0 do IE, Habilita a interrupo externa 0 quando em nvel
lgico 1 e desabilita em nvel lgico 0, mesmo que o bit EA esteja em 1.
Para alterar a seqncia padro de prioridade das interrupes devemos habilitar os
bit`s do registrador IP (Interrupt Priorit)

Jefferson Leal Couto

Pgina

32

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS

Onde,
PS - Localizado no bit 4, seleciona prioridade da serial. Quanto em 1 define como alta
a prioridade da serial.
PT1 - Localizado no bit 3, seleciona prioridade do timer1. Quanto em 1 define como
alta a prioridade do timer 1.

PX1 - Localizado no bit 2, seleciona prioridade da interrupo externa 1. Quanto em 1


define como alta a prioridade da interrupo externa 1.
PT0 - Localizado no bit 1, seleciona prioridade do timer0. Quanto em 1 define como
alta a prioridade do timer 0.
PX0 - Localizado no bit 0, seleciona prioridade da interrupo externa 0. Quanto em 1
define como alta a prioridade da interrupo externa 0.
Um certo tempo ir decorrer entre o reconhecimento da
interrupo pelo processador e o efetivo desvio para o respectivo
vetor. No melhor caso teremos um atraso de 3,2 ciclos de mquina
e no pior caso teremos um atraso de 7,2 ciclos de mquina.

Jefferson Leal Couto

Pgina

33

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


6.6) INTERRUPO EXTERNA
As interrupes externa0 e externa1 podem ser configuradas para reconhecer uma
transio de 1 para 0 (borda de descida) ou um nvel lgico 0. A configurao deste
controle feito no registrador TCON (Timer Control) atravs do nibble menos
significativo.

Onde,
IT0 - Localizado no bit 0 de TCON. Quando em nvel lgico 0 a interrupo Externa0
ser aceita simplesmente pela presena do nvel zero no pino. Quando em nvel
lgico 1 a interrupo ser aceita quanto ocorrer uma transio de 1 para 0 e o sinal
permanecer em zero por pelo menos 1ciclo de mquina.
IE0 - Localizado no bit 1 de TCON. setado pelo hardware interno quando for
detectado um pedido de interrupo. resetado quando a interrupo for atendida.
IT1 - Localizado no bit 2 de TCON. Quando em nvel lgico 0 a interrupo Externa1
ser aceita simplesmente pela presena do nvel zero no pino. Quando em nvel
lgico 1 a interrupo ser aceita quanto ocorrer uma transio de 1 para 0 e o sinal
permanecer em zero por pelo menos 1ciclo de mquina.
IE1 - Localizado no bit 3 de TCON. setado pelo hardware interno quando for
detectado um pedido de interrupo. resetado quando a interrupo for atendida.

Jefferson Leal Couto

Pgina

34

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


6.7) TEMPORIZADOR E CONTADOR

O 8051 possui 2 T/C (timer/conter) que so configurados atravs do firmware e


podem operar de maneira totalmente independente dos demais recursos do chip. Os
dois T/C podem ser ativados ou desativados pelo hardware ou pelo software,
dependendo da configurao adotado pelo projetista.
No nibble mais significativo de TCON podemos ativar ou desativar os T/C`s como
veremos a seguir:

Onde,
TF1 - setado pelo hardware sempre que ocorrer um overflow (estouro no contador)
no T/C1. resetado ao final da rotina de interrupo de T/C1.
TR1 - Quando em nvel lgico 1 ir ligar o T/C1, e quando em zero o mesmo ser
desligado.
TF0 - setado pelo hardware sempre que ocorrer um overflow (estouro no contador)
no T/C0. resetado ao final da rotina de interrupo de T/C0.
TR0 - Quando em nvel lgico 1 ir ligar o T/C0, e quando em zero o mesmo ser
desligado.
Para realizar a configurao do modo de funcionamento do temporizador/contador
devemos manipular os bit`s de TMOD.

Onde,
Gate0; Gate1 Definem como o timer/contador ir funcionar. Quando este bit estiver
em nvel lgico 1 o timer/contador ser ativado se TRn e o pino INTn forem 1. Esta
configurao bastante til quando queremos medir largura de pulso externo.
Quando este bit estiver em nvel lgico 0 o timer/contador ser ativado simplesmente
colocando TRn em 1.

Jefferson Leal Couto

Pgina

35

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


C/T0;C/T1 - Definem a fonte do sinal de clock. Quando em nvel lgico 0 ele ter a
funo de timer e a base de tempo ser o clock do cristal. Quando este bit estiver em
1 ele estar operando como contador e o clock ser os pulsos presentes no pino Tn
M1-x;M0-x - Determinam o modo como ir operar o Timer/contador, como veremos a
seguir:

MODO 0 - Temporizador/Contador de 8 bit`s com divisor de freqncia de at 32


vezes. Neste modo o TL0 ou TL1 servem como prescaler do divisor e os
registradores TH0 e TH1 como contador de 8 bit`s.
MODO 1 - Temporizador/Contador de 16 bit`s. Neste modo o TLn e THn formam um
par de forma a obter um registrador de 16 bit`s. Neste modo podemos contar at
65535, com o valor inicial programvel por software.
MODO 2 - Contador/Temporizador de 8 bit`s com recarga automtica. Neste modo o
registrador TLn realiza a contagem e o registrador THn possui o valor que ser
recarregado em TLn sempre que ocorrer um overflow (estouro do contador). Os
registradores podem ser alterados por software a qualquer momento, tornando
bastante flexvel o uso.
MODO 3 - Intervalador ou contador de eventos em 8 bit`s e temporizador de 8 bit`s.
OBS: Este modo no muito usual e no ser estudado.

Jefferson Leal Couto

Pgina

36

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


6.8) COMUNICAO SERIAL
Na comunicao serial, a transmisso de um byte feita pelo envio seqencial de
cada bit, um aps o outro.
Para permitir a comunicao entre os sistemas, criou-se um cdigo binrio para cada
caractere de forma a existir uma padronizao entre os sistemas. Este cdigo
conhecido por ASCII ( American Standart Code for Interchange of Information). Neste
cdigo, cada caractere possui seu valor em binrio, incluindo os caracteres de
controle e especiais, totalizando 256 smbolos.

O modo mais utilizado de comunicao entre sistemas de controle e automao o


sistema assncrono. Neste modo no h necessidade de gerarmos o sincronismo
(sinal de clock entre os sistemas). Neste modo cada caractere transmitido
individualmente, e para caractere enviado um bit de incio da transmisso (start bit)
e um de final de transmisso (stop bit).

Existem, trs formas de interligar os sistemas digitais (considerando apenas os sinais


de dados):
A) Simplex: A comunicao feita apenas em um sentido
B) Half Duplex: A comunicao feita nos dois sentidos, mas no simultnea
C) Full Duplex: Comunicao nos dois sentidos e de forma simultnea.

Jefferson Leal Couto

Pgina

37

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS

6.9) INTERFACE SERIAL NO 8051


No 8051 temos uma interface serial do tipo full duplex. Desta forma, sistemas de
comunicao podem enviar e receber dados de forma simultnea com o
microcontrolador. Para este fim, o 8051 possui um registrador chamado SBUF(Serial
Buffer).Quando queremos enviar uma informao pelo canal serial devemos escrever
o byte no SBUF, e quando desejamos receber o byte pelo microcontrolador devemos
ler o SBUF. Pode parecer que ele possui apenas um registrador para Tx e Rx, mas
na verdade existem dois registradores com o mesmo nome e que sero reconhecidos
pelo sistema atravs da instruo assembler.
Para fazer e analisar a configurao da serial devemos acessar o registrador SCON
(Serial Control) como veremos a seguir.

Onde,
RI - setado pelo hardware ao receber o oitavo bit no modo sncrono ou no meio do
stop bit no modo assncrono. Deve ser zerado para permitir que sejam geradas novas
interrupes.
TI - setado pelo hardware ao transmitir o oitavo bit no modo sncrono ou no incio
do stop bit no modo assncrono. Permite que a transmisso dos dados seja
independente do fluxo principal do programa. Deve ser zerado para permitir que
sejam geradas novas interrupes.
RB8 - No modo 0 indica o estado do stop bit Nos modos 2 e 3 indica o estado do
nono bit recebido.
TB8 - Nos modos 2 e 3 usado para transmitir o nono bit.
REN - Habilita a recepo serial. Se estiver zerado a recepo estar desabilitada e o
pino RXD pode ser usado como pino de I/O
SM2 - No modo 0 deve permanecer zerado. No modo 1 no gera pedido de
interrupo se estiver setado e o stop bit for invlido. Nos modos 2 e 3 permite a
interligao entre vrios 8051

Jefferson Leal Couto

Pgina

38

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


SM1,SM0 - A combinao destes bits fornece o modo de funcionamento da serial:
SM0
0
0
1
1

SM1
0
1
0
1

MODO
0
1
2
3

Taxa de comunicao
Fclock / 12
Varivel (Conforme Timer1)
Fclock / 32 ou Fclock / 64
Varivel (Conforme Timer1)

O modo 0 usado para comunicao serial sncrona e os demais para comunicao


assncrona. No modo 1 so transmitidos 8 bits de dados, 1 stop bit e o start bit. No
modo 3 aps os 8 bits de dados transmitido um nono bit.

6.10) TAXA DE TRANSMISSO PARA OS MODOS 1 E 3

Frequncia( Mhz).106
TH 1 = 256
384.Taxa( BPS )

2 SMOD .Frequncia
TAXA =
384 ( 256 THI )
6.11) TABELA PRTICA COM TAXAS PARA O CRISTAL DE 11,0592 Mhz

TAXA (BPS)
300
1200
2400
4800
9600

VALOR RECARGA(TH1)
160
232
244
250
253

Os valores da tabela foram calculados para SMOD = 0.

Jefferson Leal Couto

Pgina

39

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


7) PROGRAMAO C PARA O MICROCONTROLADOR 8051
Existem basicamente trs linguagens de programao que so utilizadas com o 8051,
o BASIC, ASSEMBLY e o C. Nos ltimos cinco anos, a programao de
microcontroladores em linguagem C tem sido adotada pela maioria das empresas
devido as facilidades para programao e ao nvel de portabilidade apresentada.
Muitos livros ensinam a programao padro ANSI C, porm devemos tomar o
cuidado ao utilizar este tipo de bibliografia, pois ela aborda a programao para o PC.
Funes do tipo printf, scanf, sprintf entre outras, geralmente no esto
disponveis para o projetista ou apresentam um comportamento diferente quando
utilizamos o compilador para microcontrolador. No nosso curso, ser abordado o
compilador SDCC.
Outro detalhe importante que no 8051 podemos utilizar uma grande variedade de
modos de acesso a memria. Como o microcontrolador suporta acesso a BIT,
memria RAM interna, memria RAM externa devemos ficar atento ao padro
adotado pelo compilador(small ou large para o SDCC) ou especificar onde desejamos
que a memria seja reservada.

Se voc utilizar um compilador como o Turbo C, Visual C ou outro para


PC nenhum santo vai fazer seu programa funcionar. Eu teria receio de
gravar o programa no KIT ou na memria EPROM. Quando voc estiver
programando para o 8051, devemos utilizar SEMPRE um compilador
prprio para o microcontrolador como o SDCC que veremos no curso.

Jefferson Leal Couto

Pgina

40

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


7.1) TIPOS DE VARIVEIS EM C
TIPO
char
unsigned char
Int
unsigned int
long
float
void

NUMERO DE BITS
8 bits
8 bits
16 bits
16 bits
32 bits
32 bits
0

ALCANCE
-128 a + 127
0 a 255
-32768 a 32767
0 a 65535
-2147483648 a +2147483647
3.4e-38 a 3.4e38
Sem valor

Exemplo de declarao de variveis:


Int iLContador;
// Varivel do tipo inteiro com sinal
unsigned char ucGLeitura;// Varivel do tipo char sem sinal
char buffNome[6];
// Array do tipo char com 6 posices
Int buffTotal[4];
// Array do tipo int com sinal com 4 posies

7.2) OPERADORES ARITMTICOS


+
*
/
%
++
--

Subtrao ou sinalizao de negativo


Soma
Multiplicao
Diviso
Resto da diviso
Incremento (Varivel = Varivel + 1)
Decremento (Varivel = Varivel 1)

Exemplo de operaes aritmticas


iLTotal = iLContador * 3;

// Atribui para iLTotal o valor de //ILContador


multiplicado por 3

ucLLeitura++;

// ucLLeitura ser incrementada de uma //unidade

Jefferson Leal Couto

Pgina

41

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


7.3) OPERADORES LGICOS E RELACIONAIS
>
<
>=
<=
==
!=
&&
||
!

Maior que
Menor que
Maior ou igual que
Menor ou igual que
igual
Diferente
Relacional e
Relacional ou
Relacional no

7.4) OPERADORES DE MANIPULAO DE BIT


&
|
^
~
>>
<<

Operao lgica AND


Operao lgica OR
Operao lgica XOR
Operao lgica NOT
Operao de deslocamento(shift) em bit para a direita
Operao de deslocamento em bit para a esquerda

Exemplo de operao com bit


ucLValor = ucLValor & 0x7F;

// Zera o bit mais significativo do byte //ucLValor

ucLValor = ucLValor | 0x02;

// Coloca em um o segundo bit do byte


// ucLValor

Jefferson Leal Couto

Pgina

42

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


7.5) DIRETIVAS FUNDAMENTAIS DO PR COMPILADOR
A) #DEFINE <NOME> <ATRIBUICAO>
Permite atribuir antes da compilao um valor para NOME.
Exemplo:
#define LIGADO
#define MAXIMO

1
50

//`Substitui o nome MAXIMO por 50 no programa

B) #INCLUDE <ARQUIVO>
Informa ao que dever ser includo o ARQUIVO antes de realizar a compilao do
programa.
Exemplo:
#include <8051.h>
#include 8051.h

// Inclui o arquivo 8051.h da pasta padro


// Inclui o arquivo 8051.h da pasta do programa

Se voc pretende utilizar uma constante vrias vezes no


programa utilize a diretiva DEFINE. Esta prtica muito
utilizada por programadores mais experientes. O formato
do INCLUDE depende onde est seu arquivo HEADER.
Ele geralmente um arquivo .h

Agora estou entendendo. Ento se meu


arquivo HEADER estive na pasta padro
do compilador uso <ARQUIVO> e se
estiver na mesma pasta do programa uso o
formato ARQUIVO

Jefferson Leal Couto

Pgina

43

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


7.6) CONTROLE DE FLUXO
A) IF ELSE
A atribuio IF-ELSE permite que um determinado enunciado, que pode ser simples
ou composto, seja executado desde que uma determinada condio seja satisfeita. A
sintaxe a seguinte:
If (condio)
enunciado1;
else
enunciado2;
Embora a condio normalmente estar relacionada com um operador relacional,
pode, tambm ser qualquer expresso que resulte em um valor ZERO caso no seja
verdadeira ou um valor diferente de ZERO se a condio for verdadeira.
Exemplo: Se o valor da varivel for zero o pino zero da porta P3 dever ser colocado
em nvel lgico 1 seno em nvel lgico zero
#include <pwlib.h>
unsigned char ucGLeitura;
void main (void)
{
ucGLeitura = P1;
if(!ucGLeitura)
P3_0 = 1;
else
P3_0 = 0;
}

A presena do ELSE e consequentemente o enunciado2, opcional, se no estiver


presente e a condio for verdadeira, o enunciado1 ser executado. Se no estiver
presente e a condio for FALSA o fluxo do programa ser desviado para o
enunciado seguinte ao da instruo IF.
If (condio)
enunciado1;

Jefferson Leal Couto

Pgina

44

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


Exemplo: Se o valor da varivel for zero o pino zero da porta P3 dever ser colocado
em nvel lgico 1.
#include <pwlib.h>
unsigned char ucGLeitura;
void main (void)
{
ucGLeitura = P1;
if(!ucGLeitura)
P3_0 = 1;
}

Se tivermos enunciados compostos, ou seja um conjunto de enunciados, obrigatrio


o uso do delimitador chaves.
If (condio)
{
enunciado11;
enunciado12;
}
else
{
enunciado21;
enunciado22;
enunciado23;
}
Exemplo de enunciado composto:

Voc quer a minha opinio?! . Faz o seguinte,


como voc ainda no tem experincia com a
programao C, utilize sempre os delimitadores
chaves. Mesmo em enunciados simples !!!

#include <pwlib.h>
unsigned char ucGLeitura;
void main (void)
{
ucGLeitura = P1;
if(!ucGLeitura)
{
P3_0 = 1;
P3_1 = 0;
}
else
{
P3_0 = 0;
P3_1 = 1:
}
}

Jefferson Leal Couto

Pgina

45

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


B) SWITCH CASE
A instruo SWITCH-CASE visa substituir em muitas situaes o uso da instruo IFELSE aninhadas. A instruo possibilita que, de acordo com o valor de entrada para
a expresso, seja executado um entre vrios enunciados. Ser selecionado para
execuo o enunciado que estiver associado ao CASE cujo valor for equivalente ao
de entrada. A sintaxe a seguinte:
SWITCH(VALOR)
{
CASE comparacao1:
enunciado1;
BREAK;
CASE comparacao2:
enunciado2;
BREAK;
DEFAULT:
enunciado3;
}

BREAK;

A palavra chave DEFAULT, tem por objetivo especificar um enunciado para ser
executado caso o valor de entrada no seja encontrado em nenhum valor de
comparao do CASE. Se no for necessrio executar um enunciado quando o valor
no for encontrado a palavra chave DEFAULT no ser necessria.
Exemplo: Se o valor da varivel for 00h o microcontrolador dever mostrar desligado
se for FFh dever mostrar maximo valor seno a mensagem intermediario

Jefferson Leal Couto

Pgina

46

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


#include <pwlib.h>
#include <8051.h>
unsigned char ucGLeitura;
void main (void)
{
ucGLeitura = P1;
switch(ucGLeitura)
{
case 0x00:
PWDisplayEscreveString("Desligado
break;
case 0xFF:
PWDisplayEscreveString("Maximo
break;
default:
}

break;

",2,1);

",2,1);

PWDisplayEscreveString("Intermediario ",2,1);

C) WHILE
A instruo WHILE possibilita a repetida execuo de um enunciado simples ou
composto, enquanto uma determinada condio for satisfeita. Esta instruo
bastante verstil. A sintaxe a seguinte:
WHILE(condio)
{
Enunciado1;
}

Jefferson Leal Couto

Uma aplicao bem interessante para o


while utilizar com a condio 1. Desta
forma o microcontrolador ficar em um
loop infinito.

Pgina

47

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


Exemplo: Enquanto o usurio no digitar uma tecla fica aguardando
#include <pwlib.h>
#include <8051.h>
unsigned char ucGLeitura;
void main (void)
{
ucGLeitura = P1;
ucGLeitura = PWLeTeclado( );
PWDisplayEscreveString (Selecione tecla: ,1,1);
while (ucGLeitura == 0)
{
ucGLeitura = PWLeTeclado( );
}

D) DO WHILE
A instruo DO WHILE permite que o enunciado1, que pode ser simples ou
composto, seja executado enquanto a condio for verdadeira.
A diferena entre a instruo DO-WHILE e a WHILE resume-se no fato de que,
enquanto a instruo WHILE testa a condio antes da execuo do enunciado1,
esta testa a condio aps a execuo do enunciado1, isto , o enunciado1 ser
executado pelo menos uma vez.
Veja que neste exemplo no necessrio a primeira leitura da tecla

#include <pwlib.h>
#include <8051.h>
unsigned char ucGLeitura;
void main (void)
{
ucGLeitura = P1;
PWDisplayEscreveString (Selecione tecla:,1,1);
do
{
ucGLeitura = PWLeTeclado ( );
}

} while (ucGLeitura == 0);

Jefferson Leal Couto

Pgina

48

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


E) FOR
A instruo FOR possibilita a execuo de um conjunto de enunciados enquanto o
valor da varivel varia entre uma faixa de valores. A principal vantagem em relao ao
uso do WHILE consiste no fato da instruo for manter centralizado o controle do
loop, resultando em um programa mais claro. A sintaxe a seguinte:
FOR(expressao1; expressao2;expressao3)
{
enunciado1;
}
onde,
A expressao1 a inicializao, sendo executada apenas uma vez, normalmente para
inicializar uma varivel presente na condicao2. A expressao2 a condio, cujo
resultado determina se o enunciado1 que pode ser simples ou composto ser
executado. A expressao3 o incremento ou decremento, sendo executado ao final da
passagem do loop. O loop s ser abandonado quando a condio(expressao2) for
falsa ou quando dentro do loop for executada a instruo break ou return.
Exemplo: O programa limpa com espao as 20 posies do array do tipo char
#include <pwlib.h>
#include <8051.h>
unsigned char ucGLoop;
void main (void)
{
unsigned char ucLBuffNome[20];
for(ucGLoop = 0; ucGLoop < 20; ucGLoop++)
{
ucLBuffNome[ucGLoop] = ;
}

F) RETURN
A instruo RETURN possibilita que se retorne da execuo de uma funo. Quando
retorna, podemos passar um valor para a funo que originou a chamada. Caso seja
retornado um valor, necessrio que o tipo seja o mesmo especificado na declarao
da funo.

Jefferson Leal Couto

Pgina

49

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


7.7) MAPA DE ALOCAO DE VARIVEIS NO 8051
Um dos pontos importantes mas de difcil compreenso o mapa de memria da
arquitetura MCS51. A Intel originalmente colocou no mercado o processador
chamado de 8031 que no tinha memria de programa interno. Posteriormente foi
lanado o 8051 j com memria ROM interna. Estes microcontroladores permitem o
armazenamento de at 128 bytes de dados em memria RAM interna no modo direto
e 64K bytes de memria RAM externa.Com a boa aceitao do microcontrolador pelo
mercado foi produzido os modelos 8032 e 8052 com a mesma caracterstica de
memria de programa do 8031/8051 respectivamente porm com um adicional de
128 bytes de memria de dados. Esta memria possui o mesmo endereo dos
registradores do SFR e devido a este fato foi implementado o acesso por
endereamento indireto.
Para permitir o acesso a todos estes modos distintos de memria de dados, o
compilador SDCC possui os seguintes tipos de alocao de memria
DATA (DSEG) : Intervalo do endereo 00h ao 7Fh. Inclui o banco de registradores, a
rea bit enderevel e o stack pointer. O SDCC pode ser configurado para iniciar a
alocao a partir do endereo 30h que posterior aos 4 bancos de registradores e no
topo da rea bit enderevel.
XDATA (XSEG) : Se voc possui memria RAM externa na CPU ento esta memria
acessada com este modo de endereamento. Os dispositivos de I/O mapeado em
memria tambm so acessados atravs deste segmento.
CODE (CSEG) : Construdo na rea interna ou externa da memria de programa
(ROM/EPROM). Bastante utilizado quando desejamos armazenar um array de
constantes, como mensagens em display.
IDATA (ISEG) : Este so os128 bytes extra de memria de dados acessados atravs
do endereamento indireto. importante lembrar que IDATA est disponvel apenas
nas verses 8032, 8052 ou similar.
BIT (BSEG): Esta rea fica entre os endereos 20h e 2Fh na memria de acesso
direto. Ela bastante til quando queremos sinalizar situaes do tipo VERDADEIRO
ou FALSO, LIGADO ou DESLIGADO permitindo uma eficiente economia de espao
de memria.

Jefferson Leal Couto

Pgina

50

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


8) AMBIENTE DE DESENVOLVIMENTO INTEGRADO ( IDE )

Atualmente, existem vrios fabricantes de compiladores para microcontroladores da


famlia MCS-51. Um dos melhores compiladores para 8051 o ambiente integrado da
Keil, que possui todos os recursos necessrio para escrever, compilar e analisar o
programa, porm este apresenta um custo muito elevado at mesmo, para o
desenvolvimento de projetos comerciais, onde teremos retorno do capital investido.
Uma ferramenta de desenvolvimento como esta, est custando em torno de US$
3000,00.
Desta forma, buscamos algumas alternativas que apresentem um ambiente integrado
para o desenvolvimento de projetos e com uma boa relao custo/benefcio.
Neste captulo, conheceremos um ambiente integrado adaptado que apresenta
caractersticas dos melhores ambientes existentes no mercado e com uma grande
vantagem, totalmente GRTIS.
O IDE composto de trs aplicativos, a saber:
1) MIDE-51 Editor utilizado para escrever o programa em C e com a interface
para o compilador e aplicativo de carga.
2) WinLoader51 Aplicativo em plataforma Windows para a carga do firmware na
placa didtica.
3) SDCC Compilador freeware para os principais microcontroladores existentes no
mercado (Z80, 8051, PIC, etc)

Jefferson Leal Couto

Pgina

51

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


8.1) MIDE-51
A seguir temos uma imagem do editor MIDE-51

Suas principais caractersticas so:


1) Identificao destacada para as palavras reservadas utilizadas na linguagem C e
para os registradores padro da famlia MCS-51.
2) rea de trabalho com suporte para mltiplos arquivos.
3) Suporte as principais caractersticas dos editores como copiar, colar, procurar,
substituir.
4) Configurao do tamanho e tipo de fonte.
5) Salvar o arquivo aberto recentemente.
6) Atalho para o manual do compilador SDCC
7) Relatrio com as mensagens do compilador SDCC

Jefferson Leal Couto

Pgina

52

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


8) Copiar e Colar arquivos manipulados atravs do Windows Explorer
9) Suporte para mouse com Scroll
10) Bookmark para at 10 posies no programa fonte.
11) Ativar ou desativar o nmero das linhas no editor.
8.1.1) PRIMEIRO PROGRAMA
Veremos agora como iniciar o editor e escrever um pequeno programa.
1) Abrir o editor com um duplo clique no cone da figura abaixo que est na rea de
trabalho do Windows

2) Com o ambiente do editor aberto, selecione no menu FILE / NEW.


3) Coloque o cabealho do projeto , a chamada para a biblioteca padro para a placa
didtica e a rotina principal MAIN como no exemplo abaixo:
/*###############################################################
#
#
# PROWARE PROJ. E SIST. ELETRONICOS
#
#
#
# PROJETO: TESTE
#
#
#
# MODULO: PRIMEIRO.C
#
#
#
# REVISO: 1
#
#
#
# FUNCAO:
#
#
#
# HISTORICO:
#
#
#
#
- Software inicial
#
#
Autor: Jefferson Couto
Data: 20/03/06
#
#
#
##############################################################*/
#include <pwlib.h>
void main( )
{
/* Escreva o seu programa aqui */
}
Jefferson Leal Couto

Pgina

53

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


4) Salve o arquivo em FILE / SAVE AS como Primeiro.C. Se tudo voc fez todos os
passos de forma correta, o programa dever ficar com alguns detalhes com cor
diferente.
5) Escreva o seu programa.

Como voc est utilizando um ambiente adaptado,


importante tomar um pequeno cuidado com o nome
do arquivo. Ele deve seguir o padro utilizado pelo
antigo DOS, isto , voc pode utilizar no mximo 8
letras para o nome do arquivo.

8.1.2) COMPILANDO E CARREGADO O PROGRAMA


Para compilar o programa, basta clicar no cone da figura abaixo.

Se tudo correr bem e o programa no possuir nenhum erro, na parte de baixo do


editor vai aparecer uma mensagem que o arquivo HEX foi gerado.
DONE. C:\PROJETOS\PRIMEIXO.HEX HAD BEEN GENERATED
Para carregar o firmware na placa didtica, basta clicar no icone da figura abaixo.

Jefferson Leal Couto

Pgina

54

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


8.1.3) CONFIGURANDO O EDITOR PARA A PLACA DIDTICA
Para que o arquivo HEX gerado pelo edito seja compatvel com a placa didtica
utilizada na escola, devemos configurar o editor da seguinte forma:
Selecione no menu EDIT / PREFERENCE.
No TAB C-COMPILER verifique a existncia das seguintes linhas de configurao:
PARAMETER
-l pwlib.lib --code-loc 0x0000 --iram-size 0xFF --idata-loc 0x80 --xram-loc 0x0000

PATH
c:\mide\sdcc

No TAB PROGRAMMER verifique a existncia da seguinte linha de configurao:


EXECUTE FILE
C:\Arquivos de programas\WinLoader51\WinLoader51.exe

Jefferson Leal Couto

Pgina

55

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


8.2) WinLoader51
Agora veremos um pouco sobre o aplicativo utilizado para a carga do programa na
placa didtica. Na figura abaixo temos a imagem da interface principal do programa.

Aps clicar no icone para fazer a carga do firmware ( 8.1.2 ) o boto de GRAVAR no
aplicativo dever estar habilitado se o programa for compilado e carregado com
sucesso, isto , o texto Gravar dever estar na cor verde. Caso o boto esteja com
o texto em cinza existem duas possibilidades:
1) O arquivo HEX no foi gerado devido a algum erro no programa.
2) O arquivo gerado no pode ser aberto pelo aplicativo.
3) O aplicativo no conectou com a placa porque no estava em modo carga.
Se o boto estiver habilitado, voc poder ver na parte de baixo do aplicativo o nome
do arquivo HEX que foi carregado pelo WinLoader51 e o Checksum do firmware
selecionando a opo FERRAMENTAS / STATUS.
NOTA: O checksum a soma de todos os bytes do arquivo HEX gerado pelo
compilador.
Para gravar o programa na placa didtica devemos seguir os seguintes passos:
Pressione o boto de CARGA na placa didtica de forma que o LED da placa fique na
cor vermelha. Se o aplicativo estiver sendo executado, o LED de STATUS dever
ficar na mesma cor da placa, informando que existe comunicao entre eles.

Jefferson Leal Couto

Pgina

56

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


Havendo comunicao com a placa, no menu SOBRE / PROGRAMA O usurio
poder verificar que o aplicativo estar em MODO DESENVOLVIMENTO

Neste momento, o usurio deve clicar no boto Gravar. Aps alguns segundos o
aplicativo deve mostrar uma barra com o andamento da carga do firmware na placa.

Jefferson Leal Couto

Pgina

57

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


O usurio dever pressionar novamente o boto CARGA na placa didtica. O LED do
aplicativo deve alterar para a cor verde. A placa deve executar o programa que foi
enviado pela interface serial.

Jefferson Leal Couto

Pgina

58

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


8.2.1) RECURSOS AVANADOS DO APLICATIVO
O aplicativo WinLoader51 foi desenvolvido com alguns recursos para agilizar o
processo de carga do firmware na placa didtica.
Devido ao fato de utilizarmos a interface serial para fazer a carga do programa, em
alguns casos, a porta serial poder estar sendo utilizada pelo sistema operacional
para o controle do mouse. O aplicativo possui um recurso de varredura que procura
a placa na porta serial que estiver disponvel. Se realmente no for possvel a
conexo, voc ser informado com uma mensagem de erro.

Se o usurio desejar verificar se o contedo do buffer do aplicativo ( Arquivo HEX


gerado ) foi transferido com sucesso, basta clicar no boto VERIFICAR que o
aplicativo faz a verificao do checksum armazenado na placa. Se o valor estiver
correto o aplicativo mostrara a seguinte mensagem:

As principais dvidas do usurio podero ser esclarecidas atravs do help do


aplicativo. Basta clicar em SOBRE / AJUDA para abrir o programa de ajuda.

Jefferson Leal Couto

Pgina

59

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


9) EXEMPLO DE PROGRAMAS PARA A PLACA DIDTICA PWLOADER51
9.1) Entrada de dados pelo teclado e sada pelo display de LCD
#####################################################################################
#
#
# PROWARE PROJ. E SIST. ELETRONICOS
#
#
#
# PROJETO: DIGITAR VELOCIDADE
#
#
#
# MODULO: TECLCD.C
#
#
#
# REVISO: 1
#
#
#
# FUNCAO:
#
#
#
# HISTORICO:
#
#
#
#
- Software inicial
#
#
Autor: Jefferson Couto
Data: 10/09/06
#
#
#
#
#
#
#
#####################################################################################*/
#include <pwlib.h>
unsigned int uiGVelocidade;
void main()
{
unsigned char ucLContador;
while(1)
{

PWDisplayLimpa();
PWDisplayEscreveString ("Velocidade =" 1,1);
uiGVelocidade = PWEntraIntxxxxx ();
PWDisplayEscreveString ("Digitado= "2,1);
PWMostraIntxxxxx (uiGVelocidade);

// Limpa display
// Mostra mensagem na linha 1
// Aguarda usurio digitar valor
// Coloca mensagem na posio
// Mostra varivel inteiro no display

for(ucLContador = 0; ucLContador < 8; ucLContador++)


{
PWDelayms (250);
// Delay de 250ms x 8
}
}
}

Jefferson Leal Couto

Pgina

60

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS

9.2) Leitura no conversor Analgico/Digital (A/D)


#####################################################################################
#
#
# PROWARE PROJ. E SIST. ELETRONICOS
#
#
#
# PROJETO: CONVERSOR ANALOGICO DIGITAL
#
#
#
# MODULO: AD/DA.C
#
#
#
# REVISO: 1
#
#
#
# FUNCAO:
#
#
#
# HISTORICO:
#
#
#
#
- Software inicial
#
#
Autor: Jefferson Couto
Data: 10/09/06
#
#
#
#####################################################################################
#include <pwlib.>
#include <8051.h>
void InicializaRegistradores(void);
void main(void)
{
unsigned char ucLRetorno;
unsigned char ucLPosicaoLCD;
unsigned char ucLContador = 0;
unsigned char ucLOpcao;
unsigned char ucLByte;
unsigned char ucLCanal = 0;
InicializaRegistradores();
PWDisplayInicializa();
PWDisplayPosicionaCursor(2,7);
PWDelay(30000);
PWDisplayEscreveString(" Teste AD/DA ",1,1);
PWDisplayEscreveString("
",2,1);
PWDelay1Segundo(1);
ucLPosicaoLCD = 0;
ucLContador = 0;
while(1)
{
PWDisplayEscreveString("Selecione Opcao:",1,1);
PWDisplayEscreveString(" 1-A/D 2-D/A ",2,1);
do
{
ucLRetorno = PWLeTeclado();
}while(ucLRetorno == 0);

Jefferson Leal Couto

Pgina

61

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS

if((ucLRetorno >= '1')&&(ucLRetorno < '3'))


{
ucLOpcao = ucLRetorno;
switch(ucLOpcao)
{
case '1':
PWDisplayEscreveString("Selecione Canal:",1,1);
PWDisplayEscreveString("1-A/D0 2-A/D1 ",2,1);
do
{
ucLRetorno = PWLeTeclado();
}
while(ucLRetorno != 0);
do
{

ucLRetorno = PWLeTeclado();
switch(ucLRetorno)
{
case '1':
ucLCanal = 1;
break;
case '2':
ucLCanal = 2;
break;

}
}while(ucLCanal == 0);
break;
case '2':
PWDisplayEscreveString("Selecionado: ",1,1);
PWDisplayEscreveString("Conversor D/A 0 ",2,1);
break;

}
PWDelay1Segundo(1);
break;
}
else
{

PWDisplayEscreveString("Selecao invalida",1,1);
PWDisplayEscreveString("Tente novamente.",2,1);
PWDelay1Segundo(1);

}
ucLByte = 0;
PWDisplayLimpa();

Jefferson Leal Couto

Pgina

62

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS

if(ucLOpcao == '2')
{
PWDisplayEscreveString("Fechar jump. JP1",1,1);
PWDisplayEscreveString("pres. tecla test",2,1);
do
{
ucLRetorno = PWLeTeclado();
}

}while(ucLRetorno == 0);

while(1)
{
if(ucLOpcao == '1')
{

// Seleciona leitura do A/D canal 0

if(ucLCanal == 1)
{
ucLByte = PWLeituraAD(0);
}
else
{
ucLByte = PWLeituraAD(1);
}
PWBinToASCII(2,1,ucLByte );
PWDelay1Segundo(1);

if(ucLOpcao == '2')
{
PWDisplayEscreveString("WR
",1,1);
PWDisplayEscreveString("RD
PWEscreveDA(0,ucLByte);

// Seleciona escrita no D/A canal 0


",2,1);

// Escreve valor da varivel

PWDelayms(50);

PWBinToASCII(1,4,ucLByte );
ucLByte++;
do
{
ucLRetorno = PWLeituraAD(0);
PWDelay1Segundo(1);
PWBinToASCII(2,4,ucLRetorno );
ucLRetorno = PWLeTeclado();
}
while(ucLRetorno == 0);

}
}
void InicializaRegistradores(void)
{
IP = 0x00;
TMOD = 0x00;
IE = 0x00;
TMOD = 0x01;
TR0 = 1;

// Configura prioridade padrao para interrupcoes


// Configura modo do TIMER
// Habilita interrupo timer 0
// Timer zero no modo 1

Jefferson Leal Couto

Pgina

63

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


}

9.3) Escrita no Conversor Analgico/Digital (D/A)


#####################################################################################
#
#
# PROWARE PROJ. E SIST. ELETRONICOS
#
#
#
# PROJETO: CONTROLE DE SAIDA DO D/A
#
#
#
# MODULO: DIGITAVO.C
#
#
#
# REVISO: 1
#
#
#
# FUNCAO:
#
#
#
# HISTORICO:
#
#
#
#
- Software inicial
#
#
Autor: Jefferson Couto
Data: 20/03/06
#
#####################################################################################
#include <PWlib.h>
#include <8051.h>
void MostraValor(unsigned char);
void InicializaRegistradores(void);
void main()
{
unsigned char ucLValor;
unsigned char ucLCopia;

InicializaRegistradores(); // Chama subrotina que inicializa registradores


PWDisplayInicializa();
PWDisplayLimpa();
while(1)
{
PWDisplayEscreveString("Tensao VO: ",1,1);
ucLValor = PWEntraCharx_x(1,11);
ucLValor = ucLValor * 2;
PWEscreveDA(0,ucLValor);
MostraValor(ucLValor);
PWDisplayLimpaLinha(2);
}

void InicializaRegistradores(void)
{
IP = 0x00;
// Configura prioridade padrao para interrupcoes
TMOD = 0x00;
// Configura modo do TIMER
IE = 0x00;
// Desabilita interrupes
}
void MostraValor(unsigned char Valor)
{
unsigned char ucLTecla;

PWDisplayEscreveString ("DEC: ",2,1);


PWMostraCharxxx(Valor);
do
{
ucLTecla = PWLeTeclado();
}while( ucLTecla == 0);

Jefferson Leal Couto

Pgina

// Mostra valor atual da varivel


// Aguarda usurio pressionar uma tecla

64

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS

9.4) PHASE WIDTH MODULATION ( PWM)


#####################################################################################
#
#
# PROWARE PROJ. E SIST. ELETRONICOS
#
#
#
# PROJETO: PWM
#
#
#
# MODULO: PWM.C
#
#
#
# REVISO: 1
#
#
#
# FUNCAO:
#
#
#
# HISTORICO:
#
#
#
#
- Software inicial
#
#
Autor: Jefferson Couto
Data: 28/05/06
#
#####################################################################################
#include <PWlib.h>
#include <8051.h>
void InicializaRegistradores(void);
unsigned char ucGPwmHigh = 0;
unsigned char ucGPwmLow = 0;
unsigned char ucGTecla;
unsigned char ucAtualiza = 0;
unsigned char ucGDutyCicle = 50;
#define CONTAGEM 46
// Tempo de 1ms Ciclo de mquina x 9 X 100 = aproximadamente 1mS
#define CONTAGEMH (65535-CONTAGEM)/256
#define CONTAGEML (65535-CONTAGEM)
void Int_Timer0(void) interrupt 1
{
IT0 = 0;
if(ucGPwmHigh > 0)
{
P1_0 = 1;
ucGPwmHigh--;
}
else
{
if(ucGPwmLow > 0)
{
P1_0 = 0;
ucGPwmLow--;
}
else
{
if(ucGDutyCicle == 0)
P1_0 = 0;
else
P1_0 = 1;
ucGPwmHigh = ucGDutyCicle;
ucGPwmLow = 100 - ucGDutyCicle;
}
}
TH0 = CONTAGEMH;
TL0 = CONTAGEML;
IT0 = 1;
}
void main()

Jefferson Leal Couto

Pgina

65

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


{
ucGDutyCicle = 50;
// Duty cicle do PWM em 50%
InicializaRegistradores();
PWDisplayInicializa();
PWDisplayLimpa();
PWDisplayEscreveString ("GERANDO PWM ",1,1);
PWMostraCharxxx(ucGDutyCicle);
PWEscreveCaractere('%');
while(1)
{
ucGTecla = PWLeTeclado();
if(ucGTecla == '2')
{
if(ucGDutyCicle < 100)
ucGDutyCicle++;
PWDisplayLimpa();
PWDisplayEscreveString("Aumenta PWM ",1,1);
PWMostraCharxxx(ucGDutyCicle);
PWEscreveCaractere('%');
PWDelayms(100);
ucAtualiza = 1;

// Mostra mensagem na linha 1

}
if(ucGTecla == '1')
{
if(ucGDutyCicle > 0)
ucGDutyCicle--;

PWDisplayLimpa();
PWDisplayEscreveString("Diminui PWM ",1,1);
PWMostraCharxxx(ucGDutyCicle);
PWEscreveCaractere('%');
PWDelayms(100);
ucAtualiza = 1;

// Mostra mensagem na linha 1

}
if((ucAtualiza)&&(ucGTecla == 0))
// Se nenhuma tecla pressionada e alterou Duty Cicle
{
PWDisplayLimpa();
PWDisplayEscreveString ("GERANDO PWM ",1,1);
PWMostraCharxxx(ucGDutyCicle);
PWEscreveCaractere('%');
ucAtualiza = 0;
}
}
}
void InicializaRegistradores(void)
{
IP = 0x00;
// Configura prioridade padrao para interrupcoes
IE = 0x82;
// Habilita interrupo timer 0
TMOD = 0x01;
// Timer zero no modo 1
TR0 = 1;
TH0 = CONTAGEMH;
TL0 = CONTAGEML;

Jefferson Leal Couto

Pgina

66

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


9.5) Medir largura de pulso
#####################################################################################
#
#
# PROWARE PROJ. E SIST. ELETRONICOS
#
#
#
# PROJETO: MEDIR LARGURA DE PULSO
#
#
#
# MODULO: LARGURAP.C
#
#
#
# REVISO: 1
#
#
#
# FUNCAO:
#
#
#
# HISTORICO:
#
#
#
#
- Software inicial
#
#
Autor: Jefferson Couto
Data: 20/03/06
#
#####################################################################################*
#include<PWlib.h>
#include <8051.h>
void InicializaRegistradores(void);
unsigned char ucAtualiza = 0;
unsigned char ucGFlag = 0;
unsigned int uiGLarguraPulso;
void Int_Ex1(void) interrupt 2
{
EX1 = 0;
TR1 = 0;
if(!ucGFlag)
{
ucGFlag = 1;
ucAtualiza = 1;
uiGLarguraPulso = ((256 * TH1) + TL1);
}
else
{

TH1 = 0;
TL1 = 0;
EX1 = 1;
ucGFlag = 0;
TR1 = 1;

// Desliga a interrupo externa 0

// Zera regustradores utilizados na medida


// Liga a interrupo externa 0

Jefferson Leal Couto

Pgina

67

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


void main()
{
unsigned char ucLByte;
SP = 0x80;
// Inicializa Stack Pointer
RS0 = 0;
// Seleciona banco zero
RS1 = 0;
// Seleciona banco zero
uiGLarguraPulso = 0;
// Duty cicle do PWM em 50%
PWDisplayInicializa();
PWDisplayLimpa();
PWDisplayEscreveString("Largura = ",1,1);
// Mostra mensagem na linha 1
InicializaRegistradores(); // Chama subrotina que inicializa registradores
ucAtualiza = 1;
while(1)
{
if(ucAtualiza)
{
PWEscreveComando(0x8A);
PWMostraIntxxxx(uiGLarguraPulso);
PWDisplayEscreveString("TH1=",2,1);
ucLByte = TH1;
PWMostraCharxxx(ucLByte);
PWDisplayEscreveString("TL1=",2,9);
ucLByte = TL1;
PWMostraCharxxx(ucLByte);
ucAtualiza = 0;
PWDelayms(400);
IE1 = 0;
EX1 = 1;
}
}
}
void InicializaRegistradores(void)
{
IP = 0x00;
IE = 0x84;
TMOD = 0x90;
TCON = 0x41;
TH1 = 0;
TL1 = 0;

// Configura prioridade padrao para interrupcoes


// Habilita interrupo Externa 1
// Timer UM no modo 1 medindo largura de pulso
// Liga TR1 e Configura Int Externa 0 por borda

Jefferson Leal Couto

Pgina

68

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


10) FUNES DA BIBLIOTECA PWLIB
10.1) void PWDelayms(unsigned int)
Descrio: Rotina de delay por software.
Entrada: Tempo de atraso multiplo de 1ms.
Saida: Nenhuma
Exemplo:
PWDelayms(45);

// Delay de 45 ms

10.2) void PWDelay1Segundo(char)


Descrio: Rotina de delay por software.
Entrada: Tempo de atraso multiplo de 1 segundo
Saida: Nenhuma
Exemplo:
PWDelay1Segundo(4);

// Delay de 4 segundos

10.3) void PWDelay (int)


Descrio: Rotina de delay por software.
Entrada: Tempo de atraso
Saida: Nenhuma
Exemplo:
PWDelay(3000);

// Delay

10.4) void PWDisplayInicializa (void)


Descrio: Inicializa o display (programao inicial).
Entrada: Nenhuma
Saida: Nenhuma
Exemplo:
PWDisplayInicializa();

Jefferson Leal Couto

// Inicializa o display

Pgina

69

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


10.5) void PWDisplayEscreveString (unsigned char*,char,char)
Descrio: Mostra uma sequncia de caracteres no display de LCD.
Entrada: Ponteiro para a string
Linha do display
Coluna do display
Saida: Nenhuma
Exemplo:
PWDisplayEscreveString(Proware,2,1);

// Mensagem na Linha 2 Coluna 1

10.6) void PWEscreveStringPadrao (void)


Descrio: Mostra uma sequncia padro de caracteres no display de LCD.
Entrada: Nenhuma
Saida: Nenhuma
Exemplo:
PWEscreveStringPadrao ( );

// Mostra tela padro

10.7) void PWDisplayLimpa(void)


Descrio: Limpa todo o display de LCD.
Entrada: Nenhuma
Saida: Nenhuma
Exemplo:
PWDisplayLimpa ();

// Limpa do display

10.8) void PWDisplayLimpaLinha(char)


Descrio: Limpa uma das linhas do display.
Entrada: 1 Para limpar primeira linha e 2 Para limpar segunda linha
Saida: Nenhuma
Exemplo:
PWDisplayLimpaLinha(2); // Limpa segunda linha do display

Jefferson Leal Couto

Pgina

70

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


10.9) void PWEscreveCaractere (unsigned char)
Descrio: Mostra o caractere na posio atual do display.
Entrada: Caractere a ser mostrado no display de LCD
Saida: Nenhuma
Exemplo:
PWEscreveCaractere (J);

// Mostra a letra J no display de LCD

10.10) void PWEscreveComando(unsigned char)


Descrio: Envia comando de programao para o display de LCD.
Entrada: Comando a ser enviado para o display
Saida: Nenhuma
Exemplo:
PWEscreveComando (0xC0);

// Comando para posicionar o cursor na Linha 2 e


// Coluna 1

10.11) void PWDisplayAtivaCursor(void)


Descrio: Faz com que o cursor fique visvel no LCD. Permite que o usurio visualize
a posio atual do cursor.
Entrada: Nenhuma
Saida: Nenhuma
Exemplo:
PWDisplayAtivaCursor();

// Ativa o cursor no LCD

10.12) void PWDisplayDesativaCursor(void)


Descrio: Faz com que o cursor fique invisvel no LCD. O usurio no poder
visualizar a posio atual do cursor.
Entrada: Nenhuma
Saida: Nenhuma
Exemplo:
PWDisplayDesativaCursor();

Jefferson Leal Couto

// Desativa o cursor no LCD

Pgina

71

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


10.13) void PWDisplayPosicionaCursor (char,char)
Descrio: Posiciona o cursor em uma determinada linha e coluna do LCD.
Entrada: Linha 1 para primeira linha e 2 - para segunda linha
Coluna 1 a 16 Conforme colunas do display
Saida: Nenhuma

Exemplo:
PWDisplayPosicionaCursor (2,4);

// Posiciona o cursor da linha 2 coluna 4

10.14) char PWLeTeclado (void)


Descrio: Faz a varredura do teclado e verifica se alguma tecla foi pressionada.
Entrada: Nenhuma
Saida: Retorna 00h se nenhuma tecla foi pressionada ou o valor da tecla em ASCII
conforme a tecla que foi pressionada.
Exemplo:
ucLTecla = PWLeTeclado (); // Armazena em ucLTecla o valor lido no teclado
10.15) char PWLeituraAD (unsigned char)
Descrio: Faz a leitura do conversor A/D, conforme o nmero do conversor.
Entrada: 0 A/D0 , 1 A/D1, 2 A/D2 e 3 A/D3 ( Sendo A/D 2 e 3 na expanso)
Saida: Retorna um valor de 8 bits ( 0 a 255 ) conforme a leitura do A/D
Exemplo:
ucLAD = PWLeituraAD (0);

// Armazena em ucLAD o valor lido no A/D

10.16) void PWEscreveDA ( char, unsigned char )


Descrio: Escreve no conversor Digital/Analgico um valor de 8 bits na sada
determinada pelo parmetro nmero do D/A
Entrada: Sada Valor de 0 a 3 conforme conversor
Dado Valor entre 0 a 255 referente ao dado a ser gravado no conversor.
Saida: Nenhuma

Jefferson Leal Couto

Pgina

72

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


Exemplo:
PWEscreveDA (0,Byte);

// Armazena o Byte na sada do conversor D/A0

10.17) char PWConfiguraSerial8N1(unsigned char)


Descrio: Programa a velocidade da serial assncrona no modo 8 bits de dados, sem
paridade e um stop bit.
Entrada: 0 1200, 1 2400, 2 4800, 3 - 9600
Saida: Nenhuma.
Exemplo:
PWConfiguraSerial8N1(3);

// Programa na velocidade de 9600 bps.

10.18) char PWEnviaSerial(char*, unsigned char)


Descrio: Envia um array pela porta serial.
Entrada: Dados Ponteiro para o array
Tamanho Quantidade de bytes ( 0 a 255 )
Saida: Retorna um byte com a resposta do dispositivo ou 0 se no recebeu
nenhum byte como retorno.
Exemplo:
PWEnviaSerial(BuffDados,12 );

// Envia o contedo de BuffDados

10.19) char PWEnviaRecebeSerial(char*, unsigned char,unsigned char)


Descrio: Envia um array pela porta serial. Aguarda os dados da resposta.
Entrada: Dados Ponteiro para o array com dados enviados e recebidos.
TamanhoSaida Quantidade de bytes que sero enviados( 0 a 255 )
TamanhoEntrada Quantidade de bytes que sero recebidos
Saida: Retorna um byte com 0 para sucesso e 1 para erro.
Exemplo:
PWEnviaRecebeSerial(BuffDados,12,3 ); // Envia 12 bytes de BuffDados e
// armazena 3 bytes de retorno em
// BuffDados.

Jefferson Leal Couto

Pgina

73

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


10.20) void PWBinToASCII (unsigned char,unsigned char,unsigned char)
Descrio: Mostra o valor de um byte em binrio no display de LCD.
Entrada: Byte que ser convertido para binrio.
Linha Nmero da linha onde ser mostrado no display ( 1 ou 2 )
Coluna Nmero da coluna onde ser mostrado no display ( 1 a 16 )
Saida: Nenhuma
Exemplo:
PWBinToASCII ( Byte,1,1 );

// Mostra o valor de Byte na linha 1 e coluna 1

10.21) void PWMostraCharxx(unsigned char)


Descrio: Mostra o contedo de um varivel byte no formato decimal na posio
atual do display. Valor entre 00 e 99.
Entrada: Byte que ser mostrado no LCD
Saida: Nenhuma
Exemplo:
PWMostraCharxx(Byte);

// Mostra o valor de Byte no LCD

10.22) void PWMostraCharxxx(unsigned char)


Descrio: Mostra o contedo de uma varivel byte no formato decimal na posio
atual do display. Valor entre 00 e 255.
Entrada: Byte que ser mostrado no LCD
Saida: Nenhuma
Exemplo:
PWMostraCharxxx(Byte);

// Mostra o valor de Byte no LCD

10.23) void PWMostraIntxxx(unsigned int)


Descrio: Mostra o contedo de uma varivel word no formato decimal na posio
atual do display. Valor entre 00 e 999.
Entrada: Word que ser mostrado no LCD
Saida: Nenhuma
Exemplo:
PWMostraIntxxx(uiLValor);

Jefferson Leal Couto

// Mostra o valor de uiLValor no LCD

Pgina

74

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


10.24) void PWMostraIntxxxx(unsigned int)
Descrio: Mostra o contedo de uma varivel word no formato decimal na posio
atual do display. Valor entre 00 e 9999.
Entrada: Word que ser mostrado no LCD
Saida: Nenhuma
Exemplo:
PWMostraIntxxxx(uiLValor);

// Mostra o valor de uiLValor no LCD

10.25) void PWMostraIntxxxxx(unsigned int)


Descrio: Mostra o contedo de uma varivel word no formato decimal na posio
atual do display. Valor entre 00 e 65535.
Entrada: Word que ser mostrado no LCD
Saida: Nenhuma
Exemplo:
PWMostraIntxxxx(uiLValor);

// Mostra o valor de uiLValor no LCD

10.26) void PWMostraIntxx_xx (unsigned int)


Descrio: Mostra o contedo de uma varivel word no formato decimal com duas
casas decimais na posio atual do display. Valor entre 00 e 99,99.
Entrada: Word que ser mostrado no LCD. Valor dividido por 100
Saida: Nenhuma
Exemplo:
PWMostraIntxx_xx(1278);

// Mostra o valor 12,78 no LCD

10.27) unsigned char PWEntraCharx_x(unsigned char, unsigned char)


Descrio: Solicita a entrada de um valor com uma casa decimal. Retorna um valor
entre 0 e 255 ( 255 / 10 ). Anula limpa valor e solicita nova entrada.
Entrada: Linha no LCD onde ser feita a entrada dos dados.
Coluna no LCD onde ser feita a entrada dos dados.
Saida: Valor entre 0 e 255 conforme o valor digitado pelo usurio.
Exemplo:
ucLByte = PWEntraCharx_x(1,4);

Jefferson Leal Couto

Pgina

// Aguarda o usurio digital o valor

75

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


10.28) unsigned char PWEntraCharxx_x(unsigned char, unsigned char)
Descrio: Solicita a entrada de um valor com uma casa decimal. Retorna um valor
entre 0 e 255 ( 255 / 100 ). Anula limpa valor e solicita nova entrada.
Entrada: Linha no LCD onde ser feita a entrada dos dados.
Coluna no LCD onde ser feita a entrada dos dados.
Saida: Valor entre 0 e 255 conforme o valor digitado pelo usurio.
Exemplo:
ucLByte = PWEntraCharxx_x(1,4);

// Aguarda o usurio digital o valor

10.29) unsigned char PWEntraCharxx(unsigned char, unsigned char)


Descrio: Solicita a entrada de um valor com duas casas. Retorna um valor entre 0 e
99. Anula limpa valor e solicita nova entrada.
Entrada: Linha no LCD onde ser feita a entrada dos dados.
Coluna no LCD onde ser feita a entrada dos dados.
Saida: Valor entre 0 e 99 conforme o valor digitado pelo usurio.
Exemplo:
ucLByte = PWEntraCharxx(1,4);
// Aguarda o usurio digital o valor
10.30) unsigned char PWEntraCharxxx(unsigned char, unsigned char)
Descrio: Solicita a entrada de um valor com trs casas. Retorna um valor entre 0 e
255. Anula limpa valor e solicita nova entrada.
Entrada: Linha no LCD onde ser feita a entrada dos dados.
Coluna no LCD onde ser feita a entrada dos dados.
Saida: Valor entre 0 e 255 conforme o valor digitado pelo usurio.
Exemplo:
ucLByte = PWEntraCharxxx(1,4);

// Aguarda o usurio digital o valor

10.31) unsigned int PWEntraIntxxx(unsigned char, unsigned char)


Descrio: Solicita a entrada de um valor com trs casas. Retorna um valor entre 0 e
999. Anula limpa valor e solicita nova entrada.
Entrada: Linha no LCD onde ser feita a entrada dos dados.
Coluna no LCD onde ser feita a entrada dos dados.
Saida: Valor entre 0 e 999 conforme o valor digitado pelo usurio.
Exemplo:
uiLValor = PWEntraIntxxx(1,4); // Aguarda o usurio digital o valor

Jefferson Leal Couto

Pgina

76

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


10.32) unsigned int PWEntraIntxxxx(unsigned char, unsigned char)
Descrio: Solicita a entrada de um valor com trs casas. Retorna um valor entre 0 e
9999. Anula limpa valor e solicita nova entrada.
Entrada: Linha no LCD onde ser feita a entrada dos dados.
Coluna no LCD onde ser feita a entrada dos dados.
Saida: Valor entre 0 e 9999 conforme o valor digitado pelo usurio.
Exemplo:
uiLValor = PWEntraIntxxxx(1,4); // Aguarda o usurio digital o valor
10.33) unsigned int PWEntraIntxxxxx(unsigned char, unsigned char)
Descrio: Solicita a entrada de um valor com trs casas. Retorna um valor entre 0 e
.65535 Anula limpa valor e solicita nova entrada.
Entrada: Linha no LCD onde ser feita a entrada dos dados.
Coluna no LCD onde ser feita a entrada dos dados.
Saida: Valor entre 0 e 65535 conforme o valor digitado pelo usurio.
Exemplo:
uiLValor = PWEntraIntxxxx(1,4); // Aguarda o usurio digital o valor
10.34) unsigned int PWEntraIntxx_xx (unsigned char, unsigned char)
Descrio: Solicita a entrada de um valor com duas casas decimais. Retorna um valor
entre 0 e 9999. Anula limpa valor e solicita nova entrada.
Entrada: Linha no LCD onde ser feita a entrada dos dados.
Coluna no LCD onde ser feita a entrada dos dados.
Saida: Valor entre 0 e 9999 conforme o valor digitado pelo usurio. O valor em
ponto flutuante ser multiplicado por 100.
Exemplo:
uiLValor = PWEntraIntxx_xx(1,4);
// Aguarda o usurio digital o valor
Se o usurio digitar 76,25, o valor de uiLValor ser 7625 sem vrgulas.

Jefferson Leal Couto

Pgina

77

Rev. E

PROWARE PROJ. E SIST. ELETRNICOS


11) INFORMAES SOBRE O KIT

Jefferson Leal Couto

Pgina

78

Rev. E

Você também pode gostar