MicroProcessadores Zelenovsky
MicroProcessadores Zelenovsky
MicroProcessadores Zelenovsky
CONTROLADORES
MCS-51
RICARDO ZELENOVSKY
VCC
GRAVADOR MEMORIAS
RST
1N4148 D1 47K RST A0..A15 AO..A15
P1.7 *RD *RD
R2 74LS14 P1.7 *RD *RD
SW PUSHBUTTON P1.6 *WR *WR
1 2 P1.6 *WR *WR
U5A *PSEN
R1 SW1 C1 AD0..AD7 *PSEN
82 BOOT
10u BOOT
AD0..AD7 *BOOT
*BOOT
VCC
RST
R9 3575611Hz
220 X1
U1 U2
LED6 C2 C3 31 39 AD0 AD0 3 2 A0
10 11 EA/VP P0.0 D0 Q0
U5E 30p P0.1 38 AD1 AD1 4 D1 Q1 5 A1
*RST 30p 19 P0.2 37 AD2 AD2 7 6 A2
X1 D2 Q2
Q_AM 74LS14 P0.3 36 AD3 AD3 8 D3 Q3 9 A3
VCC RST 35 AD4 AD4 13 12 A4
P0.4 D4 Q4
18 X2 P0.5 34 AD5 AD5 14 D5 Q5 15 A5
LED2 33 AD6 AD6 17 16 A6
R4 4 3 P1.0 P0.6 D6 Q6
U5B P0.7 32 AD7 AD7 18 D7 Q7 19 A7
220 R_VM 74LS14 BOOT *PSEN *RD *WR RST 9 RESET
P2.0 21 A8 1 OC
LED3 22 A9 ALE 11
R5 6 5 P1.1 1 ROM RAM P2.1 G
U5C *INT0 12 INT0 P2.2 23 A10
220 R_AM 74LS14 *INT1 13 INT1 P2.3 24 A11 74LS373
T0 14 T0 P2.4 25 A12
LED4 0 RAM X T1 15 26 A13
R6 8 9 P1.2 T1 P2.5 VCC
U5D P2.6 27 A14
R_VD 74LS14 P1.0 1 28 A15 INTERF-SERIAL
220 P1.0 P2.7
P1.1 2 P1.1
LED1 (Q_VD) P1.2 3 17 *RD TXD
ON --> BOOT SERIAL P1.3 4 P1.2 RD TXD VCC
SW2 P1.3 WR 16 *WR
P1.3 (BOOT=1) P1.4 5 29 PSEN 25V
OFF --> PROG RAM P1.5 6 P1.4 PSEN RXD
SW PUSHBUTTON P1.5 ALE/P 30
(BOOT=0) P1.6 7 11 TXD RXD
P1.7 8 P1.6 TXD 10 25V
SW3 P1.7 RXD RXD
*INT1
T1 VCC 8031
SW PUSHBUTTON
LED1 BOOT
VCC
*BOOT
LED5 R9 R3
2K2 Q_VD 220
8K2 Q_VM R7
220 C4
SW4 R8 1u
11 10 *INT0 4
U5E 2 5 BOOT
SW SPST D P Q
R
74LS14 RST 3
CLK U8A
FECHADA RUN (Q_VM OFF) C Q 6 *BOOT
VCC L
74LS74
ABERTA S STEP (Q_VM ON)
1
MICRO
CONTROLADORES
MCS-51
RICARDO ZELENOVSKY
ASESSOR TCNICO ESPE
DEDICATRIA:
a Maria Antonia, Guilherme e Henrique.
NDICE
NDICE
PREFCIO viii
iv MICROCONTROLADORES (MCS-51)
NDICE
MICROCONTROLADORES (MCS-51) v
NDICE
vi MICROCONTROLADORES (MCS-51)
NDICE
BIBLIOGRAFIA B-1
PREFCIO
Aqui se pretende estudar de forma prtica a famlia MCS-51. Portanto, junto com a
exposio da teoria sero provados os conceitos no hardware desenvolvido. Isto permitir uma slida
aprendizagem por parte dos estudantes. Este hardware recebe os programas pela porta serial de um
computador e os executa em seguida. Isso permite uma interao dinmica por parte dos estudantes
que podem escrever programas e testa-los imediatamente. Se houver erros, estes so corrigidos e o
novo programa novamente enviado ao hardware.
Todo o estudo se baseia no 8031, o membro mais simples da famlia MCS-51. Sero
estudadas entretanto as principais diferenas para os demais membros. Neste estudo se supe que
os estudantes possuem conceitos de eletrnica, microprocessadores (8080, 8085 ou Z-80) e
programao assembly. Tambm ser til a disponibilidade de um computador compatvel com IBM
PC.
MICROCONTROLADORES (MCS-51) ix
CAPTULO I MICROCONTROLADORES
CAPTULO I
MICROCONTROLADORES
1948 - John Barden, Walter Bratain e William Shockley inventam o Transistor no BELL LABS.
1959 - TEXAS INSTRUMENTS cria o primeiro Circuito Integrado (CI), onde em um mesmo substrato
de cristal eram integrados vrios transistores.
1964 - DIGITAL comea a vender o PDP-8, o primeiro computador com preo acessvel aos
laboratrios.
1968 - Surge a INTEL.
1971 - INTEL fabrica o 4004, o primeiro microprocessador. Ele tinha uma arquitetura de 4 bits. Aqui
surge a idia de integrar todo o circuito de controle em um nico CI; isso passou a chamar-
se microprocessador.
MICROCONTROLADORES (MCS-51) 1 - 1
CAPTULO I MICROCONTROLADORES
1974 - INTEL desenvolve o 4004 e produz o primeiro microprocessador de 8 bits, o 8080. Neste
mesmo ano, Kernighan e Ritchie formalizam a linguagem C.
1975 - ZILOG comea a vender o Z80 e a MOS TECHNOLOGY comea a vender o MC6501 (US$20)
e o MC6502 (US$ 25). Nesta poca um 8080 custava US$ 150.
1976 - INTEL produz o primeiro microcontrolador, o 8048, e o 8748. Neste mesmo ano INTEL iniciou
o projeto do 8086. A TEXAS INSTRUMENTS produz o TMS 9000, primeiro
microprocessador de 16 bits. APPLE COMPUTER tambm surge neste ano.
1977 A APPLE Computer produz o APPLE II (US$1298) com processador Motorola 6502 (8 bits).
1978 A INTEL comea a produzir o 8086 e tambm alguns derivativos do 8048, o 8041 e o 8741.
1979 A INTEL distribui o 8088.
1980 A INTEL inicia o que seria a famlia de microcontroladores de maior sucesso, os 8051 e 8751.
Neste mesmo ano tambm produz o 8087. A APPLE COMPUTER produz o APPLE III, que
estava destinado ao fracaso.
1981 A IBM passa a dedicar-se aos sistemas de pequeno porte com o IBM PC, que consistia da
CPU 8088, 64 KB RAM, 40 KB ROM, floppy 5,25" (US$3005).
1982 A INTEL inicia a venda dos 80186, 80188 e 80286. Tambm comea a vender o primeiro
microcontrolador de 16 bits, o 8096 (famlia MCS-96).
1983 - Com os 80C51 e 80C49, a INTEL comea a distribuir microcontroladores CHMOS, de menor
consumo de energia. A APPLE COMPUTER produz o LISA, tambm destinado ao fracaso.
A AT&T comea a distribuir o UNIX System V. A IBM anuncia o PC XT (US$ 4995) e o PC
Jr. (US$1269).
1984 - Surge o IBM PC AT com 80286, 256 KB RAM, floppy de 1,2 MB (US$ 5469). A APPLE
COMPUTER produz o que viria a ser um grande sucesso: o MACINTOSH (US$ 2495).
1985 A INTEL produz o 80386DX (16 MHz, 6 MIPS).
1986 A COMPAQ fabrica o primeiro computador 386, o COMPAQ DESKPRO 386.
1988 A INTEL fabrica o 80386SX (16 MHz, 2,5 MIPS).
1989 A INTEL fabrica o 80486DX (25 MHz, 20 MIPS).
1991 A INTEL fabrica o 80486SX (20 MHz, 16,5 MIPS).
1992 A INTEL fabrica o 80486DX2 (50 MHz, 40 MIPS).
1993 A INTEL fabrica o PENTIUM (60 MHz, 112 MIPS).
INTEL
4004 8008 8080 8085 8086 (8088) 80286 80386 486 P5 PII PIII PIV
1 - 2 MICROCONTROLADORES (MCS-51)
CAPTULO I MICROCONTROLADORES
MOTOROLA
6502 6509 68000 68010 68020 68030 68040 68060 PowerPC
ZILOG
Z80 Z800 Z8000
ROM RAM
ENDEREOS E DADOS
CPU
Estas aplicaes tinham o custo dependente do preo da CPU e dos perifricos (ROM,
RAM, Portas, A/D, D/A, etc) e tambm da quantidade de conexes e do tamanho da placa. Para
MICROCONTROLADORES (MCS-51) 1 - 3
CAPTULO I MICROCONTROLADORES
reduzir o custo, comeou a surgir a idia de colocar todos estes perifricos dentro do chip da CPU.
Isso baratearia e diminuiria o tamanho do circuito impresso alm de aumentar a confiabilidade. Por
outro lado, uma CPU dedicada a um determinado controle no precisa ser muito rpida nem
tampouco ter um conjunto de instrues extenso e poderoso. No so necessrias instrues para
trabalhar com ponto flutuante, com strings ou vetores e tambm os mecanismos de endereamento
devem ser simples. Ou seja, pode-se simplificar a CPU. Assim surgem os microcontroladores, que
so simples, baratos e eficientes.
1.3. MICROCONTROLADORES
MICROCONTROLADOR TPICO
CPU
PORTA
D/A
R OM PARALELA
RAM
PORTA
A/D
SERIAL
TIMERS
1 - 4 MICROCONTROLADORES (MCS-51)
CAPTULO I MICROCONTROLADORES
Hoje em dia, os manuais mostram uma nova famlia, MCS-80/85. Agora os antigos 8080
e 8085 esto sendo classificados como controladores. Isto porque so muito simples quando
comparados com um 386 ou um 486. Cada famlia possui um ncleo bsico (arquitetura e instrues)
a partir do qual se derivam vrios produtos:
INTEL
PHILIPS
AMD
MICROCONTROLADORES (MCS-51) 1 - 5
CAPTULO II FAMLIA MCS-51
CAPTULO II
FAMLIA MCS-51
2.1. INTRODUO
Este curso abordar somente a famlia MCS-51. Ela no to antiga e limitada como a
MCS-48 nem to cara como a MCS-96. Por isso mesmo atualmente a famlia de controladores de
maior emprego. adequada para a grande maioria de aplicaes a nvel universitrio.
MICROCONTROLADOR 8048
C P U
8 bits
MICROCONTROLADORES (MCS-51) 2 - 1
CAPTULO II FAMLIA MCS-51
2 - 2 MICROCONTROLADORES (MCS-51)
CAPTULO II FAMLIA MCS-51
111 Instrues:
- 1 ciclo 64 58%
- 2 ciclos 45 40%
- 4 ciclos 2 2%
- 1 byte 49 44%
- 2 bytes 46 41%
- 3 bytes 16 15%
98% de 1 ou 2 ciclos velocidade
85% de 1 ou 2 bytes compacto
MEMRIA DE MEMRIA DE
PROGRAMA DADOS
C P U
Os 4 KB de ROM interna podem ser usados ou no, de acordo com o estado do pino
*EA (External Access Enable):
se *EA=0 64 KB de programa externo
se *EA=1 4 KB de ROM interna
60 KB de programa externo
MICROCONTROLADORES (MCS-51) 2 - 3
CAPTULO II FAMLIA MCS-51
Para executar um programa a partir de uma memria externa bastam algumas conexes
simples:
8051 ROM
8 bits ALE=1(A0-A7) ALE=0(D0-D7)
P0 (AD0-AD7) (D0-D7)
LATCH
D 373 8 bits (A0-A7)
Q (A0-A7)
ALE G
Deve-se notar que a memria de programa s pode ser lida. So sempre emitidos
endereos de 16 bits, por isso as portas P0 e P2 so sacrificadas quando se usa memria de
programa externa.
2 - 4 MICROCONTROLADORES (MCS-51)
CAPTULO II FAMLIA MCS-51
8051 SRAM
8 bits ALE=1(A0-A7) ALE=0(D0-D7)
P0 (AD0-AD7) (D0-D7)
LATCH
D 373 8 bits (A0-A7)
Q (A0-A7)
ALE G
8 bits n bits
P2 (A8-A15) (A8-A15)
(8-n) bits
I/O
P3.7
*RD *OE
P3.6
*WR *WE
Deve-se notar o uso de dois bits da porta P3. Por outro lado, se todo o programa est na
ROM interna, a porta P2 no totalmente sacrificada; somente so usados os bits necessrios para
emitir os endereos.
Exemplo:
RAM externa de 2 KB 8 bits de P0
3 bits de P2
Sobram 5 pinos da porta P2.
OBSERVAO:
No caso explicado acima, onde so usados somente 3 bits de P2, um acesso memria de dados
no pode ser efetuado com a instruo MOVX A,@DPTR. Deve ser trocada por:
MICROCONTROLADORES (MCS-51) 2 - 5
CAPTULO II FAMLIA MCS-51
ALE
*Y0
A8-A15 A15
P2(A8-A15) *Y1
A14
DECOD
A13
138
*EA
*Y7
8051
*CS *CS *CS *CS *CS *CS *CS *CS
(A0-A12)
RAM RAM RAM RAM RAM RAM RAM RAM
DADOS (D0-D7)
P 3.7
*RD
*WR
P 3.6 64K Dados Externos
A figura 2.6 mostra uma utilizao exaustiva de memrias de programa e dados. Como
os sinais *PSEN e (*RD e *WR) so mutuamente exclusivos, foi possvel usar um mesmo
decodificador. As portas P0, P2 e os dois bits da porta P3 foram sacrificados. Os buffers foram
omitidos para simplificar o desenho.
possvel implementar uma Arquitetura de Von Newmann usando o 8031. Neste caso
h um limite de 64 KB de RAM para programa e dados. A figura 2.7 ilustra o circuito.
8051 SRAM
8 bits ALE=1(A0-A7) ALE=0(D0-D7)
P0 (AD0-AD7) (D0-D7)
LATCH
D
8 bits (A0-A7) (A0-A7)
373 Q
ALE G
8 bits (A8-A15)
P2 (A8-A15) (A8-A15)
*PSEN
LEITURA
*OE
*RD
ESCRITA
*WR *WE
PROGRAMA E DADOS
Figura 2.7. Microcontrolador 8051 com arquitetura de Von Newman: uma s Memria de Programa e
Dados.
2 - 6 MICROCONTROLADORES (MCS-51)
CAPTULO II FAMLIA MCS-51
Uma das grandes vantagens do 8051 oferecer uma memria de dados interna, com
um mnimo de 128 bytes. Essa memria permite um rpido acesso aos dados e, em muitas
aplicaes, pode eliminar a necessidade da RAM externa, diminuindo portanto o custo do circuito
controlador. Alm da velocidade, existem reas de RAM interna que so acessveis bit a bit, o que
muito til para operaes booleanas.
O espao de endereamento reservado para acessar a RAM interna de 8 bits, o que
proporciona um mximo de 256 bytes. Mas com um pequeno artifcio possvel colocar mais 128
bytes, resultando num total de 384 bytes na RAM interna (assim o 8052). Alm disso, na RAM
interna existem 4 bancos de 8 registros (R0, R1, ... , R7) que podem ser utilizados pelo usurio.
80H
80H 80H
7FH
RAM INTERNA
(80 bytes) (128 LOWER + SFR + 128 UPPER)
endereveis com modo direto ou
30H indireto
128 bits
BIT A BIT (16 bytes)
128 endereos 0 ... 7FH
20H
LOWER
BANCO 3 (8 bytes) 18H
A pilha sempre funciona na RAM interna e a consome muito; por isso nos 8052 o recurso
de colocar a pilha nos 128 bytes endereados indiretamente (128 UPPER) muito atraente.
MICROCONTROLADORES (MCS-51) 2 - 7
CAPTULO II FAMLIA MCS-51
disponveis para a pilha. Se para cada CALL so guardados PC, PSW, Acc e B (5 bytes), h
disponibilidade de at 12 CALL aninhados.
Se a pilha for trabalhar nos 128 UPPER, subtraindo os 10 bytes para as interrupes
tm-se 118 bytes, o que resulta em 23 CALL aninhados (23 x 5 =115 bytes) e ainda sobram 80 bytes
para as variveis nos 128 LOWER.
Os bancos de registros so timos para guardar o contexto, principalmente no caso de
interrupes. Estes so trocados com uma s instruo. Por exemplo, poder-se-ia usar:
BK3 interrupo porta serial
BK2 interrupo INT1
BK1 interrupo INT0
BK0 trabalho
S pode haver um banco selecionado de cada vez mas todos os registros podem ser
endereados atravs do endereo de seu byte.
128 LOWER
10H 10 R0
F R7
... Assim, mesmo quando um banco no
BANCO est selecionado, seus registros so
1 9 R1 acessveis pelo endereo
8 8 R0 de seu byte.
7 R7
BANCO ...
0 1 R1
0 0 R0
endereos
2 - 8 MICROCONTROLADORES (MCS-51)
CAPTULO II FAMLIA MCS-51
Dos 256 bytes da RAM interna que so endereados diretamente, 128 (80 FF) so
reservados para os Registros de Funes Especiais (SFR). O 8051 apresenta um conjunto mnimo
mas pode haver mais SFR em outros membros da MCS-51.
Os SFR no devem ser confundidos com o chamado "128 UPPER", que uma rea de
128 bytes (80H FFH) que s endereada indiretamente e s existe no 8051.
* B Registro B F0
* P2 Porta 2 A0
* P1 Porta 1 90
* P0 Porta 0 80
MICROCONTROLADORES (MCS-51) 2 - 9
CAPTULO II FAMLIA MCS-51
Acc Acumulador
B Usado durante as operaes de multiplicao e diviso; nos demais casos pode ser usado
como auxiliar.
2 - 10 MICROCONTROLADORES (MCS-51)
CAPTULO II FAMLIA MCS-51
SBUF Dois registros, um para leitura e outro para escrita (Serial Buffer)
Leitura receber o dado da porta serial
Escrita enviar o dado para a porta serial
PCON Controle de energia (Power Control); coloca no modo "Power Down" ou "Idle"
Observaes:
1) Os registros ou endereos em negrito so endereveis bit a bit.
2) Usam-se as letras "BK" para abreviar a palavra "banco".
3) As clulas marcadas com "-" so inexistentes.
4) A seqncia de endereos da direita para a esquerda e de baixo para cima.
MICROCONTROLADORES (MCS-51) 2 - 11
CAPTULO II FAMLIA MCS-51
S F R
FFH - - - - - - - - F8H
F7H - - - - - - - B F0H
EFH - - - - - - - - E8H
E7H - - - - - - - Acc E0H
DFH - - - - - - - - D8H
D7H - - - - - - - PSW D0H
CFH - - - - - - - - C8H
C7H - - - - - - - - C0H
BFH - - - - - - - IP B8H
B7H - - - - - - - P3 B0H
AFH - - - - - - - IE A8H
A7H - - - - - - - P2 A0H
9FH - - - - - - SBUF SCON 98H
97H - - - - - - - P1 90H
8FH - - TH1 TH0 TL1 TL0 TMOD TCON 88H
87H PCON - - - DPH DPL SP P0 80H
128 LOWER
7FH 7FH 7EH ... 78H
77H 70H
6FH 68H
67H 60H
5FH 58H
57H 50H
4FH 48H
47H 40H
3FH 38H
37H ... 31H 30H 30H
2FH 2FH 2EH 2DH 2CH 2BH 2AH 29H 28H 28H
27H 27H 26H 25H 24H 23H 22H 21H 20H 20H
BK3 1FH R7 R6 R5 R4 R3 R2 R1 R0 18H
BK2 17H R7 R6 R5 R4 R3 R2 R1 R0 10H
BK1 0FH R7 R6 R5 R4 R3 R2 R1 R0 08H
BK0 07H R7 R6 R5 R4 R3 R2 R1 R0 00H
Figura 2.11. Mapa completo da RAM Interna.
2 - 12 MICROCONTROLADORES (MCS-51)
CAPTULO II FAMLIA MCS-51
A seguir, na figura 2.12 apresentado um mapa com todos os bits do MCS-51. So 256
bits e, portanto, ocupam 32 bytes. Esto marcados o endereo dos bits, o nome e o byte ao qual
pertencem. Existem duas classes de bits: os que pertencem ao 128 LOWER e tm os endereos de
00H a 7FH e os que pertencem aos SFR e tm os endereos de 80H at FFH. Alguns bits no
existem ou sero utilizados em futuras verses e esto marcados com "-".
Como ser abordado mais adiante, os bits podem ser endereados de at 4 formas
diferentes. Como exemplo, uma instruo para habilitar a recepo serial (setar o bit REN), poderia
ser:
1) SETB REN
2) SETB SCON.4
3) SETB 98H.4
4) SETB 9CH
MICROCONTROLADORES (MCS-51) 2 - 13
CAPTULO II FAMLIA MCS-51
2 - 14 MICROCONTROLADORES (MCS-51)
CAPTULO III PINAGEM E TEMPORIZAO
CAPTULO III
PINAGEM E TEMPORIZAO
3.1. INTRODUO
MICROCONTROLADORES (MCS-51) 3 - 1
CAPTULO III PINAGEM E TEMPORIZAO
1 40
P1.0 Vcc
2 39
P1.1 P0.0 AD0
3 38
P1.2 P0.1 AD1
4
P1.3 8051 P0.2
37
AD2
5 36
P1.4 P0.3 AD3
6 35
P1.5 P0.4 AD4
7 34
P1.6 P0.5 AD5
8 33
P1.7 P0.6 AD6
9 32
RST P0.7 AD7
10 31
RXD P3.0 *EA / VPP
11 30
TXD P3.1 ALE / PROG
12 29
*INT0 P3.2 *PSEN
13 28
*INT1 P3.3 P2.7 A15
14 27
T0 P3.4 P2.6 A14
15 26
T1 P3.5 P2.5 A13
16 25
*WR P3.6 P2.4 A12
17 24
*RD P3.7 P2.3 A11
18 23
XTAL2 P2.2 A10
19 22
XTAL1 P2.1 A9
20 21
Vss P2.0 A8
3 - 2 MICROCONTROLADORES (MCS-51)
CAPTULO III PINAGEM E TEMPORIZAO
OBS: A figura a seguir ilustra as possveis ligaes dos pinos XTAL1 e XTAL2:
MICROCONTROLADORES (MCS-51) 3 - 3
CAPTULO III PINAGEM E TEMPORIZAO
XTAL
ALE
*PSEN
DATA DATA DATA
Porta P0 IN
PCL OUT
IN
PCL OUT
IN
PCL OUT
(AD0-7)
PC -- Program Counter
PCL -- LSB do Program Counter
PCH -- MSB do Program Counter
Cada perodo de Clock recebe o nome de Fase (Phase). Cada estado composto por 2
perodos de Clock ou 2 fases, denominadas P1 e P2. Observar que EST1=EST4, EST2=EST5, etc. O
Program Counter (PC) composto por dois registros de 8 bits: PC = PCH + PCL.
As freqncias de ALE e *PSEN so iguais a 1/6 da freqncia do cristal, mas o "Duty
Cycle (DC) diferente para cada uma. ALE tem o DC=33% (1/3) enquanto que *PSEN tem o
DC=50% (1/2).
f(ALE) = f(*PSEN) = f(XTAL)/6
DC(ALE) = 33% ==> 33% alto e 67% baixo
DC(*PSEN) = 50% ==> 50% alto e 50% baixo
XTAL
ALE
*RD
DATA FLOAT
Porta P0 DPL ou Ri IN PCL se Prog Ext
(AD0-7)
Porta P2 PCH ou P2 SFR DPH ou P2 PCH ou P2 SFR
(A8-15)
3 - 4 MICROCONTROLADORES (MCS-51)
CAPTULO III PINAGEM E TEMPORIZAO
XTAL
ALE
*WR
Exemplos:
leitura escrita
Com DPTR MOVX A,@DPTR ou MOVX @DPTR,A
Com P2 e Ri MOVX A,@Ri ou MOVX @Ri,A (onde i=0 ou i=1)
Notar que quando se usa DPTR para enderear a memria externa, os 16 bits dos
endereos so emitidos por P0 e P2 mas ao se usar Ri, os 16 bits so formados pelo contedo de Ri
(LSB) e o que estava no SFR P2, ou seja, no se altera o contedo de P2.
MICROCONTROLADORES (MCS-51) 3 - 5
CAPTULO III PINAGEM E TEMPORIZAO
XTAL
P0 RST P0 RST
amostragem das entradas
P1 P2,P3 P1 P2,P3
MOV PORTA,DADO
SHIFT CLOCK
PORTA SERIAL
MODO 0
amostragem da amostragem da
entrada RXD entrada RXD
3.4. RESET
A entrada de Reset o pino RST que possui um Schmitt Triger na entrada. O Reset
realizado quando este pino se mantm em nvel alto pelo menos por 2 ciclos de mquina (24 clocks)
enquanto o oscilador estiver funcionando. A CPU responde gerando um reset interno de acordo com
a temporizao que indicada na figura 3.6.
Amostragem do RESET
12 PERODOS DE CLOCK
E5, P2
E5 E6 E1 E2 E3 E4 E5 E6 E1 E2 E3 E4 E5 E6 E1 E2 E3 E4
19 PERODOS DE CLOCK
ALE
*PSEN
EN EN EN EN
Porta P0 INSTRUC. INSTRUC. INSTRUC. INSTRUC. INSTRUC. EN
D. D. D. D. D.
3 - 6 MICROCONTROLADORES (MCS-51)
CAPTULO III PINAGEM E TEMPORIZAO
8051
C 10 uF
RESET
R 8,2 K
O esquema da figura 3.7 vlido para HMOS. Nas famlias CHMOS o resistor 8,2 K
pode ser omitido pois h um "pull-down" interno; alm disso, o capacitor deve ser reduzido a 1 F.
Quando energizado, o circuito (RC) assegura no pino RST um nvel alto durante uma
quantidade de tempo que depende dos valores de R e C. Para ter um "Power On Reset" seguro
necessrio que o pino RESET seja mantido em alto durante o tempo necessrio para que o oscilador
inicie e a isto se adicionam os 24 perodos de clock para o RESET efetivo.
MICROCONTROLADORES (MCS-51) 3 - 7
CAPTULO III PINAGEM E TEMPORIZAO
Com este circuito de Reset Vcc cai rapidamente a 0. Com isto, a tenso do pino RST
pode cair momentaneamente abaixo de 0 mas no causa danos. Com a chave em paralelo com um
capacitor pode-se gerar o RESET manual. Para que se possa projetar um RESET eficiente e preciso
necessrio analisar o circuito RC de primeira ordem.
Vcc
V
C
10 uF V
R
R V
t
8,2 K R TR
V R = V CC e t / RC
A pergunta, quando se calcula um circuito de RESET, : Qual RC me garante que o
RESET fique ativado por um tempo maior que o especificado ? Para que se possa responder a esta
pergunta necessrio saber qual a tenso de comutao do Schmitt-Trigger do 8051 e qual o
modelo eltrico da entrada RESET (ou seja, quanta corrente consome). Essas informaes no esto
facilmente disponveis nem nos Data Sheets.
3 - 8 MICROCONTROLADORES (MCS-51)
CAPTULO III PINAGEM E TEMPORIZAO
VCC
8051
R
8,2K DIODO
RESET
MANUAL
1 2
RESET
74LS14
Evita a descarga R
C SCHMITT
10
brusca do capacitor 10 uF TRIGGER
MICROCONTROLADORES (MCS-51) 3 - 9
CAPTULO IV CONJUNTO DE INSTRUES
CAPTULO 4
CONJUNTO DE INSTRUES
4.1. INTRODUO
MICROCONTROLADORES (MCS-51) 4 - 1
CAPTULO IV CONJUNTO DE INSTRUES
Indireto Aqui se especifica um registro onde est o endereo do operando. S pode ser usado
para endereamento indireto: R0, R1 ou DPTR.
MOV A, @R0
Coloca no acumulador o contedo do endereo que est em R0
Registro Especifico Algumas operaes so especificas para certos registros. Por exemplo,
algumas instrues sempre operam com Acc ou DPTR e no necessitam de espao no opcode para
especificar isto.
MOVX A,@DPTR
Esta uma instruo para leitura da Memria de Dados Externa. Coloca no
acumulador o contedo do endereo da RAM Externa que est no DPTR. Como sempre so usados
4 - 2 MICROCONTROLADORES (MCS-51)
CAPTULO IV CONJUNTO DE INSTRUES
Acc e DPTR, no necessrio especific-los, o que faz com que a instruo empregue apenas 1
byte.
Indexado O endereo do operando formado pela soma de um endereo base com um registro
de indexao. Somente a Memria de Programa pode ser endereada deste modo.
MOVC A,@A+DPTR
A ndice,
DPTR endereo base.
A soma do DPTR com o acumulador forma um endereo da Memria de Programa e o
contedo deste endereo transferido para o acumulador. Essa instruo tima para "look up
table".
MICROCONTROLADORES (MCS-51) 4 - 3
CAPTULO IV CONJUNTO DE INSTRUES
bytes MC CY AC OV
Rn 1 1
ADDC A, direto 2 1
X X X
@Ri 1 1
#data 2 1
bytes MC CY AC OV
Rn 1 1
SUBB A, direto 2 1
X X X
@Ri 1 1
#data 2 1
bytes MC CY AC OV
A 1 1
INC Rn 1 1
- - -
direto 2 1
@Ri 1 1
4 - 4 MICROCONTROLADORES (MCS-51)
CAPTULO IV CONJUNTO DE INSTRUES
bytes MC CY AC OV
A 1 1
DEC Rn 1 1
- - -
direto 2 1
@Ri 1 1
bytes MC CY AC OV
INC DPTR 1 2 - - -
bytes MC CY AC OV
MUL AB 0 - X
1 4
DIV AB 0 X 0
bytes MC CY AC OV
DA A 1 1 X X -
MICROCONTROLADORES (MCS-51) 4 - 5
CAPTULO IV CONJUNTO DE INSTRUES
Na realidade, soma-se 00H, 06H, 60H ou 66H conforme o valor inicial de A e PSW.
OBS 2: Nmeros BCD podem ser incrementados somando 01H ou decrementados somando 99H e
usando o ajuste decimal DA A.
bytes MC CY AC OV
Rn 1 1
ANL A, direto 2 1
@Ri 1 1
- - -
#data 2 1
ANL direto A 2 1
#data 3 2
4 - 6 MICROCONTROLADORES (MCS-51)
CAPTULO IV CONJUNTO DE INSTRUES
4.5.2. OR de 8 Bits:
Emprega-se o smbolo ORL (Logical OR) para representar esta instruo. Existem 6
instrues, reunidas em dois grupos de acordo com o destino do resultado:
bytes MC CY AC OV
Rn 1 1
ORL A, direto 2 1
@Ri 1 1
- - -
#data 2 1
ORL direto A 2 1
#data 3 2
bytes MC CY AC OV
Rn 1 1
XRL A, direto 2 1
@Ri 1 1
- - -
#data 2 1
XRL direto A 2 1
#data 3 2
MICROCONTROLADORES (MCS-51) 4 - 7
CAPTULO IV CONJUNTO DE INSTRUES
bytes MC CY AC OV
CLR - - -
CPL - - -
RL - - -
RLC A 1 1 X - -
RR - - -
RRC X - -
SWAP - - -
RL A RR A
Acc Acc
RLC A RRC A
C Acc C Acc
SWAP A
4 - 8 MICROCONTROLADORES (MCS-51)
CAPTULO IV CONJUNTO DE INSTRUES
bytes MC CY AC OV
Rn 1 1
MOV A, direto 2 1
@Ri 1 1
#data 2 1
A 1 1
MOV Rn, direto 2 2
#data 2 1
A 2 1 - - -
Rn 2 2
MOV direto, direto 3 2
@Ri 2 2
#data 3 2
A 1 1
MOV @Ri direto 2 2
#data 2 1
Pode-se pensar que existem todas as combinaes possveis entre A, Rn, direto, @Ri e
#data, mas existem algumas excees:
MICROCONTROLADORES (MCS-51) 4 - 9
CAPTULO IV CONJUNTO DE INSTRUES
bytes MC CY AC OV
Rn 1 1
XCH A, direto 2 1 - - -
@Ri 1 1
bytes MC CY AC OV
XCHD A,@Ri 1 1 - - -
bytes MC CY AC OV
PUSH direto
2 2 - - -
POP direto
4 - 10 MICROCONTROLADORES (MCS-51)
CAPTULO IV CONJUNTO DE INSTRUES
ESCRITA bytes MC CY AC OV
MOVX @Ri,
A 1 2 - - -
MOVX @DPTR,
LEITURA bytes MC CY AC OV
MOVC A, @A+DPTR 1 2
- - -
@A+PC
MICROCONTROLADORES (MCS-51) 4 - 11
CAPTULO IV CONJUNTO DE INSTRUES
bytes MC CY AC OV
CLR C 1 1 0 - -
bit 2 1 - - -
SETB C 1 1 1 - -
bit 2 1 - - -
CPL C 1 1 X - -
bit 2 1 - - -
bytes MC CY AC OV
ANL C, bit 2 1
/bit
X - -
ORL C, bit 2 1
/bit
bytes MC CY AC OV
MOV C , bit 2 1 X - -
MOV bit , C 2 2 - - -
4 - 12 MICROCONTROLADORES (MCS-51)
CAPTULO IV CONJUNTO DE INSTRUES
JNB e JNC para desviar se o bit est desativado (em zero). Existe o mnemnico JBC que desvia se
o bit est ativado e depois complementa este bit.
bytes MC CY AC OV
JC rel 2 2
JNC
JB - - -
JNB bit,rel 3 2
JBC
bytes MC CY AC OV
LCALL adr16 3 2
- - -
ACALL adr11 2 2
MICROCONTROLADORES (MCS-51) 4 - 13
CAPTULO IV CONJUNTO DE INSTRUES
bytes MC CY AC OV
RET 1 2
- - -
RETI
4.8.3. Desvios:
So quatro as instrues de desvios. H dois desvios que so idnticos s chamadas de subrotinas e
que tambm permitem saltar numa faixa de 2 KB (AJMP) ou de 64 KB (LJMP). Os outros dois
desvios so relativos.
bytes MC CY AC OV
AJMP adr11 2 2
LJMP adr16 3 2
- - -
SJMP Rel 1 2
JMP @A+DPTR 1 2
bytes MC CONDIO CY AC OV
se Acc = 0 - - -
JZ rel 2 2
se Acc 0
JNZ
se Acc Direto
CJNE A ,direto ,rel 3 2
se Acc (#data)
A
se Rn (#data)
CJNE Rn ,#data ,rel 3 2
se @Ri (#data)
@Ri
4.8.5. Loops :
As instrues de loops so do tipo "decremente e desvie se for diferente de zero"
(DJNZ). H duas instrues, as quais so muito teis para a repetio de determinadas partes do
programa. Utilizam como contador um registro ou um byte da RAM Interna e por isso tm um limite
de at 256 repeties. Como so baseadas em desvios relativos, tm um alcance de 127 bytes para
adiante e de 128 bytes para trs.
4 - 14 MICROCONTROLADORES (MCS-51)
CAPTULO IV CONJUNTO DE INSTRUES
bytes MC CY AC OV
DJNZ Rn ,rel 2 2
- - -
direto
4.8.6. No Operao :
H uma instruo que no faz nada, consumindo apenas ciclos da CPU. muito til
para reservar espaos na memria de programa quando se trabalha com EPROM.
bytes MC CY AC OV
NOP 1 1 - - -
Para a perfeita utilizao das instrues necessrio conhecer como estas alteram os
flags. Em seguida apresenta-se uma pequena tabela com um resumo dessas informaes. Na tabela,
0 (zero) indica que o flag apagado, 1 (um) indica que ativado, X (don't care) significa que o flag
ser ativado ou apagado de acordo com o resultado da instruo e "-" indica que o flag no
alterado.
INSTR/FLAG C OV AC
ADD X X X
ADDC X X X
SUBB X X X
MUL 0 X -
DIV 0 X -
DA X - -
RRC X - -
RLC X - -
SETB C 1 - -
CLR C 0 - -
CPL C X - -
ANL C,bit X - -
ANL C,/bit X - -
ORL C.bit X - -
ORL C,/bit X - -
MOV C,bit X - -
CJNE X - -
Figura 4.3. Comportamento dos flags.
MICROCONTROLADORES (MCS-51) 4 - 15
CAPTULO IV CONJUNTO DE INSTRUES
4.10. OBSERVAES
Aqui convm fazer uma pausa para alguns comentrios e exemplos sobre
endereamento e uso das instrues.
4 - 16 MICROCONTROLADORES (MCS-51)
CAPTULO IV CONJUNTO DE INSTRUES
B EQU 0F0H
Acc EQU 0E0H
PSW EQU 0D0H
...
SP EQU 081H
P0 EQU 080H
Deve-se ter cuidado com o acumulador pois existem dois smbolos para o mesmo: A e
Acc:
A para as instrues com registro especifico
Acc para usar acumulador por endereamento direto
MICROCONTROLADORES (MCS-51) 4 - 17
CAPTULO IV CONJUNTO DE INSTRUES
4 - 18 MICROCONTROLADORES (MCS-51)
CAPTULO IV CONJUNTO DE INSTRUES
7__
0__ 1__ 2__ 3__ 4__ 5__ 6__
JNZ rel
__0 NOP JBC bit,rel JB bit,rel JNB bit,rel JC rel JNC rel JZ rel
ACALL adr11
__1 AJMP adr11 ACALL adr11 AJMP adr11 ACALL adr11 AJMP adr11 ACALL adr11 AJMP adr11
ORL C,bit
__2 LJMP adr16 LCALL adr16 RET RETI ORL dir,A ANL dir,A XRL dir,A
JMP
__3 RR A RRC A RL A RLC A ORL dir,#dt ANL dir,#dt XRL dir,#dt
@A+DPTR
MOV A,#dt
__4 INC A DEC A ADD A,#dt ADDC A,#dt ORL A,#dt ANL A,#dt XRL A,#dt
MOV dir,#dt
__5 INC dir DEC dir ADD A,dir ADDC A,dir ORL A,dir ANL A,dir XRL A,dir
MOV @R0,#dt
__6 INC @R0 DEC @R0 ADD A,@R0 ADDC A,@R0 ORL A,@R0 ANL A,@R0 XRL A,@R0
MOV @R1,#dt
__7 INC @R1 DEC @R1 ADD A,@R1 ADDC A,@R1 ORL A,@R1 ANL A,@R1 XRL A,@R1
MOV R0,#dt
__8 INC R0 DEC R0 ADD A,R0 ADDC A,R0 ORL A,R0 ANL A,R0 XRL A,R0
MOV R1,#dt
__9 INC R1 DEC R1 ADD A,R1 ADDC A,R1 ORL A,R1 ANL A,R1 XRL A,R1
MOV R2,#dt
__A INC R2 DEC R2 ADD A,R2 ADDC A,R2 ORL A,R2 ANL A,R2 XRL A,R2
MOV R3,#dt
__B INC R3 DEC R3 ADD A,R3 ADDC A,R3 ORL A,R3 ANL A,R3 XRL A,R3
MOV R4,#dt
__C INC R4 DEC R4 ADD A,R4 ADDC A,R4 ORL A,R4 ANL A,R4 XRL A,R4
MOV R5,#dt
__D INC R5 DEC R5 ADD A,R5 ADDC A,R5 ORL A,R5 ANL A,R5 XRL A,R5
MOV R6,#dt
__E INC R6 DEC R6 ADD A,R6 ADDC A,R6 ORL A,R6 ANL A,R6 XRL A,R6
MOV R7,#dt
__F INC R7 DEC R7 ADD A,R7 ADDC A,R7 ORL A,R7 ANL A,R7 XRL A,R7
MICROCONTROLADORES (MCS-51) 4 - 19
CAPTULO IV CONJUNTO DE INSTRUES
F__
8__ 9__ A__ B__ C__ D__ E__
MOVX
__0 SJMP rel MOV DPTR,#dt16 ORL C,/bit ANL C,/bit PUSH dir POP dir MOVX A,@DPTR
@DPTR,A
ACALL adr11
__1 AJMP adr11 ACALL adr11 AJMP adr11 ACALL adr11 AJMP adr11 ACALL adr11 AJMP adr11
MOVX @R0,A
__2 ANL C,bit MOV bit,C MOV C,bit CPL bit CLR bit SETB bit MOVX A,@R0
MOVX @R1,A
__3 MOVC A,@A+PC MOVC A,@A+DPTR INC DPTR CPL C CLR C SETB C MOVX A,@R1
CPL A
__4 DIV AB SUBB A,#dt MUL AB CJNE A,#dt,rel SWAP A DA A CLR A
MOV dir,A
__5 MOV dir,dir SUBB A,dir ---------------- CJNE A,dir,rel XCH A,dir DJNZ dir,rel MOV A,dir
MOV @R0,A
__6 MOV dir,@R0 SUBB A,@R0 MOV @R0,dir CJNE @R0,#dt,rel XCH A,@R0 XCHD A,@R0 MOV A,@R0
MOV @R1,A
__7 MOV dir,@R1 SUBB A,@R1 MOV @R1,dir CJNE @R1,#dt,rel XCH A,@R1 XCHD A,@R1 MOV A,@R1
MOV R0,A
__8 MOV dir,R0 SUBB A,R0 MOV R0,dir CJNE R0,#dt,rel XCH A,R0 DJNZ R0,rel MOV A,R0
MOV R1,A
__9 MOV dir,R1 SUBB A,R1 MOV R1,dir CJNE R1,#dt,rel XCH A,R1 DJNZ R1,rel MOV A,R1
MOV R2,A
__A MOV dir,R2 SUBB A,R2 MOV R2,dir CJNE R2,#dt,rel XCH A,R2 DJNZ R2,rel MOV A,R2
MOV R3,A
__B MOV dir,R3 SUBB A,R3 MOV R3,dir CJNE R3,#dt,rel XCH A,R3 DJNZ R3,rel MOV A,R3
MOV R4,A
__C MOV dir,R4 SUBB A,R4 MOV R4,dir CJNE R4,#dt,rel XCH A,R4 DJNZ R4,rel MOV A,R4
MOV R5,A
__D MOV dir,R5 SUBB A,R5 MOV R5,dir CJNE R5,#dt,rel XCH A,R5 DJNZ R5,rel MOV A,R5
MOV R6,A
__E MOV dir,R6 SUBB A,R6 MOV R6,dir CJNE R6,#dt,rel XCH A,R6 DJNZ R6,rel MOV A,R6
MOV R7,A
__F MOV dir,R7 SUBB A,R7 MOV R7,dir CJNE R7,#dt,rel XCH A,R7 DJNZ R7,rel MOV A,R7
4 - 20 MICROCONTROLADORES (MCS-51)
CAPTULO IV CONJUNTO DE INSTRUES
A10 A9 A8 1 0000 A7 A6 A5 A4 A3 A2 A1 A0
1) ACALL adr11
2) ADD A,Rn 28+n
3) ADD A,direct 25 direct
4) ADD A,@Ri 26+i
5) ADD A,#data 24 data
6) ADDC A,Rn 38+n
7) ADDC A,direct 35 direct
8) ADDC A,@Ri 36+i
9) ADDC A,#data 34 data
A10 A9 A8 0 0000 A7 A6 A5 A4 A3 A2 A1 A0
10) AJMP adr11
11) ANL A,Rn 58+n
12) ANL A,direct 55 direct
13) ANL A,@Ri 56+i
14) ANL A,#data 54 data
15) ANL direct,A 52 direct
16) ANL direct,#data 53 direct data
17) ANL C,bit 82 bit
18) ANL A,/bit B0 bit
19) CJNE A,direct,rel B5 direct relativo
20) CJNE A,#data,rel B4 data direct
21) CJNE Rn,#data,rel B8+n data relativo
MICROCONTROLADORES (MCS-51) 4 - 21
CAPTULO IV CONJUNTO DE INSTRUES
4 - 22 MICROCONTROLADORES (MCS-51)
CAPTULO IV CONJUNTO DE INSTRUES
MICROCONTROLADORES (MCS-51) 4 - 23
CAPTULO IV CONJUNTO DE INSTRUES
4 - 24 MICROCONTROLADORES (MCS-51)
CAPTULO IV CONJUNTO DE INSTRUES
O programa apresenta um desvio condicional para frente. A seguir tem-se este mesmo
programa com os endereos de memria e seu contedo.
conveniente ressaltar que quando a instruo "JC LABEL" est sendo executada, o
Program Counter (PC) j est apontando para a instruo seguinte; por isso, o deslocamento +0 est
na instruo "ADD A,#20H".
MICROCONTROLADORES (MCS-51) 4 - 25
CAPTULO IV CONJUNTO DE INSTRUES
4 - 26 MICROCONTROLADORES (MCS-51)
CAPTULO IV CONJUNTO DE INSTRUES
OBSERVAO:
AJMP LB1 A10 A9 A8 0 0000 A7 A6 A5 A4 A3 A2 A1 A0
E0 65 1 1 1 0 0000 0 1 1 0 0 1 0 1
O programa semelhante ao anterior mas o AJMP foi trocado por um ACALL. Notar que
a instruo ACALL est chamando uma rotina que est atrs, mas dentro do bloco de 2 KB.
MICROCONTROLADORES (MCS-51) 4 - 27
CAPTULO IV CONJUNTO DE INSTRUES
407 20 +3
...
234(LB1) D4 DA A --
OBSERVAO:
ACALL LB1 A10 A9 A8 1 0000 A7 A6 A5 A4 A3 A2 A1 A0
50 34 0 1 0 1 0000 0 0 1 1 0 1 0 0
Este programa vai apresentar um erro do tipo "illegal range" devido ao fato que o AJUMP
est no primeiro bloco de 2 KB (0 at 7FF) e o label est no segundo bloco (800 at FFF).
4 - 28 MICROCONTROLADORES (MCS-51)
CAPTULO IV CONJUNTO DE INSTRUES
4.13. EXEMPLOS
ORG 200H
SUM: MOV A,R0
ADD A,R1
MOV R7,A
RET
Deve-se ter cuidado para que a soma (R0+R1) no seja maior que 256. A melhor
soluo ter uma subrotina geral e por isso o resultado armazenado em 2 registros: R7 (MSB)
R6 (LSB). O resultado ser maior que 256 quando existir um carry.
ORG 200H
SUM: MOV A,R0
ADD A,R1
MOV R6,A ;R6 guarda o LSB
CLR A ;zera o acumulador
ADDC A,#0 ;acrescenta o carry
MOV R7,A ;R7 guarda o MSB
RET
MICROCONTROLADORES (MCS-51) 4 - 29
CAPTULO IV CONJUNTO DE INSTRUES
A instruo "ADDC A,#0" pode ser substituda pela instruo "RLC A", com a vantagem
de se economizar um byte. Isto est na listagem hexadecimal a seguir.
ORG 200H
SUB: MOV A,R1
CLR C ;zera o carry (necessario na subtracao)
SUBB A,R0
MOV R7,A
RET
4 - 30 MICROCONTROLADORES (MCS-51)
CAPTULO IV CONJUNTO DE INSTRUES
204 22 RET
Um cuidado que se deve ter ao usar a instruo SUBB o de zerar o carry pois o SUBB
sempre o utiliza.
ORG 200H
MUL: MOV A,R0
MOV B,R1
MUL AB
MOV R6,A ;guarda o LSB
MOV R7,B ;guarda o MSB
RET
ORG 200H
DIV: MOV A,R1 ;dividendo em A
MOV B,R0 ;divisor em B
DIV AB
MOV R7,A ;guarda o quociente
MOV R6,B ;guarda o resto
RET
MICROCONTROLADORES (MCS-51) 4 - 31
CAPTULO IV CONJUNTO DE INSTRUES
ORG 200H
DIV_7: MOV A,R3
MOV B,#7
DIV AB ;dividir por 7
MOV A,B ;coloca o resto em A
JZ LB ;ha resto ?
CLR P1.0 ;zera bit P1.0
RET
LB: SETB P1.0 ;seta bit P1.0
RET
4 - 32 MICROCONTROLADORES (MCS-51)
CAPTULO IV CONJUNTO DE INSTRUES
H uma outra soluo que ocupa um byte a menos. Inicia-se com a hiptese de que o
nmero no divisvel por 7 ( zerar P1.0) e em seguida se realiza o teste; caso o numero for divisvel
inverte-se P1.0. Economiza-se um RET.
ORG 200H
ZERAR: CLR RS1 ;seleciona banco 0
CLR RS0 ;seleciona banco 0
CLR A
MOV R0,#127 ;maior endereo
LB: MOV @R0,A
DJNZ R0,LB
RET
MICROCONTROLADORES (MCS-51) 4 - 33
CAPTULO IV CONJUNTO DE INSTRUES
A soluo muito simples pois esta multiplicao pode ser vista como 4 multiplicaes
de 8 bits. A equao a seguir ilustra este efeito.
(28 .R3 + R2) *(28 .R1 + R0) = 216 (R3.R1) + 28 (R3.R0 + R2.R1) + (R2.R0)
32 BITS
24 16 8 0
2 2 2 2
R3*R1
R2*R1
R3*R0
R2*R0
R7 R6 R5 R4
4 - 34 MICROCONTROLADORES (MCS-51)
CAPTULO IV CONJUNTO DE INSTRUES
MICROCONTROLADORES (MCS-51) 4 - 35
CAPTULO IV CONJUNTO DE INSTRUES
76 76 10000
99 (-1) 98 (-2) 86
1 75 1 74 9914
CASO a: Em R4 existe um nmero de 0 a 99. Convert-lo para BCD e colocar o resultado em R6. Ao
dividir o nmero por 10, a unidade termina em Acc e a dezena em B.
4 - 36 MICROCONTROLADORES (MCS-51)
CAPTULO IV CONJUNTO DE INSTRUES
MICROCONTROLADORES (MCS-51) 4 - 37
CAPTULO IV CONJUNTO DE INSTRUES
CASO d: Em R5 e R4 existe um nmero do 0 a 9999. Convert-lo para BCD e colocar seu resultado
em R7 e R6.
A soluo adotada no Caso c sugere um loop para zerar R5. Mas para nmeros muito
grandes esse loop pode ser excessivo em termos de tempo e por isso a melhor soluo seria usar
divises por 1000, 100 e 10. O problema agora ser como realizar divises de 2 nmeros de 16 bits
usando a diviso de 8 bits que se tem disponvel.
Uma maneira de solucionar este problema converter o LSB para BCD e depois
converter o MSB para BCD, multiplic-lo por 256 e somar com o anterior. Uma multiplicao por 256
fcil: multiplique por 200 (multiplique por 2 e desloque 2 posies BCD para a esquerda);
multiplique por 50 (multiplique por 5 e desloque 1), multiplique por 6 e finalmente some os trs
resultados.
4 - 38 MICROCONTROLADORES (MCS-51)
CAPTULO IV CONJUNTO DE INSTRUES
Somar dois nmeros BCD, um nmero est em R2 e R1, enquanto o outro est indicado pelo
ponteiro R0. O resultado deve ser guardado no endereo apontado por R0.
[@(R0+1) e @R0] [@(R0+1) e @R0] + [R2 e R1]
MICROCONTROLADORES (MCS-51) 4 - 39
CAPTULO IV CONJUNTO DE INSTRUES
4 - 40 MICROCONTROLADORES (MCS-51)
CAPTULO IV CONJUNTO DE INSTRUES
Note que podem ser introduzidas algumas melhorias nas subrotinas de multiplicao: a
multiplicao por 2 se resume a uma soma.
2n = n + n
5n = 2n + 2n + n
6n = 5n + n
Deve-se notar que existem muitas outras rotinas para converter BIN para BCD.
MICROCONTROLADORES (MCS-51) 4 - 41
CAPTULO IV CONJUNTO DE INSTRUES
Subrotina auxiliar, recebe um caracter ASCII no Acc e retorna sua nibble correspondente.
ASCNIB: CLR C ;zera Carry
SUBB A,#30H ;A-30H -> se CY=1 => A<30 (ERRO)
JC ERRO ; -> se CY=0 => A>=30
PUSH Acc ;guarda A-30H na pilha
SUBB A,#10 ;A-10 -> se CY=1 => A<10
4 - 42 MICROCONTROLADORES (MCS-51)
CAPTULO IV CONJUNTO DE INSTRUES
MICROCONTROLADORES (MCS-51) 4 - 43
CAPTULO IV CONJUNTO DE INSTRUES
N
1000 =
n
Um bom exerccio desenvolver uma rotina para converter de binrio para BCD usando
este truque para a diviso por 1000. Verificar tambm a preciso (deve-se usar valores de N e n que
resultem em delta % < 0 e, para obter o resto, multiplica-se o resultado por 1000 e subtrai-se do
original).
4 - 44 MICROCONTROLADORES (MCS-51)
CAPTULO V ASSEMBLER E SIMULADOR
CAPTULO V
ASSEMBLER E SIMULADOR
ARQ.PRN
PR- ASSEMBLER
ARQ.ASM ARQ.MXP LINKER
PROCESADOR ARQ.OBJ ARQ.HEX
Para ativar o assembler usa-se o comando que est ilustrado na figura 5.2.
MICROCONTROLADORES (MCS-51) 5 - 1
CAPTULO V ASSEMBLER E SIMULADOR
LABEL: um identificador que opcionalmente pode ser seguido por : (dois pontos). Ao us-lo,
definido como um smbolo de usurio e atribui-se o endereo do primeiro byte da instruo. Os labels
devem ser colocados na primeira coluna do texto.
OPERAO: contm uma instruo do microcontrolador (em linguagem assembly) ou uma pseudo-
instruo (diretiva para o assembler).
OPERANDO: Pode haver nenhum, um, dois ou mais operandos; no caso de 2 ou mais operandos
estes so separados por vrgulas.
IMPORTANTE:
Labels devem comear na primeira coluna.
Cdigos no devem comear na primeira coluna.
Comentrios pode comear na primeira coluna.
5 - 2 MICROCONTROLADORES (MCS-51)
CAPTULO V ASSEMBLER E SIMULADOR
Os nmeros podem estar em outras bases diferentes da decimal, isto , podem estar
nas seguintes bases: 2, 8 ou 16; neste caso devem estar precedidos ou seguidos por:
Para definir as constantes de caracteres usa-se ' ou "; estas so calculadas como
inteiros de 16 bits. Em caso de uma letra, o byte de ordem alta zero.
O smbolo $ o contador de endereos do assembler (assembly-time counter). O valor
de $ o endereo do primeiro byte da instruo atual.
Nas expresses aritmticas os smbolos, nmeros, caracteres e $ so referenciados
como valores inteiros de 16 bits. Deve-se ter cuidado com os valores negativos, que so expressados
em complemento a 2. Por exemplo, -1 igual a FFFFH, ento:
-1 + 5 = 4
-1 LT 0 => Falso, pois -1(FFFFH) no menor que zero.
(Comparaes no usam sinais).
MICROCONTROLADORES (MCS-51) 5 - 3
CAPTULO V ASSEMBLER E SIMULADOR
Sempre que o assembler chamado, este primeiro envia o arquivo fonte para o pr-
processador. Pode-se evitar este passo com o seguinte comando (se no houver instrues para o
pr-processador):
AVMAC51 ARQ.ASM NOMACEVAL
END deve estar presente em todo arquivo, se faltar, ser gerado um.
5 - 4 MICROCONTROLADORES (MCS-51)
CAPTULO V ASSEMBLER E SIMULADOR
EQU atribui valores numricos aos smbolos (os valores atribudos so permanentes).
TEQ atribui valores numricos aos smbolos (os valores atribudos so temporrios).
OBSERVAO: opcional a definio do tipo para os smbolos, os quais so:
CODE memria de programa,
DATA memria de dados interna,
XDATA memria de dados externa,
BIT endereos do espao de bits,
NUMBER qualquer coisa, vlido em qualquer lugar.
Exemplos: LB EQU 5, CODE LB um endereo de programa
FLAG EQU P1.3,BIT FLAG um endereo de bit
DS (Define Space) reserva espao na RAM. Dentro do segmento de bits, DS reserva espao em
bits. Ex: DS 8 reserva 8 bytes da RAM no segmento onde estiver, geralmente CODE.
DB (Define Byte) reserva e inicializa espao
Exemplos:
TXT DB "Isto uma string", 0DH,0AH,0
TXT DB "Isto uma string\r\n\0"
L1 DB 8 ;reserva 1 byte e o inicializa com 8
L2 DB 1, 2, 3 ;reserva 3 bytes e os inicializa com estes valores
SMBOLO SIGNIFICADO
nova linha
\n
retorno de carro
\r
tabulao
\t
NULL ou 0
\0
precede um hexadecimal de 2 dgitos
\x
(\x0A=line feed)
DW (Define Word) como DB, mas trabalha com words (16 bits). Ex: L3 DW 123H
PROC ,ENDPROC labels globais, permitem programas modulares.
Smbolo local comea com "L?XXXX" e s tem sentido entre PROC........ENPROC, quando se
encontra ENPROC, todos os smbolos locais so destrudos.
Exemplo:
BLOCO1 PROC
MOV A,#7
L?TOP: CPL P1.7 ;L?TOP uma varivel local
DJNZ A,L?TOP
ENDPROC
MICROCONTROLADORES (MCS-51) 5 - 5
CAPTULO V ASSEMBLER E SIMULADOR
Exemplos:
DEFSEG STACK, CLASS=DATA ;stack um segmento redirecionvel
DEFSEG KUMQUATS ;KUMQUATS CODE por default
DEFSEG BLOCK, START=200H ;BLOCK segmento CODE, iniciando em 200H.
DEFSEG TRW, ALIGN=PAGE ;TRW segmento tipo CODE e deve comear
;com endereo mltiplo de 800H (dentro de pginas
; de 2k)
DEFSEG NEWIO, START = 50H, CLASS=BIT ;NEWIO um segmento na rea de
; bits, comeando em 50H.
OBSERVAO: DEFSEG s define o segmento; para entrar em um segmento qualquer necessrio
usar a instruo SEG.
ORG origem.
PUBLIC, EXTERN permite compartilhar smbolos definidos em arquivos (mdulos) distintos. Ex:
PUBLIC LABEL e EXTERN LABEL_EXT
5 - 6 MICROCONTROLADORES (MCS-51)
CAPTULO V ASSEMBLER E SIMULADOR
O PR-PROCESSADOR (ADP)
O pr-processador chamado ADP. O assembler necessita encontr-lo pois a
primeira ao a ser realizada. Todas as pseudo-operaes relativas ao pr-processador comeam
com o caracter %.
MICROCONTROLADORES (MCS-51) 5 - 7
CAPTULO V ASSEMBLER E SIMULADOR
SUBB A,B
Definio de uma macro para representar a soma de trs variveis:
SOMA %MACRO x,y,z ;exemplo de macro com parametros
MOV A,z
ADD A,y
MOV x,A
%ENDM
Utilizao da macro recm definida:
MOV B,A
SOMA R7,R6,R5
MOV R3,A
%IFB - %IFNB (If Blank - If Not Blank) se foi atribudo ou no valor a um parmetro (blank significa
que no foi atribudo nenhum valor); geralmente usado nas macros.
O label AQUI foi definido trs vezes, o que um erro. A soluo usar GENSYM:
% FOR I IN "P1.7","P.6","P1.5"
% GENSYM AQUI
AQUI JNB I,AQUI
% ENDFOR
Vai resultar em:
??0000 JNB P1.7,??0000
??0001 JNB P1.6,??0001
??0002 JNB P1.5,??0002
Notar que se evitou a repetio do mesmo label.
5 - 8 MICROCONTROLADORES (MCS-51)
CAPTULO V ASSEMBLER E SIMULADOR
OBSERVAES:
Duas instrues genricas JMP e CALL so fornecidas. O assembler decide qual instruo usar
em funo da distncia, de forma que obtenha o menor tamanho. Isso vlido para referncias
para trs. Em referncias para adiante obrigatrio o uso de LJMP, AJMP ou LCALL, ACALL.
Todos os nomes dos SFR e dos bits j esto definidos.
Tambm j esto definidos os seguintes endereos de interrupes
RESET 0 ;endereo a ser executado depois do RESET
EXTI0 3 ;interrupo EXTERNA 0
TIMER0 08H ;interrupo do TIMER 0
EXTI1 13H ;interrupo EXTERNA 1
TIMER1 1BH ;interrupo do TIMER 1
SINT 23H ;interrupo da PORTA SERIAL
Na listagem do arquivo com extenso .PRN gerado, o campo de endereos apresentar os
seguintes smbolos:
& segmento definido pelo usurio @ segmento PAGE0 (se houver)
segmento CODE * label externo
segmento DATA
O AVLINK um sistema interativo para linkar (ligar) objetos. Este programa invocado
usando:
AVLINK ARQ = ARQ START (100H)
A partir do ARQ.OBJ gerado o ARQ.HEX, onde o programa comear a partir do
endereo absoluto 100H.
Outros arquivos podem ser gerados:
ARQ.SYM arquivo de smbolos.
ARQ.MAP indica onde cada parte do programa est localizada.
MICROCONTROLADORES (MCS-51) 5 - 9
CAPTULO V ASSEMBLER E SIMULADOR
HEXFORM um programa que ordena os arquivos .HEX de forma que os endereos mais baixos
apaream primeiro. Modelo para a utilizao:
HEXFORM ARQ_IN.HEX ARQ_OUT.HEX
(no ordenado) (ordenado)
Serve tambm para converter entre .HEX e o formato binrio com a sintaxe: hexform ARQ=ARQ
5 - 10 MICROCONTROLADORES (MCS-51)
CAPTULO V ASSEMBLER E SIMULADOR
RECORD DE DADOS
: COUNT
2 char
END. CARGA
4 char
TIPO
00
DADOS
(2*count) char
CHECKSUM
2 char
CR LF
RECORD FINAL
: COUNT
00
END. INCIO
4 char
TIPO
01
CHECKSUM
2 char
CR LF
Exemplo: Record com os dados 1,2,3,4,5 colocados a partir do endereo 1234H e com
endereo de incio em 0000H.
: 05 1234 00 01 02 03 04 05 A6
: 00 0000 01 FF
(foram deixados espaos para claridade)
MICROCONTROLADORES (MCS-51) 5 - 11
CAPTULO V ASSEMBLER E SIMULADOR
A seguir so apresentados trs programas fonte (.ASM) com a listagem (.PRN) gerada
pelo assembler. Por simplicidade, todos os programas iniciam no endereo 0.
;EXEMPLO1.ASM
;
;Somar dois numeros BCD de 4 digitos : R1R2R3 = R4R5 + R6R7
SEG CODE
INICIO MOV A,R7 ; R7 + R5
ADD A,R5
DA A
MOV R3,A ; R3 = R7 + R5
;
MOV A,R6 ; R6 + R4 + Carry
ADDC A,R4
DA A
MOV R2,A ; R2 = R6 + R4 + Carry
CLR A
ADDC A,#0 ; usar o Carry
MOV R1,A ; R1 = Carry
END
1 ;EXEMPLO1.ASM
2 ;
3 ;Somar dois numeros BCD de 4 digitos : R1R2R3 = R4R5 + R6R7
4
5 SEG CODE
0000' EF 6 INICIO MOV A,R7 ; R7 + R5
0001' 2D 7 ADD A,R5
0002' D4 8 DA A
0003' FB 9 MOV R3,A ; R3 = R7 + R5
10 ;
0004' EE 11 MOV A,R6 ; R6 + R4 + Carry
0005' 3C 12 ADDC A,R4
0006' D4 13 DA A
0007' FA 14 MOV R2,A ; R2 = R6 + R4 + Carry
0008' E4 15 CLR A
0009' 34 00 16 ADDC A,#0 ; usar o Carry
000B' F9 17 MOV R1,A ; R1 = Carry
18 END
5 - 12 MICROCONTROLADORES (MCS-51)
CAPTULO V ASSEMBLER E SIMULADOR
; EXEMPLO2.ASM
;
; Converter para BCD um numero binario entre 0 e 999
; R7R6(BCD) R5R4(Bin)
; Esta rotina esta no exemplo E10 caso c
SEG CODE
BB39 CLR A
MOV R7,A ;ZERAR R7 E R6
MOV R6,A
MOV A,R5
JZ LB1 ;SE R5=0, SALTAR ESSA FASE
LB2 MOV A,R6 ;SOMAR 256 BCD TANTAS VEZES
ADD A,#56H ;QUANTO EH O VALOR DE R5
DA A
MOV R6,A
MOV A,R7
ADDC A,#2
DA A
MOV R7,A
DJNZ R5,LB2 ;ZERO R5
MICROCONTROLADORES (MCS-51) 5 - 13
CAPTULO V ASSEMBLER E SIMULADOR
1 ; EXEMPLO2.ASM
2
3 ; Converter para BCD um numero binario entre 0 e 999
4 ; R7R6(BCD) <-- R5R4(Bin)
5 ; Esta rotina est no exemplo E10 C
6
7 SEG CODE
0000' E4 8 BB39 CLR A
0001' FF 9 MOV R7,A ;ZERAR R7 E R6
0002' FE 10 MOV R6,A
11
0003' ED 12 MOV A,R5
0004' 60 0C 13 JZ LB1 ;SE R5=0, PULAR ESSA FASE
0006' EE 14 LB2 MOV A,R6 ;SOMAR 256 BCD TANTAS VEZES
0007' 24 56 15 ADD A,#56H ;QUANTO EH O VALOR DE R5
0009' D4 16 DA A
000A' FE 17 MOV R6,A
000B' EF 18 MOV A,R7
000C' 34 02 19 ADDC A,#2
000E' D4 20 DA A
000F' FF 21 MOV R7,A
0010' DD F4 22 DJNZ R5,LB2 ;ZERO R5
23
0012' EC 24 LB1 MOV A,R5 ;CONVERTE R4 PARA BCD
0013'75 F0 64 25 MOV B,#100
0016' 84 26 DIV AB ;SEPARA CENTENAS
0017' 2F 27 ADD A,R7
0018' D4 28 DA A
0019' FF 29 MOV R7,A
001A' E5 F0 30 MOV A,B
001C'75 F0 0A31 MOV B,#10
001F' 84 32 DIV AB ;SEPARA DEZENAS
0020' C4 33 SWAP A
0021' 25 F0 34 ADD A,B
0023' 2E 35 ADD A,R6 ;SOMA COM O QUE EXISTE
0024' D4 36 DA A
0025' FE 37 MOV R6,A
0026' EF 38 MOV A,R7
0027' 34 00 39 ADDC A,#0
0029' D4 40 DA A
002A' FF 41 MOV R7,A
002B' 80 FE 42 SJMP $ ;LOOP ETERNO
43 END
5 - 14 MICROCONTROLADORES (MCS-51)
CAPTULO V ASSEMBLER E SIMULADOR
;EXEMPLO3.ASM
MICROCONTROLADORES (MCS-51) 5 - 15
CAPTULO V ASSEMBLER E SIMULADOR
1 ;EXEMPLO3.ASM
2
3 ;Converter um byte nos 2 caracteres HEXA ASCII correspondentes
4 ;AB (HEXA ASCII) <-- A
5 ;Exemplo: se Acc=0110 1010 Acc=36H e B=41H
6 ;Observacao: ASCII(6)=36H e ASCII(A)=41H
7 ;Corresponde ao exemplo E12
8
9 ;Para ilustrar este programa sera criado o segmento "PROGRAMA",
10 ;do tipo CODE, realocavel.
11
12 DEFSEG PROGRAMA, CLASS=CODE ;CRIAR
SEGMENTO
13 SEG PROGRAMA ;ENTRAR EM SEGMENTO
0000& F5 F0 14 HEXASC MOV B,A ;GUARDAR UM BYTE
0002& 54 0F 15 ANL A,#0FH ;SEPARAR LSNIBBLE
0004& ....X 16 ACALL NIBASC ;CONVERTER NIBBLE ASCII
0006& C5 F0 17 XCH A,B ;RECUPERAR UM BYTE
0008& 54 F0 18 ANL A,#0F0H ;SEPARAR MSNIBBLE
000A& C4 19 SWAP A
000B& ....X 20 ACALL NIBASC
000D& 80 FE 21 SJMP $ ;PARAR EXECUO
22
23 ;Rotina para converter uma nibble em ASCII correspondente
000F& C0 E0 24 NIBASC PUSH ACC ;GUARDAR NIBBLE
0011& C3 25 CLR C
0012& 94 0A 26 SUBB A,#10 ;A-10 CY=1 ==> A<10
0014& D0 E0 27 POP ACC ; CY=0 ==> A<=10
0016& 50 03 28 JNC NIBASC1
0018& 24 30 29 ADD A,#30H ;30H ... 39H
001A& 22 30 RET
001B& 24 37 31 NIBASC1 ADD A,#37H ;41H ... 46H
001D& 22 32 RET
33 END
5 - 16 MICROCONTROLADORES (MCS-51)
CAPTULO V ASSEMBLER E SIMULADOR
O AVSIM51 feito para ser usado com o AVMAC51. Este simulador oferece muitos
recursos:
Uma "CPU visual" na tela,
Todos os registros, flags, stack, portas e memria,
Desassembler (Inverse assembler),
Single step,
Undo (back trace),
Rodar todo o programa,
Simular I/O atravs de arquivos,
Pode-se aplicar patches diretamente usando mnemnicos,
Contador de ciclos para medir tempo de execuo,
Breakpoints.
Para que o AVSIM51 rode eficientemente devem estar presentes trs arquivos:
AVSIM51.OVR
AVSIM51.REG
AVSIM51.HLP
MICROCONTROLADORES (MCS-51) 5 - 17
CAPTULO V ASSEMBLER E SIMULADOR
5 - 18 MICROCONTROLADORES (MCS-51)
CAPTULO V ASSEMBLER E SIMULADOR
5.7.2.1. Breakpoints:
Existem diversos tipos de breakpoints:
De acordo com o acesso: read/write
write only
De acordo com o endereo: endereo de memria
faixa de endereo
registrador
De acordo com a durao: sticky somente desativado pelo usurio
dynamic se auto destri quando ocorre
MICROCONTROLADORES (MCS-51) 5 - 19
CAPTULO V ASSEMBLER E SIMULADOR
VALUE deve ser fornecido um valor de 8 bits o qual ser comparado com o contedo,
endereo ou registro sujeito a breakpoint. Exemplo: interrompe quando o contedo
de R0 seja 0F0H.
RANGE deve-se definir um limite inferior e um superior; quando o contedo estiver nesta
faixa (inclusive) o breakpoint ativado.
MASK mscara de 8 bits com 0, 1 e X (don't care). Quando os bits da mscara
coincidem com o contedo do endereo do registro produzido um trap. Exemplo:
mask = 1XXX XXX0.
INDIRECT agora o contedo do registro interpretado como uma endereo e usado para
buscar um dado na memria, o qual comparado com o valor. Um segundo valor de
16 bits (offset) deve ser fornecido para ser somado com o contedo do registro
(index) e assim produzir um endereo alvo.
5 - 20 MICROCONTROLADORES (MCS-51)
CAPTULO V ASSEMBLER E SIMULADOR
Um arquivo de I/O uma cadeia de bytes, onde cada bit est conectado a um pino
externo do microcontrolador. Tambm deve-se indicar a velocidade (em ciclos de mquina) que ser
usada para varrer o arquivo. A recepo de caracteres ASCII pela porta serial simulada ao unir os 7
bits menos significativos do arquivo de I/O ao SBUF e o bit mais significativo ao bit RI do SCON.
Podem ser gerados arquivos de entrada e arquivos de sada. O comando UNDO no
somente retrocede a instruo como tambm retrocede os arquivos de I/O corretamente.
MICROCONTROLADORES (MCS-51) 5 - 21
CAPTULO V ASSEMBLER E SIMULADOR
View I/O files mostra todos os arquivos de I/O abertos, a designao dos bits e o valor do "rate
counter".
5 - 22 MICROCONTROLADORES (MCS-51)
CAPTULO V ASSEMBLER E SIMULADOR
DUMP
D
configure memory dump windows
select dump area: 1 2
1 2
(upper or lower) dump window
dump: Absolute Indirect
A I
Absolute Indirect
dump start address dump indirect address or register
enter expression in data address space:___ enter expression in data address space:___
index offset
enter expression in data address space:___
EXPRESSION
COMMAND FILE
F
MICROCONTROLADORES (MCS-51) 5 - 23
CAPTULO V ASSEMBLER E SIMULADOR
I/O
I
Y N
O C
B
I/O transfer: Mapbits mapByte
5 - 24 MICROCONTROLADORES (MCS-51)
CAPTULO V ASSEMBLER E SIMULADOR
LOAD
MEMORY
M
busca proxima
ocorrncia search data
enter expression in data address space:___
MICROCONTROLADORES (MCS-51) 5 - 25
CAPTULO V ASSEMBLER E SIMULADOR
PATCH
peephole cross-assembler
patch: Patch code Open output file Close file
O C
P
QUIT
Q
exit to DOS
quit: Exit
RESET
R
C D Y A T B
remove todos os
address breakpoint reset breakpoint
e passpoint in trap list
SETUP
setup: Undo
5 - 26 MICROCONTROLADORES (MCS-51)
CAPTULO V ASSEMBLER E SIMULADOR
VIEW
EXECUTE
E
execute instruccin
enter mnemonic:___
SET
ativa o contador
M P T C D O S
de ciclos sero abordados nas pginas seguintes
MICROCONTROLADORES (MCS-51) 5 - 27
CAPTULO V ASSEMBLER E SIMULADOR
5 - 28 MICROCONTROLADORES (MCS-51)
CAPTULO V ASSEMBLER E SIMULADOR
aqui se pode
entrar com um
condition: Passpoint condition: expression=low limit value of
valor numrico n
breakpoint: Dynamic Sticky byte at BKPT address
antes de se escolher
enter expression:___
a opo;
com isto o trap
gerado
P D S
depois de D S condition: expression=high limit value of
n ocorrncias byte at BKPT address
enter expression:___
P: count instead of trap on activation
D: cleared automatically upon trap
S: trap set until clerared using reset C R-O pass address or register
A-R/W point B-R/W range enter expression in code address space:___
C-write point D-write range
D
A B
R-O pass lower address
enter expression in code address space:___
R/W pass address or register
enter expression in code address space:___
MICROCONTROLADORES (MCS-51) 5 - 29
CAPTULO V ASSEMBLER E SIMULADOR
page port P2
change external data drive with port P2 from [Yes or No] to : Yes No
Y N
HELP
H
telas diversas
com explicaes
5 - 30 MICROCONTROLADORES (MCS-51)
CAPTULO V ASSEMBLER E SIMULADOR
RUN:
F1 Go Toggle : roda simulao
F10 Single step : roda passo a passo
F9 Undo : desfaz ltima instruo
BKPT:
F2 move o cursor do breakpoint para cima
F4 move o cursor do breakpoint para baixo
F3 BKP SET: seta um breakpoint dinmico no cursor
ALT+F6 Trace Toggle ON: a janela atualizada mesmo quando o display est OFF
OFF: a janela atualizada quando o disply est ON
Movimento do cursor:
setas do teclado movem 1 posio em cada sentido
MICROCONTROLADORES (MCS-51) 5 - 31
CAPTULO V ASSEMBLER E SIMULADOR
5 - 32 MICROCONTROLADORES (MCS-51)
CAPTULO VI PORTAS PARALELOS
CAPTULO VI
PORTAS PARALELAS
A famlia MCS-51 oferece 4 portas paralelas, denominadas P0, P1, P2 e P3 e para cada
porta existe um SFR. De acordo com a configurao do hardware, uma ou mais portas estaro
totalmente ou parcialmente disponveis.
MICROCONTROLADORES (MCS-51) 6 - 1
CAPTULO VI PORTAS PARALELOS
6.2.1. Porta P1
A figura 6.1 ilustra o esquema eltrico da porta 1.
READ LATCH
Vcc
PULL-UP
INTERNO
SFR P1 PINO
BUS INTERNO D Q
S DA CPU
CLK
G
WRITE P1.i Q FET
TO LATCH LATCH D
READ PIN
O latch de um bit da porta P1 (um bit do SFR P1) representado por um flip-flop D, no
qual se escreve um valor do bus interno atravs de um pulso Write to Latch gerado pela CPU. A
sada do latch colocada no bus interno atravs de um sinal Read Latch gerado pela CPU. O nvel
do pino da porta colocado no bus interno atravs do sinal Read Pin, tambm gerado pela CPU.
Algumas instrues que lem o estado da porta operam com Read Latch enquanto outras operam
com Read Pin. Isto ser visto com mais detalhes.
Quando escreve na porta:
0 *Q=1 FET ON sada=0
1 *Q=0 FET OFF sada=1 (pull-up)
Para ser usado como entrada, o latch da porta deve estar em 1; isso desconecta o driver
FET da sada. Assim, o pino da porta vai para um nvel alto, levado pelo pull-up. Esse pino poder ser
6 - 2 MICROCONTROLADORES (MCS-51)
CAPTULO VI PORTAS PARALELOS
levado para o nvel baixo por qualquer elemento externo. Devido ao pull-up interno, essa porta
denominada "quasi-bidirecional". Quando est configurado para entrada, este vai para 1 e, se
externamente levado para baixo, ento fornece corrente. Se a porta estivesse em alta impedncia
quando configurado como entrada, ento seria classificado como "bidirecional verdadeiro".
PORTA TTL
Vcc
MICROCONTROLADOR R
Vcc CORTADO
T1
O PINO FORNECE
PULL-UP CORRENTE D1
PARA O TTL
PINO DA CPU EM SADA TTL EM
NVEL ALTO (1) NVEL BAIXO (0)
S
G=0 G SATURADO
FET
FET CORTADO
D T2
Figura 6.2. Pino do microcontrolador sendo levado a 0 por uma sada TTL.
6.2.2. Porta P3
Na figura 6.3 est o esquema eltrico da porta P3. Pela porta P3 tm-se diversas
funes alternativas: *RD, *WR, T0, T1, TXD, RXD, *INT0, *INT1.
Vcc
READ LATCH
ALTERNATE
OUTPUT PULL-UP
FUNCTION INTERNO
(AOF) PINO
DA CPU
S
SFR P3 G
BUS INTERNO Q FET
D Q
D
CLK
WRITE P3.i Q
TO LATCH LATCH
READ PIN
MICROCONTROLADORES (MCS-51) 6 - 3
CAPTULO VI PORTAS PARALELOS
Quando AOF=1, tem-se na sada a porta P3. Assim, se AOF=1 e for escrito:
0 Q=0 G=1 FET ON sada=0
1 Q=1 G=0 FET OFF sada=1 (pull-up)
Quando o latch de P3 contm 1, a sada pode ser controlada pelo sinal "Alternate Output
Function - AOF". J foram estudadas as funes alternativas geradas atravs de P3. Se o latch de P3
est em 0, o pino da porta estar em zero e as diversas funes alternativas no estaro disponveis.
P3 tambm uma porta quasi-bidirecional.
6.2.3. Porta P2
O esquema da figura 6.4 ilustra a porta P2. Por esta porta tambm sai o byte mais
significativo dos endereos.
Vcc
READ LATCH
ADDRESS
CONTROL
PULL-UP
INTERNO
PINO
CTRL
DA CPU
I1 S
SFR P2 M G
BUS INTERNO Q FET
D Q I0
D
CLK MUX 2/1
WRITE P2.i Q
TO LATCH LATCH
READ PIN
6 - 4 MICROCONTROLADORES (MCS-51)
CAPTULO VI PORTAS PARALELOS
6.2.4. Porta P0
A figura 6.5 ilustra o esquema eltrico da porta P0. Esta porta a mais complexa pois
atende a trs funes:
bus de dados da CPU
byte menos significativo dos endereos
porta paralela (bidirecional verdadeira)
S1
G1
F1
D1
PINO
SFR P0
BUS INTERNO CTRL
D Q
I1 S2 DA CPU
CLK G2
F2
WRITE P0.i Q I0 D2
TO LATCH LATCH MUX 2/1
READ PIN
A porta P0 difere das demais por ser utilizada para transportar dados durante as
operaes com a memria e portanto necessita ser bidirecional verdadeira. Se ela est sendo
utilizada como porta paralela, ento CONTROL = 0. Com isso G1=0 e F1 est sempre cortado (no
existe pull-up).
Se CONTROL=0 e for escrito: :
0 *Q=1 G2=1 F2 ON sada=0
1 *Q=0 G2=0 F2 OFF a sada flutua (no h pull-up).
Note que, quando se escreve 1, a porta pode ser utilizada como uma entrada de alta
impedncia. Para transform-la em uma porta quase-bidirecional basta colocar externamente
resistores de pull-up.
Quando a porta utilizada para enviar endereos ou dados, CONTROL =1 e a sada
depende de ADDRESS/DATA (ADR/DT):
ADR/DT=0 G1=0 F1 OFF e G2=1 F2 ON sada=0
ADR/DT=1 G1=1 F1 ON e G2=0 F2 OFF sada=1
(nunca se ter F1 ON e F2 ON ==> curto-circuito).
Para que a porta possa ser usada na leitura de memria necessria alta impedncia;
nesse caso CONTROL=0 e se fora uma escrita (com 1) no latch de P0.
MICROCONTROLADORES (MCS-51) 6 - 5
CAPTULO VI PORTAS PARALELOS
Na execuo de qualquer instruo que altere o latch de uma porta, o novo valor chega
ao latch durante S6P2, que o final do ciclo de instruo. Entretanto, os latches so na realidade
enviados at os buffers de sada durante a fase P2 de qualquer perodo de clock (durante P1 se
mantm o mesmo valor). Assim, o novo valor aparecer no pino durante P1 do prximo ciclo (que
S1P1).
Se for necessria uma mudana de 0 para 1 nas portas P1, P2 e P3, o PULL-UP dever
entregar bastante corrente para que essa transio seja rpida. Nas transies de 0 para 1, durante
S1P1 e S1P2, entra em atividade um PULL-UP adicional que pode fornecer 100 vezes mais corrente
que o PULL-UP normal. Note que os PULL-UP so FETs e no transistores bipolares.
O PULL-UP normal um FET (depletion-mode) com a porta (G) conectada fonte (S).
Quando est conectado terra, circula por ele uma corrente de 0,25 mA.
Vcc
D
FET G 0,25 mA
DEPLETION
MODE S
PINO DA
CPU
Figura 6.6. O FET (depletion mode) usado como PULL-UP para as portas paralelas. (HMOS)
Na figura 6.7. est o PULL-UP adicional que acelera as transies de 0 para 1. Note que
quando A=B=0, a sada S vai para 1 e com isto o transistor entra no circuito fornecendo at 30 mA.
Vcc
A D 30 mA
S G
B S
FET
ENHANCED PINO DA
MODE CPU
6 - 6 MICROCONTROLADORES (MCS-51)
CAPTULO VI PORTAS PARALELOS
ENHANCEMENT
RETARDO MODE FET
1 0 D D
2 CLOCKS 0-->1 G G DEPLETION
MODE FET
1-->0 S S
PINO DA
CPU
D
Q G
FET
1 --> 0 S
(Q = 0 -- >1)
Vss
Figura 6.8. Acionamento do FET (enhanced mode) nas transies de 01. (HMOS)
Note que se *Q vai de 10, durante dois perodos de clock a sada (S) da porta NOR
ser 1, permitindo que o enhancement mode FET entre em paralelo com o FET (pull-up) normal,
dando maior capacidade de corrente. Este esquema utilizado em HMOS. Nas famlias CHMOS o
esquema varia um pouco mas a idia a mesma.
Os buffers de sada das portas P1, P2 e P3 podem acionar at 4 cargas LS TTL. Eles
podem ser acionados (trabalhando como entrada) por circuitos TTL e NMOS. Como possuem pull-up
interno, essas portas tambm podem ser acionadas por TTL de coletor aberto mas as transies de 0
1 no sero rpidas porque o pull-up tem baixa capacidade de corrente.
A porta P0 pode acionar at 8 LS TTL (modo BUS). Quando opera como porta paralela,
necessrio pull-up externo para acionar outras entradas.
Algumas instrues de leitura utilizam o dado armazenado no latch, enquanto outras
usam o estado do pino. As instrues que usam o dado do latch so aquelas que lem o valor,
(possivelmente) o alteram e o escrevem de novo (read-modify-write). Quando o destino do operando
uma porta ou um bit da porta, utilizado o dado do latch e no o valor do pino. A seguir est uma
lista destas instrues que operam com o dado do latch:
Instruo Exemplo
ANL ANL P1,A
ORL ORL P2,A
XRL XRL P3,A
JBC JBC P1.1,LB (pula se bit=1 e zera o bit)
CPL CPL P3.0
INC INC P2
DEC DEC P2
MICROCONTROLADORES (MCS-51) 6 - 7
CAPTULO VI PORTAS PARALELOS
VCC
LED
P1.0
NPN
Figura 6.9. Bit 0 da porta 1 sendo usado para acender um led atravs de um transistor.
Sem dvida quando P1.0=1 a tenso no pino vai estar em 0,7 V, o que um 0 lgico em
nvel TTL. Espera-se que a instruo CPL P1.0 inverta o estado do led. Supondo que o led esteja
aceso (P1.0=1), se a CPU usa o valor do pino, ela vai obter 0 e isto far P1.0=1, quer dizer, no vai
mudar o estado do led. O melhor usar o dado do latch, que est em 1.
6 - 8 MICROCONTROLADORES (MCS-51)
CAPTULO VI PORTAS PARALELOS
6.4. EXERCCIOS
Todos as exerccios e exemplos esto baseados no circuito de prticas.
;PISCA1.ASM
;
RTD EQU 60000 ;65536>RTD>256
VERMELHO EQU P1.0
AMARELO EQU P1.1
VERDE EQU P1.2
;
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
ORG RESET
INIC MOV P1,#0 ;APAGA OS LEDS
AQUI SETB VERMELHO
LCALL RETARD
CLR VERMELHO
SETB AMARELO
LCALL RETARD
CLR AMARELO
SETB VERDE
LCALL RETARD
CLR VERDE
SJMP AQUI
;
;ROTINA PARA GERAR UM RETARDO
RETARD MOV R7,# HIGH RTD
L1 MOV R6,# LOW RTD
L2 DJNZ R6,L2
DJNZ R7,L1
RET
END
Uma outra soluo, muito mais simples, pode ser utilizada. Como no so usados os
demais pinos da porta P1, pode-se escrever qualquer coisa neles. Usa-se ento o Acc e o CY para
obter um total de 9 bits e, atravs de rotaes, consegue-se gerar os cdigos para acender os leds
em seqncia. A figura 6.10 ilustra a idia.
RLC A
Acc
CY 7 6 5 4 3 2 1 0
0 0 1 0 0 1 0 0 1
PUERTO P1 X X X X X 0 0 1
1 -- LED ACESO
0 -- LED APAGADO VERDE VERMELHO
AMARELO
MICROCONTROLADORES (MCS-51) 6 - 9
CAPTULO VI PORTAS PARALELOS
Se Acc e CY so inicializados com estes valores, basta uma rotao com CY (RLC A)
para mudar o led que deve ficar aceso. A cada rotao escreve-se o contedo de Acc em P1.
;PISCA2.ASM
;
RTD EQU 60000 ;65536>RTD>256
VERMELHO EQU P1.0
AMARELO EQU P1.1
VERDE EQU P1.2
;
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
ORG RESET
INIC MOV A,#01001001B ; 01 001 001
CLR C
AQUI MOV P1,A
ACALL RETARD
RLC A
SJMP AQUI
;
;ROTINA PARA GERAR UM RETARDO
RETARD MOV R7,# HIGH RTD
L1 MOV R6,# LOW RTD
L2 DJNZ R6,L2
DJNZ R7,L1
RET
END
VCC
LED VERMELHO R4
P1.O 3 4
U5B
74LS14 220
LED AMARELO R5
P1.1 5 U5C 6
74LS14 220
LED VERDE R6
P1.2 9 8
U5D
74LS14 220
SW2
P1.3
PUSHBUTTON
No primeiro programa ser usada uma soluo simples, que tem o problema de
bouncing.
6 - 10 MICROCONTROLADORES (MCS-51)
CAPTULO VI PORTAS PARALELOS
;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
;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 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
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
ACALL RTD ;ELIMINAR BOUNCING
AQUI2 JNB SW2,AQUI2 ;AGUARDAR LIBERAR CHAVE
ACALL RTD ;ELIMINAR BOUNCING
SJMP AQUI1
;
;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 (MCS-51) 6 - 11
CAPTULO VI PORTAS PARALELOS
;CHAVE3.ASM
;
; SOLUCAO MAIS EFICIENTE PARA ELIMINAR O BOUNCING COM RETARDOS
; USAM-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
MOV P1,A ;APAGAR LEDS
SETB SW2 ;PROGRAMAR P1.3 COMO ENTRADA
AQUI 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
6 - 12 MICROCONTROLADORES (MCS-51)
CAPTULO VII INTERRUPES
CAPTULO VII
INTERRUPES
7.1. INTRODUO
1 habilita 0 desabilita
7 6 5 4 3 2 1 0
IE EA - - ES ET1 EX1 ET0 EX0
EXTERNAL 0
TIMER 0
EXTERNAL 1
TIMER 1
SERIAL
TODAS
Cada interrupo pode ter dois nveis de prioridade: prioridade alta ou prioridade baixa.
Uma interrupo de alta prioridade pode interromper uma de baixa prioridade mas no acontece o
contrrio. Uma interrupo no pode interromper uma outra de mesma prioridade. Se forem
MICROCONTROLADORES (MCS-51) 7 - 1
CAPTULO VII INTERRUPES
EXTERNAL 0
TIMER 0
EXTERNAL 1
TIMER 1
SERIAL
As duas interrupes externas (INT0 e INT1) podem ser acionadas por nvel ou por
borda de descida (). Isto definido atravs de dois bits do registro TCON. Este registro tambm tem
outra finalidade pois cada interrupo indica sua ativao usando um bit do registro TCON.
7 6 5 4 3 2 1 0
TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
BORDA/NVEL EXTERNA 0
FLAG DA INT. EXTERNA 0
BORDA/NVEL EXTERNA 1
FLAG DA INT. EXTERNA 1
RUN/STOP TIMER 0
OVERFLOW TIMER 0
RUN/STOP TIMER 1
OVERFLOW TIMER 1
7 - 2 MICROCONTROLADORES (MCS-51)
CAPTULO VII INTERRUPES
0
*INT0 HIGH
IT0 IE0 PX0
INT EX0 EA
LOW
EXT 0 1
HIGH
TF0 PT0
ET0 EA
LOW
TIMER 0
0 SEQNCIA
*INT1 HIGH
DO
INT IT1 IE1 PX1
EX1 EA POLLING
LOW
EXT 1 1
HIGH
TF1 PT1
ET1 EA
TIMER 1 LOW
TI HIGH
PS
RI ES EA
LOW
SERIAL IE IP
MICROCONTROLADORES (MCS-51) 7 - 3
CAPTULO VII INTERRUPES
Todos os bits que geram interrupo podem ser ativados por software com os mesmos
resultados como se tivessem sido ativados por hardware. Isto quer dizer que uma interrupo pode
ser ativada por software e tambm que as interrupes pendentes podem ser canceladas.
Cada interrupo vetorizada em um endereo pr-definido:
RESET 00H
Externa 0 IE0 03H
Timer 0 TF0 0BH
Externa 1 IE1 13H
Timer 1 TF1 1BH
Serial RI+TI 23H (o + indica OU)
No endereo de vetorizao das interrupes h pouco espao, o suficiente para colocar
umas poucas instrues. Portanto normal colocar nestes endereos um desvio (jump) para um
outro local, onde est a rotina que atende interrupo.
7 - 4 MICROCONTROLADORES (MCS-51)
CAPTULO VII INTERRUPES
Na figura 7.5 ilustrada a resposta mais rpida a uma interrupo. Neste caso CM2 o
final de uma instruo e no um RETI nem uma escrita em IP ou IE. Quando CM2 uma instruo
RETI ou uma escrita em IP ou IE, uma instruo a mais ser executada antes que a interrupo seja
vetorizada.
A seqncia de polling se repete a cada ciclo de mquina e os valores processados so
aqueles que estaro presentes no instante S5P2 do ciclo de mquina anterior. Deve-se observar que
se um flag de interrupo foi ativado mas no pde ser atendido (por uma das condies de bloqueio)
e apagado antes da condio de bloqueio ser removida, a interrupo no ser atendida. Quer
dizer, o fato de um flag de interrupo estar ativo e no ser atendido, no ser gravado.
O processador reconhece um pedido de interrupo atravs da execuo de um LCALL
gerado por hardware. Normalmente o flag que gerou o pedido zerado por hardware, exceto para:
TI, RI da porta serial,
IE0, IE1 quando ativado por nvel
A instruo RETI usada para finalizar uma rotina de atendimento a interrupes. Uma
instruo RET funciona mas o sistema de controle de interrupes no sabe que a rotina terminou,
ou seja, sero bloqueadas todas as demais interrupes de prioridade igual ou inferior.
As duas interrupes externas (0 e 1) podem ser programadas para funcionar por nvel
(ITX=0) ou por borda de descida () (ITX=1). Os pinos das interrupes so amostrados em cada
ciclo de mquina (1 ciclo de mquina=12 perodos de clock); assim, uma interrupo externa deve
permanecer constante por pelo menos 12 perodos de clock, caso contrrio ela pode ser ignorada.
Quando a interrupo opera por borda de descida (), o pino deve permanecer em alto
por pelo menos 12 perodos de clock e depois em baixo por pelo menos 12 perodos de clock; isto
garante a ativao do flag de interrupo. Os flags de interrupes externas (IEX0 ou IEX1) sero
automaticamente zerados pela CPU quando uma rotina de servio chamada.
Quando a interrupo opera por nvel, o pino deve permanecer ativado (em baixo) at
que a interrupo seja atendida; depois disso, o pedido deve ser removido antes que a rotina de
servio de interrupo termine caso contrrio uma nova interrupo ser gerada.
O tempo de latncia de uma interrupo depende, entre outras coisas, das condies de
bloqueio j vistas. No caso destas condies de bloqueio existirem, leva-se entre 5 a 9 ciclos de
mquina.
MICROCONTROLADORES (MCS-51) 7 - 5
CAPTULO VII INTERRUPES
7 - 6 MICROCONTROLADORES (MCS-51)
CAPTULO VII INTERRUPES
Uma interrupo no ser re-atendida antes de terminar sua rotina. Essa rotina deve
terminar com RETI e, depois dessa instruo, uma outra dever ser executada antes de ser atendida
a interrupo.
Imagine um sistema onde a interrupo 1 est programada para trabalhar por nvel e
que a entrada INT1 esteja conectada a terra, ou seja, a interrupo est sempre sendo invocada. Se
forem adicionadas a esse sistema uma rotina principal e uma rotina de servio para a interrupo 1,
cria-se o ambiente para executar passo a passo o programa principal. Cada vez que voltar da rotina
de interrupo (com um RETI), ser executada uma nica instruo do programa principal e, em
seguida, desviar novamente para a rotina de interrupo. Pode-se usar uma chave para marcar o
instante de retorno da rotina de interrupo. O exerccio 7.4 ilustra a utilizao do recurso de passo a
passo.
A figura 11.5 (captulo 11) mostra uma implementao possvel para a execuo passo a
passo. Outra possibilidade, mais complexa mas sem bouncing na chave mostrada na figura a
seguir:
MICROCONTROLADORES (MCS-51) 7 - 7
CAPTULO VII INTERRUPES
7.6. EXERCCIOS
;LED_INT1.ASM
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
ORG RESET
AJMP INICIO
;
ORG EXTI1
AJMP EXT1
;
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
;LED_INT2.ASM
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
SW3 EQU P3.3
;
ORG RESET
AJMP INICIO
;
ORG EXTI1
AJMP EXT1
;
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
7 - 8 MICROCONTROLADORES (MCS-51)
CAPTULO VII INTERRUPES
Na verdade, o que se fez foi obrigar que a interrupo que est programada para operar
por nvel opere por borda (aguarda-se a liberao da chave). O que acontece quando se usa o
primeiro programa mas com a interrupo trabalhando por borda () ? Supe-se que os leds
devero acender na seqncia correta.
;LED_INT3.ASM
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
ORG RESET
AJMP INICIO
;
ORG EXTI1
AJMP EXT1
;
ORG 50H
INICIO MOV A,#01001001B
CLR C
MOV P1,A
SETB IT1 ;EXT 1 OPERA POR BORDA
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
;PASSO_EXE.ASM
;
; PROGRAMA PARA ILUSTRAR A EXECUCAO PASSO A PASSO
; SERA USADA A CHAVE SW3 PARA EXECUTAR PASSO A PASSO O LOOP PRINCIPAL
; CADA VEZ QUE SE ACIONA SW3, UMA INSTRUCAO EXECUTADA
;
RTD EQU 100
MICROCONTROLADORES (MCS-51) 7 - 9
CAPTULO VII INTERRUPES
7 - 10 MICROCONTROLADORES (MCS-51)
CAPTULO VIII TEMPORIZADORES / CONTADORES
CAPTULO VIII
TEMPORIZADORES / CONTADORES
8.1. INTRODUO
MICROCONTROLADORES (MCS-51) 8 - 1
CAPTULO VIII TEMPORIZADORES / CONTADORES
TIMER 1 TIMER 0
7 6 5 4 3 2 1 0
TMOD GATE C/*T M1 M0 GATE C/*T M1 M0
8 - 2 MICROCONTROLADORES (MCS-51)
CAPTULO VIII TEMPORIZADORES / CONTADORES
7 6 5 4 3 2 1 0
TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
BORDA/NVEL EXTERNA 0
FLAG DA INT. EXTERNA 0
BORDA/NVEL EXTERNA 1
FLAG DA INT. EXTERNA 1
RUN/STOP TIMER 0
OVERFLOW TIMER 0
RUN/STOP TIMER 1
OVERFLOW TIMER 1
IE1 flag da interrupo externa 1. Ativada por hardware quando detectada uma interrupo.
Apagado por hardware (somente se for modo borda) quando a interrupo processada,
ou seja, quando se desvia para a rotina de interrupo.
IT1 indica se a interrupo externa 1 opera por borda ou por nvel:
1 borda de descida (),
0 nvel baixo.
E0 flag da interrupo externa 0. Ativada por hardware quando detectada uma interrupo.
Apagado por hardware (somente se for modo borda) quando a interrupo processada,
ou seja, quando se desvia para a rotina de interrupo.
IT0 indica se a interrupo externa 0 opera por borda ou por nvel:
1 borda de descida (),
0 nvel baixo.
MICROCONTROLADORES (MCS-51) 8 - 3
CAPTULO VIII TEMPORIZADORES / CONTADORES
8.3.1. Modo 0
Este modo idntico para os dois contadores/temporizadores. Neste modo tem-se um
contador de 8 bits com um divisor (pre-scaler) de 5 bits. Resulta ento em um contador/temporizador
de 13 bits, compatvel com o que havia no MCS-48. Os 13 bits so formados pelos 8 bits do registro
THi e pelos 5 bits menos significativos do registro TLi. Os outros 3 bits do TLi so indeterminados. O
transbordamento (overflow) gerador quando a contagem faz a transio de 1FFFH para 0000;
neste instante ativa-se o bit de overflow (TF1 ou TF0).
O controle da contagem simples:
se GATE = 0, TR1 controla o contador/temporizador (controle por software)
se GATE = 1, TR1 e INT1 controlam o contador/temporizador
(permite tambm um controle externo por hardware)
A figura 8.3 apresenta um diagrama em blocos do contador/temporizador 1 operando em
modo 0. A mesma figura vlida para o contador/temporizador 0.
CLOCK 1/12
CONTROL (8 bits) (5 bits)
C/*T=0 OVER
TH1 TL1 TF1 INTERRUPO
C/*T=1 xxxx xxxx ???x xxxx FLOW
PIN T1
TIMER 1
TR1 MODO 0
GATE
*INT1
(PINO)
8.3.2. Modo 1
Este modo de operao o mais simples e por isto muito utilizado. idntico ao modo
0, mas os contadores so de 16 bits. A figura 8.4. ilustra o diagrama em blocos para este modo, que
idntico para os dois timers.
8 - 4 MICROCONTROLADORES (MCS-51)
CAPTULO VIII TEMPORIZADORES / CONTADORES
CLOCK 1/12
CONTROL (8 bits)
(8 bits)
C/*T=0 OVER
TH1 TL1 TF1 INTERRUPO
C/*T=1 xxxx xxxx xxxx xxxx FLOW
PIN T1
TIMER 1
TR1 MODO 1
GATE
*INT1
(PINO)
8.3.3. Modo 2
Neste modo tem-se um contador/temporizador de 8 bits (TLi) com registro de recarga
(THi) para quando ocorre o transbordamento. Neste modo os dois contadores/temporizadores
operam de forma idntica. O transbordamento (overflow) no somente ativa TFi como tambm
recarrega TLi com o valor guardado em THi (este permanece inalterado). O valor de recarga deve ser
fornecido por software.
CLOCK 1/12
CONTROL (8 bits)
C/*T=0 OVER
TL1 TF1 INTERRUPO
C/*T=1 xxxx xxxx FLOW
PIN T1
RECARGA
TH1
xxxx xxxx
TR1 (8 bits)
GATE TIMER 1
*INT1 MODO 2
(PINO)
8.3.4. Modo 3
Este o nico modo onde os contadores/temporizadores tm um comportamento
diferente. Neste modo, o contador/temporizador 1 simplesmente suspende a contagem ( como se
estivesse com TR1=0), enquanto o contador/temporizador 0 se divide em dois contadores de 8 bits:
TH0 contador/temporizador de 8 bits usando C/*T, GATE, TR0, *INT0 e TF0,
TL0 contador/temporizador de 8 bits usando TR1 e TF1 (ou seja, provoca a interrupo do
timer 1).
MICROCONTROLADORES (MCS-51) 8 - 5
CAPTULO VIII TEMPORIZADORES / CONTADORES
CLOCK 1/12
CONTROL (8 bits)
C/*T=0 OVER INTERRUPO
TL0 TF0
C/*T=1 xxxx xxxx FLOW TIMER 0
PIN T0
TR0
TIMER 0
GATE MODO 3
*INT0
(PIN)
CONTROL (8 bits)
OVER INTERRUPO
TH0 TF1
xxxx xxxx FLOW TIMER 1
TR1
8.4. EXERCCIOS
CLOCK CLOCK
F= N=
12*N 12*F
Figura 8.7. Clculo de N para gerar uma determinada freqncia F.
8 - 6 MICROCONTROLADORES (MCS-51)
CAPTULO VIII TEMPORIZADORES / CONTADORES
Ser utilizado o timer 0 no modo 1; a cada interrupo a rotina acende um novo led e
recarrega o timer.
;LED_10HZ.ASM
;
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
DEZ_HZ EQU 35739
;
ORG RESET
AJMP INIC
;
ORG TIMER0
AJMP TIM0
;
ORG 50H
INIC MOV TL0,#LOW DEZ_HZ
MOV TH0,#HIGH DEZ_HZ
MOV TMOD,#1 ;TIMER 0 EM MODO 1
MOV IE,#82H
MOV P1,#0 ;APAGAR TODOS OS LEDS
MOV A,#01001001B
CLR C
SETB TR0
SJMP $
;
ORG 100H
TIM0 MOV TL0,#LOW DEZ_HZ ;REINICALIZAR
MOV TH0,#HIGH DEZ_HZ ;O CONTADOR
RLC A
MOV P1,A
RETI
END
Notar que na rotina de interrupo est a recarga dos temporizadores que feita com a
instruo "MOV direto,#data" mas que consome 2 ciclos de mquina, ou seja, que h um retardo que
se acumula. Para evitar ou corrigir isso, pode-se adicionar ao contador o retardo da instruo; mais
preciso usar "MOV TL0,# LOW (DEZ_HZ+2).
Quando existem vrias interrupes, no se sabe com certeza quando uma interrupo
do temporizador pode ser aceita; isso implica um erro maior que se acumula. H uma soluo
simples porque depois do transbordamento o temporizador segue contando e esta contagem
exatamente o tempo que atrasou o servio da interrupo; basta usar esse valor na recarga. As
instrues a seguir ilustram a idia.
MICROCONTROLADORES (MCS-51) 8 - 7
CAPTULO VIII TEMPORIZADORES / CONTADORES
;LED_1HZ.ASM
;
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
DEZ_HZ EQU 32203
DIVISOR EQU 10
;
ORG RESET
AJMP INIC
;
ORG TIMER0
AJMP TIM0
;
ORG 50H
INIC MOV TL0,#LOW DEZ_HZ
MOV TH0,#HIGH DEZ_HZ
MOV R7,#DIVISOR ;PREPARAR DIVISAO POR 10
MOV TMOD,#1 ;TIMER 0 EM MODO 1
MOV IE,#82H
MOV P1,#0 ;APAGAR TODOS OS LEDS
MOV A,#01001001B
CLR C
SETB TR0
SJMP $
;
ORG 100H
TIM0 MOV TL0,#LOW DEZ_HZ ;REINICALIZAR
MOV TH0,#HIGH DEZ_HZ ;O CONTADOR
DJNZ R7,FIM ;DIVIDIR POR 10
MOV R7,#DIVISOR
RLC A
MOV P1,A
FIM RETI
END
8 - 8 MICROCONTROLADORES (MCS-51)
CAPTULO VIII TEMPORIZADORES / CONTADORES
1 mseg
40 microseg
Figura 8.10. Sinal a ser gerado pela sada P1.7.
;ONDA1.ASM
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
SAIDA EQU P1.7
R_1MS EQU 65238 ;RETARDO DE 1 MILISEG
R_40MICRO EQU 65524 ;RETARDO DE 40 MICROSEG
;
ORG RESET
AJMP INICIO
;
ORG TIMER0
AJMP TIM0
;
ORG 50H
INICIO MOV TL0,#LOW R_1MS
MOV TH0,#HIGH R_1MS
MOV TMOD,#1 ;TIMER 0 EM MODO 1
MOV IE,#82H ;EA=1 E ET0=1
CLR SAIDA
SETB TR0 ;PARTIDA DO TIMER 0
SJMP $ ;LOOP INFINITO
;
TIM0 JB SAIDA,LB1 ;2 CICLOS
MOV TH0,#LOW (R_40MICRO+4) ;2 CICLOS
MOV TL0,#HIGH (R_40MICRO+4) ;2 CICLOS
SETB SAIDA ;1 CICLO
RETI ;2 CICLOS
LB1 MOV TH0,#LOW (R_1MS+4)
MOV TL0,#HIGH (R_1MS+4)
CLR SAIDA
RETI
END
Notar que a rotina que atualiza o temporizador para gerar o retardo de 40 s consome 9
ciclos de mquina, quer dizer, consome 30,2 s. Pode parecer que se o tempo de 40 s fosse
mudado para 25 s no haveria soluo.
MICROCONTROLADORES (MCS-51) 8 - 9
CAPTULO VIII TEMPORIZADORES / CONTADORES
600 microseg
25 microseg
Figura 8.11. Sinal a ser gerado pela sada P1.7.
;ONDA2.ASM
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
SAIDA EQU P1.7
R_600MICRO EQU 77 ;RETARDO DE 600 MICROSEG
R_25MICRO EQU 249 ;RETARDO DE 25 MICROSEG
;
ORG RESET
AJMP INICIO
;
ORG TIMER0
AJMP TIM0
;
ORG 50H
INICIO MOV TL0,#R_600MICRO ;PRIMEIRA CONTAGEM
MOV TH0,#R_25MICRO ;CONTAGEM SEGUINTE
MOV TMOD,#2 ;TIMER 0 EM MODO 2
MOV IE,#82H ;EA=1 E ET0=1
CLR SAIDA
SETB TR0 ;PARTIDA DO TIMER 0
SJMP $ ;LOOP INFINITO
;
TIM0 JB SAIDA,LB1 ;2 CICLOS
MOV TH0,#R_25MICRO ;2 CICLOS
SETB SAIDA ;1 CICLOS
RETI ;2 CICLOS
LB1 MOV TH0,#R_600MICRO
CLR SAIDA
RETI
END
8 - 10 MICROCONTROLADORES (MCS-51)
CAPTULO VIII TEMPORIZADORES / CONTADORES
;LEDS1.ASM
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
CONTA_10 EQU 246
;
ORG RESET
AJMP INICIO
;
ORG TIMER1
AJMP TIM1
;
ORG 50H
INICIO MOV A,#01001001B
CLR C
MOV P1,A
MOV TL1,#CONTA_10 ;CARREGAR CONTADOR
MOV TH1,#CONTA_10 ;VALOR DE RECARGA
MOV TMOD,#60H ;CONTADOR 1, MODO 2
MOV IE,#88H ;EA=1, ET1=1
SETB TR1 ;LIGAR CONTADOR
SJMP $ ;LOOP INFINITO
;
TIM1 RLC A
MOV P1,A
RETI
END
A chave SW3 aciona diretamente a entrada T1, mas h bouncing e por isso sero
notadas mudanas nos leds antes de 10 acionamentos. Para esse caso especfico o bouncing dever
ser eliminado por hardware.
MICROCONTROLADORES (MCS-51) 8 - 11
CAPTULO IX PORTA SERIAL
CAPTULO IX
PORTA SERIAL
9.1. INTRODUO
A porta serial existente na famlia MCS-51 "full duplex", quer dizer, pode transmitir e
receber dados simultaneamente. Tem um buffer que permite receber um segundo byte antes que o
byte previamente recebido tenha sido retirado (lido) do registro de recepo. Mas, se o primeiro byte
no tiver sido lido no tempo em que o segundo byte se completa, um dos dois ser perdido.
A porta serial possui um registrador chamado SBUF, o mesmo que se usa para enviar
ou receber dados pela porta serial. Na realidade, o nome SBUF se refere a dois registros, um
somente para leitura por onde se recebem os dados que chegam pela porta serial e outro somente
para escrita por onde se transmitem dados pela porta serial.
O modo de operao da porta serial controlado pelo registro SCON, que ilustrado na
figura 9.1. A figura 9.2 apresenta um resumo dos modos de operao.
7 6 5 4 3 2 1 0
SCON SM0 SM1 SM2 REN TB8 RB8 TI RI
MICROCONTROLADORES (MCS-51) 9 - 1
CAPTULO IX PORTA SERIAL
O registro PCON tambm toma parte na gerao do baud rate da porta serial. Este
registro ilustrado na figura 9.2.
7 6 5 4 3 2 1 0
PCON SMOD - - - GF1 GF0 PD IDL
9 - 2 MICROCONTROLADORES (MCS-51)
CAPTULO IX PORTA SERIAL
Existem quatro modos de operao da porta serial, cada um com uma finalidade. Ser
apresentado um resumo de cada modo:
RX CONTROL
LOAD
SBUF
SBUF
PIN
RXD
READ
SBUF
BUS INTERNO
WRITE
SBUF
TX CONTROL
CLOCK PIN
1/12
(CRISTAL) CICLO DE MQUINA TXD
Este modo pode ser usado para expandir as portas de I/O do microcontrolador usando
um esquema como o da figura a seguir:
MICROCONTROLADORES (MCS-51) 9 - 3
CAPTULO IX PORTA SERIAL
START bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7 STOP
BAUD
RATE
(BR)
PIN
SMOD=1 TX CONTROL
TIMER 1 TXD
CLOCK
1/12 1/N 1/16
PIN
1/2 SMOD=0 RX CONTROL
RXD
CLOCK CLOCK
BR = N=
12*N*(1+SMOD)*16 192*BR*(1+SMOD)
Figura 9.6. Esquema para a gerao do baud rate (BR) no modo 1.
Exemplo: Usando um cristal de 3,575611 MHz, qual o valor a ser programado no timer 1 para
operar a 9600 bauds (usar SMOD=0) ?
N = 3575611 / (384*9600) = 0,9699 (aproximadamente 1)
Usando timer 1 no modo 2 tem-se: 256 - 1 = 255 (TH1=TL1=255).
Observao: a transferncia do dado recebido para o registro SBUF (e RB8, que guarda o stop bit) e
a ativao do flag RI somente acontecer se:
RI = 0 e (SM2= 0 ou o bit de parada =1).
9 - 4 MICROCONTROLADORES (MCS-51)
CAPTULO IX PORTA SERIAL
START bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7 TB8 STOP
O nico controle que se tem sobre o baud rate atravs do uso do bit SMOD. Se
SMOD=0, trabalha-se com BR=clock/32 e se SMOD=1, trabalha-se com BR=clock/64. A figura 9.8
ilustra o esquema para gerao do baud rate no modo 2.
BAUD
RATE
(BR)
PIN
SMOD=1 TX CONTROL
TXD
CLOCK
1/12 1/16
PIN
1/2 SMOD=0 RX CONTROL
RXD
Figura 9.8. Esquema para a gerao do baud rate (BR) no modo 2.
Na transmisso o bit 8 copiado do bit TB8. Na recepo o bit 8 copiado para o bit
RB8. Os bits TB8 e RB8 esto no registro SCON.
O dado recebido somente carregado no SBUF (e RB8) se:
RI=0 e (SM2=0 ou bit 9 (stop bit) = 1).
START bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7 TB8 STOP
BAUD
RATE
(BR) PIN
SMOD=1 TX CONTROL
TIMER 1 TXD
CLOCK
1/12 1/N 1/16
PIN
1/2 SMOD=0 RX CONTROL
RXD
CLOCK CLOCK
BR = N=
12*N*(1+SMOD)*16 192*BR*(1+SMOD)
Figura 9.9. Frame de bits e gerao do baud rate para a porta serial no modo 3.
MICROCONTROLADORES (MCS-51) 9 - 5
CAPTULO IX PORTA SERIAL
A fase mais critica a recepo do ltimo bit porque poder apresentar uma defasagem
muito grande (rotuladas de E1 e E2 na figura). No se pode especificar um valor limite para esses
9 - 6 MICROCONTROLADORES (MCS-51)
CAPTULO IX PORTA SERIAL
erros pois diversos fatores, particulares para cada caso, precisam ser levados em considerao.
Como um valor prtico e que funciona na grande maioria dos casos arbitra-se que o valor do erro,
para o ltimo bit, deve ser menor que 40% da durao de um bit (usando BR exato).
11 11 40 1
*
BRp BR 100 BR
BRp baud rate programado
BR baud rate exato
1 1 1
A equao pode ser simplificada para :
BRp BR 27, 5 * BR
Como pode ser verificado, com um cristal de 4 MHz no se conseguir transmitir a 9600
pois o erro do baud rate ser muito grande.
1 1 1
10416, 7 9600 27, 5 * 9600
8,167 s 3,788 s falso.
MICROCONTROLADORES (MCS-51) 9 - 7
CAPTULO IX PORTA SERIAL
Devido diferena de tenso entre os nveis TTL e os usados no padro RS-232C (PC),
necessrio usar circuitos conversores para interfacear o microcontrolador com a porta serial do PC.
A converso pode ser feita atravs de circuitos transistorizados discretos (veja as figuras 11.10,
11.11 e 11.12 e leia a seo 11.4) ou atravs de circuitos integrados como o 1488 (conversor de TTL
para RS-232C) e o 1489 (conversor de RS-232C para TTL). A seguir esto os esquemas dos dois
integrados e o esquema bsico de interligao entre o 8051 e a serial do PC.
9 - 8 MICROCONTROLADORES (MCS-51)
CAPTULO IX PORTA SERIAL
9.7. EXERCCIOS
MICROCONTROLADORES (MCS-51) 9 - 9
CAPTULO IX PORTA SERIAL
;TX_SER.ASM
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
BR_9600 EQU 255
;
ORG RESET
AJMP INIC
;
ORG SINT
AJMP SERIAL
;
ORG 50H
INIC MOV TMOD,#20H ;TIMER 1 EM MODO 2
MOV TH1,#BR_9600 ;PROGRAMAR BAUD RATE
MOV TL1,#BR_9600
SETB TR1 ;INICIAR TIMER 1
MOV SCON,#0C8H ;MODO 3 COM TB8=1
MOV IE,#90H ;HAB INTERRUP SERIAL
MOV A,#"0" ;PRIMERO ASCII
SETB TI ;TX PRIMEIRO ASCII
SJMP $ ;LOOP INFINITO
;
ORG 100H
SERIAL CLR TI ;APAGAR FLAG
MOV SBUF,A ;TRANSMITIR
INC A
CJNE A,#"Z"+1,SER1 ;FOI O ULTIMO ?
MOV A,#"0" ;REINICIALIZAR
SER1 ACALL RETARDO ;ATRASAR TRANSMISSAO
RETI
;
RETARDO MOV R7,#0
AQUI DJNZ R7,AQUI
RET
END
9 - 10 MICROCONTROLADORES (MCS-51)
CAPTULO IX PORTA SERIAL
Estes comandos vo chegar pela porta serial usando o formato: 1 bit de partida, 8 bits de
dados, 2 bits de parada, com um baud rate de 9600.
;RX_SER.ASM
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
BR_9600 EQU 255
LED_VERMELHO EQU P1.0
LED_AMAR EQU P1.1
LED_VERDE EQU P1.2
CHEGOU EQU 32.0
;
ORG RESET
AJMP INIC
;
ORG SINT
AJMP SERIAL
;
ORG 50H
INIC MOV TMOD,#20H ;TIMER 1 EM MODO 2
MOV TH1,#BR_9600 ;PROGRAMAR BAUD RATE
MOV TL1,#BR_9600
SETB TR1 ;INICIAR TIMER 1
MOV SCON,#0D0H ;MODO 3 COM REN=1
MOV IE,#90H ;HAB INTERRUP SERIAL
CLR CHEGOU ;APAGAR FLAG
ESPERA JNB CHEGOU,ESPERA ;AGUARDAR UM COMANDO
CLR CHEGOU
;
CJNE A,#"0",LB1
CLR LED_VERMELHO ;CHEGOU 0
CLR LED_AMAR
CLR LED_VERDE
SJMP ESPERA
;
LB1 CJNE A,#"1",LB2
SETB LED_VERMELHO ;CHEGOU 1
SETB LED_AMAR
SETB LED_VERDE
SJMP ESPERA
;
LB2 CJNE A,#"R",LB3
SETB LED_VERMELHO ;CHEGOU R
SJMP ESPERA
LB3 CJNE A,#"r",LB4
CLR LED_VERMELHO ;CHEGOU r
SJMP ESPERA
;
LB4 CJNE A,#"A",LB5
SETB LED_AMAR ;CHEGOU A
SJMP ESPERA
LB5 CJNE A,#"a",LB6
CLR LED_AMAR ;CHEGOU a
SJMP ESPERA
;
LB6 CJNE A,#"V",LB7
SETB LED_VERDE ;CHEGOU V
SJMP ESPERA
LB7 CLR LED_AMAR ;CHEGOU v
SJMP ESPERA
;
SERIAL CLR RI ;APAGAR FLAG DE INTERRUP
MOV A,SBUF ;COLOCAR DADO NO Acc
SETB CHEGOU
RETI
END
MICROCONTROLADORES (MCS-51) 9 - 11
CAPTULO X ECONOMIA DE ENERGIA E GRAVAO
CAPTULO X
ECONOMIA DE ENERGIA E
GRAVAO
10.1. INTRODUO
XTAL2 XTAL1
INTERRUPES
OSC GER. TIMERS
CLOCK SERIAL
DEMAIS
FUNES
*PD *IDL
Figura 10.1. Controle executado pelos flags (*PD e *IDL) que habilitam a economia de energia.
No MODO IDLE (IDL=1) o oscilador continua a trabalhar para trs funes, mas
removido do resto da CPU. As trs funes que operam em modo Idle so:
interrupes
timers
porta serial
No MODO POWER DOWN (PD=1) o oscilador paralisado e com isto toda CPU fica
congelada.
Esses dois modos so ativados pelo registrador PCON, que descrito na figura 10.2.
MICROCONTROLADORES (MCS-51) 10 - 1
CAPTULO X ECONOMIA DE ENERGIA E GRAVAO
1 habilita 0 desabilita
7 6 5 4 3 2 1 0
PCON SMOD - - - GF1 GF0 PD IDL
MODO IDLE
MODO POWER DOWN
BITS DE USO GERAL
DOBRADOR DE BAUD RATE
Nas verses HMOS o registrador PCON s contm o bit SMOD; os demais no devem
ser utilizados.
A instruo que ativa o bit IDL a ltima a ser executada antes que a CPU entre no
modo Idle. Neste modo s funciona a interrupo, os timers e a porta serial. A CPU fica congelada
sem o clock. O consumo cerca de 85% do consumo normal.
Todo o status preservado:
SP, PC, PSW, Acc e todos os registradores,
os pinos das portas mantm os mesmos estados,
ALE = PSEN = High.
H duas maneiras de terminar o modo Idle:
por uma interrupo que esteja habilitada,
por reset.
Se uma interrupo termina o modo Idle, a instruo a ser executada depois do RETI a
que vem em seguida que ativou o bit IDL. Na figura 10.3 h um esquema que ilustra este
funcionamento.
Os Flags GF0 e GF1 podem ser usados para dar indicao se a interrupo aconteceu
no modo normal ou no modo Idle. A rotina que ativa o bit IDL deve antes ativar um dos dois flags
(GF0 ou GF1) para indicar que a CPU entrou no modo Idle.
10 - 2 MICROCONTROLADORES (MCS-51)
CAPTULO X ECONOMIA DE ENERGIA E GRAVAO
O Reset a outra forma de terminar o modo Idle. Como o oscilador est funcionando,
so necessrios apenas 24 perodos de clock. O Reset coloca em zero o bit IDL de forma assncrona
e a CPU reassume a execuo a partir da instruo que ativou o IDL. Podem acontecer 2 a 3 ciclos
de mquina antes que a CPU retome o controle.
O hardware interno inibe o acesso RAM interna durante o perodo de modo Idle mas
no os acessos aos pinos das portas. Para evitar erros, a instruo que vem em seguida ativao
do IDL no deve escrever nas portas ou na memria externa.
A instruo que ativa o bit PD a ltima a ser executada antes que a CPU entre no
modo Power Down. Nesse modo o oscilador fica parado e assim todas as funes se congelam mas
o contedo da RAM interna e dos SFR so mantidos. O consumo de aproximadamente 10A.
A nica maneira de sair do Power Down por Reset, que vai alterar o contedo dos SFR
mas no alterar o contedo da RAM interna. Assim, os valores importantes devero estar
armazenados na RAM interna. Esse Reset deve esperar a partida do oscilador (pelo menos 10 ms).
O programa recomear do incio (RESET), ao contrrio do modo IDLE.
Em Power Down pode-se baixar o Vcc at 2V; alguns cuidados devem ser observados:
No baixar o Vcc antes do Power Down
Levantar o Vcc antes de sair do Power Down.
Uma possvel utilizao do modo power down pode ser realizada usando um sensor que
capte a reduo de Vcc (p.ex. 4,75V) e ative uma interrupo externa com prioridade alta para entrar
no modo power down.
Algumas verses da famlia MCS-51 possuem uma EPROM interna. A tabela da figura
10.4 relaciona algumas destas CPUs.
MICROCONTROLADORES (MCS-51) 10 - 3
CAPTULO X ECONOMIA DE ENERGIA E GRAVAO
A CPU 8751H programada com 21 V, usando 50 ms para cada byte, o que d cerca de
4 minutos (4K * 50 ms = 200 s). As CPUs 87C51 e 8752BH usam um modo de programao
chamado de "Quick Pulse" que feito com 12,75 volts e 25 pulsos de 100 s para cada byte,
resultando em um menor tempo de programao.
10.4.1. Programao
10 - 4 MICROCONTROLADORES (MCS-51)
CAPTULO X ECONOMIA DE ENERGIA E GRAVAO
+5 V
A0...A7 8
8751
P1 VCC
A8...A11 8
P0 8 D0...D7
P2.0,1,2,3
X P2.4 50 mseg
X P2.5 ALE
VIL P2.6
VIH P2.7
*EA VPP
XTAL2
RST VIH
4-6 MHz
XTAL1
VSS *PSEN
X - Don't care
Figura 10.6. A CPU 8751 em modo programao.
10.4.2. Verificao
Se o bit de segurana no for programado, a memria EPROM pode ser lida com
finalidades de verificao. Isso pode ser feito depois da programao de cada byte. A nica alterao
que P2.7 colocado em nvel baixo para habilitar o buffer de sada por P0. Como P0 no possui
pull up interno, um pull up externo de 10 K dever ser colocado em cada linha de dados. A figura
10.7 ilustra a operao do 8751 em modo verificao.
+5 V
A0...A7 8
8751
P1 VCC
A8...A11 8
P2.0,1,2,3 P0 8 D0...D7
X P2.4 usar pull up de 10K
X P2.5 ALE VIH
VIL P2.6
*ENABLE P2.7
*EA VIH
XTAL2
4-6 MHz RST VIH
XTAL1
VSS *PSEN
X - Don't care
Figura 10.7. O CPU 8751 em modo verificao.
MICROCONTROLADORES (MCS-51) 10 - 5
CAPTULO X ECONOMIA DE ENERGIA E GRAVAO
O bit de segurana uma trava que, quando programada, impede a leitura da EPROM
interna. Tambm impede que a CPU execute programas a partir de uma memria externa. Ao apagar
a EPROM se apaga tambm o bit de segurana. A figura 10.8 ilustra a operao da CPU em modo
programao do bit de segurana.
+5 V
8
8751
X P1 VCC
8 8
X P2.0,...,5 P0 X
50 mseg
ALE
VIH P2.6
VIH P2.7
*EA VPP
XTAL2
4-6 MHz RST VIH
XTAL1
VSS *PSEN
X - Don't care
Figura 10.6. A CPU 8751 em modo programao do bit de segurana.
O apagamento da memria EPROM do 8751 feito por luz ultravioleta de alta densidade
(2537 Angstrons e 15 Watts/cm2) durante 20 a 30 minutos a uma distncia de 2,5 cm. A EPROM
ficar com todos os bits em 1 aps o processo.
10 - 6 MICROCONTROLADORES (MCS-51)
CAPTULO XI PLACA DE TESTES
CAPTULO XI
PLACA DE TESTES
11.1. INTRODUO
PLACA
IBM PC DE TESTES
CANAL SERIAL
transmitir programas
receber resultados
MICROCONTROLADORES (MCS-51) 11 - 1
CAPTULO XI PLACA DE TESTES
Para o funcionamento correto existem duas memrias: uma EPROM e uma RAM
esttica (SRAM). Quando a placa est em modo Boot Serial, a EPROM trabalha como memria de
programa e a memria esttica trabalha como memria de dados. Na EPROM est um programa
muito simples que tem como funo receber o programa que chega pela porta serial e escrev-lo na
RAM esttica. Ao terminar a transmisso do programa, o usurio pe a placa em modo Execuo e
com isto a RAM esttica, que era memria de dados, se transforma em memria de programa e a
EPROM desabilitada; com isto o programa recm transmitido executado. Se for preciso transmitir
um novo programa, simplesmente basta colocar a placa em modo Boot Serial e transmitir o novo
programa. H um programa escrito em C (TAR_PRU.C) que ajuda na comunicao com a Placa de
Testes.
Para que o circuito seja completo foram colocados recursos para gravar e ler os
membros da famlia MCS-51 que tm EPROM interna: 8751H, 8751BH, 87C51, 87C51FA, 8752BH e
outros modelos. H recursos para gravao usando o modo standard (pulsos de 50 ms) como
tambm usando o modo "quick pulse programming" (pulsos de 100 s).
A seguir h uma descrio detalhada de cada item da placa de testes. Os esquemas
esto no final deste captulo e tm os nomes:
esquema da CPU (cpu.sht)
esquema da MEMRIA (memo.sht)
esquema da SERIAL (serial.sht)
esquema do GRAVADOR (grav.sht)
11 - 2 MICROCONTROLADORES (MCS-51)
CAPTULO XI PLACA DE TESTES
VCC
GRAVADOR MEMORIAS
RST
1N4148 D1 47K RST A0..A15 AO..A15
P1.7 *RD *RD
R2 74LS14 P1.7 *RD *RD
SW PUSHBUTTON P1.6 *WR *WR
1 2 P1.6 *WR *WR
U5A *PSEN
R1 SW1 C1 AD0..AD7 *PSEN
82 BOOT
10u BOOT
AD0..AD7 *BOOT
*BOOT
VCC
RST
R9 3575611Hz
220 X1
U1 U2
LED6 C2 C3 31 39 AD0 AD0 3 2 A0
10 11 EA/VP P0.0 D0 Q0
U5E 30p P0.1 38 AD1 AD1 4 D1 Q1 5 A1
*RST 30p 19 P0.2 37 AD2 AD2 7 6 A2
X1 D2 Q2
Q_AM 74LS14 P0.3 36 AD3 AD3 8 D3 Q3 9 A3
VCC RST 35 AD4 AD4 13 12 A4
P0.4 D4 Q4
18 X2 P0.5 34 AD5 AD5 14 15 A5
LED2 33 17 D5 Q5 16
R4 P0.6 AD6 AD6 D6 Q6 A6
4 3 P1.0 32 AD7 AD7 18 19 A7
U5B RST P0.7 D7 Q7
220 R_VM 74LS14 BOOT *PSEN *RD *WR 9 RESET
P2.0 21 A8 1 OC
LED3 22 A9 ALE 11
R5 6 5 P1.1 1 ROM RAM P2.1 G
U5C *INT0 12 INT0 P2.2 23 A10
220 R_AM 74LS14 *INT1 13 INT1 P2.3 24 A11 74LS373
T0 14 T0 P2.4 25 A12
LED4 0 RAM X T1 15 26 A13
R6 8 9 P1.2 T1 P2.5 VCC
U5D P2.6 27 A14
R_VD 74LS14 P1.0 1 28 A15 INTERF-SERIAL
220 P1.0 P2.7
P1.1 2 P1.1
LED1 (Q_VD) P1.2 3 17 *RD TXD
ON --> BOOT SERIAL P1.3 4 P1.2 RD TXD VCC
SW2 P1.3 WR 16 *WR
P1.3 (BOOT=1) P1.4 5 29 PSEN 25V
OFF --> PROG RAM P1.5 6 P1.4 PSEN RXD
SW PUSHBUTTON P1.5 ALE/P 30
(BOOT=0) P1.6 7 11 TXD RXD
P1.7 8 P1.6 TXD 10 25V
SW3 P1.7 RXD RXD
*INT1
T1 VCC 8031
SW PUSHBUTTON
LED1 BOOT
VCC
*BOOT
LED5 R9 R3
2K2 Q_VD 220
8K2 Q_VM R7
220 C4
SW4 R8 1u
11 10 *INT0 4
U5E 2 5 BOOT
P Q MICROCONTROLADORES MCS-51
SW SPST D R
74LS14 RST 3 1
CLK U8A Title
FECHADA RUN (Q_VM OFF) C Q 6 *BOOT CPU.SHT (CIRCUITO DE LA CPU)
VCC L
74LS74 Size Document Number REV
ABERTA S STEP (Q_VM ON)
1 A 1 1.0
Date: January 5, 1995 Sheet 1 of 4
MICROCONTROLADORES (MCS-51) 11 - 3
CAPTULO XI PLACA DE TESTES
A0..A15
U?A
U3 U4 2 P1.7
3 P1.7
A0 8 A0 O0 9 AD0 AD0 9 D0 A0 8 A0 74LS08
A1 7 10 AD1 AD1 10 A1 7 A1 U14B 1 P1.6
A1 O1 11 11 D1 6 5 P1.6
A2 6 A2 O2 AD2 AD2 D2 A2 A2
A3 5 13 AD3 AD3 13 A3 5 A3 6
A4 4 A3 O3 14 AD4 AD4 14 D3 4 A4 74LS02 4 *BOOT
A4 O4 D4 A4
A5 3 A5 O5 15 AD5 AD5 15 D5 A5 3 A5
A6 2 A6 O6 16 AD6 AD6 16 D6 A6 2 A6
A7 1 A7 O7 17 AD7 AD7 17 D7 A7 1 A7
A8 23 A8 A8 23 A8
A9 22 A9 A9 22 A9 U6A
A10 19 A10 19 A10 2 *BOOT
A10 3 *BOOT
A11 21 A11 74LS32
18 1 *WR
CE 20 *WR
*BOOT 18 CE OE
PSEN 20 OE/VPP WE 21
U6B
2732 6116 5 PSEN
6 *PSEN
U7A 74LS32 4 BOOT
2 BOOT
3
AD0..AD7 74LS08 1 U6C
10 *BOOT
8
*BOOT P1.7 P1.6 *WR/*RD ACCIONAN 74LS32 9 *RD *RD
1 X X 6116 (*PSEN)
0 1 1 6116 (*WR/*RD)
0 0 1 8255 (*WR/*RD)
0 1 0 373 (*WR/*RD)
MICROCONTROLADORES MCS-51
0 0 0 PROIBIDO 1
Title
MODO BOOT ==> *BOOT=0 MEMO.SHT (CIRCUITO DE LAS MEMORIAS)
Size Document Number REV
MODO RUN ==> *BOOT=1
A 1 1.0
Date: January 4, 1995 Sheet 2 of 6
11 - 4 MICROCONTROLADORES (MCS-51)
CAPTULO XI PLACA DE TESTES
R11 D10
4K9 C10 1N4148 VCC
100u
R14
10K
D11
1N4148
RXD
R13
Q2
PC_TX(2) PN2222
10K
R12 D12
100K 1N4148
PINO 2 TX -->
PC_GND(7)
CONECTOR PINO 3 RX <--
SERIAL PINO 7 GROUND
PC PINOS 4,5 CURTO
PINOS 6,8,20 CURTO
U16
J1 (ENTRADA 9V DC) LM7805
VI VO VCC
G
N
D
PHONEJACK C17 C18
470uF 47uF
12V 12V
25V/IN
(ENTRADA 25V DC)
MICROCONTROLADORES MCS-51
25V Title
C19 SERIAL.SHT (INTERFACE SERIAL)
47uF/30V Size Document Number REV
A 1 1
Date: January 4, 1995 Sheet 3 of 4
MICROCONTROLADORES (MCS-51) 11 - 5
CAPTULO XI PLACA DE TESTES
U13
AD0 3 2 PD0 ZERO FORCE (ZIF) Vcc
D0 Q0
AD1 4 D1 Q1 5 PD1
AD2 7 D2 Q2 6 PD2 PB0
AD3 8 9 PD3 Z1(A0) Vcc
D3 Q3 PB1 PA0
AD4 13 D4 Q4 12 PD4 Z39(D0)
AD5 14 15 PD5 Z2(A1)
U14A D5 Q5 PB2 PA1
AD6 17 D6 Q6 16 PD6 Z38(D1)
2 AD7 18 19 PD7 Z3(A2)
*WR 1 D7 Q7 PB3 PA2
3 74LS02 Z4(A3) Z37(D2)
P1.6 1 OC
11 G VCC PB4 PA3
Z5(A4) Z36(D3)
74LS373 PB5 PA4
Z6(A5) Z35(D4)
PB6 PA5
Z7(A6) Z34(D5)
8 X 10K PB7 PA6
U12 Z8(A7) Z33(D6)
AD0 34 4 PA0 PA7
D0 PA0 Z9(RST) Z32(D7)
AD1 33 D1 PA1 3 PA1
AD2 32 2 PA2 Vpp
31 D2 PA2 1 Z10 Z31(Vpp)
AD3 D3 PA3 PA3
AD4 30 40 PA4 PC7
29 D4 PA4 39 Z11 Z30(*PRG)
AD5 D5 PA5 PA5
AD6 28 D6 PA6 38 PA6
AD7 27 37 PA7 Z12 Z29
AD0..AD7 D7 PA7 PC6
*RD 5 18 PB0 Z13 Z28
*RD 36 RD PB0 19 PC5
*WR *WR WR PB1 PB1 Z27
A0 9 20 PB2 Z14
8 A0 PB2 21
A1 A1 PB3 PB3
RST 35 22 PB4 Z15 Z26
6 RESET PB4 23 PD3 PC4
A0..A15 P1.7 CS PB5 PB5
24 PB6 Z16(*WR) Z25(A12)
PB6 25 PD4 PC3
RST PB7 PB7
Z17(*RD) Z24(A11)
14 PC0 PC2
P1.7 PC0 XTAL2 Z23(A10)
PC1 15 PC1 X2
16 PC2 PC1
PC2 XTAL1 Z22(A9)
PC3 17 PC3
13 PC4 4MHz PC0
PC4 C15 GND Z21(A8)
PC5 12 PC5 C16
PC6 11 PC6 30p 30p
PC7 10 PC7
8255
11 - 6 MICROCONTROLADORES (MCS-51)
CAPTULO XI PLACA DE TESTES
Este esquema o de maior hierarquia. Aqui est a CPU e tambm os blocos que
representam os demais esquemas: MEMRIAS, INTERF-SERIAL e GRAVADOR. A seguir h uma
descrio completa de todos os itens que compem est placa.
O CRISTAL utilizado de 3,575611 MHz e basta conect-lo aos pinos (X1 e X2) do
oscilador da CPU. Utilizou-se este cristal porque j estava disponvel e tambm porque esta
freqncia permite que a porta serial opere a 9600 bauds com boa preciso. Este cristal muito
comum no Brasil pois utilizado em todas as televises para gerar a freqncia da portadora de cor
do sistema PAL-M. Um cristal muito comum no Equador o de 3,58 MHz, que a freqncia da
portadora de cor do sistema NTSC e que tambm pode ser utilizado na Placa de Testes. Um cristal
ideal para a gerao de um baud rate preciso um de 3,6864 MHz; um cristal de 11,0592 tambm
interessante pois permite um baud rate preciso alm de permitir um clock maior para a CPU. Os dois
capacitores C2 e C3 esto colocados por recomendao do fabricante da CPU e o motivo da
utilizao garantir que o cristal oscile na freqncia apropriada durante a energizao do circuito.
O circuito de RESET j foi estudado no captulo III. Notar que o resistor R2 de 47 K e
que junto com o capacitor de 10 F, deve garantir um tempo mais que suficiente para o reset da
CPU. O diodo D1 permite uma rpida descarga do capacitor C1 quando se desliga o circuito.
Tambm possvel um reset manual atravs do pushbutton SW1 e o resistor R1 de 82 usado
para impedir a descarga abrupta do capacitor C1. Deve-se tomar cuidado com os resistores R1 e R2
pois quando o pushbutton SW1 acionado (para provocar reset) esses dois resistores formam um
divisor resistivo que define o valor da tenso na entrada do Schimit Trigger 74LS14. Se R1 no for
muito pequeno quando comparado com R2, a tenso na entrada do 74LS14 poder ser interpretada
como "1 lgico" e a CPU no ser resetada. Neste circuito, quando se aciona SW1 a tenso do divisor
de: (5*82) / (47000+82) = 9 mV (muito prxima de zero). A figura 11.2 ilustra o circuito de reset e os
dispositivos conectados a este sinal. Nesta figura pode-se ver o LED6 (led quadrado de cor amarela)
que indica quando o reset manual est acionado; um inversor (74LS14) foi usado para que o led se
acenda quando a chave for pressionada.
MICROCONTROLADORES (MCS-51) 11 - 7
CAPTULO XI PLACA DE TESTES
VCC VCC
R9
U5E 220
LED6
D1 R2 11 10
1N4148 47K
74LS14 Q_AM
(AMARELO QUADRADO)
RESET U5A
SW1
1 2
8031
SW PUSHBUTTON
74LS14
R1 C1
82
10uF
8255
VCC VCC
R9
LED1
2K2 Q_VD
C4 (VERDE QUADRADO)
1uF
R3
220
4
2 5
D P
R
Q BOOT
3
CLK
U8A C 6
L Q *BOOT
74LS74
VCC 1
Na figura 11.2 tambm se pode notar que o sinal de reset utilizado pelo 8031 e pelo
8255. Alm disto, este sinal tambm aciona um flip flop tipo D que est conectado em modo
"toggled", ou seja, a cada reset o flip flop muda de estado. Este circuito ser explicado quando for
abordado o item do boot serial.
Existem TRS LEDS SINALIZADORES (LED2, LED3 e LED4) que servem de sada aos
programas dos usurios. Estes leds so acionados por 3 bits da porta P1 (P1.0, P1.1 e P1.2). Para
evitar a conexo dos leds diretamente aos pinos da CPU (na verdade no h grandes problemas
nisto) e tambm para que se acendam quando se escrever 1 nos bits da porta P1, foram usados
inversores 74LS14 (que estavam sobrando). A figura 11.3 ilustra em detalhes a conexo dos leds
com os bits da porta P1.
11 - 8 MICROCONTROLADORES (MCS-51)
CAPTULO XI PLACA DE TESTES
VCC
8031
LED2 R4
3 4
P1.0 U5B
220
R_VM
74LS14 (VERMELHO REDONDO)
LED3 R5
5 6
P1.1 U5C
220
R_AM
74LS14 (AMARELO REDONDO)
LED4 R6
9 8
P1.2 U5D
220
R_VD
74LS14 (VERDE REDONDO)
8031
SW2
P1.3
SW PUSHBUTTON
SW3
*INT1
SW PUSHBUTTON
T1
MICROCONTROLADORES (MCS-51) 11 - 9
CAPTULO XI PLACA DE TESTES
aproveitada para controlar a execuo de programa no modo passo a passo. A figura 11.5 ilustra a
conexo da chave passo a passo.
VCC
LED5 Q_VM
(VERMELHO QUADRADO)
VCC
R7
8031
R8
220
PASSO A PASSO 8K2
SW4
11 10
U5E *INT0
SW SPST
74LS14
BARRAMENTO DE DADOS
(MULTIPLEXADO)
U1 U2
31 EA/VP P0.0 39 AD0 AD0 3 D0 Q0 2 A0
P0.1 38 AD1 AD1 4 D1 Q1 5 A1
19 X1 P0.2 37 AD2 AD2 7 D2 Q2 6 A2
P0.3 36 AD3 AD3 8 D3 Q3 9 A3
P0.4 35 AD4 AD4 13 D4 Q4 12 A4
18 X2 P0.5 34 AD5 AD5 14 D5 Q5 15 A5
P0.6 33 AD6 AD6 17 D6 Q6 16 A6
P0.7 32 AD7 AD7 18 D7 Q7 19 A7
9 RESET
P2.0 21 A8 1 OC
P2.1 22 A9 11 G
12 P2.2 23 A10 ALE
INT0
13 INT1 P2.3 24 A11 74LS373
14 T0 P2.4 25 A12
15 T1 P2.5 26 A13
P2.6 27 A14
1 P1.0 P2.7 28 A15
2 P1.1
3 P1.2 RD 17
4 P1.3 WR 16
5 P1.4 PSEN 29
6 P1.5 ALE/P 30 BARRAMENTO DE ENDEREOS
7 P1.6 TXD 11
8 P1.7 RXD 10
8031
11 - 10 MICROCONTROLADORES (MCS-51)
CAPTULO XI PLACA DE TESTES
Para a memria da placa foi utilizada uma EPROM (2732) e uma memria esttica
(SRAM-6116). A primeira idia que a EPROM trabalhe como memria de programa (*PSEN) e a
SRAM trabalhe como memria de dados (*RD e *WR). Isto significaria gravar os programas na
EPROM e, a cada novo programa, seria necessrio apagar e regravar a EPROM. Para evitar este
trabalho, h dois modos em que a placa pode operar:
MODO BOOT A EPROM funciona como memria de programa e a SRAM como
memria de dados. Na EPROM est um programa muito simples que recebe dados
pela porta serial e os escreve na SRAM (envia-se o programa pela porta serial).
MODO EXECUO a EPROM desabilitada e a SRAM trabalha como memria
de programa, executando o programa recm transmitido.
MICROCONTROLADORES (MCS-51) 11 - 11
CAPTULO XI PLACA DE TESTES
para o *CE deste CI; se BOOT=0 a EPROM est desabilitada. Quando BOOT=1, a entrada *WE da
SRAM acionada pelo sinal de *WR e a entrada *OE acionada por *RD; quando BOOT=0, a
entrada *WE est em 1 (no h como escrever) e a entrada *OE acionada por *PSEN, ou seja,
trabalha como memria de programa. Notar que no flip-flop h um circuito (R9 e C4) que garante o
preset, ou seja, que sempre se inicie em 1 (BOOT=1, pronto para receber um programa). O fato de
existir este circuito de preset necessitou que se aumentasse o tempo do RESET da CPU pois a CPU
s deve funcionar depois que o sinal BOOT esteja totalmente estabilizado.
A tabela da figura 11.8 ilustra como est o pino *CE da EPROM e os pinos *WE e *OE
da SRAM.
EPROM SRAM
BOOT *CE *WE *OE
0 *PSEN *WR *RD
1 1 1 *PSEN
Figura 11.8. BOOT controlando os pinos de leitura e escrita da SRAM e da EPROM.
11 - 12 MICROCONTROLADORES (MCS-51)
CAPTULO XI PLACA DE TESTES
U3
AD0 9 O0 A0 8 A0
AD1 10 O1 A1 7 A1
AD2 11 O2 A2 6 A2
AD3 13 O3 A3 5 A3
AD4 14 O4 A4 4 A4
AD5 15 O5 A5 3 A5
AD6 16 O6 A6 2 A6
AD7 17 O7 A7 1 A7
A8 23 A8
A9 22 A9
A10 19 A10
A11 21 A11
18 *BOOT
CE
OE/VPP 20
2732 *PSEN
74LS08
U4 U?A 2 P1.7
AD0 9 8 A0 2 3 P1.7
10 D0 A0 7 U7A 1 P1.6
AD1 D1 A1 A1 2 1 3 U6A
AD2 11 6 A2 1 P1.6
13 D2 A2 5
AD3 D3 A3 A3 74LS04 *BOOT
AD4 14 D4 A4 4 A4 74LS32
AD5 15 D5 A5 3 A5
AD6 16 D6 A6 2 A6
AD7 17 1 A7 2 *BOOT
D7 A7 23 3
A8 A8 U6A
22 A9 1 *WR
A9 19 *WR
A10 A10
A11 74LS32
A12
5 *PSEN
6 *PSEN
U6B
4 BOOT
CE 18 2
WE 21
20 3
OE 74LS32
U7A 1
6116 10 *BOOT
8 U6C
74LS08 9 *RD
*RD
74LS32
VCC VCC
VCC
R9
LED1
2K2 Q_VD
C4 (VERDE QUADRADO)
1uF
D1 R2 R3
1N4148 47K 220
4
RESET U5A 2
P
5 BOOT
SW1 D Q
R
1 2 3
CLK
SW PUSHBUTTON U8A C Q 6 *BOOT
74LS14 L
74LS74
R1 C1 VCC
82 1
10uF
O microcontrolador 8031 oferece uma porta serial bidirecional que ser utilizada para
enviar os programas que sero executados pela placa de testes. Pelo pino TXD a CPU transmite os
dados e pelo pino RXD os dados so recebidos. O conector serial de 9 pinos dos PCs transmite pelo
pino 2 (PC_RX) e recebe pelo pino 3 (PC_TX). A soluo parece ser simples pois bastaria conectar
as entradas com as sadas. O problema que no conector serial dos PCs os sinais esto com os
nveis de tenso do padro RS 232 (+/- 12 V) e nos pinos da CPU tm-se nveis TTL. Os conversores
RS 232/TTL necessitam de fontes de alimentao de +12 V e -12 V; os mais consagrados so: 1488
e 1489.
MICROCONTROLADORES (MCS-51) 11 - 13
CAPTULO XI PLACA DE TESTES
Pareceria que para poder operar com a porta serial conectada ao PC deveramos ligar a
Placa de Testes a duas fontes extras (+12 V e - 12 V). Mas com isto a placa se tornaria grande
porque seriam necessrios dois transformadores extras. Mas o que se busca uma placa simples
que permita receber programas do PC e no uma porta serial perfeita.
Converter para TTL os sinais RS 232 gerados por um PC fcil com a utilizao de um
transistor. A figura 11.10 ilustra um circuito que converte RS 232 em TTL. Se a entrada PC_TX est
em +12 V, o transistor se satura e a sada RXD vai a zero; por outro lado, se a entrada PC_TX est
em -12 V, o transistor estar cortado e, devido ao resistor de pull up (R14), a sada vai para VCC. O
diodo D12 aumenta a velocidade de transistor quando este faz a transio da saturao para o corte.
VCC
R14
10K
RXD
R13
(TTL)
Q2
PC TX 2N2222
(RS 232) 10K D12
1N4148
H algumas tolerncias na porta serial do PC, as quais podero ser aproveitadas para
simplificar o conversor TTL/RS 232. O primeiro tpico que a porta serial do PC interpreta como
tenso positiva qualquer valor entre +3 V e +12 V. Com isto, podemos utilizar os +5 V da placa em
substituio fonte de +12 V. O mesmo valido para as tenses negativas, ou seja, a porta serial do
PC interpreta como tenso negativa qualquer valor entre -12 V e -3 V. A figura 4.8 ilustra estas faixas
de tenso.
+12 V
FAIXA
POSITIVA
+3 V "+12 V"
0
-3 V FAIXA
NEGATIVA
"-12 V"
-12 V
11 - 14 MICROCONTROLADORES (MCS-51)
CAPTULO XI PLACA DE TESTES
Se houvesse uma fonte de -12 V disponvel a converso de TTL para RS 232 seria muito
simples. A figura 11.11 ilustra o emprego de um transistor para converter os nveis. Quando o sinal
TXD do 8031 est em 1, o transistor estar cortado e a sada PC_RX vai para -12 V; quando o sinal
TXD est em zero, o transistor se satura e a sada PC_RX vai para +5 V.
VCC
R10
Q1
TXD PN2907
(TTL) 10K
PC_RX
(RS 232)
R11
4K9
-12V
Figura 11.11. Circuito para converter nveis TTL para nveis RS 232.
O problema agora : onde conseguir uma fonte de -12 V ? H um truque que se pode
usar: uma sada RS 232 quando inativa est com uma tenso negativa (usualmente -12 V), ou seja, o
sinal PC_TX quando no usado estar apresentando uma tenso de -12 V. Esta mesma sada,
quando comea a transmitir apresenta pulsos de +12 V e de -12 V. Se for usado um circuito capaz de
separar as tenses negativas, ser obtida uma fonte que pode substituir a fonte de -12 V. A figura
11.12 ilustra este circuito. Notar que o diodo D11 conectado a PC_TX separa as tenses negativas,
que so armazenadas no capacitor C10. Quando h tenses positivas, esse diodo estar cortado. O
diodo D10 est em paralelo com o capacitor para garantir que as tenses nunca cheguem a um valor
positivo. Um circuito deste tipo consegue fornecer uma tenso prxima de -6 V, mas que suficiente
para que o conversor TTL/RS 232 funcione.
MICROCONTROLADORES (MCS-51) 11 - 15
CAPTULO XI PLACA DE TESTES
VCC
R10
Q1
TXD
10K PN2907
(TTL)
PC_RX
(RS 232)
R11
4K9
FONTE NEGATIVA
D11
PC_TX
(RS 232) 1N4148
D10
C10
1N4148
100uF
Agora possvel fazer as converses RS 232 e TTL que so necessrias para que a
porta serial opere. Cabe lembrar que este conversor muito limitado e que funciona apenas a
distncias pequenas. Deve-se testar quando for empregado a distncias maiores e com velocidades
mais altas. O esquema completo da interface serial (serial.sht) est no item 11.2.
Para complementar o presente texto, apresentada na figura 11.13 uma tabela com as
funes dos pinos para os conectores de 9 pinos e 25 pinos.
11 - 16 MICROCONTROLADORES (MCS-51)
CAPTULO XI PLACA DE TESTES
U16
J1 (ENTRADA 9V DC) LM7805
VI G VO VCC
N
D
PHONEJACK C17 C18
470uF 47uF
12V 12V
25V/IN
(ENTRADA 25V DC)
25V
C19
47uF/30V
Para o gravador de EPROM se buscou um projeto que permitisse gravar todas as CPUs
8751 e 8752. Portanto, foi feita uma anlise de que sinais seriam necessrios para cada pino. A
figura 11.15 apresenta uma tabela com todos os pinos e os sinais necessrios. Por essa figura se
pode concluir que o pino *EA/VPP o mais difcil pois, de acordo com a CPU, deve fornecer 3 nveis
de tenso: 21 / 12,75 / 5 V. Pelo pino ALE/*PROG enviam-se pulsos de 50 ms para a gravao
standard ou pulsos de 100 s para a gravao usando "quick pulse programming".
MICROCONTROLADORES (MCS-51) 11 - 17
CAPTULO XI PLACA DE TESTES
SOCKET
87C51 ZERO 87C51
8752BH 8751BH 8751H FORCE 8751H 8751BH 8752BH
A0 A0 A0 1 VCC 40 5V 5V 5V
A1 A1 A1 2 0 39 D0 D0 D0
A2 A2 A2 3 7 38 D1 D1 D1
A3 A3 A3 4 P1 37 D2 D2 D2
A4 A4 A4 5 P0 36 D3 D3 D3
A5 A5 A5 6 35 D4 D4 D4
A6 A6 A6 7 34 D5 D5 D5
7
A7 A7 A7 8 33 D6 D6 D6
0
H H H 9 RST 32 D7 D7 D7
X X X 10 *EA/VPP 31 5/21 V 5/12,75 V 5/12,75 V
11 0 ALE/*PROG 30 P1 P2 P2
X X X
X X X 12 *PSEN 29
X X X 13 P3 28 L/H L/H L/H
14 7 27
X X X L/H L/H L/H
X X X 15 26 X X X
L/H L/H X 16 P2 25 X X A12
7
L/H L/H X 17 24 A11 A11 A11
4-6 MHz 4-6 MHz 4-6 MHz 18 XTAL2 23 A10 A10 A10
4-6 MHz 4-6 MHz 4-6 MHz 19 XTAL1 0
22 A9 A9 A9
20 GND 21 A8 A8 A8
P1 um pulso de 50 milisegundos
P2 um pulso de 100 microsegundos
Figura 11.15. Sinais necessrios para gravar os diferentes tipos de microcontroladores com EPROM.
A parte mais difcil deste gravador a gerao das tenses de programao (5 V, 12,75
V e 21 V). Alm disso, deve-se ter um controle digital sobre essas tenses. A soluo obtida com o
uso do LM317 (regulador ajustvel), que tem a capacidade de manejar tenses de 1,2 V at 37 V. A
figura 11.16 ilustra o emprego deste CI.
LM317
Vin Vout
ADJ I1
Vref
R1
Vout
Iadj I2
V2
R2
11 - 18 MICROCONTROLADORES (MCS-51)
CAPTULO XI PLACA DE TESTES
Vout = Vref + V2
Vref
I2 = I1 + Iadj = + Iadj
R1
Vref
V2 = R2 I2 = R2 + Iadj
R1
Vref
Vout = Vref + R2 + Iadj
R2
R2
Vout = Vref 1 + + R2 Iadj
R1
Vout - Vref
R2 =
Vref
+ Iadj
R1
Vout - 1, 25
R2 = K
5, 782
MICROCONTROLADORES (MCS-51) 11 - 19
CAPTULO XI PLACA DE TESTES
TENSO R2
21 V 3,416 k
12,75 V 1,989 K
5V 649
Figura 11.17. Valores de R2 para gerar as diversas tenses.
A maneira mais simples de gerar essas 3 tenses conectar ao LM317 esses trs
valores de resistores e controlar seu caminho para terra com transistores. Pode-se usar buffers no
inversores com coletor aberto. A figura 11.18 ilustra este circuito. Deve-se notar que o resistor
responsvel pelos 21 V est permanentemente conectado terra, ou seja, quando se desabilita os
dois transistores a sada vai a 21 V. preciso saber os valores de resistores que, em paralelo com o
resistor de R16, permitam gerar as outras tenses. Na verdade o calculo simples.
Para 12 V: [1/3416 + 1/R18 = 1/1989] R18 = 4,761 K.
Para 5 V : [1/3416 + 1/R17 = 1/649] R17 = 800 .
Para permitir um ajuste preciso das tenses usam-se potencimetros para cada resistor.
claro que primeiro se ajusta o potencimetro dos 21 V e em seguida os outros dois.
25 - 30 V
U15
LM317
VI G VO VOUT
N
D R16
220
U11A R18
1 2
V12
3K9 POT3
7407 1K
R17
3 4
V5
U11B 720 POT2
7407 220
11 - 20 MICROCONTROLADORES (MCS-51)
CAPTULO XI PLACA DE TESTES
MICROCONTROLADORES (MCS-51) 11 - 21
BIBLIOGRAFIA
BIBLIOGRAFIA
Braga, Nilton. "RS-232 Tcnicas de Interface", terceira tiragem, Ed. EBRAS, Rio de Janeiro, RJ,
1990.
Kernighan, Brian W. & Ritchie, Dennis M. "The C Programming Language", second edition, Ed.
Prentice Hall - Software Series,Englewood Cliffs, New Jersey, 1988.
Purdum, Jack. "C Programmer's Toolkit", Ed. QUE Corporation, Carmel, Indiana, 1989.
Silva Jr, Vidal P. Aplicaes prticas do microcontrolador 8051, 9a ed., Ed. rica, So Paulo, 1998.