Sei sulla pagina 1di 98

Microcontroladores

MICROCONTROLADORES
HARDWARE & SOFTWARE

Prof. Dr. Ivo Reis Fontes


ivo@feb.unesp.br

O que iremos aprender ?

Microcontrolador Single-chip
Microcontrolador 8051

Programao em Assembly e C
Interfaceando com o hardware externo
Sistemas com computao embarcada
Microcomputadores como componentes
Funes especficas otimizadas (ex., impressora)

Microcontroladores - 8051

O que um microcontrolador ?

Microprocessador

Microcontrolador

Funo

Single-chip CPU

Single-chip -computador:
CPU, ROM, RAM, timers,
serial comm., etc.

Chips

Pentium, PowerPC,
etc.

8051, 6805, H8, ARM, etc.

Propsito

Computao Geral
ex: PCs, Macs,
workstations, etc.

Sistemas Embarcados, ex:


video games, PDAs,
peifricos, LEGO, eletroeletrnicos de consumo,
carros, etc.

Microcontroladores - 8051

Aspectos Internos do Microcontrolador!

Microcontroladores - 8051

Por que estudar os microcontroladores?


O volume de -controladores vendidos >> do que o volume
de PCs baseados em -processadores

-controladores,
-processadores embutidos
~100%

PCs e
Workstations
baseados em
-processors
>>1%

Microcontroladores - 8051

Quantos -Controladores existem em um PC?

Driver de HD
Teclado
Mouse
Modem
Placa Grfica
Etc.

Microcontroladores - 8051

Modem

H
O
S
T
P
C

U
A
R
T

controlador

Processador
DSP

RAM ROM

RAM ROM

DAA

RJ--11
RJ

Microcontroladores - 8051

LEGO Mindstorms

Microcontroladores - 8051

LEGO Mindstorms

RCX
Microcontroladores - 8051

RCX Robot Control Explorer

Hitachi H8/300
-controlador 8-bits
CPU 3V 10MHz
16KB ROM
512B RAM
3 timers
8-canais A/D 1010-bit
comunicao serial
51 pinos de I/O
interrupes

Microcontroladores - 8051

Eletrnica Embarcada: Tecnologia Atual!

Microcontroladores - 8051

VOLVO S80 18 ECUs

Microcontroladores - 8051

VOLVO Engine-Control ECU

Processador
de 88-bits

Microcontroladores - 8051

Livro Texto & Tpicos

The 8051 Microcontroller 2.ed.


(I. Scott Mackenzie, Prentice Hall)

Microcontrolador 8051
Programao em Linguagem Assembly
Timer/counter
Comunicao Serial
Interrupes
Interface com o mundo real
Programao em Linguagem C
Aplicaes
Microcontroladores - 8051

Microcontroladores

CAPTULO 1
Os microcontroladores

Prof. Dr. Ivo Reis Fontes


ivo@feb.unesp.br

Tpicos

Compara microprocessadores & microcontroladores


Vantagens dos microcontroladores
Sistemas embarcados
Escolha de um microcontrolador
Velocidade, encapsulamento, memria & custo/unidade
Vrios membros da famlia do 8051
Vrios fabricantes de 8051

Microcontroladores - 8051

Microcontroller vs. Microprocessors

Barramento de Dados
CPU RAM ROM

CPU
Micropro
cessador
uso geral

RAM

ROM

PORTA
PORTA
TIMER SERIAL
de
I/O

I/O

Timer

Porta
Serial

Barramento de Endereos

Microcontrolador

Microprocessador

Microcontroladores - 8051

Sistemas Computacionais Embarcados

Uso de um -processador ou -controlador para


realizar uma nica tarefa
Impressora

PC usado para vrias aplicaes


Processador de Texto, Servidor de impresso, ATM de
bancos, Vdeo game, Servidor de rede, Terminal de internet

PC contm ou se conecta com vrios produtos com


processamento embutido
Teclado, Impressora, Modem, Controlador de disco, Placa
de som, Driver de CD-ROM, mouse, etc.

X86 PC e aplicaes em sistemas embarcados

Microcontroladores - 8051

Produtos -controlados
Lar
Eletrodomsticos, intercom, telefones, sistemas de segurana,
portes automticos de garagem, secretrias eletrnicas, fax,
computadores domsticos, TVs, sintonizadores de TV a cabo,
VCRs, camcorder, controles remotos, video games, telefnes
celulares, instrumentos musicais, mquinas de costura, controles de
iluminao, pagers, cameras, brinquedos, equipamentos de
condicionamento fsico, etc.

Escritrio
Telefones, computadores, sistemas de segurana, fax, fornos de
microondas, copiadoras, impressoras laser, impressoras coloridas,
pagers, etc.

Automvel
Computador de bordo, controle de motor, air bag, ABS,
instrumentao, sistema de segurana, controle de transmisso,
som e video, controle de climatizao, telefone celular.
Microcontroladores - 8051

Escolhendo um -controlador

Caractersticas do computador

Ferramentas de Desenvolvimento de Software

Velocidade de processamento
Dimenso
Consumo de energia
Memrias: RAM, ROM
Pinos de I/O
Timers
Upgrade para melhorar desenpenho ou para verses de baixo consumo
Custo, etc.
Assembler
Debugger
Compilador C
Emulator
Suporte tcnico

Disponibilidade & Fonte


Microcontroladores - 8051

10

Empresas que esto produzindo o 8051

Empresa

Site na Internet

Intel

www.intel.com/design/mcs51

Atmel

www.atmel.com

Philips/Signetics

www.semiconductors.philips.com

Siemens

www.sci.siemens.com

Dallas Semiconductor

www.dalsemi.com

Microcontroladores - 8051

O 8051 por dentro


Introduzido pela
Intel em 1981

Microcontroladores - 8051

11

O 8051 por fora

Microcontroladores - 8051

Famlia 8051

Comparao entre os membro da Famlia do 8051

Recursos

8051

8052

8031

4K

8k

0k

128

256

128

32

32

32

Porta Seriais (UART/USART)

Fontes de Interrupo

ROM (memria de programa interna,


em bytes)
RAM (bytes)
Timers
Pinos de I/O

Microcontroladores - 8051

12

Vrios microcontroladores 8051

Microcontrolador 8751
UV-EPROM

AT89C51/2/3 da Atmel Corporation


Flash (erase/write)

Os anes da Atmel Coroporation


AT89C1051 (CHIP - 18 pinos)
AT89C2051 (CHIP - 20 pinos)

DS5000 da Dallas Semiconductor


NV-RAM (changed one byte at a time), RTC (real-time clock)

OTP (one-time-programmable) verso do 8051


Famlia 8051 da Philips
A/D, D/A, I/O extendida, OTP e flash

Microcontroladores - 8051

Microcontroladores

CAPTULO 2
Programao em Linguagem Assembly do 8051

Prof. Dr. Ivo Reis Fontes


ivo@feb.unesp.br

13

Tpicos
Registros do 8051
Os Bancos de Registros
Espao de Memria RAM
Mapa de Memria de Programa
Tipos de dados
A instruo MOVe e o movimento de dados utilizando os registros
Um simples exemplo de cdigo em linguagem assembly
Compilando e Executando o programa
Sequncia de eventos a partir do powerpower-up
Exame do programa em cdigo binrio
Execuo das instrues
Registrador PSW (Program Status Word)
O Stack

Microcontroladores - 8051

Organizao da RAM no 8051

RAM
de uso
geral
Bits

7FH
30H
2FH

Endereveis

BANK 3

20H
1FH

BANK 2

18H
17H

BANK 1

10H
0FH

BANK 0
default

08H
07H
00H

ESPECIAL FUNCTION REGISTERS

FFH

80H

P0

90H

P1

81H

SP

98H

SCON

82H

DPL

99H

SBUF

83H

DPH

A0H

P2

87H

PCON

A8H

IE

88H

TCON

B0H

P3

89H

TMOD

B8H

IP

8AH

TL0

D0H

PSW

8BH

TL1

E0H

ACC

8CH

TH0

F0H

8DH

TH1

80H

Microcontroladores - 8051

14

Organizao da memria 8051

Posio: 88-bits

Registros 88-bits

D7

ACC
B

D6

D5

D4

D3

D2

D1

D0

Registros 88-bits

R0

SP

R1

4 BANCOS

R2
R3
R4
R5

8-bits (ram interna) ()

PSW

CY AC F0 RS1 RS2 OV - P

Registros 1616-bits
DPTR

R6
R7

07H default

PC

DPH

DPL

PC (Ponteiro de Prog)

Microcontroladores - 8051

Memria de Programa Interna do 8051


byte
0000

byte
0000

byte
0000

0FFF

8751
AT89C51

1FFF

8752
AT89C52
8031 (externa)
FFFF

DS5000-32

Espao de Endereamento da Memria de Programa do 8051


Microcontroladores - 8051

15

Notas de Programo

Um valor precedido de # pode ser carregado diretamente


nos registros ACC, B, ou R0-R7
MOV R5, #0F9H

Se valor compreendidos entre 00H e 0FH so movidos


para um registro 8-bits os demais bits sero assumidos
como zeros
MOV A, #5

Um valor maior que a capacidade do registro gera um erro


MOV A, #7F2H

Microcontroladores - 8051

Diretivas & Tipos de Dados

DATA1:
DATA2:
DATA3:
DATA4:
DATA6:

ORG
DB
DB
DB
ORG
DB
ORG
DB

500H
28
;DECIMAL (1C em Hex)
00110101B
;BINARIO (35 em Hex)
39H
;HEXADECIMAL
510H
2591
; NUMEROS ASCII
518H
My name is Ivo R. Fontes$
;CHARACTERES ASCII

Microcontroladores - 8051

16

A instruo MOV

MOV destino,origem

;copia origem para destino

MOV A,#55H
MOV R0,A
MOV
MOV
MOV
MOV

;carrega o valor 55H no ACC


;copia o valor de ACC em R0
;(agora ACC=R0=55H)
R1,A
;copia o valor de ACC em R1
;(agora ACC=R0=R1=55H)
R2,A
;copia o valor de ACC em R2
;(agora ACC=R0=R1=R2=55H)
R3,#95H ;carrega o valor 95H em R3
;(agora R3=95H)
A,R3
;copia o valor de R3 em ACC
;agora ACC=R3=95H
Microcontroladores - 8051

A instruo ADD

ADD A, origem ;ADDiciona o valor do operando fonte


;com o valor do ACC
;e coloca o resultado no ACC
MOV A, #25H
MOV R2,#34H
ADD A,R2

;carrega 25H no ACC


;carrega 34H em R2
;adiciona R2 com o acumulador
;(A = A + R2 A=59H)

Microcontroladores - 8051

17

Passos para criar um cdigo executvel (programa)

outros arquivos .obj

EDITOR
ASCII
LINKEDITOR

myfile.asm
COMPILADOR
ASSEMBLY

myfile.lst

myfile.abs

myfile.obj

CONVERSOR
OH

myfile.hex
Passos para criar um Programa Executvel
Microcontroladores - 8051

Estrutura da Linguagem Assembly


Exemplo 2.1 - Programa em linguagem Assembly (AVSIM51)
;
;
;
;
;
;
;
;
;

$ALLPUBLIC
MECA1.ASM
SAMPLE Program para 8051
Escrito por Ivo Reis Fontes
Jun,1993
Este programa e um exemplo simplificado de como se pode desenvolver
programas que sao compilados e linkados para carga posterior no sisimulador AVSIM51. Tendo em vista se tratar de um exemplo introdutointrodutorio, as operacoes realizadas pelo mesmo nao tem grande utilidade.
DEFSEG ZERO,START=0
SEG ZERO
JMP MAIN
;RESET
DEFSEG SINT1,START=SINT,CLASS=CODE
SEG SINT1
Microcontroladores - 8051

18

Exemplo 1 Programao Assembly (cont.)


