MICROCONTROLADORES
HARDWARE & SOFTWARE
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.
Propsito
Computao Geral
ex: PCs, Macs,
workstations, etc.
Microcontroladores - 8051
Microcontroladores - 8051
-controladores,
-processadores embutidos
~100%
PCs e
Workstations
baseados em
-processors
>>1%
Microcontroladores - 8051
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
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
Microcontroladores - 8051
Microcontroladores - 8051
Processador
de 88-bits
Microcontroladores - 8051
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
Tpicos
Microcontroladores - 8051
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
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
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
10
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
Microcontroladores - 8051
11
Microcontroladores - 8051
Famlia 8051
Recursos
8051
8052
8031
4K
8k
0k
128
256
128
32
32
32
Fontes de Interrupo
Microcontroladores - 8051
12
Microcontrolador 8751
UV-EPROM
Microcontroladores - 8051
Microcontroladores
CAPTULO 2
Programao em Linguagem Assembly do 8051
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
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
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
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
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
byte
0000
byte
0000
0FFF
8751
AT89C51
1FFF
8752
AT89C52
8031 (externa)
FFFF
DS5000-32
15
Notas de Programo
Microcontroladores - 8051
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
MOV A,#55H
MOV R0,A
MOV
MOV
MOV
MOV
A instruo ADD
Microcontroladores - 8051
17
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
$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
COMPILANDO E LINKEDITANDO:
>AVMAC51 MECA1.ASM<enter>
>AVLINK51 MECA1=MECA1<enter>
Microcontroladores - 8051
19
$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
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
DEFSEG TMR0,START=TIMER0,CLASS=CODE
SEG TMR0
JMP T0INT
DEFSEG MAINSEG,CLASS=CODE,START=100H
SEG MAINSEG
Microcontroladores - 8051
20
27
28
29
30
31
0009 28
000A F5 90
32
33
000C
000C 80 FE
34
35
36
MAIN:
MOV
MOV
MOV
MOV
Microcontroladores - 8051
37
38
39
40
41
42
SERIAL:
RETI
T0INT:
RETI
END
;ISR da UART
;ISR do TIMER0
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
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
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
28
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
R0,#99H
R1,#89H
R2,#3FH
R7,#63H
R5,#12H
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
00,#99H
01,#89H
02,#3FH
07,#63H
05,#12H
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
;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
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
PSW.4
0
1
2
Microcontroladores - 8051
31
Microcontroladores - 8051
Microcontroladores
CAPTULO 3
Conjunto de Instrues do 8051
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.
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.
EXEMPLO:
LOOP:
MOV
MOV
INC
CJNE
...
Microcontroladores - 8051
34
Endereamento cont.
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.
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.
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.
Observao:
A instruo MOVC permite o acesso rea de cdigo de programa
EXEMPLO:
JMP @A+DPTR
Microcontroladores - 8051
aaaaaaaa
dddddddd
37
INSTRUES ARITMTICAS
So as instrues que permitem realizar operaes aritmticas entre
o operandos
ADDn,m
ADD1,1
ADD1,2
ADD1,1
ADD1,2
ADDCn,m
ADDC1,1
ADDC1,2
ADDC1,1
ADDC1,2
Microcontroladores - 8051
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
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
AB
4,1
1
DIV4,
AB
1,1
1
DA1,
XRLn,m
XRL1,11
1,2
2
XRL1,
XRL1,11
XRL1,22
XRL1,22
XRL2,33
bit
C
bit
CLR1,11
CPLn,m
CPL1,11
CPL1,22
bit
C
bit
CPL1,11
11000011
11000010 bbbbbbbb
11100100
10110011
10110010 bbbbbbbb
11110100
Microcontroladores - 8051
39
1,1
1
RR1,
RLC1,1
RRC1,1
00000011
00110011
00010011
1,1
1 A
SWAP1,
Microcontroladores - 8051
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
ANLn,m
2,2
2
ANL2,
2,
2,2
ANL 2
C,<src-bit>
C,bit
C,/bit
Microcontroladores - 8051
40
ORLn,m
2,2
2
ORL2,
2,
2,2
ORL 2
Microcontroladores - 8051
<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
TROCA DE VARIVEL
XCHn,m
XCH1,1
XCH1,2
XCH1,1
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
<bit>
C
bit
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
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
00110010
OPERAO DE ATRASO
1,1
1
NOP1,
Microcontroladores - 8051
<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
2,1
1
MOVC2,
A,@A+DPTR
2,1
1
MOVC2,
A,@A+PC
2,1
1
MOVX2,
A,@Ri
2,1
1
MOVX2,
2,1
1
MOVX2,
2,1
1
MOVX2,
<dest-bit>,<src-bit>
;Transfere bit
C,bit
10100010 bbbbbbbb
bit,C
10010010 bbbbbbbb
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
rel
rel
44
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
2,2
2
SJMP2,
rel
2,1
1
JMP2,
01110011
Microcontroladores - 8051
A,direct,rel
2,3
3
CJNE2,
A,#data,rel
2,3
3
CJNE2,
Rn,#data,rel
2,3
3
CJNE2,
2,2
2
DJNZ2,
Rn,rel
2,3
3
DJNZ2,
direct,rel
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
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
48
Clock
19
18
C1
30 pF
XTAL1
XTAL2
C2
30 pF
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
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
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
READ
PIN
INTERNAL
PULL-UP
P?
SET
WRITE
LATCH
CLR
P0 no tem o resistor de
PULL-UP (open-drain)
Microcontroladores - 8051
51
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
A,#0FFH
;A = FF hex
MOV
P0,A
BACK:
MOV
A,P0
;l dado de P0
MOV
P1,A
;envia para P1
SJMP
BACK
Microcontroladores - 8051
52
BACK:
MOV
A,#0FFH;A=FFH
MOV
P1,A
MOV
A,#55H
MOV
A,P1
;pega dado de P1
MOV
P1,A
MOV
R7,A
;salva no reg R7
ACALL DELAY
CPL
MOV
A,P1
SJMP
BACK
MOV
R6,A
;salva em reg R6
A,P1
MOV
R5,A
;salva em reg R5
Microcontroladores - 8051
MOV
A,#55H
MOV
P2,A
ACALL DELAY
CPL
SJMP
BACK
BACK:
MOV
MOV
P2,A
MOV
A,P2
;pega dado em P2
MOV
P1,A
;manda para P1
SJMP
BACK
Microcontroladores - 8051
53
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
$
Microcontroladores - 8051
ESQUEMTICO ANEXO
Microcontroladores - 8051
54
;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
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
Microcontroladores - 8051
57
Microcontroladores
CAPTULO 5
INTERRUPES
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
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
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
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
RESET
INT0
TMR0
INT1
TMR1
UART
IE0
TF0
IE1
TF1
RI+TI
00H
03H
0BH
13H
1BH
23H
O + indica OU!
Microcontroladores - 8051
61
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
63
Os Temporizadores/Contadores
NO 8051:
Temporizadores/Contadores de 1616-bits:
TIMER 0 (TMR0
(TMR0))
TIMER 1 (TMR1
(TMR1))
Operao:
TEMPORIZADOR
CONTADOR
Microcontroladores - 8051
TMOD
Os bits do registrador TMOD (SFR) definem:
TCON
Os bits do registrador TCON (SFR) correspondem a:
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
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
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!
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 $
;
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.
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
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
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
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).
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
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
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:
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:
85
COMPILADORES C
DIRETIVAS DE CONTROLE:
DIRETIVA
ABREV.
CLASSE
DESCRIO
ASSEMBLY
ENDASSEMBLY
ASM
ENDASM
Fonte
[NO]AREGS
[NO]AR
Objeto
CODE
CD
Listagem
COMPACT
CP
Objeto
DEBUG
DB
Objeto
DEFINE
DF
Fonte
FLOATFUZZY
FF
Objeto
INTERVAL
Objeto
[NO]INTPROMOTE [NO]IP
Objeto
Microcontroladores - 8051
COMPILADORES C
DIRETIVAS DE CONTROLE cont.:
DIRETIVA
ABREV.
[NO]INTVECTOR
CLASSE
DESCRIO
Objeto
LARGE
LA
Objeto
LISTINCLUDE
LC
Listagem
MAXARGS
MA
Objeto
Objeto
[NO]MOD517
NOAMAKE
NOAM
Objeto
NOCOND
NOCO
Listagem
NOEXTEND
Fonte
NOREGPARMS
Objeto
Microcontroladores - 8051
86
COMPILADORES C
DIRETIVAS DE CONTROLE cont.:
DIRETIVA
ABREV.
CLASSE
DESCRIO
[NO]OBJECT
[NO]OJ
Objeto
OBJECTEXTEND
OE
Objeto
OPTIMIZE
OT
Objeto
Objeto
ORDER
PAGELENGTH
PL
Listagem
PAGEWIDTH
PW
Listagem
PREPRINT
PP
Listagem
[NO]PRINT
[NO]PR
Listagem
Microcontroladores - 8051
COMPILADORES C
DIRETIVAS DE CONTROLE cont.:
DIRETIVA
ABREV.
CLASSE
DESCRIO
REGFILE
RF
Objeto
REGISTERBANK
RB
Objeto
ROM
OT
Objeto
SMALL
SM
Objeto
Objeto
SRC
SYMBOLS
SB
Listagem
WARNNINGLEVEL
WL
Listagem
Microcontroladores - 8051
87
COMPILADORES C
MODELOS DE MEMRIA
MODELO
DESCRIO
SMAL
COMPACT
LARGE
Microcontroladores - 8051
COMPILADORES C
DESCRIO
code
data
idata
bdata
xdata
pdata
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
EXEMPLO
bit flag1,flag2;
sfr P0 = 0x80;
sfr P1 = 0x90;
89
COMPILADORES C
CBYTE
SINTXE
EXEMPLO
char1=CBYTE[0xF100];
<var_name> = CBYTE[<byte_address>;
Int1=CWORD[0xF100];
DBYTE
char2=DBYTE[0x40];
DBYTE[0x40] = char2;
Int2=DWORD[0x40];
PBYTE
char3=PBYTE[0xF0];
int3=CWORD[0xF0];
XBYTE
char4=XBYTE[0x2000];
(2)
EM (2)
int4=XWORD[0x2000];
EM (1)
Microcontroladores - 8051
COMPILADORES C
EXTENSES DA LINGUAGEM:
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>
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;
}
}
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.
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