JMP SERIAL ;Rotina de interrupcao da Porta Serial
DEFSEG TMR0,START=TIMER0,CLASS=CODE
SEG TMR0
JMP TOINT
;Rotina de interrupcao do Timer 0
DEFSEG MAINSEG,CLASS=CODE,START=100H
SEG MAINSEG
MAIN:
MOV A,#1FH ;Inicializa A com 31 (A=1FH)
MOV R0,#F3H ;Guarda F3H em R0 (R0=F3H)
MOV P1,A
;Escreve contedo de A na porta A (P1=1FH)
ADD A,R0
;Soma A com R0 e guarda em A (A=12H)
MOV P1,A
;Escreve a em P1 (P1=12H)
JMP
*
;Fica em Loop aqui!
SERIAL:
;Rotina de tratamento da Porta Serial
RETI
Microcontroladores - 8051

Exemplo 1 Programao Assembly (cont.)


TOINT:
RETI
END

;Rotina de tratamento do Timer 0

COMPILANDO E LINKEDITANDO:
>AVMAC51 MECA1.ASM<enter>
>AVLINK51 MECA1=MECA1<enter>

Microcontroladores - 8051

19

Estrutura da Linguagem Assembly


LISTAGEM MECA1.PRN
1
2
3
4
5
6
7
8
9
10
11

$ALL PUBLIC
; SAMPLE Program para 8051
; Escrito por Ivo Reis Fontes
; Jun, 1993
; Este programa e um exemplo simplificado de
como se pode desenvolver
; programas que sao compilados e linkados para
carga posterior no
; simulador AVSIM51. Tendo em vista se tratar
de um exemplo intodutorio
; as operacoes raalizadas pelo mesmo nao tem
grande utilidade.
;
DEFSEG ZERO,START=0
SEG ZERO
Microcontroladores - 8051

Estrutura da Linguagem Assembly

0000 02 0000

0000 02 000E

0000 02 000F

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

JMP

MAIN

;reset

DEFSEG SINT1,START=SINT,CLASS=CODE
SEG SINT1
JMP

SERIAL ;rotina de interrupcao do


TIM0

DEFSEG TMR0,START=TIMER0,CLASS=CODE
SEG TMR0
JMP T0INT
DEFSEG MAINSEG,CLASS=CODE,START=100H
SEG MAINSEG

Microcontroladores - 8051

20

Estrutura da Linguagem Assembly


0000
0000 75 81 30
0003 74 1F
0005 78 F3
0007 F5 90

27
28
29
30
31

0009 28
000A F5 90

32
33

000C
000C 80 FE

34
35
36

MAIN:
MOV
MOV
MOV
MOV

SP,#30H ;inicializa stack


A,#1FH ;inicializa ACC com 31 (A=1FH)
R0,#0F3H ;guarda F3H em R0 (R0=F3H)
P1,A ;escreve conteudo de A na
porta P1
ADD A,R0 ;soma A com R0 e guarda em A
MOV P1,A ;escreve conteudo de A na
porta P1
FIM:
JMP FIM
;loop infinito!

Microcontroladores - 8051

Estrutura da Linguagem Assembly


000E
000E 32
000F
000F 32

37
38
39
40
41
42

SERIAL:
RETI
T0INT:
RETI
END

;ISR da UART

;ISR do TIMER0

No lines contained errors.


No lines contained warnings.

ARQUIVO: MECA1.HEX
:03000000020100FA
:0300230002010EC9
:03000B0002010FE0
:10010000758130741F78F3F59028F59080FE3232B7
:00000001FF
Microcontroladores - 8051

21

AVSIM51 - AVOCET
AVSIM51 INTERFACE DO USURIO

COMPILANDO E LINKEDITANDO:

Microcontroladores - 8051

AVSIM51 - AVOCET
AVSIM51 INTERFACE DO USURIO (cont.)

Microcontroladores - 8051

22

AVSIM51 - AVOCET
AVSIM51 meca1.hex (carregado)

Microcontroladores - 8051

AVSIM51 - AVOCET
AVSIM51 meca1.hex (sequncia de execuoexecuo-1o passo
passo--F10)
F10)

Microcontroladores - 8051

23

AVSIM51 - AVOCET
AVSIM51 meca1.hex (sequncia de execuoexecuo-2o passo
passo--F10)
F10)

Microcontroladores - 8051

AVSIM51 - AVOCET
AVSIM51 meca1.hex (sequncia de execuoexecuo-3o passo
passo--F10)
F10)

Microcontroladores - 8051

24

AVSIM51 - AVOCET
AVSIM51 meca1.hex (sequncia de execuoexecuo-4o passo
passo--F10)
F10)

Microcontroladores - 8051

AVSIM51 - AVOCET
AVSIM51 meca1.hex (sequncia de execuoexecuo-5o passo -F10)
F10)

Microcontroladores - 8051

25

AVSIM51 - AVOCET
AVSIM51 meca1.hex (sequncia de execuoexecuo-6o passo -F10)
F10)

Microcontroladores - 8051

AVSIM51 - AVOCET
AVSIM51 meca1.hex (sequncia de execuoexecuo-7o passo -F10)
F10)

Microcontroladores - 8051

26

AVSIM51 - AVOCET
AVSIM51 meca1.hex (sequncia de execuoexecuo-8o passo -F10)
F10)

Microcontroladores - 8051

PSW Register
CY

AC
CY
AC
F0
RS1
RS0
OV
P

F0
PSW.7
PSW.6
PSW.5
PSW.4
PSW.3
PSW.2
PSW.1
PSW.0

RS1

RS0

0V

Carry Flag
Auxiliary Carry Flag
Available to the user for GP
Register Bank selector bit 1
Register Bank selector bit 0
Overflow Flag
User definable bit
Parity Flag Set/Erased by HD

RS1

RS0

Register Bank

Address

00H00H-07H

08H08H-0FH

10H10H-17H

18H18H-1FH

Microcontroladores - 8051

27

Instruo ADD & PSW

EXEMPLO 2.2
Mostra o status das flags CY, AC e P aps a adio de 38 H e
2FH nas seguintes instrues:
Prog--Seg:
Prog
MOV A,#38H
ADD A,#2FH ;aps a adio temos: A=67H e CY=0

OPERAO:
38H

00111000

+2FH
67H

00101111
01100111

CY = 0 visto que NO H carry alm do bit D7


AC = 1 visto que H carry do bit D3 para o bit D4
P = 1 visto que o acumulador contm um nmero IMPAR de 1s.
Microcontroladores - 8051

Instruo ADD & PSW

EXEMPLO 2.3
Mostra o status das flags CY, AC e P aps a adio de 9CH e
64H nas seguintes instrues:
Prog--Seg:
Prog
MOV A,#9CH
ADD A,#64H ;aps a adio temos: A=00H e CY=1

OPERAO:
9CH 10011100
+64H
01100100
100H 100000000

CY = 1 visto que H carry alm do bit D7


AC = 1 visto que H carry do bit D3 para o bit D4
P = 0 visto que o acumulador contm um nmero PAR de 1s.
Microcontroladores - 8051

28

Instruo ADD & PSW

EXEMPLO 2.4
Mostra o status das flags CY, AC e P aps a adio de 88H e
93H nas seguintes instrues:
Prog--Seg:
Prog
MOV A,#88H
ADD A,#93H ;aps a adio temos: A=1BH e CY=1

OPERAO:
88H
+93H
11BH

10001000
10010011
100011011

CY = 1 visto que H carry alm do bit D7


AC = 0 visto que NO H carry do bit D3 para o bit D4
P = 0 visto que o acumulador contm um nmero PAR de 1s.
Microcontroladores - 8051

Acesso RAM usando Nomes de Registros


EXEMPLO 2.5
Contedo dos registros aps a execuo das seguintes
instrues:
Prog--Seg:
Prog
MOV
MOV
MOV
MOV
MOV

R0,#99H
R1,#89H
R2,#3FH
R7,#63H
R5,#12H

;carrega o valor 99H em R0


;carrega o valor 89H em R1
;carrega o valor 3FH em R2
;carrega o valor 63H em R7
;carrega o valor 12H em R5

OPERAO:
Aps a execuo do segmento de programa acima teremos:
Posio 00H da RAM contm o valor 99H
Posio 01H da RAM contm o valor 89H
Posio 02H da RAM contm o valor 3FH
Posio 07H da RAM contm o valor 63H
Posio 05H da RAM contm o valor 12H
Microcontroladores - 8051

29

Acesso RAM usando Endereo de Registros


EXEMPLO 2.6
Este modo denominado Endereamento Direto,
Direto, onde a
posio de memria RAM o primeiro parmetro da instruo:
Prog--Seg:
Prog
MOV
MOV
MOV
MOV
MOV

00,#99H
01,#89H
02,#3FH
07,#63H
05,#12H

;carrega o valor 99H em R0


;carrega o valor 89H em R1
;carrega o valor 3FH em R2
;carrega o valor 63H em R7
;carrega o valor 12H em R5

OPERAO:
Aps a execuo do segmento de programa acima teremos:
Posio 00H da RAM contm o valor 99H
Posio 01H da RAM contm o valor 89H
Posio 02H da RAM contm o valor 3FH
Posio 07H da RAM contm o valor 63H
Posio 05H da RAM contm o valor 12H
Microcontroladores - 8051

Chaveamento de Bancos de Registros


EXEMPLO 2.7
Acesso ao banco de registros 2 utilizando o bits PSW.RS1 e
PSW.RS0:
Prog--Seg:
Prog
SETB PSW.4
MOV R0,#99H
MOV R1,#89H
MOV R2,#3FH
MOV 77,#63H
MOV 55,#12H

;seleciona BANK 2
;carrega o valor 99H em R0
;carrega o valor 89H em R1
;carrega o valor 3FH em R2
;carrega o valor 63H em R7
;carrega o valor 12H em R5

OPERAO:
Posio 10H da RAM contm o valor 99H
Posio 11H da RAM contm o valor 89H
Posio 12H da RAM contm o valor 3FH
Posio 17H da RAM contm o valor 63H
Posio 15H da RAM contm o valor 12H
Microcontroladores - 8051

30

Movendo dado para o Stack


EXEMPLO 2.8
Este exemplo mostra o contedo da pilha (Stack) e o valor do
SP (Stack Pointer) quando se utiliza a instruo PUSH (POP
(POP):
):
Prog--Seg:
Prog
MOV R6,#99H
MOV R1,#89H
MOV R2,#3FH
PUSH 6
PUSH 1
PUSH 2

;carrega o valor 99H em R6 = 06H da RAM


;carrega o valor 89H em R1 = 01H da RAM
;carrega o valor 3FH em R2 = 02H da RAM
;1a operao no Stack
;2a operao no Stack
;3a operao no Stack

OPERAO:
;1a operao no Stack Posio 08H da RAM = 99H e SP=08H
;2a operao no Stack Posio 09H da RAM = 89H e SP=09H
;3a operao no Stack Posio 0AH da RAM = 3FH e SP=0AH

Microcontroladores - 8051

Movendo dado do Stack


EXEMPLO 2.9
Este exemplo mostra o contedo da pilha (Stack) e o valor do
SP (Stack Pointer) quando se utiliza a instruo POP (PUSH
(PUSH):
):
Prog--Seg:
Prog
SETB
POP
POP
POP

PSW.4
0
1
2

;RS0 = 1 seleciona BANK2


;1a operao no Stack
;2a operao no Stack
;3a operao no Stack

OPERAO: Observe que o STACK = registro do tipo LIFO


;1a operao no Stack Posio 10H da RAM = 3FH e SP=09H
;2a operao no Stack Posio 11H da RAM = 89H e SP=08H
;3a operao no Stack Posio 12H da RAM = 99H e SP=07H

Microcontroladores - 8051

31

Evitando conflito com Stack & Bancos de Registro


EXEMPLO 2.10
Este exemplo mostra como evitar conflito com o STACK e os
bancos de registros
Prog--Seg:
Prog
MOV
PUSH
PUSH
PUSH

SP,#2FH ;inicializa comeo da pilha em 30H


0
;1a operao no Stack
1
;2a operao no Stack
2
;3a operao no Stack

OPERAO: Observe que o STACK = registro do tipo LIFO


;1a operao no Stack Posio 30H da RAM = 99H e SP=30H
;2a operao no Stack Posio 31H da RAM = 89H e SP=31H
;3a operao no Stack Posio 32H da RAM = 3FH e SP=32H

Microcontroladores - 8051

Microcontroladores

CAPTULO 3
Conjunto de Instrues do 8051

Prof. Dr. Ivo Reis Fontes


ivo@feb.unesp.br

32

Simbologia

LEGENDA
SMBOLOS:

()
(( ))
rrr
dddddddd
aaaaaaaa
bbbbbbbb
i
eeeeeeee

INTERPRETAO:
Substitudo por
Contedo de
Dado apontado por
Um dos oito registros 000=R0, 001=R1, ...
Bits de dado
Bits de endero
Endereo de bit
Endereamento indireto usando R0 (i=0) ou R1 (i=1 )
Endereo relativo de 8 bits

Microcontroladores - 8051

Endereamento

MODOS DE ENDEREAMENTOS
REGISTER
Descrio:
Um dos operandos o minemnico de um registro

EXEMPLOS:
ADD A,R7
MOV PSW,#00011000B
INC DPTR

Microcontroladores - 8051

33

Endereamento cont.

MODOS DE ENDEREAMENTOS cont.


DIRETO
Descrio:
Pode acessar qualquer varivel no CHIP ou registro de
HARDWARE. Um byte adicional adicionado ao OPCODE
especificando a localizao a ser utilizada

EXEMPLOS:
MOV P1,A ;move o contedo de A para a porta 1
MOV SP,R0 ;move o contedo de Ro para o SP

Microcontroladores - 8051

Endereamento cont.

MODOS DE ENDEREAMENTOS cont.


INDIRETO
Descrio:
No 8051 os registros R0 e R1 podem operar como ponteiros de
localizaes de posio de memria de dados.
Neste modo de endereamento um dos parmetros e indicado por um
apontador que corresponde a: @R0 ou @R1

EXEMPLO:
LOOP:
MOV
MOV
INC
CJNE
...

R0,#60H ;carrega R0 com o endereo 60H


@R0,#0 ;move 00H para a posio de memria 60H
R0
;incrementa R0
R0,#80H,LOOP

Microcontroladores - 8051

34

Endereamento cont.

MODOS DE ENDEREAMENTOS cont.


IMEDIATO
Descrio:
Neste modo de endereamento um dos operandos da instruo um
constante de 88-bits ou 1616-bits

EXEMPLOS:
MOV P1,#01H ;escreve no registro da porta 1 o valor 01H
MOV DPTR,#1000H ;inicializa o apontador DPTR com 1000H

OBSERVAO:
DPTR um apontador usado com a instruo MOVX

Microcontroladores - 8051

Endereamento cont.

MODOS DE ENDEREAMENTOS cont.


RELATIVO
Descrio:
Este modo de endereamento utilizado somente com algumas
instrues de salto.
O endereamento relativo ou OFFSET um valor com sinal de 88bits que adicionado ao PC para formar o endereo da prxima
instruo a ser executada.

EXEMPLO:
SJMP THERE ;salta para a posio de memria de programa
;indicada por THERE e cujo OFFSET em relao
; posio atual da memria de programa + 2
;no mximo 255
Microcontroladores - 8051

35

Endereamento cont.

MODOS DE ENDEREAMENTOS cont.


ABSOLUTO
Descrio:
Este modo de endereamento utilizado somente com as instrues
ACALL e AJMP.
Permite um salto dentro de um segmento de 2Kbytes de memoria de
programa proporcionando 1111-bits menos significativos do endereo de
destino no OPCODE.
1o byte da instruo: (A10(A10-A8 + OPCODE da instruo)
2o byte da instruo: (A7(A7-A0)

EXEMPLOS:
AJMP THERE ;salta para a posio de memria indicada por THERE
ACALL MY_SBR ;chama a subrotina denominada MY_SBR

Microcontroladores - 8051

Endereamento cont.
MODOS DE ENDEREAMENTOS cont.
LONG
Descrio:
Este modo de endereamento utilizado somente com as instrues
LCALL e LJMP.
Estas instrues de 3 bytes incluem um endereo de destino
representado por 2 bytesPermite um salto em qualquer posio da
memria de programa
1o byte da instruo: OPCODE da instruo
2o byte da instruo: (A17(A17-A8)
3o byte da instruo: (A7(A7-A0)

EXEMPLO:
LCALL MY_SBR ;chama a subrotina MY_SBRmove o contedo
;cujo incio pode estar em qualquer posio da
;memria de programa

Microcontroladores - 8051

36

Endereamento cont.

MODOS DE ENDEREAMENTOS cont.


INDEXED
Descrio:
Este modo de endereamento utilizado um registro BASE (que o
apontador de dados DPTR) e um OFFSET contido no ACC para
formar o endereo efetivo para as instrues JMP e MOVC

Observao:
A instruo MOVC permite o acesso rea de cdigo de programa

EXEMPLO:
JMP @A+DPTR

;salta para a posio de memria cujo endereo


;efetivo composto pela soma do contedo do
;ACC e do DPTR

Microcontroladores - 8051

Instrues por Categoria


CONVENO PARA OS PARMETROS:
Rn
direct
@Ri
souce
dest
#data
#data 16
bit
rel
addr11
addr16
n,
n,m
m

aaaaaaaa
dddddddd

qualquer registro entre R0-R7


endereo interno de 8-bits (00H-FFH)
endereamento indireto usando R0 ou R1
qualquer dos endereamentos [Rn, direto, @ri]
qualquer dos endereamentos [Rn, direto, @ri]
constante 8-bits
constate 16-bits
endereo de bit 8-bits
offset com sinal 8-bits
endereo 11-bits da pgina de memria corrente
endereo 16-bits de qualquer posio de memria
Nmero de Ciclos de Mquina(n), Nmero de bytes(m)
8-bits de endereo
8-bits de dado
Microcontroladores - 8051

37

Instrues por Categoria

INSTRUES ARITMTICAS
So as instrues que permitem realizar operaes aritmticas entre
o operandos
ADDn,m
ADD1,1
ADD1,2
ADD1,1
ADD1,2

A,<src-byte> ;soma A com source/data e pe resultado em A


A,Rn
00101rrr
A,direct
00100101 aaaaaaaa
A,@Ri
0010011i
A,#data
00100100 dddddddd

ADDCn,m
ADDC1,1
ADDC1,2
ADDC1,1
ADDC1,2

A,<src-byte> ;soma incluindo o valor da CY


A,Rn
00110rrr
A,direct
00110101 aaaaaaaa
A,@Ri
0011011i
A,#data 00110100 dddddddd

Microcontroladores - 8051

Instrues por Categoria


SUBBn,m
1,1
1
SUBB1,
1,
1,2
SUBB 2
1,1
1
SUBB1,
1,
1,2
SUBB 2

A,<src-byte> ;subtrai source/data de A, pe resultado em A


A,Rn
10011rrr
A,direct 10010101 aaaaaaaa
A,@Ri
1001011i
A,#data 10010100 dddddddd

INCn,m
1,1
1
INC1,
1,1
1
INC1,
1,
1,2
INC 2
1,1
1
INC1,
2,
2,1
INC 1

<byte>
A
Rn
direct
@Ri
DPTR

;incrementa A/source
00010100
00011rrr
00010101 aaaaaaaa
0001011i
10100011

OBS: No h a operao de decremento imediato de DPTR

DECn,m
1,1
1
DEC1,
1,
1,1
DEC 1
1,2
2
DEC1,
1,1
1
DEC1,

<byte>
A
Rn
direct
@Ri

;decrementa A/source
00010100
00011rrr
00010101 aaaaaaaa
0001011
Microcontroladores - 8051

38

Instrues por Categoria


INSTRUES ARITMTICAS cont.
4,1
1
MUL4,

AB

4,1
1
DIV4,

AB

1,1
1
DA1,

;Multiplica/Divide o contedo de A com o de B


;e salva produto/quociente em A e resto em B
10100100
10000100

;Ajuste decimal do acumulador aps operao


;aritmtica
11010100

XRLn,m
XRL1,11
1,2
2
XRL1,
XRL1,11
XRL1,22
XRL1,22
XRL2,33

<dest-byte>,<src-byte> ;OR-exclusivo envolvendo 2 bytes


A,Rn
01101rrr
A,direct
01100101
A,@Ri
0110011i
A,#data
01100100 dddddddd
direct,A
01100010 aaaaaaaa
direct,#data 01100011 aaaaaaaa dddddddd
Microcontroladores - 8051

Instrues por Categoria


INSTRUES ARITMTICAS cont.
CLRn,m
CLR1,11
CLR1,22

bit
C
bit

;o bit indicado zerado

CLR1,11

;zera acumulador (ACC)

CPLn,m
CPL1,11
CPL1,22

bit
C
bit

;o bit indicado complementado

CPL1,11

;complementa acumulador (ACC)

11000011
11000010 bbbbbbbb

11100100

10110011
10110010 bbbbbbbb

11110100

Microcontroladores - 8051

39

Instrues por Categoria


INSTRUES ARITMTICAS cont.
RL1,1

;roda ACC para a esquerda 1 bit e coloca 0 em A.D0


00100011

1,1
1
RR1,

;roda ACC para a direita 1 bit e coloca 0 em A.D7

RLC1,1

;roda ACC para a esquerda 1 bit e coloca CY em A.D0


;e A.D7 em CY

RRC1,1

;roda ACC para a direita 1 bit e coloca CY em A.D0


;e A.D0 em CY

00000011

00110011

00010011
1,1
1 A
SWAP1,

;troca a posio dos NIBLES em A


11000100

Microcontroladores - 8051

Instrues por Categoria

INSTRUES LGICAS
ANLn,m
1,1
1
ANL1,
1,
1,2
ANL 2
1,1
1
ANL1,
1,
1,2
ANL 2
1,2
2
ANL1,
2,
2,3
ANL 3

<dest-byte>,<src-byte> ;AND lgico, resultado em A


A,Rn
01011rrr
A,direct
01010101 aaaaaaaa
A,@Ri
0101011i
A,#data
01010100 dddddddd
direct,A
01010010 aaaaaaaa
direct,#data 01010011 aaaaaaaa dddddddd

ANLn,m
2,2
2
ANL2,
2,
2,2
ANL 2

C,<src-bit>
C,bit
C,/bit

;AND lgico, variveis tipo bit


10000010 bbbbbbbb
10110000 bbbbbbbb

Microcontroladores - 8051

40

Instrues por Categoria

INSTRUES LGICAS cont.


ORLn,m
1,1
1
ORL1,
1,
1,2
ORL 2
1,1
1
ORL1,
1,
1,2
ORL 2
1,2
2
ORL1,
2,3
3
ORL2,

<dest-byte>,<src-byte> ;OR lgico


A,Rn
01001rrr
A,direct
01000101 aaaaaaaa
A,@Ri
0100011i
A,#data
01000100 dddddddd
direct,A
01000010 aaaaaaaa
direct,#data 01000011 aaaaaaaa dddddddd

ORLn,m
2,2
2
ORL2,
2,
2,2
ORL 2

C,<src-bit> ;OR lgico, variveis tipo bit


C,bit
01110010 bbbbbbbb
C,/bit
10100000 bbbbbbbb

Microcontroladores - 8051

Instrues por Categoria


INSTRUES LGICAS cont.
XRLn,m
XRL1,1
XRL1,2
XRL1,1
XRL1,2
XRL1,2
XRL2,3

<dest-byte>,<src-byte> ;OR-Exclusive
A,Rn
01101rrr
A,direct
01100101 aaaaaaaa
A,@Ri
0110011i
A,#data
01100100 dddddddd
direct,A
01100010 aaaaaaaa
direct,#data 01100011 aaaaaaaa dddddddd

Microcontroladores - 8051

41

Instrues por Categoria

TROCA DE VARIVEL
XCHn,m
XCH1,1
XCH1,2
XCH1,1

A,<byte> ;Troca Acumulador com varivel byte


A,Rn
11001rrr
A,direct
11000101 aaaaaaaa
A,@Ri
1100011i

TROCA DGITO
1,1
1
XCHD1,
A,@Ri ;Troca o Nible de menor ordem do
Acumulador, geralmente representando um dgito HEXA ou BCD,
com o Nibli de menor ordem de uma posio da memria RAM
interna

1101011i

Microcontroladores - 8051

Instrues por Categoria

OPERAO SOBRE BIT


SETBn,m
SETB1,1
SETB1,2

<bit>
C
bit

;Operao sobre uma varivel tipo bit


11010011
11010010 bbbbbbbb

OPERAO COM A PILHA


2,2
2
POP2,
direct
;O contedo da RAM interna endereada
pelo ponteiro de pilha lida para o Acumulador e o ponteiro de
pilha decrementado de 1 (Recupera ACC da pilha!)

11010000 aaaaaaaa
2,2
2
PUSH2,
direct
;O contedo do Acumulador escrito na
RAM interna endereada pelo ponteiro de pilha e o ponteiro de
pilha incrementado de 1 (Salva ACC na pilha!)

11000000 aaaaaaaa

Microcontroladores - 8051

42

Instrues por Categoria

RETORNO DE SUBROTINA
2,1
1
RET2,
;Retorna de uma subrotina. recupera ponteiro da
prxima instruo da pilha e decrementa ponteiro de pilha de 2

00100010

RETORNO DE ISR (INTERRUPT SERVICE ROUTINE)


2,1
1
RETI2,
;Retorna de uma rotina de tratamento de interrupo,
recupera ponteiro da prxima instruo da pilha e decrementa
ponteiro de pilha de 2

00110010

OPERAO DE ATRASO
1,1
1
NOP1,

;Introduz um atraso de 1 ciclo de mquina


00000000

Microcontroladores - 8051

Instrues por Categoria


INSTRUES DE MOVIMENTAO DE DADOS
n,m
m
MOV n,
1,
1,1
1
MOV
1,2
2
MOV1,
1,1
1
MOV1,
1,
1,2
MOV 2
1,1
1
MOV1,
2,
2,1
MOV 1
1,2
2
MOV1,
1,
1,2
MOV 2
2,2
2
MOV2,
2,
2,3
MOV 3
2,2
2
MOV2,
2,
2,3
MOV 3
1,1
1
MOV1,
2,
2,2
MOV 2
1,2
2
MOV1,

<dest-byte>,<src-byte>
;Transfere byte
A,Rn
11101rrr
A,direct
11100101 aaaaaaaa
A,@Ri
1110011i
A,#data
01110100 dddddddd
Rn,A
11111rrr
Rn,direct 10101rrr aaaaaaaa
Rn,#data 01111rrr dddddddd
direct,A
11110101 aaaaaaaa
direct,Rn
10001rrr aaaaaaaa
direct,direct 10000101 aaaaaaaa aaaaaaaa
direct,@Ri 1000011i aaaaaaaa
direct,#data 01110101 aaaaaaaa dddddddd
@Ri,A
1111011i
@Ri,direct 1010011i aaaaaaaa
@Ri,#data 0111011i dddddddd
Microcontroladores - 8051

43

Instrues por Categoria


INSTRUES DE MOVIMENTAO DE DADOS cont.
2,3
3
MOV2,

DPTR,#data16 ;carrega DPTR com o valor data16

2,1
1
MOVC2,

A,@A+DPTR

2,1
1
MOVC2,

A,@A+PC

10010000 dddddddd dddddddd

2,1
1
MOVX2,

A,@Ri

;carrega A com o conteda de memria de


; programa apontada por DPTR e OFFSET
; em A 10010011
;carrega A com o conteda de memria de
; programa apontada por PC e OFFSET em
;A 10000011
;carrega A com o contedo da RAM apontada por Ri
1110001i

2,1
1
MOVX2,

2,1
1
MOVX2,

2,1
1
MOVX2,

A,@DPTR ;carrega A com o contedo da memria de dados


;apontada por DPTR 11100000
@Ri,A
;carrega a posio de RAM apontada por Ri com o
;valor contido em A 11110011
@DPTR,A ;transfere para a memria de dados apontada por
;DPTR o valor contido em A 11110000
Microcontroladores - 8051

Instrues por Categoria


INSTRUES DE MOVIMENTAO DE DADOS cont.
n,m
m
MOV n,
1,
1,2
2
MOV
2,2
2
MOV2,

<dest-bit>,<src-bit>
;Transfere bit
C,bit
10100010 bbbbbbbb
bit,C
10010010 bbbbbbbb

INSTRUES BOOLEANAS COM BIT PARA SALTO


2,2
2
JC2,
2,2
2
JNC2,
2,
2,3
3
JB
2,3
3
JNB2,
2,2
2
JBC2,

rel
rel
bit,rel
bit,rel
bit,rel

;salta se CY=1
01000000 eeeeeeee
;salta se C=0
01010000 eeeeeeee
;salta se bit=1
00100000 bbbbbbbb eeeeeeee
;salta se bit=0
00110000 bbbbbbbb eeeeeeee
;salta se bit=1 e faz bit=0 01010000 eeeeeeee

INSTRUES BOOLEANAS COM ACUMULADOR PARA SALTO


2,2
2
JNZ2,
2,
2,2
2
JZ

rel
rel

;salta se ACC diferente de Zero 01110000 eeeeeeee


;salta se ACC igual a Zero
01100000 eeeeeeee
Microcontroladores - 8051

44

Instrues por Categoria

INSTRUES DE SALTOS
2,2
2 addr11
ACALL2,
2,
2,3
3
LCALL
addr16
2,2
2
AJMP2,
addr11

;chama subrotina
aaa10001 aaaaaaaa
;chama subrotina
00010010 aaaaaaaa aaaaaaaa
;salto incondicional dentro do banco de 2K
aaa00001 aaaaaaaa

2,3
3
LJMP2,

addr16

;salto incondicional para qualquer posio

2,2
2
SJMP2,

rel

2,1
1
JMP2,

@A+DPTR ; salto incondicional com destino indexado

00010010 aaaaaaaa aaaaaaaa

;salto incondicional com endereamento relativo


10000000 eeeeeeee

01110011

Microcontroladores - 8051

Instrues por Categoria

INSTRUES DE SALTOS cont.


2,3
3
CJNE2,

A,direct,rel

;compara e salta se no for igual


10110101 aaaaaaaa eeeeeeee

2,3
3
CJNE2,

A,#data,rel

;compra imediato e salta se no for igual


10110100 dddddddd eeeeeeee

2,3
3
CJNE2,

Rn,#data,rel

;compara direto e salta se no for igual


10111rrr dddddddd eeeeeeee

2,3
3
CJNE2,

@Ri,#data,rel ;compara indexado e salta se no for igual


1011011i eeeeeeee

2,2
2
DJNZ2,

Rn,rel

;decrementa registro e salta se no zerar


11011rrr eeeeeeee

2,3
3
DJNZ2,

direct,rel

;decrementa direto e salta se no zerar


11010101 aaaaaaaa eeeeeeee

Microcontroladores - 8051

45

Temporizao

TIME DELAY
TEMPOS NO 8051
Tinstruo = n Ciclos de Mquina
Ciclo de Mquina (MC) = Tclock
Exemplo 3.1
Considerando 3 casos de frequncia de cristal iremos calcular o
perodo de cada ciclo de mquina (MC) para o 8051
a) 11,0592 MHz

b) 16 MHz

c) 20 MHz

Soluo:
a) 11,0592 MHz/12 = 921.6 kHz ;MC = 1/921,6 kHz = 1,085 s
b) 16 MHz/12 = 1.333 MHz
;MC = 1/1.333 MHz = 0,75 s
c) 20 MHz/12 = 1,66 MHz
;MC = 1/1,66 MHz = 0,60 s
Microcontroladores - 8051

Temporizao

TIME DE EXECUO DE INSTRUES


Exemplo 3.2
Considerando um 8051 com cristal de 11,0592 MHz determine o tempo
para gasto para executar as seguintes instrues:
INSTRUES:
a)
b)
c)
d)
e)
f)
g)

SOLUO:

MOV R3,#55H
DEC R3
DJNZ R2,target
LJMP THERE_FAR
SJMP THERE_NEAR
NOP
MUL AB

(1 MC)
(1 MC)
(2 MC)
(2 MC)
(2 MC)
(1 MC)
(4 MC)

1,085 s
1,085 s
2,17 s
2,17 s
2,17 s
1,085 s
4,34 s

Microcontroladores - 8051

46

Temporizao

CLCULO DE DELAY
Exemplo 3.3
Determine o tempo de delay para o programa abaixo considerando que
o cristal utilizado com o 8051 tem frequncia de 11,0592 MHz
MOV

A,#55H

AGAIN:
MOV P1,A
CALL DELAY ;MC de durao = 404 (Verifique!!!)
CPL A
SJMP AGAIN
;---------------------Time
Time Delay-------------Delay-------------DELAY:
;MC para a subrotina = 402 (Verifique!!!)
MOV R3,#200
HERE: DJNZ R3,HERE
RET
Microcontroladores - 8051

Temporizao

CLCULO DE DELAY
Exemplo 3.4
Repetir o exemplo anterior, considerando agora a incluso de algumas
instrues NOP para aumentar o atraso
MOV

A,#55H

AGAIN:
MOV P1,A
CALL DELAY ;MC de durao = 404 (Verifique!!!)
CPL A
SJMP AGAIN
;---------------------Time
Time Delay-------------Delay-------------DELAY:
;MC para a subrotina = 402 (Verifique!!!)
MOV R3,#200
HERE: NOP
DJNZ R3,HERE
RET
Microcontroladores - 8051

47

Temporizao

CLCULO DE DELAY
Exemplo 3.5
Usando LOOPs embutidos para aumentar o atraso
MOV A,#55H
AGAIN: MOV P1,A
CALL DELAY
CPL A
SJMP AGAIN
;---------------------Time
Time Delay-------------Delay-------------DELAY:
;agora temos um delay_zao!!! (:(:MOV R2,#200
HERE1: MOV R3,#10
HERE2: DJNZ R3,HERE2
DJNZ R2,HERE1
RET
Que tal calcular o tempo de durao deste delay?!!!
Microcontroladores - 8051

Microcontroladores

CAPTULO 4
8051 - Hardware externo necessrio

Prof. Dr. Ivo Reis Fontes


ivo@feb.unesp.br

48

Clock

Gerador de Clock Interno


XTAL
11,0952 MHz

19
18

C1
30 pF

XTAL1
XTAL2

C2
30 pF

Gerador de Clock Externo


19
18

CLK

XTAL1
XTAL2

Microcontroladores - 8051

Reset

Circuito de (Auto
(Auto)Reset
)Reset
VCC
R1
100R

CONDIES DE RESET

VCC
C3
10 uF
9
R2
8K2

RST

REG

VALOR

PC

0000H

ACC

00H

00H

PSW

00H

SP

0007H

DPTR

0000H

Microcontroladores - 8051

49

Pinos para ROM/RAM Externos

8051/8031
EA 31

P0.0-P0.7

P2.0-P2.7

VCC/GND
AD0-AD7
39-32
A8-A15
21-28

PSEN 29
30
ALE
P3.7 17
P3.6 16

RD
WR

Microcontroladores - 8051

Pinos para ROM/RAM Externos

Microcontroladores - 8051

50

RAM Externa

P0

D0-D7

RAM
1K

8051
D

ALE

A0-A7

G
74LS3373

EA
P2.0 (A8)

A8

P2.1 (A9)

A9

RD

OE

WR

W
CS

Microcontroladores - 8051

Configurao dos pinos das Portas

BARRAMENTO INTERNO DO 8051


Vcc
READ
LATCH

READ
PIN

INTERNAL
PULL-UP

P?

SET

WRITE
LATCH
CLR

P0 no tem o resistor de
PULL-UP (open-drain)

Microcontroladores - 8051

51

Port 0: I/O, Coletor Aberto


Esta porta inicialmente configurada como porta de sada
Para operao como porta de sada necessita de resitores de PULLPULL-UP

8051/8031

P0.0-P0.7

Vcc

Vcc

Vcc

Vcc

Vcc

Vcc

Vcc

Vcc

D0

D1

D2

D3

D4

D5

D6

D7

AD0-AD7
39-32

Microcontroladores - 8051

Port 0 como Entrada


P0 tem duplo papel:
- Porta de I/O
- Barramento AD0
AD0--AD7 (MULTIPLEXADO)
Segmento de Programa:
MOV

A,#0FFH

;A = FF hex

MOV

P0,A

;faz com que P0 seja porta de


;entrada, escrevendo todos bits
;iguais a 1

BACK:

MOV

A,P0

;l dado de P0

MOV

P1,A

;envia para P1

SJMP

BACK

;continua fazendo a mesma coisa

Microcontroladores - 8051

52

Port 1: I/O, Sem Resistores de PULL-UP


Inicialmente configurada como porta de sada

BACK:

MOV

A,#0FFH;A=FFH

MOV

P1,A

;P1 como porta de entrada

MOV

A,#55H

MOV

A,P1

;pega dado de P1

MOV

P1,A

MOV

R7,A

;salva no reg R7

ACALL DELAY

ACALL DELAY ;espera

CPL

MOV

A,P1

;pega outro dado em P1

SJMP

BACK

MOV

R6,A

;salva em reg R6

ACALL DELAY ;espera


MOV

A,P1

;pega outro dado em P1

MOV

R5,A

;salva em reg R5

Microcontroladores - 8051

Port 2: I/O, Sem Resistores de PULL-UP


Inicialmente configurada como porta de sada
Duplo papel:
Porta de I/O
Barramento de Endereo: A8A8-A15
BACK:

MOV

A,#55H

MOV

P2,A

ACALL DELAY
CPL

SJMP

BACK

BACK:

MOV

A,#0FFH ;A=FF hex

MOV

P2,A

;P2 como porta de entrada

MOV

A,P2

;pega dado em P2

MOV

P1,A

;manda para P1

SJMP

BACK

;fica fazendo a mesma coisa

Microcontroladores - 8051

53

Um exemplo de operao com portas

EXEMPLO 4.1
Escrever um programa que faa o seguinte:
a) Fica monitorando o estado do pino P1.2
b) Quando vai para nvel alto, escreve 45H na P0
c) Envia uma transio de altoalto-para
para--baixo em P2.3

SOLUO:

AGAIN:

SETB
MOV
JNB
MOV
SETB
CLR
JMP

P1.2
A,#45H
P1.2,AGAIN
P0,A
P2.3
P2.3
$

;faz P1.2 operar como entrada


;A=45H
;verifica estado de P1.2
;escreve A em P0
;P2.3=HIGH
;P2.3=LOW
;fica em loop

Microcontroladores - 8051

UM PROTTIPO COM O 8031

ESQUEMTICO ANEXO

Microcontroladores - 8051

54

Exemplo de Programao com Portas


EXEMPLO 4.1
Considerando o hardware abaixo, escrever (compilar e linkeditar) um programa
que faa o seguinte:

Usando os LEDs como contador binrio de 3 bits, mostrar o nmero de vezes


que a chave SW2 acionada.
Microcontroladores - 8051

Exemplo de Programao com Portas


1a Soluo

Inicialmente apresentaapresenta-se uma soluo simples, que no


leva em considerao o bauncing que possa ocorrer ao se
pressionar/soltar a chave.

;CHAVE1.ASM
;
SW2
EQU
P1.3
;
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
ORG RESET
INIC
CLR A
;ZERAR CONTADOR
MOV P1,A
;APAGAR LEDS
SETB SW2
;PROGRAMAR P1.3 COMO ENTRADA
AQUI1 JB SW2,AQUI1
;AGUARDAR ACIONAMENTO
INC A
MOV P1,A
;DAR SADA AO CONTADOR
SETB SW2
;GARANTIR P1.3 COMO ENTRADA
AQUI2 JNB SW2,AQUI2
;AGUARDAR LIBERAR CHAVE
SJMP AQUI1
END
Microcontroladores - 8051

55

Exemplo de Programao com Portas


2a Soluo
Esta soluo, um pouco mais evoluida, considera o bauncing que possa
ocorrer ao se pressionar/soltar a chave, empregando uma rotina de retardo.
;CHAVE2.ASM
;
; NESTE PROGRAMA SE PRETENDE ELIMINAR O BOUNCING COM
RETARDOS ; O VALOR DO RETARDO PARTICULAR PARA CADA CIRCUITO
(DEPENDE ; DO TAMANHO DOS CABOS, QUALIDADE DA CHAVE, ETC)
RECOMENDA--SE: ; DETERMINAR EMPIRICAMENTE O MELHOR RETARDO
RECOMENDA
PARA CADA
; CIRCUITO
;
RTD
EQU
500
;RTD>256
SW2
EQU
P1.3
;
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
ORG RESET
INIC
CLR A
;ZERAR CONTADOR
Microcontroladores - 8051

Exemplo de Programao com Portas


2a Soluo CONT.
AQUI1

AQUI2

MOV P1,A
SETB SW2
JB SW2,AQUI1
INC A
MOV P1,A
SETB SW2
ACALL RTD
JNB SW2,AQUI2
ACALL RTD
SJMP AQUI1

;APAGAR LEDS
;PROGRAMAR P1.3 COMO ENTRADA
;AGUARDAR ACIONAMENTO
;DAR SADA AO CONTADOR
;GARANTIR P1.3 COMO ENTRADA
;ELIMINAR BOUNCING
;AGUARDAR LIBERAR CHAVE
;ELIMINAR BOUNCING

;
;ROTINA PARA GERAR UM RETARDO
RETARD
MOV R7,# HIGH RTD
L1
MOV R6,# LOW RTD
L2
DJNZ R6,L2
DJNZ R7,L1
RET
END
Microcontroladores - 8051

56

Exemplo de Programao com Portas


3a Soluo
Esta soluo, mais eficiente, considera o bauncing que pose ocorror ao se
pressionar/soltar a chave, empregando subrotina para as duas transio da
chave e .
;CHAVE3.ASM
;
; SOLUCAO MAIS EFICIENTE PARA ELIMINAR O BOUNCING COM
RETARDOS
; USAMUSAM-SE ROTINAS QUE AGUARDAM A ESTABILIZACAO DA CHAVE
; HA UMA PARA AS TRANSIES DE 0 PARA 1 E OUTRA DE 1 PARA 0
; ESTA TECNICA SE ADAPTA MELHOR AS VARIACOES ENTRE OS
CIRCUITOS
;
RTD
EQU
100
SW2
EQU
P1.3
;
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
ORG RESET
INIC
CLR A
;ZERAR CONTADOR
Microcontroladores - 8051
MOV P1,A
;APAGAR LEDS

Exemplo de Programao com Portas


3a Soluo CONT.
SETB SPW12, A ;PROGRAMA P1.3 COMO ENTRADA
ACALL RBT_1_0 ;TRANSICAO LIMPA DE 1 PARA 0
INC A
MOV P1,A
;DAR SADA AO CONTADOR
ACALL RBT_0_1
;TRANSICAO LIMPA DE 0 PARA 1
SJMP AQUI
;
;ELIMINAR BOUNCING NAS TRANSIES DE 0 PARA 1
RBT_0_1 MOV R7,#RTD
LB1
JNB SW2,RBT_0_1
DJNZ R7,LB1
RET
;
;ELIMINAR BOUNCING NAS TRANSIES DE 1 PARA 0
RBT_1_0 MOV R7,#RTD
LB2
JB SW2,RBT_1_0
DJNZ R7,LB2
RET
END
AQUI

Microcontroladores - 8051

57

Microcontroladores

CAPTULO 5
INTERRUPES

Prof. Dr. Ivo Reis Fontes


ivo@feb.unesp.br

INTERRUPES DO 8051
EVENTOS e ISRs
Executando
Programa

Salva
PC no
STACK

Inicio da
ISR

EVENTO
Final da
ISR
Continua
Execuo
do
Programa

Recuper
a PC do
STACK
Microcontroladores - 8051

58

INTERRUPES DO 8051
Interrupo o processo atravs do qual a execuo de
um programa pode ser interrompida de forma assncrona
por um evento interno/externo. Associada ao evento existe
uma rotina de servio (ISR)
No DE INTERRUES:
2 EXTERNAS
2 TMRs
1 SERIAL

REGISTROS ASSOCIADOS:
IE
IP
TCON

Microcontroladores - 8051

INTERRUPES DO 8051
ESQUEMA DE INTERRUPO

Microcontroladores - 8051

59

REGISTROS & INTERRUPES


REGISTROS
IE Interrupt Enable

B6

B5

B4

B3

B2

B1

B0

EA

ET2

ES

ET1

EX1

ET0

EX0

SERIAL

TMR1

EXT1

TMR0

EXT0

B7

ENABLE INTERRUPT

IE

0 = DISABLE

TMR2 (8052)

1 = ENABLE

Microcontroladores - 8051

REGISTROS & INTERRUPES


REGISTROS CONT.
IP Interrupt Priority

B7

B6

B5

B4

B3

B2

B1

B0

PT2

PS

PT1

PX1

PT0

PX0

SERIAL

TMR1

EXT1

TMR0

EXT0

IP

0 = LOW

TMR2 (8052)

1 = HIGH

Microcontroladores - 8051

60

REGISTROS & INTERRUPES


REGISTROS CONT.
TCON Timer Control

B6

B5

B4

B3

B2

B1

B0

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

FLAG EXT1

BORDA/NVEL EXT1

FLAG EXT0

BORDA/NVEL EXT0

B7

RUN/STOP TMR0

TIMER 0

OVL TMR0

TIMER 1

RUN/STOP TMR1

TCON

TIMER 0

OVL TMR1

TIMER 1

Microcontroladores - 8051

VETORES & INTERRUPES


VETOR DE INTERRUPO
Cada interrupo atendida por uma ISR (Interrupt Service Routine)
apontada para as seguintes posies de memria:

RESET
INT0
TMR0
INT1
TMR1
UART

IE0
TF0
IE1
TF1
RI+TI

00H
03H
0BH
13H
1BH
23H

O + indica OU!

Microcontroladores - 8051

61

EVENTOS & INTERRUPES


A seguir apresentada a sequncia de eventos em ciclos
de mquina no atendimento de uma interruo

Microcontroladores - 8051

EXEMPLO
EXEMPLO 5.1
A seguir apresentado um exemplo que faz uso da interruo
externa INT1 para acender os LEDs do exemplo visto anteriormente.
Observao: Considere que a SW2 est conectada entrada INT1,
ou seja, pino P3.3 !
;LED_INT1.ASM
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
ORG RESET
AJMP INICIO
;
ORG EXTI1
AJMP EXT1
;
Microcontroladores - 8051

62

EXEMPLO
EXEMPLO 5.1 CONT.
ORG 50H
INICIO MOV A,#01001001B
CLR C
MOV P1,A
SETB EX1
;HABILITAR INT. EXT. 1
SETB EA
;HABILITAR FLAG GERAL
SJMP $
;LOOP INFINITO
;
;ROTINA PARA ATENDER A INTERRUPCAO EXTERNA 1
EXT1
RLC A
;ACENDER LEDS EM SEQUENCIA
MOV P1,A
RETI
END

Microcontroladores - 8051

Microcontroladores

CAPTULO 6
TEMPORIZADORES/CONTADORES

Prof. Dr. Ivo Reis Fontes


ivo@feb.unesp.br

63

Os Temporizadores/Contadores
NO 8051:
Temporizadores/Contadores de 1616-bits:
TIMER 0 (TMR0
(TMR0))
TIMER 1 (TMR1
(TMR1))

Operao:
TEMPORIZADOR

Os registradores (SFR) TL0/TL1 e TH0/TH1 formam os registros


de 1616-bits, que so incrementados a cada ciclo de mquina
(base de tempo a partir do CLOCK, ou seja, FTMR = Fclock/12)

CONTADOR

O registradores de 1616-bits so incrementados a cada transio


de 1 para 0 (
() nos pinos P3.4(T0) e P3.5(T1) respectivamente

Microcontroladores - 8051

Registros & Temporizadores/Contadores


SFR associados aos TMRs:
TMOD
TCON

TMOD
Os bits do registrador TMOD (SFR) definem:

Modo de Operaao (M0/M1


(M0/M1))
Contador/Temporizador (C
(Contador/~Temporizador)
Contagem depende do estado de INT0/INT1 e de TR0/TR1 (GATE
GATE))

TCON
Os bits do registrador TCON (SFR) correspondem a:

FLAG de OVERFLOW (TF0/TF1


TF0/TF1))
FLAG de Interrupes na transio de INT0/INT1 (IE0/IE1
IE0/IE1))
RUN/STOP TMR0/TMR1 (TR0/TR1
(TR0/TR1))
BORDA/NVEL para aceitar pedido de interruo (IT0/IT1
(IT0/IT1))
Microcontroladores - 8051

64

Registros de Controle
TMOD:
B5

B4

B3

B2

B1

B0

GATE

C/~T

M1

M0

GATE

C/~T

M1

M0

BIT0 MODO

CONTROLE DO GATE

CONTADOR/TEMPORIZADOR

BIT1 MODO

BIT0 MODO

B6

BIT1 MODO

B7

CONTADOR/TEMPORIZADOR

TMOD

TIMER 0

CONTROLE DO GATE

TIMER 1

Microcontroladores - 8051

Registros de Controle

TCON:

B6

B5

B4

B3

B2

B1

B0

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

FLAG EXT1

BORDA/NVEL EXT1

FLAG EXT0

BORDA/NVEL EXT0

B7

RUN/STOP TMR0

TIMER 0

OVL TMR0

TIMER 1

RUN/STOP TMR1

TCON

TIMER 0

OVL TMR1

TIMER 1

Microcontroladores - 8051

65

MODOS
MODOS
Os modos de operao de TMR0/TMR1 so ajustado atravs
dos bits M0 e M1 em TMOD

MODO 0

TIMER 0/1
MODE 0

Microcontroladores - 8051

MODOS

MODO 1

TIMER 0/1
MODE 1

Microcontroladores - 8051

66

MODOS

MODO 2

TIMER 0/1
MODE 2

Microcontroladores - 8051

MODOS
MODO 3

TIMER 0
MODE 3

Neste modo o TMR1 suspende contagem e o TMR0 opera como dois Timers de
8 bits
Microcontroladores - 8051

67

EXEMPLOS
EXEMPLO 6.1
No exemplo a seguir acendeacende-se os os leds vermelho, amarelo e verde
do EXEMPLO 4.1, em seqncia, a uma velocidade de 10 Hz,
utilizando a interrupo de T0 (MODO=1)com RELOAD apropriado.
ATENO: Ser necessrio calcular o valor de recarga para o T0

Setup dos Registros


TMOD

IE

GATE

C/~T

M1

M0

GATE

C/~T

M1

M0

EA

ES

ET1

EX1

ET0

EX0

Microcontroladores - 8051

EXEMPLOS
EXEMPLO 6.1 CONT.
Calculo do valor de carga no
registros do TIMER

;LED_10HZ.ASM
;
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
DEZ_HZ EQU 8800H
;N = 30720 (CLOCK=3,6864 MHz)
;RELOAD = 34816 (8800H) F = 10
Hz
ORG RESET
AJMP INIC
;
ORG TIMER0
AJMP TIM0
;
ORG 50H
Microcontroladores - 8051

68

EXEMPLOS
EXEMPLO 6.1 CONT.
INIC

;
TIM0

MOV TL0,#LOW DEZ_HZ


MOV TH0,#HIGH DEZ_HZ
MOV TMOD,#61H
;TIMER 0 EM MODO 1
MOV IE,#82H
;#10000010B
MOV P1,#0
;APAGAR TODOS OS LEDS
MOV A,#01001001B
PSW.CY
A
CLR C
0 0 1 0 0 1 0 0 1
SETB TR0
SJMP $
RLC
ORG 100H
MOV TL0,#LOW ((DEZ_HZ+2
DEZ_HZ+2)) ;REINICALIZAR
MOV TH0,#HIGH DEZ_HZ
;O CONTADOR
RLC A
MOV P1,A
RETI
END
Microcontroladores - 8051

EXEMPLOS
EXEMPLO 6.2
No exemplo a seguir acendeacende-se os os leds vermelho, amarelo e verde
do EXEMPLO 4.1, em seqncia, a uma velocidade de 1 Hz,
Hz, utilizando
a interrupo de T0 com RELOAD apropriado.
ATENO:: necessrio calcular o valor de recarga para o T0!
ATENO
PROBLEMA:: No mais possvel utilizar a soluo adotada em EX 6.1!
PROBLEMA
A sada adotar um contador!

Setup dos Registros


TMOD

IE

GATE

C/~T

M1

M0

GATE

C/~T

M1

M0

EA

ES

ET1

EX1

ET0

EX0

Microcontroladores - 8051

69

EXEMPLOS
EXEMPLO 6.2 CONT.
;LED_1HZ.ASM
;
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;N = 307200 (CLOCK=3,6864 MHz)
;Impossvel!
;Adota--se: RELOAD=8800H (10 Hz)
;Adota
;e CONTADOR = 10
DEZ_HZ
EQU 8800H
DIVISOR
EQU 10
;
ORG RESET
AJMP INIC
;
ORG TIMER0
AJMP TIM0
Microcontroladores - 8051

EXEMPLOS
EXEMPLO 6.2 CONT.
;
INIC

ORG 50H
MOV TL0,#LOW DEZ_HZ
MOV TH0,#HIGH DEZ_HZ
MOV R7,#DIVISOR
MOV TMOD,#61H
MOV IE,#82H
MOV P1,#0
MOV A,#01001001B
CLR C
SETB TR0
SJMP $

;PREPARAR DIVISAO POR 10


;TIMER 0 EM MODO 1
;HABILITA INTERRUPO
;APAGAR TODOS OS LEDS

;
TIM0

ORG 100H
MOV TL0,#LOW ((DEZ_HZ+2
DEZ_HZ+2))
MOV TH0,#HIGH DEZ_HZ

;REINICALIZAR
;O CONTADOR

Microcontroladores - 8051

70

EXEMPLOS
EXEMPLO 6.2 CONT.

FIM

DJNZ R7,FIM
MOV R7,#DIVISOR
RLC A
MOV P1,A
RETI
END

;DECREMENTA DIVISOR
;(EQUIV. 10 Hz/10)
Hz/10)

Microcontroladores - 8051

EXEMPLOS
EXEMPLO 6.3
No exemplo a seguir gera um trem de pulsos, conforme mostrado na
figura abaixo, utilizando a interrupo do TIMER 0.

Setup dos Registros


TMOD

IE

GATE

C/~T

M1

M0

GATE

C/~T

M1

M0

EA

ES

ET1

EX1

ET0

EX0

Microcontroladores - 8051

71

EXEMPLOS
EXEMPLO 6.3 CONT.
SOLUO:
Ser necessrio calcular DOIS valores de RELOAD:
1) RELOAD para 1 mseg:
1 mseg = (12 N)/FCLOCK = (12 N)/3,6864 MHz
N1mseg = (10-3 seg 3,6842
3,6842
106)/12 = 307,2 307
RELOAD1mseg = 65229 = FEC0H

1) RELOAD para 40 seg:


40 seg = (12 N)/FCLOCK = (12 N)/3,6864 MHz
N seg = (40
(4010-6 seg 3,6842
3,6842
106)/12 = 12,288 12
RELOAD1mseg = 65524 = FFF4H
Microcontroladores - 8051

EXEMPLOS
EXEMPLO 6.3 CONT.
;ONDA1.ASM
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
SAIDA
EQU P1.7
R_1MS
EQU 0FEC0H
;RETARDO DE 1
MILISEG
R_40MICRO
EQU 0FFF4H
;RETARDO DE 40 MICROSEG
;
ORG RESET
AJMP INICIO
;
ORG TIMER0
AJMP TIM0
;
ORG 50H
INICIO MOV TL0,#LOW R_1MS
Microcontroladores - 8051

72

EXEMPLOS
EXEMPLO 6.3 CONT.
MOV TH0,#HIGH R_1MS
MOV TMOD,#61
MOV IE,#82H
CLR SAIDA
SETB TR0
SJMP $
;
TIM0

LB1

;TIMER 0 EM MODO 1
;EA=1 E ET0=1
;PARTIDA DO TIMER 0
;LOOP INFINITO

JB SAIDA,LB1
MOV TL0,#LOW (R_40MICRO+4)
MOV TH0,#HIGH R_40MICRO
SETB SAIDA
RETI
MOV TL0,#LOW (R_1MS+4)
MOV TH0,#HIGH R_1MS
CLR SAIDA
RETI
END

;2 CICLOS
;2 CICLOS
;2 CICLOS
;1 CICLO
;2 CICLOS

Microcontroladores - 8051

Microcontroladores

CAPTULO 7
PORTA SERIAL

Prof. Dr. Ivo Reis Fontes


ivo@feb.unesp.br

73

REGISTROS

SM0

SM1

SM2

REN

TB8

RB8

TI

RI

MULTIPROCESSOR

ENABLE REC

8o BIT TRNS

REC INTERRUPT

B0

B7

B6

B5

B4

B3

B2

B1

B0

SMOD

GF1

GF0

PD

IDL

IDLE MODE

B1

TRNS INTERRUPT

B2

POWER DOWN MODE

B3

8o BIT REC

B4

GENERAL PURPOSE

B5

GENERAL PURPOSE

B6

BIT 1 MODE

SCON

B7

BIT 0 MODE

SCON

Microcontroladores - 8051

REGISTROS

SCON

BR 2

PCON

Microcontroladores - 8051

74

MODOS DE OPERAO

MODOS DE OPERAO

Microcontroladores - 8051

MODOS DE OPERAO
MODO 0 SHIFT REGISTER

Microcontroladores - 8051

75

EXEMPLO DE APLICAO
EXEMPLO 7.1 APLICAO DO MODO 0

Microcontroladores - 8051

MODOS DE OPERAO
MODO 1 ASSNCRONO, 8 BITS

Microcontroladores - 8051

76

MODOS DE OPERAO
MODO 2 ASSNCRONO, 9 BITS, BAUD RATE FIXO

Microcontroladores - 8051

MODOS DE OPERAO
MODO 3 ASSNCRONO, 9 BITS, BAUD RATE VARIVEL

Microcontroladores - 8051

77

INTERFACE
CIRCUITOS INTEGRADOS DEDICADOS

TRANSMITER (1488)

RECEIVER (1489)

Microcontroladores - 8051

INTERFACE
COMUNICAO ENTRE O 8051 E PC
CONFIGURAO MNIMA

1488

1489

Microcontroladores - 8051

78

EXEMPLO DE PROGRAMAO
EXEMPLO 7.2
Usando um loop infinito, transmitir pela porta serial todos os caracteres
ASCII de 0 a Z.
Setup de comunicao: MODO 3 com TB8=1 (STOP bit exta), 2400
bauds, 8 bits de dado, sem paridade, 1 start bit e 2 stop bits.
A transmisso de cada caracter ser controlada pela interrupo da
Porta Serial
O TMR1 deve ser ajustado para o MODO 2 (auto
(auto--reload).

Setup dos Registros


SCON

TMOD

SM0

SM1

SM2

REN

TB8

RB8

TI

RI

GATE

C/~T

M1

M0

GATE

C/~T

M1

M0

Microcontroladores - 8051

EXEMPLO DE PROGRAMAO
EXEMPLO 7.2 CONT.
IE

PCON

EA

ES

ET1

EX1

ET0

EX0

SMOD

GF1

GF0

PD

IDL

CLCULO DO BR:
FRMULA:

BR=FCLOCK/(12
/(12
N(1+~SMOD)
(1+~SMOD)
16

2400=3,6864 MHz/(384
MHz/(384N) N=4 TMR1RELOAD=252

Microcontroladores - 8051

79

EXEMPLO DE PROGRAMAO
EXEMPLO 7.2 CONT.
;TX_SER.ASM
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
BR_2400 EQU 252
;
ORG RESET
AJMP INIC
;
ORG SINT
AJMP SERIAL
;
ORG 50H
INIC
MOV TMOD,#20H
;TIMER 1 EM MODO 2
MOV TH1,#BR_2400
;PROGRAMAR BAUD RATE
MOV TL1,#BR_2400
MOV SCON,#0C8H
;MODO 3 COM TB8=1
MOV IE,#90H
;HAB INTERRUP SERIAL
Microcontroladores - 8051

EXEMPLO DE PROGRAMAO
EXEMPLO 7.2 CONT.
SETB TR1
MOV DPTR,#TBL
MOV R0,#0
MOV A,R0
MOVC A,@A+DPTR
CLR TI
MOV SBUF,A
SJMP $

;INICIAR TIMER 1
;INICIA APONTADOR DA TABELA ASCII
;PEGA PRIMEIRO ASCII DA TABELA
;TX PRIMEIRO ASCII
;LOOP INFINITO

;
ORG 100H
SERIAL CLR TI
INC R0
MOV A,R0
MOVC A,@A+DPTR
CJNE A,#'$',PUTCH
MOV R0,#0
MOV A,R0
MOVC A,@A+DPTR

;APAGAR FLAG
;INCREMENTA APONTADOR
;PEGA PROXIMO ASCII
;FIM DA TABELA ASCII?
;REINICIA APONTADOR DA TABELA ASCII
;PEGA PRIMEIRO ASCII DA TABELA
Microcontroladores - 8051

80

EXEMPLO DE PROGRAMAO
EXEMPLO 7.2 CONT.
PUTCH MOV SBUF,A
ACALL RETARDO
RETI
;
RETARDO
MOV R6,#7FH
LOOP1 MOV R7,#0
LOOP2 DJNZ R7,LOOP2
DJNZ R6,LOOP1
RET
TBL

;TRANSMITIR ASCII
;ATRASAR TRANSMISSAO

DB "0123456789ABCDEFGHIJKLMNOPQRSTUVXYWZ$"
END

Microcontroladores - 8051

EXEMPLO DE PROGRAMAO
EXEMPLO 7.3
O circuito dever responder aos seguintes comandos que chegam pela
porta serial (2400,8,n,1):
1 acender todos os leds
0 apagar todos os leds
R acender led vermelho
r apagar led vermelho
A acender led amarelo
a apagar led amarelo
V acender led verde
v apagar led verde
;RX_SER.ASM
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
BR_2400
EQU
252
LED_VERMELHO EQU P1.0
LED_AMARELO EQU
P1.1
LED_VERDE
EQU
P1.2
CHEGOU
EQU
32.0
;
Microcontroladores - 8051

81

EXEMPLO DE PROGRAMAO
EXEMPLO 7.3 CONT.
ORG RESET
AJMP INIC
;
ORG SINT
AJMP SERIAL
;
ORG 50H
MOV TMOD,#20H
MOV TH1,#BR_2400
MOV TL1,#BR_2400
MOV SCON,#0D0H
MOV IE,#90H
SETB TR1
CLR CHEGOU
ESPERA JNB CHEGOU,ESPERA
CLR CHEGOU
;
CJNE A,#"0",LB1
CLR LED_VERMELHO
INIC

;TIMER 1 EM MODO 2
;PROGRAMAR BAUD RATE
;MODO 3 COM REN=1
;HAB INTERRUP SERIAL
;INICIAR TIMER 1
;APAGAR FLAG
;AGUARDAR UM COMANDO

;CHEGOU 0

Microcontroladores - 8051

EXEMPLO DE PROGRAMAO
EXEMPLO 7.3 CONT.
CLR LED_AMARELO
CLR LED_VERDE
SJMP ESPERA
;
LB1

;
LB2
;
LB3
;
LB4

CJNE A,#"1",LB2
SETB LED_VERMELHO
SETB LED_AMARELO
SETB LED_VERDE
SJMP ESPERA

;CHEGOU 1

CJNE A,#"R",LB3
SETB LED_VERMELHO
SJMP ESPERA

;CHEGOU R

CJNE A,#"r",LB4
CLR LED_VERMELHO
SJMP ESPERA

;CHEGOU r

CJNE A,#"A",LB5
Microcontroladores - 8051

82

EXEMPLO DE PROGRAMAO
EXEMPLO 7.3 CONT.
SETB LED_AMARELO
SJMP ESPERA
;
LB5
;
LB6
;
LB7

;CHEGOU A

CJNE A,#"a",LB6
CLR LED_AMARELO
SJMP ESPERA

;CHEGOU a

CJNE A,#"V",LB7
SETB LED_VERDE
SJMP ESPERA

;CHEGOU V

CLR LED_VERDE
SJMP ESPERA

;
SERIAL CLR RI
MOV A,SBUF
SETB CHEGOU
RETI
END

;CHEGOU v
;APAGAR FLAG DE INTERRUPT
;COLOCAR DADO NO Acc

Microcontroladores - 8051

Microcontroladores

CAPTULO 8
PROGRAMAO C

Prof. Dr. Ivo Reis Fontes


ivo@feb.unesp.br

83

COMPILADORES C
LINGUAGEM DE PROGRAMAO C
A linguagem C proporciona a criao de cdigo executvel eficiente
atravs de tcnica de programao estruturada, incluindo um rico
conjunto de operadores.
Geralmente ANSIANSI-C compatvel
O pacote de desenvolvimento em linguagem C (C51) da Keil inclui um
conjunto de ferramentas que auxiliam o programador no
desenvolvimento de uma aplicao baseado na famlia 8051 da
Intel, Dallas, Atmel, etc.
Os elementos principais so:

Compilador (C51)
Linkeditor (L51)
Gerenciador de Bibliotecas (LIB51)
Ncleo de Tempo Real (RTX51)
Microcontroladores - 8051

COMPILADORES C
COMPILADORES C COMERCIAIS

KEIL
- C51

AVOCET AVC51

IMAGECRAFT ICC51

2500AD C COMPILER

SHAREWARE

Keil Elektronik GmbH / Keil Software, Inc.


Avocet Systems, Inc.
ImageCraft Creations, Inc.
2500AD Software, Inc.
ARQUIMEDS?/FRANKLIN? (C51)

FREEWARE

GNU - GCC

SDCC

GCC.GNU.ORG
Sandeep Dutta

Microcontroladores - 8051

84

COMPILADORES C
ELEMENTOS DA LINGUAGEM PARA O C51C51-KEIL
AJUSTES DO AMBIENTE:
PATH:

\C51\
C51\BIN
PATH=%PATH%;C:\\C51
PATH=%PATH%;C:
C51\\BIN

TMP
C51INC:
C51LIB:

SET TMP = C:\


C:\TMP
\C51
C51\\INC
SET C51INC = C:\
C:\C51\
C51\INC
\C51\
C51\LIB
SET C51LIB = C:\
C:\C51\
C51\LIB

Microcontroladores - 8051

COMPILADORES C
USO DO COMPILADOR:
C51 sourcefile [diretives
diretives]<enter>
]<enter>
PRODUZ:

basename.LST
basename.OBJ
basename.I
basename.SRC

DIRETIVAS DE CONTROLE:

Source controls: Definem macros na linha de comando e determinam o


nome dos arquivos a serem compilados
Object controls: Afetam a forma e contedo dos mdulos objetos
gerados, permitem definir nveis de otimizao e incluso de informao
para o debbug
Listing controls: Governam vrios aspectos relacionados com a listagem
produzida no processo de compilao
Microcontroladores - 8051

85

COMPILADORES C
DIRETIVAS DE CONTROLE:
DIRETIVA

ABREV.

CLASSE

DESCRIO

ASSEMBLY
ENDASSEMBLY

ASM
ENDASM

Fonte

Incio fim de incluso de cdigo assembly


no cdigo fonte

[NO]AREGS

[NO]AR

Objeto

Enable/Disable endereamento direto aos


registros absolutos (Arn)

CODE

CD

Listagem

COMPACT

CP

Objeto

Seleciona modelo de mmoria COMPACT

DEBUG

DB

Objeto

Inclui informaes de DEBUG no cdigo


objeto

DEFINE

DF

Fonte

Define nomes para o preprocessador na


linha de invocao do C51

FLOATFUZZY

FF

Objeto

Especifica nmero de arrendondamento


de bits durante comparao com float

INTERVAL

Objeto

Especifica o intervalo para os vetores de


interrupes para as diretivas SIECO

[NO]INTPROMOTE [NO]IP

Objeto

Enable/Disable promoo integer ANSI

Acrescenta cdigo assembly na arquivo


de listagem

Microcontroladores - 8051

COMPILADORES C
DIRETIVAS DE CONTROLE cont.:
DIRETIVA

ABREV.

[NO]INTVECTOR

CLASSE

DESCRIO

Objeto

Especifica endreo base para vetores de


interruo ou desabilita vetores
Seleciona modelo de memria LARGE

LARGE

LA

Objeto

LISTINCLUDE

LC

Listagem

MAXARGS

MA

Objeto

Especifica tamanho da listagem dos


argumentos das variveis

Objeto

Cdigo e controle para hardware adicional


do 80C517 e diretivas
Desabilita registros de informao para o
AutoMAKE

[NO]MOD517
NOAMAKE

NOAM

Objeto

NOCOND

NOCO

Listagem

Inclui contedo dos arquivos includos no


arquivo de listagem

No lista linhas de fonte puladas no


preprocessador

NOEXTEND

Fonte

Desabilita extenses do ANSI-C do C51

NOREGPARMS

Objeto

Desabilita passagem de parmetros por


registrador

Microcontroladores - 8051

86

COMPILADORES C
DIRETIVAS DE CONTROLE cont.:
DIRETIVA

ABREV.

CLASSE

DESCRIO

[NO]OBJECT

[NO]OJ

Objeto

Especifica um name para o arquivo objeto


ou no gera cdigo objeto

OBJECTEXTEND

OE

Objeto

Inclui informao adicional de tipo de


varivel no cdigo objeto

OPTIMIZE

OT

Objeto

Especifica o nvel de otimizao realizada


pelo compilador

Objeto

Variveis so alocadas na ordem que


aparecem no cdigo fonte

ORDER
PAGELENGTH

PL

Listagem

Especifica o nmero de linhas de pgina


no arquivo de listagem

PAGEWIDTH

PW

Listagem

Especifica o nmero de caracteres na


linha do arquivo de listagem

PREPRINT

PP

Listagem

Produz um arquivo de listagem pelo


preprocessador onde todas as macros so
expandidas

[NO]PRINT

[NO]PR

Listagem

Especifica o nome do arquivo de listagem


ou desabilita a listagem

Microcontroladores - 8051

COMPILADORES C
DIRETIVAS DE CONTROLE cont.:
DIRETIVA

ABREV.

CLASSE

DESCRIO

REGFILE

RF

Objeto

Especifica a definio de registros para


otimizao global de registros

REGISTERBANK

RB

Objeto

Seleciona o banco de registro que


usado para endereamento absoluto de
registros

ROM

OT

Objeto

Controle de gerao das instrues


AJMP/ACALL

SMALL

SM

Objeto

Seleciona o modelo de memria SMALL


(default)

Objeto

Cria um arquivo fonte em linguagem


assembly sem criar o cdigo objeto

SRC
SYMBOLS

SB

Listagem

Inclui lista de smbolos usados no mdulo


no arquivo de listagem

WARNNINGLEVEL

WL

Listagem

Seleciona o nvel de deteco de


Warnning

Microcontroladores - 8051

87

COMPILADORES C

MODELOS DE MEMRIA
MODELO

DESCRIO

SMAL

As variveis (por default) residem na memria interna de dados do


8051. Funciona como se as variveis fossem declaradas com o
modificador data
data.
IMPORTANTE: As memrias internas da CPU devem ser suficientes
para a aplicao.

COMPACT

As variveis (por default) residem em uma pgina de memria RAM


externa. Funciona como se as variveis fossem declaradas com o
pdata.
modificador pdata
Este modelo pode acomodar no mximo 256 bytes de variveis.

LARGE

As variveis (por default) residem na memria RAM externa,


podendo ocupar at 64 Kbytes. O acesso s variveis feito atravs
do apontador DPTR
DPTR.

Microcontroladores - 8051

COMPILADORES C

DECLARAO EXPLICITA DE MEMRIA PARA AS VARIVEIS


TIPO

DESCRIO

code

Acesso direto memria de programa (64 Kbytes)


Acesso atravs do opcode MOVC A,@A+DPTR

data

Acesso direto memria RAM interna (128 Bytes)


Mais rpido acesso!

idata

Acesso indireto memria RAM interna (256 Bytes)


BANKs, bit-addressable bytes, User RAM, SFR

bdata

Acesso direto memria RAM interna, bit-enderessvel


Permite acesso a bit ou byte

xdata

Acesso indexado memria RAM externa (64 Kbytes)


Acesso atravs do opcode MOVX <destino>,@DPTR

pdata

Acesso paginado memria RAM externa (Blocos de 256 Bytes)


Acesso atravs do opcode MOVX <destino>,@Rn

Microcontroladores - 8051

88

COMPILADORES C
TIPOS DE DADOS (variveis):
TIPO
bit

BITS

BYTES

INTERVALO
0a1

[signed] char

-128 a +127

unsigned char

0 a 255

Enum

16

-32.768 a +32.767

[signed] short

16

-32.768 a +32.767

unsigned short

16

0 a 65.535

[signed] int

16

-32.768 a +32.767

unsigned int

16

0 a 65.535

[signed] long

32

-2.147.483.648 a + 2.147.483.647

unsigned long

32

0 a 4.294.967.295

float

32

sbit

sfr

0 a 255

sfr16

16

0 a 65.535

1,175494E-38 a 3,402823E+38
0a1

Microcontroladores - 8051

COMPILADORES C
DECLARAO DE VARIVEIS:
TIPO

SINTXE

bit enderevel bit var-name1,...,var-namen;


byte--bit
byte
sfr
sfr16

EXEMPLO
bit flag1,flag2;

sbit <var-name> ^ bit-number;

sbit flag1 = flags ^ 0;


sbit flag2 = flags ^ 1;

sfr <name> = <sfr-address>;

sfr P0 = 0x80;
sfr P1 = 0x90;

sfr16 <name> = <1th sfr-address>; sfr16 T2 = 0xCC;


0xcc = T2L address

LOCALIZAO ABSOLUTA DE VARIVEL:


<type> [<memory_space>] <variable_name> _at_ <constant>;
Microcontroladores - 8051

89

COMPILADORES C

MACROS PARA ACESSO ABSOLUTO MEMRIA


MACRO

CBYTE

SINTXE

EXEMPLO
char1=CBYTE[0xF100];

<var_name> = CBYTE[<byte_address>;

CWORD <var _name> = CWORD[<word_address>;

Int1=CWORD[0xF100];

DBYTE

char2=DBYTE[0x40];
DBYTE[0x40] = char2;

<var _name> = DBYTE[<byte_address>;


CBYTE[<byte_address> = <var_name>; (1)

DWORD <var _name> = DWORD[<word_address>; (2)

Int2=DWORD[0x40];

PBYTE

<var _name> = PBYTE[<word_address>; (2)

char3=PBYTE[0xF0];

PWORD <var _name> = CWORD[<word_address>; (2)

int3=CWORD[0xF0];

XBYTE

char4=XBYTE[0x2000];

<var _name> = XBYTE[<word_address>;

(2)

XWORD var _name = XWORD[<word_address>; (2)

aplica--se a mesma sintaxe


aplica

EM (2)

int4=XWORD[0x2000];

EM (1)

Microcontroladores - 8051

COMPILADORES C
EXTENSES DA LINGUAGEM:

Tipo de memria e reas no 8051


Modelos de Memria
Especificadores de Memria
Especificadores de tipo de dado de variaveis
Variveis tipo BIT e dado BIT
BIT--enderevel
SFR Registros de Funes Especiais
Ponteiros
Atributos de Funo

PALAVRAS CHAVES:
_at_
alien
compact
data
pdata
reentrant
small
_task_

bdata
idata
sbit
using

bit
interrupt
sfr
xdata

code
large
sfr16

Microcontroladores - 8051

90

EXEMPLO DE PROGRAMAO
EXEMPLO 8.1
/* Este exemplo l os bits da porta P2 e escreve na porta P0, l uma string atrav
atravs
da
porta serial e coloca em BUF, assim que a string recebida ecoa na porta serial,
zera os bits da porta P0 para sinalizar que terminou o tratamento da string e
repete
novamente o processo.
*/
#include <reg51.h>
#include <stdio.h>

/* register definitions for 8051 CPU */


/* stardard i/o definitions
*/

/* Convert to Upper Character */


unsigned char toupper (unsigned char c) {
if (c < 'a' || c > 'z')
return (c);
else
return (c & ~0x20);
}
Microcontroladores - 8051

EXEMPLO DE PROGRAMAO
EXEMPLO 8.1 CONT.
/* Echo Upper Characters */
main (){
unsigned char c, buf[10];
/* setup serial port control hardware (2400 BAUD @12MHZ) */
SCON = 0x52;
/* SCON */
TMOD = 0x20;
/* TMOD */
TCON = 0x69;
/* TCON */
TH1 = 0xf3;
/* TH1 */
while (1){
P0 = P2;
gets (buf, sizeof (buf));
for (c = 0; buf[c] != 0; c++){
buf[c] = toupper (buf[c]);
}
puts (buf);
P0 = 0;
}

/* output hardware switch from Port2 */


/* get input line */
/* convert to captial */
/* echo input line */
/* clear Output Port to signal ready */

}
Microcontroladores - 8051

91

EXEMPLO DE PROGRAMAO
EXEMPLO 8.1 CONT.
COMPILANDO
c51 sample.c
SAMPLE.LST
SAMPLE.OBJ

LINKEDITANDO
l51 sample.obj
SAMPLE.M51
SAMPLE.

GERANDO ARQUIVO HEX


ohs51 sample
SAMPLE.HEX

Microcontroladores - 8051

EXEMPLO DE PROGRAMAO
EXEMPLO 8.1 CONT.
:10000300EFC394614006EFD3947A400122EF54DFAB
:02001300FF22CA
:10001500759852758920758869758DF385A0807BE3
:10002500047A0079097D0A7C00120090E4FE7409C7
:100035002EF8E6FF600C12000374092EF8A6070ED1
:1000450080EC7B047A007909120062E4F58080CCAB
:010055002288
:03000000020056A5
:0C005600787FE4F6D8FD758120020015CB
:100062008B138A148915AB13AA14A91512013260D5
:10007200130515E5157002051414F9120132FF1269
:0E00820001A080E27F0A1201A07E007F002212
:100090008B138A1489158C168D17E4F518F519E55C
:1000A0001724FFFFE51634FFFEC3E5199FEE6480B9
:1000B000F8E51864809850691201C7AB13AA14A917
:1000C00015851982851883EF12017CEF640A60514F
:1000D000AB13AA14A91585198285188312014D64E2
:1000E00008701AE51945186008E519151970021508
:1000F000187F201201A07F081201A080A2AB13AAD2
Microcontroladores - 8051

92

EXEMPLO DE PROGRAMAO
EXEMPLO 8.1 CONT.
:1001000014A91585198285188312014DFF641160A9
:100110008EEF641360890519E51970020518020055
:100120009FAB13AA14A915851982851883E41201BF
:020130007C222F
:10013200BB020689828A83E0224003BB0402E722D3
:0B014200400789828A83E49322E322B5
:10014D00BB020CE58229F582E5833AF583E0224076
:10015D0003BB0406E92582F8E622400DE58229F568
:0F016D0082E5833AF583E49322E92582F8E222C2
:10017C00F8BB020DE58229F582E5833AF583E8F0B8
:10018C00224003BB0406E92582C8F6225005E92566
:04019C0082C8F22201
:1001A000EFB40A07740D1201AB740A309811A899C4
:1001B000B8130CC2983098FDA899C298B811F630BF
:0701C00099FDC299F5992297
:1001C70010000B1201D8BF0D027F0A0201A0AF0871
:0101D7002205
:0A01D8003098FDAF99C2987E002216
:00000001FF
Microcontroladores - 8051

EXEMPLO DE PROGRAMAO
EXEMPLO 8.2 CONT.
/*
Programa Placar - V0
Ivo R. Fontes
23.Set.98
ver.: 0.0
Rel.: 0
Comp.: Keil v3.20
IMPLEMENTA: TECLADO
HARDWARE:
P1_0 - coluna 1
P1_1 - coluna 2
P1_2 - coluna 3
P1_3 - coluna 4
P1_4 - linha 1
P1_5 - linha 2
P1_6 - linha 3
P1_7 - linha 4
SBUF - saida de caracter para o marcador
Microcontroladores - 8051

93

EXEMPLO DE PROGRAMAO
EXEMPLO 8.2 CONT.
MENU:
0 - Liga/Desliga campainha
1 - Falta para equipe A
2 - Ponta para equipe A
3 - Flata coletiva/Vantagem para equipe A
4 - Modo crescente/decrescente
5 - Zera um marcador
6 - Incrementa/decrementa set
7 - Modo Vantagem/Falta coletiva
8 - Cronometro normal/ajuste
9 - Falta para equipe B
A - Ponto para equipe A
B - Falta coletiva/vantagem para equipe A
C - Cronemetro crescente/decrescente
D - Zera cronometro
E - Modo Cronometro Basquete/Volei
F - Cronometro Inicia/Para
*/
Microcontroladores - 8051

EXEMPLO DE PROGRAMAO
EXEMPLO 8.1 CONT.
/*-ARQUIVOS DE DEFINICOES EXTERNOS----------------------------------/*EXTERNOS-----------------------------------*/
*/
#include <at89x51.h>
/*
TECLADO DECODER:
*/
unsigned char
char_out;
unsigned char
linha,
llinha,
coluna,
lcoluna,
key;
unsigned char decoder[4][4]=
{
{0x30,0x34,0x38,0x43},
{0x31,0x35,0x39,0x44},
{0x32,0x36,0x41,0x45},
{0x33,0x37,0x42,0x46}
};
Microcontroladores - 8051

94

EXEMPLO DE PROGRAMAO
EXEMPLO 8.2 CONT.
/*--PROTOTIPOS -------------------------------------------------------*/
/*
-------------------------------------------------------*/
void adj_hardware(void)
{
/*
funcao: ajusta parametros de hardware
*/
TMOD = 0x21; /* Timer1 (baud
(baud--rate) Timer0 16
16--bit counter */
TH1 = 0xe8;
/* XTAL=11.0952MHz auto load - 1200 BPS */
TL1 = 0xe8;
TCON = 0x45;
/* TurnOn Timer1 - Interrupt by edge */
SCON = 0x52;
/* SIO mode 1 - receive enabled */
} /* adj_hardware */
/*------------------------------------------------------------------/*
-------------------------------------------------------------------*/
*/

Microcontroladores - 8051

EXEMPLO DE PROGRAMAO
EXEMPLO 8.2 CONT.
void nputchar(unsigned char x)
{
while(!TI);
TI=0;
SBUF=x;
} /* nputchar */
/*========= PROGRAMA PRINCIPAL ===================*/
void main(void)
{
unsigned int

contador;

adj_hardware();

Microcontroladores - 8051

95

EXEMPLO DE PROGRAMAO
EXEMPLO 8.2 CONT.
while(1)
{
lcoluna=1;
do
{
lcoluna*=2;
if(lcoluna>8)
lcoluna=1;
P1=~lcoluna;
}while(P1>0xf0);
llinha=~((P1/16)|0xf0);
while(P1<0xf0);
switch(llinha)
{
case 1: linha=0;
break;

Microcontroladores - 8051

EXEMPLO DE PROGRAMAO
EXEMPLO 8.2 CONT.
case 2: linha=1;
break;
case 4: linha=2;
break;
case 8: linha=3;
break;
}
switch(lcoluna)
{
case 1: coluna=0;
break;
case 2: coluna=1;
break;
case 4: coluna=2;
break;
case 8: coluna=3;
break;
}
Microcontroladores - 8051

96

EXEMPLO DE PROGRAMAO
EXEMPLO 8.2 CONT.
key=decoder[linha][coluna];
nputchar(key);
P3_7=0;
for(contador=0;contador<=5000;contador++);
P3_7=1;
};
}

Microcontroladores - 8051

EXEMPLO DE PROGRAMAO
EXEMPLO 8.3
IRKBD_R2
AT89C2051

Microcontroladores - 8051

97

EXEMPLO DE PROGRAMAO
EXEMPLO 8.3
IRKBD_R2
DIAGRAMA
VCC

VCC

VCC
RX
TX

AT89C2051
VCC

Microcontroladores - 8051

98

Potrebbero piacerti anche