Você está na página 1de 186

MICRO CONTROLADORES

MCS-51

RICARDO ZELENOVSKY ASESSOR TCNICO ESPE

DEDICATRIA: a Maria Antonia, Guilherme e Henrique.

MICRO CONTROLADORES

MCS-51
RICARDO ZELENOVSKY
VCC 1N4148 SW PUSHBUTTON R1 82 SW1 D1 RST 74LS14 U5A 2 P1.7 P1.6 GRAVADOR RST P1.7 P1.6 AD0..AD7 AD0..AD7 A0..A15 *RD *WR *RD *WR MEMORIAS AO..A15 *RD *WR *PSEN BOOT *BOOT

47K R2 1 C1 10u

*RD *WR *PSEN BOOT *BOOT

VCC R9 220 LED6 Q_AM R4 220 R5 220 R6 220 LED2 R_VM LED3 R_AM LED4 R_VD SW2 SW PUSHBUTTON SW3 SW PUSHBUTTON VCC LED5 8K2 Q_VM R8 11 U5E 74LS14 (Q_VM OFF)

RST

3575611Hz X1 C2 30p C3 30p 31 19 18

U1 EA/VP X1 X2 RESET INT0 INT1 T0 T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 8031 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 RD WR PSEN ALE/P TXD RXD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 17 16 29 30 11 10 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 A8 A9 A10 A11 A12 A13 A14 A15 *RD *WR PSEN TXD RXD BOOT R3 220 *BOOT AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 ALE 3 4 7 8 13 14 17 18 1 11

U2 D0 D1 D2 D3 D4 D5 D6 D7 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 2 5 6 9 12 15 16 19 A0 A1 A2 A3 A4 A5 A6 A7

10 *RST

U5E 74LS14

11 RST

VCC

3 P1.0 U5B 74LS14 5 P1.1 U5C 74LS14 U5D 9 P1.2 74LS14 P1.3

BOOT 1 0

*PSEN ROM RAM

*RD *WR RAM X

RST *INT0 *INT1 T0 T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 LED1

9 12 13 14 15 1 2 3 4 5 6 7 8

OC G 74LS373 VCC

INTERF-SERIAL TXD RXD TXD RXD VCC

LED1 (Q_VD) ON --> BOOT SERIAL (BOOT=1) OFF --> PROG RAM (BOOT=0) VCC

25V

25V

*INT1 T1

R9 2K2 R7 220 10 *INT0 C4 1u 2 RST 3 VCC D

Q_VD

SW4 SW SPST FECHADA ABERTA

4 P Q R CLK U8A C L 1 Q 5 BOOT

RUN

6 74LS74

*BOOT

S STEP (Q_VM ON)

PREFCIO

PREFCIO
Este trabalho surgiu para concretizar os conhecimentos e idias desenvolvidas nos Seminrios de Microcontroladores ministrados na Faculdade de Eletrnica da Escola Politcnica Superior do Exrcito Equatoriano. Nestes seminrios se desenvolveu um conjunto hardware-software que provou ser muito didtico para a aprendizagem de microcontroladores da famlia MCS-51. 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. O texto est organizado por captulos e apndices. No Captulo 1 foi feita uma pequena reviso histrica, se conceitua o que um microcontrolador e se apresenta uma pequena relao com os principais fabricantes da famlia MCS51. No Captulo 2 se conceitua a famlia MCS-51 e so apresentados os principais membros desta. Aqui se estuda a conexo com as memrias e tambm a arquitetura da RAM interna. No Captulo 3 so apresentados todos os pinos do microcontrolador e descritas suas funes. Tambm so estudados os diagramas de tempo. Neste captulo apresentado o hardware a ser construdo. O Captulo 4 trata do estudo e prtica do conjunto de instrues da famlia MCS-51. Ao final so propostos diversos exerccios de programao, parte deles com as respostas. No Captulo 5 so apresentadas as ferramentas de programao. Basicamente se utilizar o assembler e simulador da Avocet (AVMAC51, AVLINK, AVSIM51). As ferramentas mais importantes sero o assembler e o linker. O simulador estudado somente para ser usado como um meio auxiliar.pois se tem um hardware para testar os programas desenvolvidos.

viii

MICROCONTROLADORES (MCS-51)

PREFCIO A partir do Captulo 6 sero estudados e praticados os recursos que a famlia MCS-51 oferece. Neste Captulo so estudadas as portas paralelas e em seguida se fazem prticas com o hardware. No Captulo 7 so apresentadas as interrupes e tambm prticas no hardware. Aqui se propem os princpios para realizao de um controle passo a passo. No Captulo 8 so estudados e praticados os contadores/temporizadores. O Captulo 9 aborda a porta serial. Aqui tambm se prope um pequeno programa que permite ao hardware receber os programas do PC via porta serial. No Captulo 10 se estuda a economia de energia e a programao da EPROM que h em alguns membros da famlia. Aqui se prope um pequeno gravador para essa EPROM. No Apndice 1 se descreve completamente o programa "BOOT SERIAL" que permite ao hardware receber os programas que o PC envia pela porta serial. Aqui est a listagem completa do programa. No Apndice 2 descrito o programa "SINGLE STEP" que permite ao hardware o controle passo a passo. apresentada uma listagem completa dos programas. No Apndice 3 se faz um pequeno estudo das portas seriais do PC. Aqui se explica o programa "TODO" e tambm uma listagem completa em C. Este trabalho uma realidade graas amizade de Brasil e Equador, em particular, se deve cooperao que h entre os Exrcitos destes dois pases irmos. Agradeo o apoio recebido na ESPE, particularmente por parte do Departamento de Ensino e da Faculdade de Eletrnica. Aos professores desta Faculdade se deve o desenvolvimento dos seminrios e sugestes aqui presentes. A traduo para espanhol pde ser feita graas ao empenho dos alunos de Nvel X de 1993 e de Nvel IX de 1994. Devo agradecer os engenheiros Ruben Len e Vinicio Carrera pelas sugestes e empenho nos trabalhos de correo deste texto, ao engenheiro Fabricio Morales pela colaborao no desenvolvimento dos programas e aos alunos Eduardo Torres e Ivan Cisneros se deve a construo e testes do novo hardware didtico. Agradeo ao aluno Marco Zavala pela ajuda nas apuradas correes. RICARDO ZELENOVSKY

MICROCONTROLADORES (MCS-51)

ix

NDICE

NDICE

PREFCIO CAPTULO I MICROCONTROLADORES

viii 1-1
1-1 1-3 1-4 1-5

1.1. REVISO HISTRICA 1.2. POR QU MICROCONTROLADORES ? 1.3. MICROCONTROLADORES 1.4. FAMLIAS DA INTEL

CAPTULO II
2.1. INTRODUO 2.2. FAMLIA MCS-48 2.3. FAMLIA MCS-51

FAMLIA MCS-51

2-1
2-1 2-1 2-2 2-3 2-7 2-9 2-11 2-13

2.4. MEMRIA EXTERNA 2.5. MEMRIA INTERNA (RAM INTERNA) 2.6. SFR - SPECIAL FUNCTION REGISTERS 2.7. MAPA DA RAM INTERNA 2.8. MAPA DOS BITS

CAPTULO III
3.1. INTRODUO

PINAGEM E TEMPORIZAO

3-1
3-1 3-1 3-3 3-6

3.2. DESCRIO DA PINAGEM 3.3. DIAGRAMAS DE TEMPO 3.4. RESET

CAPTULO IV
4.1. INTRODUO

CONJUNTO DE INSTRUES

4-1
4-1 4-2 4-3 4-3 4-3 4-4 4-4 4-4 4-4

4.2. MODOS DE ENDEREAMENTO 4.3. SOBRE AS INSTRUES 4.4. INSTRUES ARITMTICAS 4.4.1. Soma de 8 Bits 4.4.2. Soma de 8 Bits com Carry 4.4.3. Subtrao de 8 Bits com Borrow 4.4.4. Incremento de 8 Bits 4.4.5. Decremento de 8 Bits

MICROCONTROLADORES (MCS-51)

iii

NDICE 4.4.6. Incremento de 16 Bits 4.4.7. Multiplicao e Diviso de 8 Bits 4.4.8. Ajuste Decimal 4.5. INSTRUES LGICAS 4.5.1. AND de 8 Bits 4.5.2. OR de 8 Bits 4.5.3. XOR de 8 Bits 4.5.4. Operaes Lgicas com o Acumulador 4.6. INSTRUES DE TRANSFERNCIA DE DADOS 4.6.1. Transferncia de Dados 4.6.2. Permutao de Bytes 4.6.3. Permutao de Nibble 4.6.4. Operaes com a Pilha 4.6.5. Transferncia de Dados com a Memria de Dados Externa 4.6.6. Leitura da Memria de Programa 4.7. INSTRUES BOOLEANAS 4.7.1. Zerar/Setar/Complementar um Bit 4.7.2. AND/OR Booleano 4.7.3. Movimento de Bits 4.7.4. Desvios Baseados em Bits 4.8. INSTRUES DE DESVIO 4.8.1. Chamadas de subrotinas 4.8.2. Retorno de Subrotinas 4.8.3. Desvios 4.8.4. Desvios Condicionais 4.8.5. Loops 4.8.6. No Operao 4.9. INSTRUES E FLAGS 4.10. OBSERVAES 4.10.1. Bancos de Registros 4.10.2. Registros Especiais 4.11. CDIGOS DE OPERAO (OP CODES) 4.11.1. Tabelas de Instrues 4.11.2. Instrues em Ordem Alfabtica com OPCODES 4.12. JUMP E CALL 4.12.1. JUMPs Relativos 4.12.2. JUMPs e CALLs Absolutos 4.13. EXEMPLOS 4-5 4-5 4-5 4-6 4-6 4-7 4-7 4-7 4-8 4-8 4-10 4-10 4-10 4-11 4-11 4-11 4-12 4-12 4-12 4-12 4-13 4-13 4-13 4-14 4-14 4-14 4-15 4-15 4-16 4-16 4-17 4-18 4-18 4-21 4-24 4-24 4-26 4-29

iv

MICROCONTROLADORES (MCS-51)

NDICE

CAPTULO V

ASSEMBLER E SIMULADOR

5-1
5-1 5-4 5-9 5-11 5-12 5-17 5-17 5-18 5-18 5-19 5-19 5-19 5-20 5-20 5-21 5-21 5-21 5-21 5-22 5-22 5-22 5-31 5-31 5-31 5-31 5-32 5-32

5.1. CONCEITOS DO AVMAC51 E DO AVLINK 5.2. PSEUDO-INSTRUES DO ASSEMBLER 5.3. O LINKER - AVLINK 5.4. O FORMATO INTEL.HEX 5.5. PROGRAMAS EXEMPLO 5.6. CONCEITOS DO AVSIM 8051 5.6.1. Modo Comando 5.6.2. Modo Display 5.7. COMANDOS DO AVSIM51 5.7.1. Comandos de Ambiente 5.7.2. Comandos para a Execuo de Programas 5.7.2.1. Breakpoints 5.7.2.2. Condies (Value, Range, Mask, Indirect) 5.7.2.3. Passpoints 5.7.2.4. Opcode Traps 5.7.2.5. Execute Command 5.7.3. Comandos de Display 5.7.4. Comandos de I/O 5.7.5. Comandos de Memria 5.7.6. Incremental Cross-Assembler 5.8. FLUXOGRAMA DE OPERAO DO AVSIM51 5.9. TELAS DE AJUDA 5.9.1. Ajuda para os Comandos 5.9.2. Ajuda para o Display 5.9.3. Ajuda para a Simulao 5.9.4. Ajuda para AVOCET 5.9.5. Tela do Simulador

CAPTULO VI

PORTAS PARALELAS

6-1
6-1 6-2 6-2 6-3 6-4 6-5

6.1. REGISTROS ENVOLVIDOS 6.2. DESCRIO DO FUNCIONAMENTO 6.2.1. Porta P1 6.2.2. Porta P3 6.2.3. Porta P2 6.2.4. Porta P0

MICROCONTROLADORES (MCS-51)

NDICE 6.3. ESCRITA NAS PORTAS 6.4. EXERCCIOS 6-6 6-9

CAPTULO VII
7.1. INTRODUO

INTERRUPES

7-1
7-1 7-1 7-4 7-5 7-6 7-8

7.2. REGISTROS ENVOLVIDOS 7.3. MANEJO DE INTERRUPES 7.4. INTERRUPES EXTERNAS 7.5. PASSO A PASSO 7.6. EXERCCIOS

CAPTULO VIII TEMPORIZADORES / CONTADORES


8.1. INTRODUO 8.2. REGISTROS ENVOLVIDOS 8.3. MODOS DE OPERAO 8.3.1. Modo 0 8.3.2. Modo 1 8.3.3. Modo 2 8.3.4. Modo 3 8.4. EXERCCIOS

8-1
8-1 8-1 8-4 8-4 8-4 8-5 8-5 8-6

CAPTULO IX
9.1. INTRODUO

PORTA SERIAL

9-1
9-1 9-1 9-3 9-3 9-4 9-5 9-5 9-6 9-7 9-8 9-9

9.2. REGISTROS ENVOLVIDOS 9.3. MODOS DE OPERAO 9.3.1. Modo 0 9.3.2. Modo 1 9.3.3. Modo 2 9.3.4. Modo 3 9.4. CUIDADOS COM A PORTA SERIAL 9.5. Comunicao entre vrios 8051 9.6. Comunicao serial entre o 8051 e o PC 9.7. EXERCCIOS

CAPTULO X
10.1. INTRODUO 10.2. MODO IDLE

ECONOMIA DE ENERGIA E GRAVAO

10-1
10-1 10-2 10-3

10.3. MODO POWER DOWN

vi

MICROCONTROLADORES (MCS-51)

NDICE 10.4. PROGRAMAO DA EPROM (8751) 10.4.1. Programao 10.4.2. Verificao 10.4.3. Bit de Segurana 10.4.4. Apagamento (8751) 10-3 10-4 10-5 10-6 10-6

CAPTULO XI
11.1. INTRODUO

PLACA DE TESTES

11-1
11-1 11-7 11-11 11-13 11-17

11.2. ESQUEMA DA CPU (CPU.SHT) 11.3. ESQUEMA DA MEMRIA 11.4. ESQUEMA DA SERIAL 11.5. ESQUEMA DO GRAVADOR

ANEXO A
A.1. INTRODUO A.2. TAR_PRU.ASM A.3. TUDO.C

USO DOS PROGRAMAS

A-1
A-1 A-1 A-2 A-3 B-1

A.4. STEP.ASM / STEP.H BIBLIOGRAFIA

MICROCONTROLADORES (MCS-51)

vii

CAPTULO I

MICROCONTROLADORES

CAPTULO I MICROCONTROLADORES
1.1. REVISO HISTRICA
A rpida evoluo da eletrnica, particularmente na segunda metade do sculo XX, provocou uma mudana profunda no homem moderno. Os pases ficam cada vez mais prximos, graas inicialmente ao radio, depois televiso e hoje em dia, com os satlites, pode-se instantaneamente ver qualquer lugar do planeta. Pudemos ver o homem pisando pela primeira vez na Lua e tambm imagens recm enviadas de Marte, Jpiter, Saturno e Pluto. Alm dos meios de comunicao, recordemos os avanos da medicina, meteorologia, transportes, cincia pura e aplicada, prospeco de petrleo e tambm o controle e melhoria do meio ambiente. Pelo lado da eletrnica, afirma-se que um grande agente deste progresso foi o computador, que provocou uma realimentao positiva nas pesquisas. O computador permitiu pesquisas mais rpidas e precisas; com isto muitas cincias se beneficiaram, inclusive a tecnologia eletrnica, que passou a fabricar circuitos mais rpidos e eficientes. Com isso pode-se construir computadores mais eficientes, que por sua vez melhoraram ainda mais a eletrnica e assim sucessivamente. Desde as simples calculadoras de vlvulas, programadas por fios, da dcada do 40 at os supercomputadores dos dias de hoje, foi percorrido um caminho muito grande. No meio deste caminho, no incio da dcada do 70, com o avano dos LSI vimos surgir os microprocessadores e os computadores pessoais. oportuno recordar algumas datas importantes no desenvolvimento dos computadores: 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 chamarse 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). O desenvolvimento dos microprocessadores e dos microcontroladores, de acordo com os fabricantes, pode ser esquematizado da seguinte forma:

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

1.2. POR QU MICROCONTROLADORES ?


Com o barateamento dos CIs e o surgimento de microprocessadores (CPUs) mais poderosos, comeou-se a usar as CPUs mais simples para implementar tarefas dedicadas, tais como controle de impressora, plotter, reguladores de velocidade, acionadores de motores de passo, controladores de elevadores, etc. Contudo, qualquer controle implicar uma circuitaria muito grande, que muitas vezes encarece o custo do controlador. Tipicamente: CPU ROM RAM Porta Paralela Porta Serial A/D e D/A Timers controle programa de controle pilha e dados perifricos e I/O comunicao sinais analgicos temporizao

ROM

RAM

ENDEREOS E DADOS
CPU

PORTA PARALELA

PORTA SERIAL

CONVERSOR CONVERSORES A/D E D/A

TIMERS

Figura 1.1. Exemplo tpico de um microprocessador aplicado em controle. 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
Os microcontroladores apresentam uma srie de recursos incorporados dentro de um nico integrado. Estes recursos aumentam com a evoluo da eletrnica. Isto permite o desenvolvimento de projetos cada vez mais simples.

MICROCONTROLADOR TPICO
CPU D/A R OM RAM A/D TIMERS PORTA PARALELA PORTA SERIAL

Figura 1.2. Arquitetura bsica de um microcontrolador. Os microcontroladores so especficos para controle, no tem grande capacidade de processamento e por isso nunca haver um computador pessoal cuja CPU seja um microcontrolador. Eles podem estar presentes em um PC, mas apenas para controlar perifricos. Usa-se o nome de Microcontrolador para designar dispositivos de uso genrico, mas existem vrios microcontroladores que tm aplicaes especficas, como por exemplo o controlador de teclado 80C51SL-BG e o controlador de comunicaes universal 82C152. H diversos fabricantes de microcontroladores. Os mais conhecidos so: INTEL ZILOG MOTOROLA NATIONAL 8048, 8049, 8051, 8052, 8096. Z8. 6801, 6804, 6805, 68HC11. COP400, COP800, NS8050.

1 - 4

MICROCONTROLADORES (MCS-51)

CAPTULO I

MICROCONTROLADORES

1.4. FAMLIAS DA INTEL


A INTEL possui trs famlias de controladores: 8 bits: MCS-48 (obsoleta) e MCS-51 16 bits: MCS-96 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: MCS-48 MCS-51 MCS-96 8048, 8748, 8049, 8749, 8035,8039,8050,8040,etc. 8031, 8051, 8751, 8032, 8052, 8752, 8054, 8754, 8058, 8758, 8351FA, 8051FA, 8751FA, 8051GB, 8751GB, 8051SL-BG, 83152, etc. 8096, 8098, 80196, 83196, 87196, 80198, 83198, 87198, 80193, 83193, 87193, etc. So 3 os principais fabricantes do MCS-51: INTEL PHILIPS AMD

MICROCONTROLADORES (MCS-51)

1 - 5

CAPTULO X

ECONOMIA DE ENERGIA E GRAVAO

CAPTULO X ECONOMIA DE ENERGIA E GRAVAO


10.1. INTRODUO
Para aplicaes onde o consumo de potncia crtico, as verses CHMOS oferecem modos de reduo de potncia como recurso padro. H dois modos bsicos para economia de energia (reduo de consumo): Modo Idle Modo Power Down

A figura 10.1 apresenta um diagrama de blocos onde se pode ver o funcionamento e a distino entre os dois modos de economia de energia.

XTAL2

XTAL1 INTERRUPES TIMERS SERIAL DEMAIS FUNES *PD *IDL

OSC

GER. CLOCK

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: congelada. Esses dois modos so ativados pelo registrador PCON, que descrito na figura 10.2. interrupes timers porta serial

No MODO POWER DOWN (PD=1) o oscilador paralisado e com isto toda CPU fica

MICROCONTROLADORES (MCS-51)

10 - 1

CAPTULO X 1 7 6 habilita 5 4 0 3 GF1

ECONOMIA DE ENERGIA E GRAVAO desabilita 2 1 GF0 PD

0 IDL MODO IDLE MODO POWER DOWN BITS DE USO GERAL DOBRADOR DE BAUD RATE

PCON

SMOD

Figura 10.2. Descrio do registro PCON. Nas verses HMOS o registrador PCON s contm o bit SMOD; os demais no devem ser utilizados.

10.2. MODO IDLE


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. por uma interrupo que esteja habilitada, por reset.

H duas maneiras de terminar o modo Idle:

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.

MOV MOV

PCON,#1 A,#40H

MODO IDLE

INT

ROTINA INTERRUPO ... RETI

Figura 10.3. Retorno do modo Idle atravs de uma interrupo. 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.

10.3. MODO POWER DOWN


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. Em modo power down so mantidos: RAM interna e SFR Pinos das portas ALE = PSEN = LOW

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.

10.4. PROGRAMAO DA EPROM (8751)


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

CPU 8751 8751H 87C51 8752B

TAMANHO 4 KB 4 KB 4 KB 8 KB

TIPO HMOS HMOS CHMOS HMOS

VPP 21 V 21 V 12,75 V 12,75 V

TEMPO 4 min 4 min 13 s 26 s

Figura 10.4. Algumas verses do MCS-51 com EPROM interna. 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. Durante a programao existem 3 configuraes usadas: Programao Verificao Programao do bit de segurana

A figura 10.5 ilustra a habilitao desses modos.

MODO PROGRAMAO INIBIDO VERIFICAO SEGURANA

RST 1 1 1 1

*PSEN 0 0 0 0

ALE

*EA P2.7 P2.6 P2.5 P2.4 VPP 1 1 0 1 0 0 0 1 X X X X X X X X

1 1

X 1 VPP

Figura 10.5. Habilitao dos diversos modos de programao (X don't care).

10.4.1. Programao
Para a programao necessrio que o oscilador esteja funcionando com uma freqncia de 4 a 6 MHz. A figura 10.6 ilustra a operao em modo programao.

10 - 4

MICROCONTROLADORES (MCS-51)

CAPTULO X

ECONOMIA DE ENERGIA E GRAVAO

A0...A7 A8...A11 X X VIL VIH

8 8

P1 P2.4 P2.5 P2.6

8751

+5 V VCC P0 ALE *EA RST *PSEN VPP VIH


8

P2.0,1,2,3

D0...D7 50 mseg

P2.7 XTAL2 4-6 MHz XTAL1 VSS

X - Don't care
Figura 10.6. A CPU 8751 em modo programao. Normalmente EA mantido em nvel alto (VIH) at antes do pulso em ALE. Um pouco antes deste pulso, coloca-se EA = VPP e em seguida envia-se o pulso ALE; depois dos 50 ms faz-se EA = VIH.

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.

A0...A7 A8...A11 X X VIL *ENABLE

8 8

P1

8751

+5 V VCC P0 ALE *EA RST *PSEN D0...D7 usar pull up de 10K


8

P2.0,1,2,3 P2.4 P2.5 P2.6 P2.7 XTAL2 4-6 MHz XTAL1 VSS

VIH VIH VIH

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

10.4.3. Bit de Segurana


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.

X X

8 8

P1

8751

+5 V VCC P0 ALE
8

P2.0,...,5

X 50 mseg

VIH VIH

P2.6 P2.7 XTAL2 4-6 MHz XTAL1 VSS *EA RST *PSEN VPP VIH

X - Don't care
Figura 10.6. A CPU 8751 em modo programao do bit de segurana. Outros membros da famlia oferecem tcnicas mais sofisticadas de segurana. Por exemplo, o 8751BH oferece um array de 32 bytes onde se pode colocar chaves de criptografia. A cada endereo de EPROM que lido, os 5 bits de endereo so usados para acessar um dos 32 bytes e com ele feito um *XOR (NXOR). Se estes 32 bytes esto apagados (em 1), a operao NXOR no produz nenhuma alterao.

10.4.4. Apagamento (8751)


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
Neste captulo descreve-se o projeto e a operao da Placa de Testes. No captulo XII esto os detalhes do software que gerencia est placa. A finalidade da placa permitir flexibilidade no ensino de microcontroladores. O esquema possibilita a utilizao de um computador para assemblar e linkar os programas e depois envi-os por porta serial Placa de Testes para que sejam executados.

IBM PC CANAL SERIAL transmitir programas receber resultados

PLACA DE TESTES

Figura 11.1. Conexo da Placa de Testes com o IBM PC. O mais usual quando se trabalha em ensino de microcontroladores montar uma pequena placa onde so montados o microcontrolador, chaves para se interagir, leds para sinalizar alguns resultados e uma memria EPROM onde se gravam os programas. Isto tem uma sria desvantagem: apagar e gravar a EPROM cada vez que se muda o programa. Para cada correo que se faz, repete-se o processo de apagar e gravar. Alm de ser um processo lento, significa que se deve ter disponibilidade de um gravador de EPROM. Com a Placa de Testes no se pretende utilizar a EPROM pois os programas sero transmitidos atravs da porta serial do PC, escritos na memria de programa do 8031 e executados. A velocidade aumenta bastante pois os erros podem ser rapidamente corrigidos no PC e em seguida transmitidos para a placa. A placa tem dois modos de operao: modo Boot Serial modo Execuo 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) A seguir so apresentados os quatro esquemas:

11 - 2

MICROCONTROLADORES (MCS-51)

CAPTULO XI

PLACA DE TESTES

VCC GRAVADOR RST P1.7 P1.6 P1.6 AD0..AD7 AD0..AD7 *BOOT *BOOT BOOT BOOT *PSEN *PSEN *WR *WR P1.7 *WR *WR *RD *RD RST *RD *RD A0..A15 AO..A15 MEMORIAS

1N4148

D1

SW PUSHBUTTON

47K R2

74LS14

U5A

R1 82

SW1

C1

10u

VCC 3575611Hz X1 C2 31 EA/VP X1 X2 RESET ALE 1 11 19 18 BOOT 1 RAM X *INT0 *INT1 T0 T1 INT0 INT1 T0 T1 12 13 14 15 0 RAM ROM *PSEN *RD *WR RST 9 30p U1 U2 C3 30p

RST

R9 220 LED6

VCC

Q_AM

10 *RST

U5E

11

74LS14

RST

R4

LED2

220

R5

R_VM LED3

U5B

3 P1.0 74LS14

P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 D0 D1 D2 D3 D4 D5 D6 D7 OC G 74LS373 INTERF-SERIAL TXD RXD TXD RXD BOOT *BOOT TXD RXD VCC Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7

39 38 37 36 35 34 33 32 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 3 4 7 8 13 14 17 18

2 5 6 9 12 15 16 19

A0 A1 A2 A3 A4 A5 A6 A7

220

R6

R_AM LED4

5 P1.1 U5C 74LS14

220 *RD *WR PSEN

R_VD

U5D

9 P1.2 74LS14

P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7

21 22 23 24 25 26 27 28 A8 A9 A10 A11 A12 A13 A14 A15

VCC

SW2

P1.3

25V 25V

SW PUSHBUTTON VCC LED1 R9 2K2 Q_VD R3 220 C4 1u 4 2 RST VCC 1 3 D 6 74LS74 5 BOOT Title *BOOT Size A Date:

LED1 (Q_VD) ON --> BOOT SERIAL (BOOT=1) OFF --> PROG RAM (BOOT=0) RD WR PSEN ALE/P TXD RXD 17 16 29 30 11 10

SW3

SW PUSHBUTTON

*INT1 T1

P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 8031

1 2 3 4 5 6 7 8

VCC

LED5

SW4

R7 220

8K2 Q_VM R8 11 U5E

10

*INT0

SW SPST

MICROCONTROLADORES MCS-51 1 CPU.SHT (CIRCUITO DE LA CPU) Document Number 1 January 5, 1995 Sheet 1 of REV 1.0 4

74LS14

FECHADA

RUN

(Q_VM OFF)

P Q R CLK U8A C Q L

ABERTA

S STEP (Q_VM ON)

MICROCONTROLADORES (MCS-51)

11 - 3

CAPTULO XI

PLACA DE TESTES

A0..A15

U3 U14B 6 74LS02 4 5 *BOOT P1.6 3 74LS08 1 P1.7 9 10 11 13 14 15 16 17 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 D0 D1 D2 D3 D4 D5 D6 D7 U6A 3 74LS32 U6B U7A 3 74LS08 1 8 2 U6C 74LS32 6 74LS32 2 1 *BOOT *WR A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 CE OE WE 6116 18 20 21 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 9 10 11 13 14 15 16 17 8 7 6 5 4 3 2 1 23 22 19

U4

U?A 2

P1.7 P1.6

O0 O1 O2 O3 O4 O5 O6 O7

A0 8 A1 7 A2 6 A3 5 A4 4 A5 3 A6 2 A7 1 A8 23 A9 22 A10 19 A11 21

A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11

*BOOT *WR 5 4 PSEN BOOT

*BOOT 18 PSEN 20

CE OE/VPP 2732

*PSEN BOOT 10 9 *BOOT *RD *RD

AD0..AD7 *WR/*RD ACCIONAN 6116 (*PSEN) (*WR/*RD) (*WR/*RD) (*WR/*RD) 6116 8255 373 PROIBIDO

*BOOT

P1.7

P1.6

MICROCONTROLADORES MCS-51 1 Title MEMO.SHT (CIRCUITO DE LAS MEMORIAS) Document Number 1 January 4, 1995 Sheet 2 of Size A Date: REV 1.0 6

MODO BOOT ==> *BOOT=0

MODO RUN ==> *BOOT=1

11 - 4

MICROCONTROLADORES (MCS-51)

CAPTULO XI

PLACA DE TESTES

VCC

PC_TX (INTERFACE) RXD(8031) + 12 0 -12 +5 0 +12

TXD(8031) (INTERFACE) PC_RX +5 -12

R10 Q1 PN2907 PC_RX(3)

TXD

10K

R11 4K9 C10 100u R14 10K D11 1N4148 R13 10K R12 100K D12 1N4148 CONECTOR SERIAL PC Q2 PN2222 RXD VCC

D10 1N4148

PC_TX(2)

PC_GND(7)

PINO 2 TX --> PINO 3 RX <-PINO 7 GROUND PINOS 4,5 CURTO PINOS 6,8,20 CURTO

J1 VO VCC C18 47uF 12V

(ENTRADA 9V DC)

PHONEJACK

C17 470uF 12V

U16 LM7805 VI G N D

25V/IN MICROCONTROLADORES MCS-51 25V Title SERIAL.SHT (INTERFACE SERIAL) Size A Date: Document Number 1 January 4, 1995 Sheet 3 of REV 1 4

(ENTRADA 25V DC)

C19 47uF/30V

MICROCONTROLADORES (MCS-51)

11 - 5

CAPTULO XI

PLACA DE TESTES

ZERO FORCE (ZIF) PB0 PB1 PB2 PB3 VCC PB4 PB5 PB6 Z6(A5) Z7(A6) Z8(A7) Z9(RST) Z10 Z11 Z12 Z13 Z14 PD3 PD4 X2 C15 30p 4MHz C16 30p Z15 Z16(*WR) Z17(*RD) XTAL2 XTAL1 GND Z33(D6) Z32(D7) Z31(Vpp) Z30(*PRG) Z29 Z28 Z27 Z26 Z25(A12) Z24(A11) Z23(A10) Z22(A9) Z21(A8) Z34(D5) Z35(D4) Z5(A4) Z36(D3) PA4 PA5 PA6 PA7 Vpp PC7 PA3 Z4(A3) Z37(D2) Z3(A2) PA2 Z38(D1) Z2(A1) PA1 Z39(D0) Z1(A0) PA0 Vcc

Vcc

*WR 1 11 OC G 74LS373 8 X 10K U12 4 3 2 1 40 39 38 37 PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PB7

U14A

P1.6

74LS02

AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7

3 4 7 8 13 14 17 18 PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7

U13 D0 D1 D2 D3 D4 D5 D6 D7 2 5 6 9 12 15 16 19

AD0..AD7

AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 D0 D1 D2 D3 D4 D5 D6 D7 PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7

34 33 32 31 30 29 28 27

PC6 PC5

*RD *WR

A0..A15

*RD *WR A0 A1 RST P1.7 RD WR A0 A1 RESET CS PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7

5 36 9 8 35 6 18 19 20 21 22 23 24 25 PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7

PC4 PC3 PC2 PC1 PC0

RST PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 8255 POT3 25V 1K 3K9 R17 720 R16 2K7 POT2 220 POT1 1K R18 14 15 16 17 13 12 11 10 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7

P1.7

PD1(12)

U11A 2 7407 VO

U11B

PD0(5)

Vpp MICROCONTROLADORES MCS-51 R15 220 C19 10uF 30V Title Size A Date: GRAB.SHT (CIRCUITO GRABADOR) Document Number January 4, 1995 1 Sheet 4 of REV 1 4

7407

U15 LM317 VI G N D

11 - 6

MICROCONTROLADORES (MCS-51)

CAPTULO XI

PLACA DE TESTES

11.2. ESQUEMA DA CPU (CPU.SHT)


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
VCC VCC

PLACA DE TESTES

U5E D1 1N4148 R2 47K 74LS14 U5A 1 74LS14 2 11 10

R9 220 LED6 Q_AM (AMARELO QUADRADO)

RESET
SW1 SW PUSHBUTTON R1 82 C1 10uF

8031

8255
VCC R9 2K2 C4 1uF R3 220 4 2 3 U8A VCC D P R CLK C L 1 Q Q 5 VCC LED1 Q_VD (VERDE QUADRADO)

BOOT *BOOT

6 74LS74

Figura 11.2. Esquema do circuito de "power on" reset. 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
P1.0
3 U5B 74LS14 4 LED2 R4 220 R_VM (VERMELHO REDONDO) 6 LED3 R5

P1.1

U5C 74LS14

220 R_AM (AMARELO REDONDO) 8 LED4 R6

P1.2

U5D 74LS14

220 R_VD (VERDE REDONDO)

Figura 11.3. Conexo dos leds de sinalizao. Os DOIS PUSHBUTTONS (SW2 e SW3) permitem que os usurios interajam com a CPU. Pode-se escrever programas que respondam ao acionamento desses pushbuttons. Notar que os pushbuttons no possuem resistores de "pull up" porque aproveitam o pull up interno que h na porta P1. Para que se possa ler o estado do pushbutton SW2 necessrio programar 1 no bit P1.3, enquanto que para trabalhar com o pushbutton SW3 necessrio programar 1 em *INT1(P3.3) e em T1(P3.5). Quando a chave est aberta, l-se 1 e quando acionada, lido 0. Deve-se notar que no h nenhum recurso por hardware para reduzir o bouncing. O pushbutton SW3 pode provocar interrupes e tambm acionar a entrada do contador/temporizador 1. A figura 11.4 ilustra as conexes dos pushbuttons com a CPU.

8031
SW2

P1.3

SW PUSHBUTTON

SW3

*INT1 T1

SW PUSHBUTTON

Figura 11.4. Conexo dos pushbuttons com a CPU. A CHAVE PASSO A PASSO (SW4) est conectada atravs de um inversor entrada de interrupo 0. H um led quadrado de cor vermelha que se acende quando a chave est aberta. Quando a chave est fechada, na sada do inversor h um nvel alto e com isto no se ativa a interrupo, mas quando a chave est aberta (LED5 aceso) a sada do inversor vai para um nvel baixo, acionando a interrupo 0. Esta interrupo 0 (ou qualquer outra interrupo) pode ser

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 VCC

Q_VM (VERMELHO QUADRADO)

PASSO A PASSO
SW4 SW SPST

R8 8K2 11 U5E 74LS14 10

R7 220

8031
*INT0

Figura 11.5. Chave para o modo passo a passo. Como ltimo item do esquema da CPU est a demultiplexao do barramento de endereos. Esta tarefa realizada por um 74LS373, que congela em sua sada os endereos que estavam presentes na entrada quando ALE fez a transio de alto para baixo (). O barramento de endereos totalmente demultiplexado e entregue aos demais dispositivos, enquanto o barramento de dados multiplexado. Desde que os dispositivos leiam ou escrevam dados no momento correto, no h nenhum problema em usar o barramento de dados multiplexado (deve-se tomar cuidado com a carga que este barramento pode suportar).

BARRAMENTO DE DADOS
(MULTIPLEXADO) U1 31 19 18 9 12 13 14 15 1 2 3 4 5 6 7 8 EA/VP X1 X2 RESET INT0 INT1 T0 T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 8031 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 RD WR PSEN ALE/P TXD RXD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 17 16 29 30 11 10 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 A8 A9 A10 A11 A12 A13 A14 A15 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 ALE 3 4 7 8 13 14 17 18 1 11 U2 D0 D1 D2 D3 D4 D5 D6 D7 OC G 74LS373 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 2 5 6 9 12 15 16 19 A0 A1 A2 A3 A4 A5 A6 A7

BARRAMENTO DE ENDEREOS

Figura 11.6. Separao dos barramentos de endereos e de dados.

11 - 10

MICROCONTROLADORES (MCS-51)

CAPTULO XI

PLACA DE TESTES

11.3. ESQUEMA DA MEMRIA


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. A especificao do modo de operao controlada por um flip-flop (U8A) conectado em modo toggled. A cada acionamento do RESET este flip-flop muda de um modo para outro. A operao simples: 1. Coloca-se a placa em modo BOOT (aciona-se o RESET at que o led verde quadrado esteja aceso). Com isto a EPROM ser a memria de programa e a SRAM ser a memria de dados. 2. Transmite-se o programa a ser executado pela porta serial. O programa da EPROM responsvel por receber o que chega pela porta serial (o programa em formato INTEL.HEX) e escrever na SRAM. 3. Aciona-se o RESET e com isto o flip-flop U8A muda de estado, ou seja, a placa colocada em modo EXECUO. Neste modo a EPROM desabilitada e a SRAM tomada como memria de programa, executando o que a est escrito. 4. Se for necessrio enviar um novo programa, basta acionar o RESET e a placa vai novamente para o modo BOOT. A tabela da figura 11.7 ilustra o comportamento das memrias segundo o sinal de BOOT.

BOOT 0 1

EPROM *PSEN X

SRAM *RD e *WR *PSEN

Figura 11.7. O sinal BOOT controlando a EPROM e a SRAM. Na figura 11.9 esto as memrias, o circuito responsvel por torn-las memria de programa ou dados (U6A, U6B, U6C, U7A) e o flip-flop de BOOT acionado pelo sinal de RESET. A EPROM somente estar operante quando BOOT=1 (*BOOT=0) porque este sinal vai diretamente

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 BOOT 0 1 *CE *PSEN 1 *WE *WR 1

SRAM *OE *RD *PSEN

Figura 11.8. BOOT controlando os pinos de leitura e escrita da SRAM e da EPROM.

11 - 12

MICROCONTROLADORES (MCS-51)

CAPTULO XI
BARRAMENTO DE DADOS U3 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 9 10 11 13 14 15 16 17 O0 O1 O2 O3 O4 O5 O6 O7 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 CE OE/VPP 2732 8 7 6 5 4 3 2 1 23 22 19 21 18 20 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 *BOOT *PSEN BARRAMENTO DE ENDEREOS

PLACA DE TESTES

U4 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 9 10 11 13 14 15 16 17 D0 D1 D2 D3 D4 D5 D6 D7 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 8 7 6 5 4 3 2 1 23 22 19 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 2

74LS08 U?A 1 3 U6A 74LS32 3 2 1 *BOOT 3 U7A

2 1

P1.7 P1.6

P1.7 P1.6

74LS04

2 *BOOT U6A 74LS32 1 *WR 5 *PSEN U6B 74LS32 4 BOOT *WR

6 CE 18 WE 21 20 OE 6116 3 2 U7A 74LS08 1 8

*PSEN

10 U6C 74LS32 9

*BOOT *RD *RD

VCC VCC R9 2K2 C4 D1 1N4148 R2 47K 4 U5A 1 74LS14 VCC 2 2 3 U8A C1 10uF D P R CLK C L 1 Q Q 5 1uF

VCC LED1 Q_VD (VERDE QUADRADO) R3 220

RESET
SW1 SW PUSHBUTTON R1 82

BOOT *BOOT

74LS74

Figura 11.9. Circuito de memria controlado pelo sinal BOOT.

11.4. ESQUEMA DA SERIAL


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

R13

RXD (TTL)
Q2 D12 1N4148 2N2222

PC TX (RS 232)

10K

Figura 4.10. Conversor de RS 232 para TTL. 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 0 -3 V

"+12 V"
FAIXA NEGATIVA

-12 V

"-12 V"

Figura 11.10. Faixas de tenso toleradas pela porta serial do PC.

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

TXD (TTL)

Q1 PN2907

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
VCC

PLACA DE TESTES

R10

TXD (TTL)

Q1 PN2907

10K

PC_RX (RS 232)


R11

FONTE NEGATIVA PC_TX (RS 232)


D11 1N4148

4K9

D10 1N4148

C10 100uF

Figura 11.12. Conversor TTL/RS 232 com a fonte negativa. 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.

NOME TD RD DSR DTR RTS CTS DCD RI TERRA TERRA P.

DIR. 25 PINOS 2 3 6 20 4 5 8 22 7 1

9 PINOS 3 2 6 4 7 8 1 9 5

DESCRIO Transmitir dados Receber dados Conjunto de dados pronto Terminal de dados pronto Solicitao para enviar Livre para enviar Deteco de portadora Indicador de chamada Terra de sinal Terra de proteo

Figura 11.13. Descrio dos sinais dos conectores seriais.

11 - 16

MICROCONTROLADORES (MCS-51)

CAPTULO XI

PLACA DE TESTES

Para economizar espao na placa, usa-se um adaptador como fonte de alimentao. O adaptador responsvel por gerar uma tenso retificada, mas no regulada, na faixa de 7,5 a 10 V. O regulador da placa (LM7805) responsvel por gerar os 5 volts regulados. Normalmente os adaptadores so de m qualidade e geram uma tenso que depende da corrente; quanto mais corrente se necessita, menor a tenso. Para evitar uma dissipao de potncia muito grande sobre o regulador, recomenda-se testar com diversas tenses, iniciando por uma bem baixa como, por exemplo, 3V. Os capacitores C17 e C18 so usados para garantir a regulao. Para a fonte de alimentao de 25 V, que usada somente quando se grava a EPROM das CPUs, usa-se uma fonte externa que deve fornecer 25 V. O capacitor C19 usado, por segurana, para garantir a regulao. Se for usada uma fonte boa, esse capacitor no ser necessrio. A figura 11.14 ilustra as duas fontes de alimentao.
J1 (ENTRADA 9V DC) U16 LM7805 VI G N D C17 470uF 12V

VO C18 47uF 12V

VCC

PHONEJACK

25V/IN (ENTRADA 25V DC) 25V C19 47uF/30V

Figura 11.14. Fontes de alimentao de 5 V e 25 V.

11.5. ESQUEMA DO GRAVADOR


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

8752BH A0 A1 A2 A3 A4 A5 A6 A7 H X X X X X X L/H L/H 4-6 MHz 4-6 MHz

87C51 8751BH A0 A1 A2 A3 A4 A5 A6 A7 H X X X X X X L/H L/H 4-6 MHz 4-6 MHz

8751H A0 A1 A2 A3 A4 A5 A6 A7 H 1 2 0

SOCKET ZERO FORCE


VCC 40 39 7 38

8751H 5V D0 D1 D2 D3 D4 D5 D6 D7 5/21 V P1 L/H L/H X X A11 A10 A9 A8

87C51 8751BH 5V D0 D1 D2 D3 D4 D5 D6 D7 5/12,75 V P2 L/H L/H X X A11 A10 A9 A8

8752BH 5V D0 D1 D2 D3 D4 D5 D6 D7 5/12,75 V P2 L/H L/H X A12 A11 A10 A9 A8

3 37 4 P1 36 5 P0 35 6 34 7 7 33 8 0 32 9 RST 10 *EA/VPP 31 X 0 11 ALE/*PROG 30 X 12 *PSEN 29 X 28 13 P3 X 7 27 14 X 26 15 X 25 16 P2 X 7 24 17 X 23 4-6 MHz 18 XTAL2 22 4-6 MHz 19 XTAL1 0 21 20 GND

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 Vref
R1

I1

Vout Iadj V2 I2
R2

Figura 11.16. Uma sugesto de emprego do LM317.

11 - 18

MICROCONTROLADORES (MCS-51)

CAPTULO XI

PLACA DE TESTES

Quando em operao, o LM317 apresenta uma tenso nominal de referncia de 1,25 V entre a sada e o pino de ajuste. Essa tenso de referncia gerada atravs do resistor R1 e como a tenso constante, a corrente I2 flui pelo resistor R2 gerando a tenso de sada Vout. A corrente Iadj representa um erro e o dispositivo est preparado para minimiz-la; esta corrente tem um valor tpico de 100 A. O equacionamento muito simples e feito a seguir:

Vout = Vref + V2 Vref + Iadj R1

I2 = I1 + Iadj =

Vref V2 = R2 I2 = R2 + Iadj R1 Vref Vout = Vref + R2 + Iadj R2 R2 Vout = Vref 1 + + R2 Iadj R1


O que se pretende descobrir que valores de R2 se deve ter para as tenses de 5 V, 12,75 V e 21 V. O equacionamento a seguir apresenta uma expresso genrica para R2.

R2 =

Vout - Vref Vref + Iadj R1

Quando so usados os valores tpicos do fabricante (lista abaixo), tem-se: (Vref=1,25 V Iadj = 100 A R1 = 220 )

R2 =

Vout - 1, 25 K 5, 782

A tabela da figura 11.17 apresenta os valores de resistncia necessrios para gerar as tenses de interesse.

MICROCONTROLADORES (MCS-51)

11 - 19

CAPTULO XI TENSO 21 V 12,75 V 5V R2 3,416 k 1,989 K 649

PLACA DE TESTES

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 N D

VO R16 220

VOUT

V12

U11A 2 7407

R18 3K9 R17 720 POT2 220 POT1 1K POT3 1K

V5

4 U11B 7407

OS POTs SERO CALIBRADOS PARA: R16 + POT3 = 3416 R17 + POT2 = 4761 R18 + POT3 = 800 COLOCAM-SE RESISTORES EM PARALELO 1/3416 + 1/4761 = 1/1919 1/3416 + 1/800 = 1/649

R16 2K7

Figura 11.18. Gerao das tenses de 21 V; 12,75 V e 5V.

11 - 20

MICROCONTROLADORES (MCS-51)

CAPTULO XI

PLACA DE TESTES

No item 11.2 est o esquema completo do gravador de EPROM (GRAV.SHT). O 8255 responsvel pela conexo com os dados da EPROM, a gerao dos endereos e alguns sinais de controle; o 8255 (PC7) vai tambm gerar o pulso de programao. O 74LS373, alm de alguns sinais de controle, tambm controla o regulador LM317, gerando as diversas tenses. Como j foi estudado, a porta P0 no tem pull up interno e portanto tornam-se necessrios os resistores de 10 K para realizar o pull up externo. O bit P1.7, quando em zero, permite que se escreva no 8255 e o bit P1.6, quando em zero, permite que se escreva no 75LS373. Logo depois do RESET, P1.7 e P1.6 estaro em nvel 1, quer dizer, os dois CIs (8255 e 373) estaro desabilitados. Nunca se deve operar com os dois CIs habilitados ao mesmo tempo pois uma escrita vai escrever nos dois simultaneamente.

MICROCONTROLADORES (MCS-51)

11 - 21

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.

2.2. FAMLIA MCS-48


A famlia MCS-51 originou-se a partir da MCS-48, da o motivo de seu estudo neste curso. Esta foi a primeira famlia de controladores lanada no mercado pela INTEL. As limitaes tecnolgicas da poca (1976) impuseram uma srie de restries mas, para a poca, foi um grande produto. Uma de suas maiores aplicaes foram os teclados dos computadores de 16 bits, IBM PC (lanados em 1981).

MICROCONTROLADOR 8048
C P U
8 bits 12 bits

RAM 64 bytes
11 bits 8 bits END. IND. 32 bytes R0 ... R7 8 bytes BK1 PILHA (8 niveis) 16 bytes R0 ... R7 8 bytes BK0

portas paralelas
8 bits 8 bits 8 bits 3 bits

PC Acc

P1 P2 BUS TEST TIMER

PSW ROM
1 KB

8 bits

Figura 2.1. Diagrama em blocos do 8048.

MICROCONTROLADORES (MCS-51)

2 - 1

CAPTULO II O 8048 oferece os seguintes recursos: Interrupes (em 1 nvel somente), Single Step, 1K de ROM interna (8748 tinha uma EPROM de 1K),

FAMLIA MCS-51

Memria de Programa Externa de at 4 KB (PC=12 bits com o bit mais significativo, alterado pela instruo SEL, chaveando os 2 bancos de 2K), Aceita outros perifricos (8155,8255,8355,8243,8279), 96 instrues, 90% de 1 byte.

2.3. FAMLIA MCS-51


O xito da famlia MCS-48 e os avanos da tecnologia dos circuitos integrados levaram a INTEL a lanar no mercado a famlia MCS-51 em 1980. O microcontrolador 8051 o membro original da famlia e tambm o ncleo para toda a MCS-51.

8051
*INT0 *INT1 A0-A7 D0-D7 A8-A15 1 bit 1 bit 8 bits 8 bits 8 bits 8 bits 1 bit 1 bit 1 bit 1 bit INTERRUPES EXTERNAS

MCS-51 CORE
C P U
8 bits

P0 P2 P1 P3

PORTAS PARALELAS

PC

(16 bits)

R A M (128 bytes) ROM SFR


21 bytes

TXD RXD

PORTA SERIAL 4 KB

128 bytes ENTRADAS DOS CONTADORES

TIMER0 (16 bits) TIMER1 (16 bits)

Figura 2.2. Diagrama em blocos do 8051. O 8051 oferece os seguintes recursos: 5 Interrupes (2 externas, 2 dos timers/counters e 1 da porta serial), 64 KB de Memria de Programa (PC=16 bits), 64 KB de Memria de Dados,

2 - 2

MICROCONTROLADORES (MCS-51)

CAPTULO II 111 Instrues: 1 ciclo 64 45 2 49 46 16 58% 40% 2% 44% 41% 15% velocidade compacto 2 ciclos 4 ciclos 1 byte 2 bytes 3 bytes

FAMLIA MCS-51

98% de 1 ou 2 ciclos 85% de 1 ou 2 bytes

2.4. MEMRIA EXTERNA


O 8051 no segue a Arquitetura de Von Newman mas sim a chamada Arquitetura de Harward, portanto pode ter programas e dados em memrias distintas. So chamadas de Memrias Externas: 64 KB Memria de dados (*RD e *WR) 64 KB Memria de programa (*PSEN Program Store Enable)

MEMRIA DE PROGRAMA

MEMRIA DE DADOS

C P U
Figura 2.3. Memrias externas do 8051. 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 Pinos importantes para interface com Memrias externas: *RD *WR *PSEN leitura na memria de dados externa escrita na memria de dados externa leitura na memria de programa

MICROCONTROLADORES (MCS-51)

2 - 3

CAPTULO II multiplexado com endereos (A0-A7) e dados (D0-D7) endereos A8-A15 Address Latch Enable. Sinal para demultiplexar P0

FAMLIA MCS-51

P0 P2 ALE *EA

External Access Enable. Especifica o uso de memria de programa externa Para executar um programa a partir de uma memria externa bastam algumas conexes

simples:

8051
P0 (AD0-AD7) 8 bits ALE=1(A0-A7) ALE=0(D0-D7)

ROM
(D0-D7)

LATCH
D 373 ALE G 8 bits (A8-A15) Q 8 bits (A0-A7) (A0-A7)

P2 (A8-A15) *PSEN *EA

(A8-A15) *OE

Figura 2.4. Microcontrolador com Memria de Programa externa.

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. Um acesso memria de dados externa tem uma configurao muito semelhante:

2 - 4

MICROCONTROLADORES (MCS-51)

CAPTULO II

FAMLIA MCS-51

8051
P0 (AD0-AD7) 8 bits ALE=1(A0-A7) ALE=0(D0-D7)

SRAM
LATCH
D 373 Q 8 bits (A0-A7) (D0-D7)

(A0-A7)

ALE P2 (A8-A15) *RD *WR 8 bits

G n bits (8-n) bits P3.7 P3.6 I/O *OE *WE (A8-A15)

Figura 2.5. Microcontrolador com Memria de Dados externa. 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: MOV MOV MOVX P2,# ? ? ? ? ? A10 A9 A8 R0,# A7 A6 A5 A4 A3 A2 A1 A0 A,@R0 ;especificar MSB do endereo ;especificar LSB do endereo ;efetuar a leitura

MICROCONTROLADORES (MCS-51)

2 - 5

CAPTULO II

FAMLIA MCS-51

*PSEN P0(AD0-AD7)
AD0-AD7 A0-A7 DADOS (D0-D7) *OE

64K Programa Externo


*OE *OE *OE *OE *OE *OE *OE

ROM ROM ROM ROM ROM ROM ROM ROM ENDER. (A0-A12) *CS *CS *CS *CS *CS *CS *CS *CS

373 ALE P2(A8-A15)


A8-A15

A15 A14 A13

*Y0 *Y1

DECOD 138
*Y7

*EA

8051
(A0-A12)

*CS

*CS

*CS

*CS

*CS

*CS

*CS

*CS

RAM RAM RAM RAM RAM RAM RAM RAM

DADOS (D0-D7)

*RD *WR

P 3.7 P 3.6

64K Dados Externos

Figura 2.6. O 8051 com 64 KB de Programa e 64 KB de 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
P0 (AD0-AD7) 8 bits ALE=1(A0-A7) ALE=0(D0-D7)

SRAM
(D0-D7)

LATCH
D 373 ALE P2 (A8-A15) *PSEN *RD *WR ESCRITA *WE PROGRAMA E DADOS 8 bits G (A8-A15) (A8-A15) LEITURA Q 8 bits (A0-A7) (A0-A7)

*OE

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

2.5. MEMRIA INTERNA (RAM INTERNA)


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.
(128 bytes) FFH FFH

128 UPPER

(S para 8052)

S F R REGISTROS DE FUNES ESPECIAIS


(128 bytes) 80H

Endereveis indiretamente e podem ser usados como pilha

S F R

80H 7FH (80 bytes)

80H

30H

(128 LOWER + SFR + 128 UPPER) endereveis com modo direto ou indireto 128 bits endereos 0 ... 7FH

RAM INTERNA

128 LOWER

BIT A BIT BANCO 3 BANCO 2 BANCO 1


0

(16 bytes) 20H (8 bytes) (8 bytes) (8 bytes) (8 bytes) 18H 10H 8 0

128 LOWER
endereos 0 ... 7FH

BANCO 0

Figura 2.8. RAM interna do MCS-51. 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. Exemplo: seja o caso onde no h RAM externa e se queira utilizar os 4 bancos, os 16 bytes endereveis bit a bit e mais 10 variveis de 1 byte. Isso deixa 70 bytes para a pilha. Se forem usadas interrupes, para cada uma so guardados: PC (2 bytes), PSW, Acc e B ==> 5 bytes. Podem acontecer at 2 interrupes simultneas, o que consome at 10 bytes. Logo, h 60 bytes

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 BK2 BK1 BK0 interrupo porta serial interrupo INT1 interrupo INT0 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
1F R7 ... 19 17 R1 R0 R7 ... 11 F R1 R0 R7 ... 9 8 7 R1 R0 R7 ... 1 0 R1 R0 endereos Figura 2.9. Endereo dos registros. Assim, mesmo quando um banco no est selecionado, seus registros so acessveis pelo endereo de seu byte. Se o banco 1 est selecionado MOV MOV A,R3 A,0BH fazem o mesmo

BANCO 3

Se o banco 0 est selecionado MOV MOV A,R0 A,0 fazem o mesmo

18H 18

BANCO 2

10H 10

BANCO 1
8

BANCO 0
0

2 - 8

MICROCONTROLADORES (MCS-51)

CAPTULO II

FAMLIA MCS-51

2.6. SFR - SPECIAL FUNCTION REGISTERS


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. A seguir apresentada uma lista com os SFRs do 8051 e seus endereos.

BIT * * *

SMBOLO Acc B PSW SP DPH Acumulador Registro B

NOME

ENDEREO E0 F0 D0 81 83

Palavra de Status (Program Status Word) Ponteiro da Pilha (Stack Pointer) Ponteiro de Dados (high) (Data Pointer High) Ponteiro de Dados (low) (Data Pointer Low) Porta 3 Porta 2 Porta 1 Porta 0 Prioridade de Interrupo (Interrupt Priority) Habilitao de Interrupo (Interrupt Enable) Timer/Counter Mode Timer/Counter Control Timer/Counter 1 (MSB) Timer/Counter 1 (LSB) Timer/Counter 0 (MSB) Timer/Counter 0 (LSB) Controle da Porta Serial (Serial Control) Buffer da Porta Serial (Serial Buffer) Controle de Energia (Power Control) Figura 2.10. Lista dos registros SFR.

DPL * * * * * P3 P2 P1 P0 IP

82 B0 A0 90 80 B8

IE TMOD

A8 89 88 8D 8B 8C 8A 98 99 87

TCON TH1 TL1 TH0 TL0

SCON SBUF

PCON

MICROCONTROLADORES (MCS-51)

2 - 9

CAPTULO II A seguir apresentada uma breve descrio de cada registro: Acc B Acumulador

FAMLIA MCS-51

Usado durante as operaes de multiplicao e diviso; nos demais casos pode ser usado

como auxiliar. PSW Program Status Word ou Registro de Flags de Estado 7 CY PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 6 Ac 5 F0 4 3 2 0V 1 0 P

RS1 RS0 Carry Flag

CY Ac F0

Carry auxiliar (operao com BCD Binary Coded Decimal) Flag 0, uso geral Selecionador de Banco (Range Selector), bit 1 Selecionador de Banco (Range Selector), bit 0

RS1 RS0

RS1 RS0 0 0 1 1 PSW.2 PSW.1 PSW.0 OV P 0 1 0 1

BANCO SELEC. Banco 0 Banco 1 Banco 2 Banco 3 Overflow Flag definvel pelo usurio Paridade (mpar) P=1 quantidade mpar de 1s P=0 quantidade par de 1s

SP

Ponteiro da Pilha (Stack Pointer), incrementado antes de PUSH e CALL

DPTR Ponteiro para memria de dados externa (Data Pointer). um registro de 16 bits formado por DPH e DPL P0, P1, P2, P3 Latchs das portas paralelas IP IE Prioridade das interrupes (Interrupt Priority) Habilitao das interrupes (Interrupt Enable) MICROCONTROLADORES (MCS-51)

2 - 10

CAPTULO II TMOD TCON SCON SBUF Modo de operao dos Timers/Counters (Timer/Counter Mode) Controle dos Timers/Counters (Timer/Counter Control) Controle da porta serial (Serial Control) 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

FAMLIA MCS-51

Controle de energia (Power Control); coloca no modo "Power Down" ou "Idle"

2.7. MAPA DA RAM INTERNA


Aqui apresentado um mapa completo da RAM Interna da MCS-51. Os endereos dos bytes vo de 0H at FFH. Existem dois grupos de bytes: 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. 128 LOWER de 00H at 7FH. SFR de 80H at FFH.

MICROCONTROLADORES (MCS-51)

2 - 11

CAPTULO II

FAMLIA MCS-51

S F R
FFH F7H EFH E7H DFH D7H CFH C7H BFH B7H AFH A7H 9FH 97H 8FH 87H 7FH 77H 6FH 67H 5FH 57H 4FH 47H 3FH 37H 2FH 27H BK3 BK2 BK1 BK0 1FH 17H 0FH 07H 2FH 27H R7 R7 R7 R7 2EH 26H R6 R6 R6 R6 2DH 25H R5 R5 R5 R5 2CH 24H R4 R4 R4 R4 2BH 23H R3 R3 R3 R3 ... 2AH 22H R2 R2 R2 R2 31H 29H 21H R1 R1 R1 R1 30H 28H 20H R0 R0 R0 R0 PCON 7FH 7EH TH1 ... TH0 TL1 DPH TL0 DPL SBUF TMOD SP B Acc PSW IP P3 IE P2 SCON P1 TCON P0 F8H F0H E8H E0H D8H D0H C8H C0H B8H B0H A8H A0H 98H 90H 88H 80H 78H 70H 68H 60H 58H 50H 48H 40H 38H 30H 28H 20H 18H 10H 08H 00H

128 LOWER

Figura 2.11. Mapa completo da RAM Interna.

2 - 12

MICROCONTROLADORES (MCS-51)

CAPTULO II

FAMLIA MCS-51

2.8. MAPA DOS BITS


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

MAPA DOS 256 BITS


END BIT FFH F7H EFH E7H DFH D7H CFH C7H BFH B7H AFH A7H 9FH 97H 8FH 87H 7FH 77H 6FH 67H 5FH 57H 4FH 47H 3FH 37H 2FH 27H 1FH 17H 0FH 07H 07H 06H 05H ... 04H 0BH 03H 0AH 02H 09H 01H 08H 00H BIT 7 B.7 Acc.7 CY P3.7 EA P2.7 SM0 P1.7 TF1 P0.7 7FH BIT 6 B.6 Acc.6 AC P3.6 P2.6 SM1 P1.6 TR1 P0.6 7EH BIT 5 B.5 Acc.5 F0 P3.5 P2.5 SM2 P1.5 TF0 P0.5 7DH BIT 4 B.4 Acc.4 RS1 PS P3.4 ES P2.4 REN P1.4 TR0 P0.4 7CH BIT 3 B.3 Acc.3 RS0 PT1 P3.3 ET1 P2.3 TB8 P1.3 IE1 P0.3 ... BIT 2 B.2 Acc.2 OV PX1 P3.2 EX1 P2.2 RB8 P1.2 IT1 P0.2 PT0 P3.1 ET0 P2.1 TI P1.1 IE0 P0.1 BIT 1 B.1 Acc.1 BIT 0 B.0 Acc.0 P PX0 P3.0 EX0 P2.0 RI P1.0 IT0 P0.0 END BIT F8H F0H E8H E0H D8H D0H C8H C0H B8H B0H A8H A0H 98H 90H 88H 80H 78H 70H 68H 60H 58H 50H 48H 40H 38H 30H 28H 20H 18H 10H 08H 00H END BYTE F8H F0H E8H E0H D8H D0H C8H C0H B8H B0H A8H A0H 98H 90H 88H 80H 2FH 2EH 2DH 2CH 2BH 2AH 29H 28H 27H 26H 25H 24H 23H 22H 21H 20H Acc PSW IP P3 IE P2 SCON P1 TCON P0 B NOM BYTE

Figura 2.12. Mapa completo dos bits do 8051.

2 - 14

MICROCONTROLADORES (MCS-51)

CAPTULO III

PINAGEM E TEMPORIZAO

CAPTULO III PINAGEM E TEMPORIZAO


3.1. INTRODUO
O encapsulamento dos microcontroladores varia muito, de acordo com as funes desempenhadas. Basicamente so usados 3 tipos de encapsulamento : DIP QFP PLCC Dual in Pack, Quad Flat Pack, Leadless Chip Carrier.

Os 8051 e 8052 esto disponveis em 40 DIP, 44 PLCC e 44 QFP. Alguns exemplos: 8031 (mais simples) 8051GB (AD + timer, etc) 8051SL (Keyboard Controller) 83152 (Universal Com. Contr.) DIP40 100 QFP 100 QFP DIP48 E PLCC68

3.2. DESCRIO DA PINAGEM


Estudar-se- a pinagem do 8051 no encapsulamento DIP40 (HMOS) 8051 AH (40) Vcc Alimentao de +5V. Consumo: Icc = 125 mA, com todas as sadas desconectadas. (20) Vss Terra. (32-39) P0 Porta 0 (AD0...AD7). Alm de porta paralela, est multiplexada com o byte menos significativo (LSB) dos endereos e dos dados. Admite 8 cargas LS TTL. (21-28) P2 Porta 2 (A8...A15). Alm de porta paralela, est multiplexada com o byte mais significativo (MSB) dos endereos. Admite 4 cargas LS TTL. (1-8) P1 Porta 1. Admite 4 cargas LS TTL. (10-17) P3 Porta 3. Compartilhada com uma srie de recursos Admite 4 cargas LS TTL. P3.0 RXD, entrada serial P3.1 TXD, sada serial P3.2 *INT0, interrupo externa 0 P3.3 *INT1, interrupo externa 1 P3.4 T0, entrada para o timer 0 (contador neste caso) P3.5 T1, entrada para o timer 1 (contador neste caso) P3.6 *WR, escrita na memria de dados externa MICROCONTROLADORES (MCS-51) 3 - 1

CAPTULO III

PINAGEM E TEMPORIZAO P3.7 *RD, leitura na memria de dados externa

(9) RST Reset. Com o oscilador funcionando, deve ser mantido um nvel alto durante 24 perodos. (30) ALE/PROG Address Latch Enable. Pulso para acionar o latch que captura o LSB do endereo (com sua borda ascendente). Ele emitido razo de 1/6 da freqncia do oscilador e pode ser usado para acionar entradas externas. Um ALE omitido durante o acesso Memria de Dados Externa. Tambm usada na gravao da ROM interna. (29) *PSEN Program Store Enable. Pulso de leitura para a Memria de Programa Externa. Quando o programa est sendo executado na memria de programa externa ele aparece como 1/6 da freqncia de clock. Quando h acesso memria de dados externa, 2 PSEN so perdidos. (31) *EA/VPP External Access Enable. Informa CPU se o programa est na Memria de Programa Externa ou na ROM Interna. Tambm usado para gravao da ROM Interna. *EA = 1 (Vcc) (0000H - 0FFFH) ROM Interna (1000H - FFFFH) Memria de Programa Externa *EA = 0 (Vss) (0000H - FFFFH) Memria de Programa Externa (19) XTAL1 Entrada do amplificador inversor do oscilador interno. Deve ser conectado terra se for usado um clock externo (HMOS) ou ao clock externo (CHMOS). (20) XTAL2 Sada do amplificador inversor do oscilador interno. Se for usado clock externo, serve como entrada para o mesmo (HMOS) ou no conectado (CHMOS).

RXD TXD *INT0 *INT1 T0 T1 *WR *RD

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 XTAL2 XTAL1 Vss

8051

Vcc P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 *EA / VPP ALE / PROG *PSEN P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0

40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21

AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7

A15 A14 A13 A12 A11 A10 A9 A8

Figura 3.1. Pinagem do 8051.

3 - 2

MICROCONTROLADORES (MCS-51)

CAPTULO III

PINAGEM E TEMPORIZAO

OBS: A figura a seguir ilustra as possveis ligaes dos pinos XTAL1 e XTAL2:

3.3. DIAGRAMAS DE TEMPO


Aqui sero abordados alguns diagramas de tempo, os quais foram simplificados em beneficio da compreenso. Eles no mostraro os tempos de subida e descida dos pulsos. Os retardos de propagao entre o CLK e os demais sinais foram omitidos. Esses detalhes devem ser consultados no "datasheet" da CPU a ser usada.

MICROCONTROLADORES (MCS-51)

3 - 3

CAPTULO III
EST 1 P1 P2 EST 2 P1 P2 EST 3 P1 P2 EST 4 P1 P2

PINAGEM E TEMPORIZAO
EST 5 P1 P2 EST 6 P1 P2 EST 1 P1 P2 EST 2 P1 P2

XTAL ALE *PSEN Porta P0


(AD0-7) (A8-15)
DATA IN

PCL OUT PCH OUT

DATA IN

PCL OUT PCH OUT

DATA IN

PCL OUT PCH OUT

Porta P2

PC -- Program Counter PCL -- LSB do Program Counter PCH -- MSB do Program Counter

Figura 3.2. Fetch de programa, Memria Externa. 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

EST 4 P1 P2

EST 5 P1 P2

EST 6 P1 P2

EST 1 P1 P2

EST 2 P1 P2

EST 3 P1 P2

EST 4 P1 P2

EST 5 P1 P2

XTAL ALE *RD Porta P0


(AD0-7) DPL ou Ri DPH ou P2
DATA IN

FLOAT

PCL se Prog Ext PCH ou P2 SFR

Porta P2 PCH ou P2 SFR


(A8-15)

Figura 3.3. Leitura na Memria de Dados Externa.

3 - 4

MICROCONTROLADORES (MCS-51)

CAPTULO III

PINAGEM E TEMPORIZAO

EST 4 P1 P2

EST 5 P1 P2

EST 6 P1 P2

EST 1 P1 P2

EST 2 P1 P2

EST 3 P1 P2

EST 4 P1 P2

EST 5 P1 P2

XTAL ALE *WR Porta P0


(AD0-7) (A8-15) DPL ou Ri PCH ou P2 SFR DATA OUT DPH ou P2 PCL se Prog Ext PCH ou P2 SFR

Porta P2

Figura 3.4. Escrita na Memria de Dados Externa. A leitura e a escrita na Memria de Dados Externa usam o dobro de tempo quando so comparadas com um acesso memria de programa. Notar que f(ALE) no tem f(XTAL)/6 pela ausncia de um pulso de ALE e que no existe *PSEN. Perde-se um pulso de ALE e dois pulsos de *PSEN. Ento, f(ALE) = f(*PSEN) = f(XTAL)/6 mas, quando h acessos Memria de Dados Externa, se perdem 1 pulso de ALE e 2 pulsos de *PSEN. Nos acessos Memria de Dados Externa usado um endereo de 16 bits. Esse endereo pode ser formado por um registro ponteiro de dados de 16 bits, DPTR (DPTR = DPH + DPL) ou por R0 ou R1 e o contedo do SFR P2. MSB DPTR P2 e Ri Exemplos: leitura Com DPTR Com P2 e Ri MOVX A,@DPTR ou MOVX A,@Ri ou escrita MOVX @DPTR,A MOVX @Ri,A (onde i=0 ou i=1) DPH SFR P2 e e LSB DPL R0 ou R1

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
EST 4 P1 P2 EST 5 P1 P2 EST 6 P1 P2 EST 1 P1 P2 EST 2 P1

PINAGEM E TEMPORIZAO
EST 3 P1 P2 EST 4 P1 P2 EST 5 P1 P2

P2

XTAL
P0 RST P1 P2,P3 MOV PORTA,DADO DADO ANTIGO SHIFT CLOCK PORTA SERIAL MODO 0 amostragem da entrada RXD amostragem da entrada RXD DADO NOVO amostragem das entradas P0 RST P1 P2,P3

Figura 3.5. Operao das portas.

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 E5, P2 12 PERODOS DE CLOCK

E5

E6

E1

E2

E3

E4

E5

E6

E1

E2

E3

E4

E5

E6

E1

E2

E3

E4

RST

RESET INTERNO

19 PERODOS DE CLOCK

ALE

*PSEN

Porta P0

INSTRUC.

EN EN EN EN INSTRUC. INSTRUC. INSTRUC. INSTRUC. EN D. D. D. D. D.

11 PERODOS DE CLOCK

19 PERODOS DE CLOCK

Figura 3.6. Temporizao do RESET. 3 - 6 MICROCONTROLADORES (MCS-51)

CAPTULO III

PINAGEM E TEMPORIZAO

A entrada RST assncrona e amostrada durante a fase 2 (P2) do estado 5 (E5). Depois do RST ser amostrado como alto, ainda se mantm atividade nos pinos durante 19 perodos de clock. Os pinos s cessaro a atividade 19 a 31 perodos de clock depois de RST ser ativada. Aps o RST, os pinos ALE e PSEN vo para 1. Depois de RST=0 (desativada), so necessrios 1 a 2 perodos de clock para que ALE e PSEN comecem. Por isso, outros dispositivos externos no podem ser sincronizados com o tempo interno do Reset do 8051. A RAM Interna no afetada pelo reset. Depois do RESET, a CPU inicializada com os seguintes dados: SP SBUF P0,P1,P2,P3 =7 =? = FFH ESTADO DOS REGISTROS APS O RESET

OUTROS SFR = 0 Uma maneira fcil de realizar o "Power on Reset" e o "Reset Manual" mostrada na figura 3.7.
VCC

8051
C 10 uF RESET

8,2 K

Figura 3.7. Circuito para RESET do 8051 (HMOS). 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. Tempos que sero computados no power up: Vcc se estabiliza Partida do oscilador 10ms 1ms (10MHz) 10ms (1MHz)

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

C 10 uF

R 8,2 K

t
TR

Figura 3.8. Anlise do circuito para RESET do 8051. Da anlise do circuito se pode escrever a equao:

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. Exemplo: com o 8051 usando cristal de 1 MHz: 10 ms estabilizar Vcc 10 ms partida do oscilador 24 s necessrios para o Reset (24 perodos de clock) 20024 s Tempo do Reset = 20,024 ms =(aprox.) 20 ms Supondo que o Schmitt Trigger comute a 3,5 V (na transio de alto para baixo; valores abaixo de 3,5 V na entrada geram 0 na sada) e usando os valores de R e C da figura 3.7, calcula-se. ln(3,5) - ln(5) = -(t/RC) t = RC ( ln(3,5) - ln(5) ) = 29 ms > 20 ms OK ! Pelo que parece, o circuito de RESET sugerido deve funcionar.

3 - 8

MICROCONTROLADORES (MCS-51)

CAPTULO III

PINAGEM E TEMPORIZAO

Apresenta-se um circuito alternativo que, apesar do maior gasto de componentes, permite o conhecimento da tenso do Schmitt Trigger, saber seu consumo e calcular precisamente o circuito de RESET. Neste circuito o diodo usado para garantir uma rpida descarga do capacitor quando se desliga a fonte de alimentao.

VCC

R 8,2K RESET MANUAL

8051
DIODO

2 74LS14

RESET

Evita a descarga brusca do capacitor

R 10

C 10 uF

SCHMITT TRIGGER

Figura 3.9. Circuito de RESET com Schmitt-Trigger TTL.

MICROCONTROLADORES (MCS-51)

3 - 9

CAPTULO IV

CONJUNTO DE INSTRUES

CAPTULO 4 CONJUNTO DE INSTRUES


4.1. INTRODUO
Todos os membros da famlia MCS-51 executam o mesmo conjunto de instrues. As instrues so otimizadas para aplicaes de controle de 8 bits. Elas permitem um rpido endereamento da RAM interna, facilitando operaes byte a byte em estruturas de dados pequenas. O conjunto de instrues tambm oferece um grande suporte para manipulaes e operaes de variveis de um bit, facilitando os sistemas lgicos que necessitam de operaes booleanas. A seguir sero mostradas todas as instrues da famlia MCS-51. Para uma descrio mais detalhada dessas instrues deve-se consultar o manual do MCS-51. (Aqui se supe que o leitor tenha uma pequena experincia em programao assembly). Para ajudar os programadores, os programas montadores para o MCS-51 tm os endereos dos SFR e dos bits previamente declarados. como se em todo programa j existisse as pseudo-instrues: Acc B PSW etc. Para a exposio das instrues, utilizar-se-o as seguintes abreviaturas: Rn direto, dir @Ri #data, #dt #data16, #dt16 adr16 adr11 rel bit A Acc qualquer registro R0, R1, ...,R7 endereo da RAM interna (8 bits) @R0 ou @R1, usado para endereamento indireto constante de 8 bits (byte) constante de 16 bits endereo de 16 bits (enderea 64 KB) endereo de 11 bits (enderea 2 KB) deslocamento relativo (complemento a 2: -128 a +127) endereo de um bit da RAM interna acumulador (registro) endereo do acumulador. EQU EQU EQU 0E0H 0F0H 0D0H

MICROCONTROLADORES (MCS-51)

4 - 1

CAPTULO IV

CONJUNTO DE INSTRUES

4.2. MODOS DE ENDEREAMENTO


De acordo com o "Data Sheet" do MCS-51, existem 6 modos de endereamento com a seguinte nomenclatura : Imediato Direto Indireto Registrador Registrador Especfico Indexado

Imediato O valor da constante colocado no opcode. MOV A, #100 Carrega 100 no acumulador (Acc=100). O byte 100 um dado imediato. Deve-se notar a presena do sinal # que indica operao imediata. Direto O operando especifica um endereo de 8 bits da RAM interna. MOV A, 20 Transfere para o acumulador o contedo do endereo 20 da RAM Interna. Todo endereamento direto usa a RAM Interna. 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 No cdigo de operao da instruo existe um campo de 3 bits (pois so 8 registradores, de R0 a R7) onde especificado o registro a ser utilizado. Essa forma eficiente e evita utilizar um byte adicional para indicar o registro. MOV A,R0 Coloca no acumulador o contedo de R0. uma instruo de um s byte. 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 DPTR A,@A+DPTR ndice, 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". Observao: tambm existe um desvio indexado

4.3. SOBRE AS INSTRUES


Agora sero mostradas as instrues do MCS-51. Estas no sero muito detalhadas. Em cada instruo so apresentados o nmero de bytes do opcode e o nmero de ciclos de mquina (MC=12 clocks) necessrios para sua execuo. Existem 111 instrues na famlia MCS-51. Elas esto distribudas da seguinte forma: Aritmticas Lgicas Transferncia de dados Booleanas Desvios 24 25 28 17 17 22% 23% 25% 15% 15%

4.4. INSTRUES ARITMTICAS


4.4.1. Soma de 8 Bits: O acumulador um dos operandos e tambm armazena o resultado. Existem 4 instrues de soma: bytes Rn ADD A, direto @Ri #data 1 2 1 2 MC 1 1 1 1 X X X CY AC OV

MICROCONTROLADORES (MCS-51)

4 - 3

CAPTULO IV 4.4.1. Soma de 8 Bits com Carry:

CONJUNTO DE INSTRUES

O acumulador um dos operandos e tambm armazena o resultado. So 4 instrues de soma com carry:

bytes Rn ADDC A, direto @Ri #data 1 2 1 2

MC 1 1 1 1

CY

AC

OV

4.4.3. Subtrao de 8 Bits com Borrow: O acumulador um dos operandos e tambm recebe o resultado. Deve-se lembrar que a subtrao sempre usa o borrow. So 4 instrues de subtrao com borrow:

bytes Rn SUBB A, direto @Ri #data 1 2 1 2

MC 1 1 1 1

CY

AC

OV

4.4.4. Incremento de 8 Bits: Existem 4 instrues para incremento de 8 bits :

bytes A INC Rn direto @Ri 1 1 2 1

MC 1 1 1 1

CY

AC

OV

4.4.5. Decremento de 8 Bits: H 4 instrues de decremento de 8 bits e muito se assemelham s instrues de incremento:

4 - 4

MICROCONTROLADORES (MCS-51)

CAPTULO IV bytes A DEC Rn direto @Ri 1 1 2 1 MC 1 1 1 1

CONJUNTO DE INSTRUES CY AC OV

4.4.6. Incremento de 16 Bits: Existe apenas um incremento de 16 bits (no h decrementos de 16 bits) :

bytes INC DPTR 1

MC 2

CY -

AC -

OV -

4.4.7. Multiplicao e Diviso de 8 Bits: Na multiplicao e na diviso sempre so usados os registros A e B. Estas so as instrues que necessitam mais tempo de execuo. Multiplicao: Diviso: A*B A/B Resultado: Resultado: A=LSB B=MSB A=quociente B=resto

bytes MUL DIV AB AB 1

MC 4

CY 0

AC -

OV X

4.4.8. Ajuste Decimal: Esta instruo existe para permitir operaes com representao BCD. O ajuste valido apenas para as somas (ADD e ADDC). Existe uma nica instruo:

bytes DA A 1

MC 1

CY X

AC X

OV -

OBS 1: DA A no pode simplesmente converter um nmero hexadecimal no Acumulador para BCD nem se aplica subtrao. Exemplo: A = 56H (0101 0110B) representando 56 decimal R3 = 67H (0110 0111B) representando 67 decimal Carry = 1

MICROCONTROLADORES (MCS-51)

4 - 5

CAPTULO IV ADDC A, R3 DA A

CONJUNTO DE INSTRUES A = 0BEH e C (carry) e AC (auxiliar carry) iguais a 0 A = 24H (= 0010 0100B) e Carry=1 Algoritmo de ajuste da soma pela instruo DAA:

1- Se os bits 3-0 de A forem maiores que 9 ou se AC=1 6 somado a A para gerar o dgito BCD menos significativo. Esta soma interna pode ligar o carry se o carry da nibble menos significativa propagar por toda a nibble mais significativa mas no apagar o carry. 2- Se o carry est agora em 1 ou se os bits 7-4 excederem 9, esta nibble incrementada de 6 para produzir o dgito BCD mais significativo. O carry indicar se a soma maior do que 99. O OV (overflow) no afetado. 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. Exemplo: Se A = 30H (representando 30 decimal), as instrues ADD A,#99H DA A resultaro em A = 29H (representando 29 decimal) e C (Carry) = 1 pois 30 + 29 = 129

4.5 INSTRUES LGICAS


As instrues lgicas so as que realizam as operaes de AND, OR e XOR. Deve-se notar que essas instrues so muito semelhantes. O resultado da operao no obrigatoriamente deve ser colocado no acumulador; tambm se pode indicar um endereo para receber o resultado. 4.5.1. AND de 8 Bits: Usa-se o smbolo ANL (Logical AND) para representar esta instruo. Existem 6 instrues reunidas em dois grupos de acordo com o destino do resultado:

bytes Rn ANL A, direto @Ri #data ANL direto A #data 4 - 6 1 2 1 2 2 3

MC 1 1 1 1 1 2

CY

AC

OV

MICROCONTROLADORES (MCS-51)

CAPTULO IV 4.5.2. OR de 8 Bits:

CONJUNTO DE INSTRUES

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 Rn ORL A, direto @Ri #data ORL direto A #data 1 2 1 2 2 3

MC 1 1 1 1 1 2

CY

AC

OV

4.5.3. XOR de 8 Bits: Emprega-se o smbolo XRL (Logical Exclusive OR) para representar esta instruo. Existem 6 instrues, reunidas em dois grupos de acordo com o destino do resultado:

bytes Rn XRL A, direto @Ri #data XRL direto A #data 1 2 1 2 2 3

MC 1 1 1 1 1 2

CY

AC

OV

4.5.4. Operaes Lgicas com o Acumulador: Pode-se inicializar, complementar ou rodar o acumulador. As rotaes podem se realizar para a direita ou para a esquerda utilizando ou no o bit de carry. Tambm se pode trocar de posio as nibbles do acumulador (uma nibble formada por 4 bits, ou seja, um byte possui 2 nibbles). Todas estas instrues so classificadas como de registro especfico pois sempre operam com o acumulador (no utilizam bytes de opcode para especificar isto). As instrues so: CLR CPL RL RLC RR RRC A A A A A A inicializa com zero o acumulador complementa de 1 o acumulador (inverte os bits) roda o acumulador esquerda roda o acumulador esquerda com carry roda o acumulador direita roda o acumulador direita com carry intercambiar as nibbles do acumulador

SWAP A

MICROCONTROLADORES (MCS-51)

4 - 7

CAPTULO IV

CONJUNTO DE INSTRUES

bytes CLR CPL RL RLC RR RRC SWAP A 1

MC

CY -

AC -

OV -

X X

RL
Acc

RR
Acc

RLC
C Acc

A
C

RRC
Acc

SWAP
Acc xxxx

A
zzzz

Figura 4.1. Grfico das rotaes e do swap.

4.6. INSTRUES DE TRANSFERNCIA DE DADOS


Existem 3 tipos de instrues de transferncia de dados: contrrio. 4.6.1. Transferncia de Dados: Todas as operaes se realizam na RAM Interna. Existem quase todas as transferncias que se possa imaginar. 4 - 8 MICROCONTROLADORES (MCS-51) as que trabalham com a RAM Interna (22), as que trabalham com a Memria de Dados Externa (4) e as que trabalham com a Memria de Programa (2).

Em geral, as transferncias de dados operam na RAM Interna, a menos que se indique o

CAPTULO IV

CONJUNTO DE INSTRUES

bytes Rn MOV A, direto @Ri #data A MOV Rn, direto #data A Rn MOV direto, direto @Ri #data A MOV @Ri direto #data 1 2 1 2 1 2 2 2 2 3 2 3 1 2 2

MC 1 1 1 1 1 2 1 1 2 2 2 2 1 2 1

CY

AC

OV

Pode-se pensar que existem todas as combinaes possveis entre A, Rn, direto, @Ri e #data, mas existem algumas excees: Todas as combinaes possveis: A A Rn Rn Direto MOV direto , @Ri @Ri #data

Instrues que no existem: A A , Rn Rn , @Ri MOV Rn , @Ri @Ri , Rn @Ri ,

MICROCONTROLADORES (MCS-51)

4 - 9

CAPTULO IV 4.6.2. Permutao de Bytes:

CONJUNTO DE INSTRUES

Toda permutao opera na RAM Interna. Estas instrues so muito teis pois permitem a troca de contedo entre dois registros sem a necessidade de usar um outro auxiliar. Existem 3 permutaes e todas usam o acumulador como um dos operandos.

bytes Rn XCH A, direto @Ri 1 2 1

MC 1 1 1

CY -

AC -

OV -

4.6.3. Permutao de Nibbles: Existe s uma instruo e esta opera com a RAM Interna. Nesta instruo sempre se usa o acumulador e um operando (por endereamento indireto). til para trabalhar com BCD e em converses de hexadecimal para cdigo ASCII.

bytes XCHD A,@Ri 1

MC 1

CY -

AC -

OV -

Acc

aaaa

bbbb

cccc

dddd

@Ri

Figura 4.2. Grfico da permutao de nibbles. 4.6.4. Operaes com a Pilha: Como j foi estudada, a pilha opera exclusivamente com a RAM Interna. Existem apenas duas instrues de pilha e trabalham com endereamento direto. Quer dizer, sempre usam dois bytes para o opcode e no se pode usar a instruo PUSH A, mas sim PUSH Acc. Deve-se lembrar que Acc o label para o endereo do acumulador. Na instruo PUSH, primeiro incrementa-se o ponteiro (SP) e em seguida escreve-se a informao. Exemplo: se SP=7, PUSH Acc colocar o contedo do acumulador no endereo 8. A instruo POP trabalha ao contrrio.

bytes PUSH POP direto direto 2

MC 2

CY -

AC -

OV -

4 - 10

MICROCONTROLADORES (MCS-51)

CAPTULO IV

CONJUNTO DE INSTRUES

4.6.5. Transferncias de Dados com a Memria de Dados Externa: Existem instrues para leitura e escrita, as quais sempre usam o acumulador como fonte ou destino do dado. possvel fazer dois acessos, um com endereamento de 16 bits usando o DPTR e outro com endereamento de 8 bits usando @Ri (@R0 ou @R1). Deve-se lembrar que quando se usa endereamento de 8 bits, o contedo de P2 permanece inalterado e representa os 8 bits mais significativos do endereo. A instruo usada MOVX, onde X indica que se trabalhar com Memria de Dados Externa. LEITURA MOVX A, @Ri DPTR bytes 1 MC 2 CY AC OV -

ESCRITA MOVX @Ri, MOVX @DPTR, A

bytes 1

MC 2

CY -

AC -

OV -

4.6.6. Leitura da Memria de Programa: Quando se trabalha com Memria de Programa separada da Memria de Dados Externa, a Memria de Programa s pode ser lida (sinal *PSEN). Existem duas instrues para realizar esta operao e tambm so as nicas que usam endereamento indexado. So muito convenientes para construo de tabelas de consulta. O mnemnico empregado muda para MOVC onde o C indica Memria de Cdigos.

LEITURA MOVC A, @A+DPTR @A+PC

bytes 1

MC 2

CY -

AC -

OV -

4.7. INSTRUES BOOLEANAS


So chamadas de instrues booleanas as que trabalham com bits. Todas essas instrues operam com um s bit por vez e o CARRY (C) funciona como se fosse o acumulador, ou seja, um dos operandos e normalmente armazena o resultado. Os bits so endereados diretamente, mas quando se usa o CARRY este endereado implicitamente. Existem tambm desvios baseados no estado dos bits; estes so relativos posio atual do PC e se pode saltar 127 bytes adiante ou 128 bytes para trs.

MICROCONTROLADORES (MCS-51)

4 - 11

CAPTULO IV 4.7.1. Zerar/ Setar /Complementar um Bit: Para carregar zero: Para carregar um: Para complementar:

CONJUNTO DE INSTRUES

usa-se a instruo usa-se a instruo usa-se a instruo

CLR SETB CPL

bytes CLR C bit SETB C bit CPL C bit 1 2 1 2 1 2

MC 1 1 1 1 1 1

CY 0 1 X -

AC -

OV -

4.7.2. AND/OR Booleano: H dois AND e dois OR. Nestas instrues o carry (C) trabalha como o acumulador, quer dizer, um dos operandos e tambm recebe o resultado. Exemplo: ANL C,bit C = C AND bit. Empregam-se os mnemnicos ANL para Logical AND e ORL para Logical OR. Nas instrues em que um operando "/bit", indica que a operao se realiza com o complemento deste bit. Essas operaes so muito convenientes quando se implementam operaes booleanas.

bytes ANL C, bit /bit ORL C, bit /bit 2 2

MC 1

CY

AC

OV

X 1

4.7.3. Movimento de Bits: So duas as instrues para movimento de bits e sempre envolvem o CARRY.

bytes MOV C MOV bit , bit , C 2 2

MC 1 2

CY X -

AC -

OV -

4.7.4. Desvios Baseados em Bits: So 5 as instrues de desvio: duas se baseiam no CARRY e as outras trs operam com qualquer bit. Os mnemnicos JB e JC so usados para desviar se o bit est ativado (em um) e

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 JC JNC JB JNB JBC bit,rel 3 rel 2

MC 2

CY

AC

OV

4.8. INSTRUES DE DESVIO


Nas instrues de desvio esto includas as chamadas de subrotinas (CALL) e os desvios (JMP); estes podem ser realizados com 11 ou 16 bits. Tambm esto includos os desvios condicionais (JZ, JNZ, CJNE), os loops (DJNZ) e as instrues de retorno (RET, RETI). 4.8.1. Chamadas de Subrotinas: So duas as instrues de chamada de subrotinas: a instruo LCALL, que usa um endereo de 16 bits e por isso permite acesso a qualquer posio nos 64 KB de programa, e a instruo ACALL, que usa apenas 11 bits, ou seja, permite acesso dentro de um bloco de 2 KB da memria de programa; os 11 bits menos significativos do PC so trocados pelos bits especificados na instruo. A vantagem que ACALL necessita apenas de 2 bytes para o opcode enquanto que LCALL precisa de 3 bytes.

bytes LCALL ACALL adr16 adr11 3 2

MC 2 2

CY -

AC -

OV -

4.8.2. Retorno de Subrotinas: So 2 as instrues de retorno de subrotinas. A instruo RET o retorno usual. A instruo RETI usada para retorno das subrotinas que atendem as interrupes, indicando o fim de uma rotina de interrupo. Mais adiante, no captulo de interrupes, ser abordado este tema com maior detalhe.

MICROCONTROLADORES (MCS-51)

4 - 13

CAPTULO IV bytes RET RETI 1 MC 2 CY -

CONJUNTO DE INSTRUES AC OV -

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 AJMP LJMP SJMP JMP adr11 adr16 Rel @A+DPTR 2 3 1 1

MC 2 2 2 2

CY

AC

OV

4.8.4. Desvios Condicionais: H dois desvios que so feitos com os valores do acumulador: JZ, que salta se o contedo do acumulador zero, e JNZ, que salta se o contedo do acumulador no zero. Deve-se notar que no existe o flag zero (como nos Z80 e 8085); a deciso para o desvio feita com o contedo atual do acumulador. H outras 4 instrues que usam o mnemnico CJNE, que significa "compare dois elementos e desvie se forem diferentes". Todos estes desvios so relativos e por isso tm um alcance de 127 bytes para adiante e 128 bytes para trs.

bytes JZ JNZ CJNE A A CJNE Rn @Ri ,#data ,rel 3 ,direto ,rel 3 rel 2

MC 2

CONDIO se Acc = 0 se Acc 0

CY -

AC -

OV -

se Acc Direto se Acc (#data)

se Rn (#data) se @Ri (#data)

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 DJNZ Rn direto ,rel 2 MC 2 CY AC OV -

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 NOP 1

MC 1

CY -

AC -

OV -

4.9. INSTRUES E FLAGS


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 ADD ADDC SUBB MUL DIV DA RRC RLC SETB C CLR C CPL C ANL C,bit ANL C,/bit ORL C.bit ORL C,/bit MOV C,bit CJNE C X X X 0 0 X X X 1 0 X X X X X X X OV X X X X X AC X X 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.10.1. Bancos de Registros : Existem quatro bancos, selecionados por RS1 e RS0. Estes bancos podem ser acessados como registros, com endereamento direto ou com endereamento indireto. BANCO 0 R0 R1...R7 Endereo: 00 01 07 BANCO 1 R0 R1...R7 08 09 15 BANCO 2 R0 R1...R7 16 17 23 BANCO 3 R0 R1...R7 24 25 31

Supondo que o banco 1 esteja selecionado, as instrues seguintes do como resultado a mesma operao mas algumas consomem menos bytes que outras. MOV MOV A,R1 A,9 1 Byte 2 Bytes 1MC 1MC (A,Rn) (A,direto)

Tambm se pode fazer uma seqncia para endereamento indireto: MOV MOV R0,#9 A,@R0 Total indireto : MOV A,23 2 bytes 1 MC (23 e/ou R7 do banco 2) 2 Bytes 1 Byte 3 Bytes 1MC 1MC 2MC

Os registros de outros bancos so acessados empregando endereamento direto ou

Aqui so apresentadas algumas instrues interessantes para realizar transferncias entre registros (supe-se que o banco 3 esteja selecionado) : MOV MOV MOV MOV MOV MOV R1,R6 R1,30 25,R6 R1,R1 R1,25 25,R1 (no existe) (equivale a MOV (equivale a MOV (no existe) (equivale a MOV (equivale a MOV R1,R1) R1,R1) R1,R6) R1,R6)

4 - 16

MICROCONTROLADORES (MCS-51)

CAPTULO IV 4.10.2. Registros Especiais (SFR) :

CONJUNTO DE INSTRUES

Deve-se notar que todos os SFR, exceto o Acumulador, so acessados empregando endereamento direto. Para que exista compatibilidade com o 8052, no se permite endereamento indireto para os SFR. No 8052, quando se usa endereamento indireto com endereos maiores que 07FH, acessa-se a regio chamada 128 UPPER. As duas instrues a seguir do o mesmo resultado; na verdade so idnticas e geram o mesmo opcode. MOV MOV B,#10 0F0H,#10 2 bytes 2 bytes 1 MC 1 MC

O "B" que se usa aqui na verdade um label para o endereo 0F0H da RAM Interna. Todos os programas montadores que trabalham com a famlia MCS-51 trazem os endereos dos SFR j definidos, quer dizer, como se existissem as seguintes declaraes (isto j havia sido afirmado no incio deste captulo) : B Acc PSW SP P0 EQU EQU EQU ... EQU EQU 081H 080H 0F0H 0E0H 0D0H

Deve-se ter cuidado com o acumulador pois existem dois smbolos para o mesmo: A e Acc: A para as instrues com registro especifico para usar acumulador por endereamento direto Acc

Esses dois smbolos permitem construir instrues interessantes que, se no forem levadas em conta, podem consumir muita memria. Exemplos : MOV MOV MOV MOV MOV R7,A R7,Acc A,Acc A,B Acc,B 1 byte 2 bytes 2 bytes 2 bytes 3 bytes 1 MC (MOV Rn,A) 1 MC (MOV Rn,direto) 1 MC (MOV A,direto) 1 MC (MOV A,direto) 2 MC (MOV direto,direto)

MICROCONTROLADORES (MCS-51)

4 - 17

CAPTULO IV

CONJUNTO DE INSTRUES

4.11. CDIGOS DE OPERAO (OPCODE)


As instrues da famlia MCS-51, para que possam ser executadas pelo

microcontrolador, devem ser traduzidas em cdigos de operao (opcode). So estes opcodes que a CPU compreende e executa. A cada instruo associado somente um opcode. 4.11.1. Tabelas de Instrues : As seguintes tabelas mostram a distribuio dos opcodes da famlia MCS-51. As tabelas devem ser vistas por colunas. Notar que o opcode "A5" no tem instruo.

4 - 18

MICROCONTROLADORES (MCS-51)

CAPTULO IV

CONJUNTO DE INSTRUES

0__ JB bit,rel AJMP adr11 RET RL A ADD A,#dt ADD A,dir ADD A,@R0 ADD A,@R1 ADD A,R0 ADD A,R1 ADD A,R2 ADD A,R3 ADD A,R4 ADD A,R5 ADD A,R6 ADD A,R7 ADDC A,R7 ADDC A,R6 ADDC A,R5 ADDC A,R4 ORL A,R4 ORL A,R5 ORL A,R6 ORL A,R7 ADDC A,R3 ORL A,R3 ADDC A,R2 ORL A,R2 ADDC A,R1 ORL A,R1 ADDC A,R0 ORL A,R0 ANL A,R0 ANL A,R1 ANL A,R2 ANL A,R3 ANL A,R4 ANL A,R5 ANL A,R6 ANL A,R7 ADDC A,@R1 ORL A,@R1 ANL A,@R1 ADDC A,@R0 ORL A,@R0 ANL A,@R0 ADDC A,dir ORL A,dir ANL A,dir ADDC A,#dt ORL A,#dt ANL A,#dt XRL A,#dt XRL A,dir XRL A,@R0 XRL A,@R1 XRL A,R0 XRL A,R1 XRL A,R2 XRL A,R3 XRL A,R4 XRL A,R5 XRL A,R6 XRL A,R7 RLC A ORL dir,#dt ANL dir,#dt XRL dir,#dt RETI ORL dir,A ANL dir,A XRL dir,A ACALL adr11 AJMP adr11 ACALL adr11 AJMP adr11 JNB bit,rel JC rel JNC rel JZ rel JNZ rel

1__

2__

3__

4__

5__

6__

7__

__0

NOP

JBC bit,rel

__1

AJMP adr11

ACALL adr11

ACALL adr11 ORL C,bit JMP @A+DPTR MOV A,#dt MOV dir,#dt MOV @R0,#dt MOV @R1,#dt MOV R0,#dt MOV R1,#dt MOV R2,#dt MOV R3,#dt MOV R4,#dt MOV R5,#dt MOV R6,#dt MOV R7,#dt

__2

LJMP adr16

LCALL adr16

__3

RR A

RRC A

__4

INC A

DEC A

__5

INC dir

DEC dir

__6

INC @R0

DEC @R0

__7

INC @R1

DEC @R1

__8

INC R0

DEC R0

__9

INC R1

DEC R1

__A

INC R2

DEC R2

__B

INC R3

DEC R3

__C

INC R4

DEC R4

__D

INC R5

DEC R5

__E

INC R6

DEC R6

__F

INC R7

DEC R7

MICROCONTROLADORES (MCS-51)

4 - 19

CAPTULO IV

CONJUNTO DE INSTRUES

8__ ORL C,/bit AJMP adr11 MOV C,bit INC DPTR MUL AB ---------------MOV @R0,dir MOV @R1,dir MOV R0,dir MOV R1,dir MOV R2,dir MOV R3,dir MOV R4,dir MOV R5,dir MOV R6,dir MOV R7,dir CJNE R7,#dt,rel CJNE R6,#dt,rel CJNE R5,#dt,rel CJNE R4,#dt,rel XCH A,R4 XCH A,R5 XCH A,R6 XCH A,R7 CJNE R3,#dt,rel XCH A,R3 CJNE R2,#dt,rel XCH A,R2 CJNE R1,#dt,rel XCH A,R1 CJNE R0,#dt,rel XCH A,R0 DJNZ R0,rel DJNZ R1,rel DJNZ R2,rel DJNZ R3,rel DJNZ R4,rel DJNZ R5,rel DJNZ R6,rel DJNZ R7,rel CJNE @R1,#dt,rel XCH A,@R1 XCHD A,@R1 CJNE @R0,#dt,rel XCH A,@R0 XCHD A,@R0 CJNE A,dir,rel XCH A,dir DJNZ dir,rel CJNE A,#dt,rel SWAP A DA A CLR A MOV A,dir MOV A,@R0 MOV A,@R1 MOV A,R0 MOV A,R1 MOV A,R2 MOV A,R3 MOV A,R4 MOV A,R5 MOV A,R6 MOV A,R7 CPL C CLR C SETB C MOVX A,@R1 CPL bit CLR bit SETB bit MOVX A,@R0 ACALL adr11 AJMP adr11 ACALL adr11 AJMP adr11 ANL C,/bit PUSH dir POP dir MOVX A,@DPTR

9__

A__

B__

C__

D__

E__

F__ MOVX @DPTR,A ACALL adr11 MOVX @R0,A MOVX @R1,A CPL A MOV dir,A MOV @R0,A MOV @R1,A MOV R0,A MOV R1,A MOV R2,A MOV R3,A MOV R4,A MOV R5,A MOV R6,A MOV R7,A

__0

SJMP rel

MOV DPTR,#dt16

__1

AJMP adr11

ACALL adr11

__2

ANL C,bit

MOV bit,C

__3

MOVC A,@A+PC

MOVC A,@A+DPTR

__4

DIV AB

SUBB A,#dt

__5

MOV dir,dir

SUBB A,dir

__6

MOV dir,@R0

SUBB A,@R0

__7

MOV dir,@R1

SUBB A,@R1

__8

MOV dir,R0

SUBB A,R0

__9

MOV dir,R1

SUBB A,R1

__A

MOV dir,R2

SUBB A,R2

__B

MOV dir,R3

SUBB A,R3

__C

MOV dir,R4

SUBB A,R4

__D

MOV dir,R5

SUBB A,R5

__E

MOV dir,R6

SUBB A,R6

__F

MOV dir,R7

SUBB A,R7

4 - 20

MICROCONTROLADORES (MCS-51)

CAPTULO IV 4.11.2. Instrues em Ordem Alfabtica com OPCODES :

CONJUNTO DE INSTRUES

A seguir sero apresentadas todas a instrues em ordem alfabtica. Esta lista para a construo dos opcodes. As tabelas tambm apresentam essas mesmas informaes, mas aqui elas esto mais detalhadas. OBSERVAO: Empregar-se- a seguinte notao : n = 0,1,2,3,4,5,6,7 i = 0,1 data = palavra de 8 bits (byte) data16 = palavra de 16 bits adr16 = um endereo de 16 bits (Memria Externa) adr11 = um endereo de 11 bits (Memria Externa) direct ou dir = um endereo da RAM Interna (8 bits) rel = um deslocamento relativo MSB = byte mais significativo de uma palavra de 16 bits LSB = byte menos significativo de uma palavra de 16 bits
A10 A9 A8 1 0000 A7 A6 A5 A4 A3 A2 A1 A0

1) 2) 3) 4) 5) 6) 7) 8) 9) 10) 11) 12) 13) 14) 15) 16) 17) 18) 19) 20) 21)

ACALL ADD ADD ADD ADD ADDC ADDC ADDC ADDC AJMP ANL ANL ANL ANL ANL ANL ANL ANL CJNE CJNE CJNE

adr11 A,Rn A,direct A,@Ri A,#data A,Rn A,direct A,@Ri A,#data adr11 A,Rn A,direct A,@Ri A,#data direct,A direct,#data C,bit A,/bit A,direct,rel A,#data,rel Rn,#data,rel

28+n 25 26+i 24 38+n 35 36+i 34 data


0000 A7 A6 A5 A4 A3 A2 A1 A0 A10 A9 A8 0

direct data direct

58+n 55 56+i 54 52 53 82 B0 B5 B4 B8+n data direct direct bit bit direct data data relativo direct relativo data direct

MICROCONTROLADORES (MCS-51)

4 - 21

CAPTULO IV 22) 23) 24) 25) 26) 27) 28) 29) 30) 31) 32) 33) 34) 35) 36) 37) 38) 39) 40) 41) 42) 43) 44) 45) 46) 47) 48) 49) 50) 51) 52) 53) 54) 55) 56) 57) 58) 59) CJNE CLR CLR CLR CPL CPL CPL DA DEC DEC DEC DEC DIV DJNZ DJNZ INC INC INC INC INC JB JBC JC JMP JNB JNC JNZ JZ LCALL LJMP MOV MOV MOV MOV MOV MOV MOV MOV @Ri,#data,rel A bit C A bit C A A Rn direct @Ri AB Rn,rel direct,rel A Rn direct @Ri DPTR bit,rel bit,rel rel @A+DPTR bit,rel rel rel rel adr16 adr16 A,Rn A,direct A,@Ri A,#data Rn,A Rn,direct Rn,#data direct,A B6+i data E4 C2 C3 F4 B2 B3 D4 14 18+n 15 16+i 84 D8+n D5 04 08+n 05 06+i A3 20 10 40 73 30 50 70 60 12 02 E8+n E5 E6+i 74 F8+n A8+n 78+n F5 direct data direct data direct bit relativo relativo relativo MSB(adr16) MSB(adr16) bit bit relativo direct relativo direct direct bit bit

CONJUNTO DE INSTRUES relativo

relativo

relativo relativo

relativo

LSB(adr16) LSB(adr16)

4 - 22

MICROCONTROLADORES (MCS-51)

CAPTULO IV 60) 61) 62) 63) 64) 65) 66) 67) 68) 69) 70) 71) 72) 73) 74) 75) 76) 77) 78) 79) 80) 81) 82) 83) 84) 85) 86) 87) 88) 89) 90) 91) 92) 93) 94) 95) 96) 97) MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOVC MOVC MOVX MOVX MOVX MOVX MUL NOP ORL ORL ORL ORL ORL ORL ORL ORL POP PUS RET RETI RL RLC RR RRC SETB SETB SJMP SUBB A A A A bit C rel A,Rn A,Rn A,direct A,@Ri A,#data direct,A direct,#data C,bit C,/bit direct direct direct,Rn direct,direct direct,@Ri direct,#data @Ri,A @Ri,direct @Ri,#data bit,C C,bit DPTR,#data16 A,@A+DPTR A,@A+PC A,@Ri A,@DPTR @Ri,A DPTR,A AB 88+n 85 86+i 75 F6+i A6+i direct 76+i data 92 A2 90 93 83 E2+i E0 F2+i F0 A4 00 48+n 45 46+i 44 42 44 72 A0 D0 C0 22 32 23 33 03 13 D2 D3 80 98+n relative bit data direct data bit bit direct direct direct bit bit direct

CONJUNTO DE INSTRUES

dir(fonte) dir(destino) direct direct data

MSB(data16) LSB(data16)

MICROCONTROLADORES (MCS-51)

4 - 23

CAPTULO IV 98) 99) SUBB SUBB A,direct A,@Ri A,#data A A,Rn A,direct A,@Ri A,@Ri A,Rn A,direct A,@Ri A,#data direct,A direct,#data 95 96+i 94 C4 C8+n C5 C6+i D6+i 68+i 65 66+i 64 62 63 data direct direct direct direct data direct

CONJUNTO DE INSTRUES

100) SUBB 101) SWAP 102) XCH 103) XCH 104) XCH 105) XCHD 106) XRL 107) XRL 108) XRL 109) XRL 110) XRL 111) XRL

data

4.12. JUMP E CALL


Segundo o modo de formao do endereo pode-se identificar 3 tipos de JUMPs e dois tipos de CALLs: Os 3 JUMPs so: relativo, absoluto e longo. Os 2 CALLs so: absoluto e longo. Neste item sero esclarecidas estas instrues para evitar erros que so muito freqentes quando se comea a trabalhar com a famlia MCS-51. 4.12.1. JUMPs Relativos : Existem dois tipos de JUMPs relativos: os incondicionais e os condicionais. Estes ltimos (os condicionais) realizam um desvio de acordo com o estado de um registro, de um flag ou de um bit, enquanto o outro tipo (incondicional) sempre realiza o desvio. Exemplo: JUMP incondicional: JUMP condicional: SJMP JNC rel rel

Nos JUMPs relativos especifica-se quantos bytes (deslocamento) se deseja desviar, para frente ou para trs. Este deslocamento codificado em complemento a 2. Como h apenas um byte para este deslocamento, pode-se saltar 127 bytes para frente ou 128 bytes para trs. Agora sero apresentados alguns exemplos com JUMPs relativos. Os programas, por simplicidade, sempre iniciaro no endereo 200H. Ao lado de cada instruo estaro os opcodes.

4 - 24

MICROCONTROLADORES (MCS-51)

CAPTULO IV EXEMPLO 1 : DESVIO CONDICIONAL PARA FRENTE ORG ADD JC ADD DA LABEL MOV 200H A,#30H LABEL A,#20H A B,A

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. endereo 200 201 202 203 204 205 206 207(LABEL) 208 contedo 24 30 40 03 24 20 D4 F5 F0 DA MOV A B,A ADD A,#20H JC LABEL instruo ADD A,#30H deslocamento -4 -3 -2 -1 +0 +1 +2 +3 +4

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". EXEMPLO 2 : DESVIO CONDICIONAL PARA TRS ORG INC LABEL MOV ADD DA JC MOV 200H A A,B A,#20H A LABEL R0,A

O programa apresenta um desvio condicional para trs e a seguir pode-se observar os endereos de memria e seu contedo.

MICROCONTROLADORES (MCS-51)

4 - 25

CAPTULO IV endereo 200 201(LABEL) 202 203 204 205 206 207 208 209 20A 20B contedo 04 E5 F0 24 20 D4 40 F9 F8 75 F0 50 MOV MOV R0,A B,#50H DA JC A LABEL ADD A,#20H instruo INC MOV A A,B

CONJUNTO DE INSTRUES deslocamento -8 (F8) -7 (F9) -6 (FA) 5 (FB) -4 (FC) -3 (FD) -2 (FE) -1 (FF) +0 +1 +2 +3

4.12.2. JUMPs e CALLs Absolutos : Os JUMPs e CALLs absolutos so sempre incondicionais. Neste tipo de instruo apenas se trocam alguns bits do PC pelos bits especificados na instruo (so trocados os 11 bits menos significativos do PC). Isto significa que os JUMPs e CALLs esto limitados a um alcance de 2 KB, quer dizer, como se a memria estivesse dividida em pginas de 2 KB e se pudesse saltar dentro dos limites de cada pgina. Estas instrues permitem JUMPs e CALLs que consomem poucos bytes. Deve-se ter cuidado ao escrever os opcodes. EXEMPLO 3 : DESVIO ABSOLUTO ORG ADD JNC AJMP LABEL ADD ... ORG LB1 DA ... O programa acima apresenta um desvio condicional para frente e abaixo se tem o programa com os endereos de memria e seu contedo. 765H A 200H A,#30H LABEL LB1 A,#20H

4 - 26

MICROCONTROLADORES (MCS-51)

CAPTULO IV endereo 200 201 202 203 204 205 206(LABEL) 207 ... 765(LB1) OBSERVAO: AJMP E0 65 LB1 A10 A9 A8 0 1 1 1 0 0000 0000 04 DA A contedo 24 30 50 02 E0 65 24 20 ADD A,#20H AJMP LB1 JNC LABEL ADD instruo A,#30H

CONJUNTO DE INSTRUES deslocamento -4 -3 -2 -1 +0 +1 +2 +3 --

A7 A6 A5 A4 0 1 1 0

A3 A2 A1 A0 0 1 0 1

EXEMPLO 4 : CALL ABSOLUTO ORG ADD JNC ACALL LABEL ADD ... ORG LB1 DA ... 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. endereo 400 401 402 403 404 405 406(LABEL) contedo 24 30 50 02 50 34 24 ADD A,#20H ACALL LB1 JNC LABEL instruo ADD A,#30H deslocamento -4 -3 -2 -1 +0 +1 +2 234H A 400H A,#30H LABEL LB1 A,#20H

MICROCONTROLADORES (MCS-51)

4 - 27

CAPTULO IV 407 ... 234(LB1) D4 DA A 20

CONJUNTO DE INSTRUES +3 --

OBSERVAO: ACALL 50 34 LB1 A10 A9 A8 1 0 1 0 1 0000 0000 A7 A6 A5 A4 0 0 1 1 A3 A2 A1 A0 0 1 0 0

EXEMPLO 5 : DESVIO ABSOLUTO (COM ERRO) ORG ADD JNC AJMP LABEL ADD ... ORG LB1 DA ... 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). EXEMPLO 6 : DESVIO ABSOLUTO (COM ERRO) ORG AJMP ... ORG LB1 DA ... Aparentemente no h erro pois o AJMP e o label esto no mesmo bloco de 2 KB. Na verdade, h um erro porque quando se inicia a execuo de uma instruo o PC j est apontando para a instruo seguinte, ou seja, quando a CPU inicia a execuo do AJMP, o PC est em 801H (AJMP usa dois bytes). O PC e o label esto em dois blocos (de 2 KB) distintos. Os programas montadores devem ser suficientemente inteligentes para detetar este tipo de erro. 700H A 7FFH LB1 900H A 700H A,#30H LABEL LB1 A,#20H

4 - 28

MICROCONTROLADORES (MCS-51)

CAPTULO IV

CONJUNTO DE INSTRUES

4.13. EXEMPLOS
A seguir apresentada uma seqncia de exemplos que vo ilustrar a utilizao das instrues do MCS-51. Supe-se que a CPU o 8031, que os programas sero usados como subrotinas e que sempre iniciam no endereo 200H. Nos primeiros exemplos sero apresentadas tambm as listagens em hexadecimal dos opcodes. EXEMPLO 1. SUBROTINA SUM: R7 = R1 + R0. Colocar em R7 o resultado da soma de R0 e R1. ORG SUM: MOV ADD MOV RET Listagem em hexadecimal com os opcodes: 200 201 202 203 E8 29 FF 22 MOV ADD MOV RET A,R0 A,R1 R7,A 200H A,R0 A,R1 R7,A

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. A seguir est a nova subrotina SUM (R7 R6 = R1 + R0). ORG SUM: MOV ADD MOV CLR ADDC MOV RET 200H A,R0 A,R1 R6,A A A,#0 R7,A ;R6 guarda o LSB ;zera o acumulador ;acrescenta o carry ;R7 guarda o MSB

MICROCONTROLADORES (MCS-51)

4 - 29

CAPTULO IV Listagem em hexadecimal com os opcodes: 200 201 202 203 204 205 206 207 E8 29 FE E4 34 00 FF 22 MOV RET R7,A MOV ADD MOV CLR ADDC A,R0 A,R1 R6,A A A,#0

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. Listagem em hexadecimal com os opcodes: 200 201 202 203 204 205 206 E8 29 FE E4 33 FF 22 MOV ADD MOV CLR RLC MOV RET A,R0 A,R1 R6,A A A R7,A

EXEMPLO 2. SUBROTINA SUB: R7 = R1 - R0. Colocar em R7 o resultado da subtrao de R1 e R0 ORG SUB: MOV CLR SUBB MOV RET Listagem em hexadecimal com os opcodes: 200 201 202 203 E9 C3 98 FF MOV CLR SUBB MOV A,R1 C A,R0 R7,A 200H A,R1 C A,R0 R7,A ;zera o carry (necessario na subtracao)

4 - 30

MICROCONTROLADORES (MCS-51)

CAPTULO IV 204 22 RET

CONJUNTO DE INSTRUES

Um cuidado que se deve ter ao usar a instruo SUBB o de zerar o carry pois o SUBB sempre o utiliza. EXEMPLO 3. SUBROTINA MUL: R7 R6 = R1 * R0. Colocar em R7 (MSB) e em R6 (LSB) o produto de R0 e R1 ORG MUL: MOV MOV MUL MOV MOV RET Listagem em hexadecimal com os opcodes: 200 201 202 203 204 205 206 207 E8 89 F0 A4 FE AF F0 22 MUL MOV MOV MOV RET AB R6,A R7,A R7,B MOV MOV A,R0 B,R1 200H A,R0 B,R1 AB R6,A R7,B ;guarda o LSB ;guarda o MSB

EXEMPLO 4. SUBROTINA DIV: R7(quoc.) R6(resto) R1/R0. Dividir R1 por R0 e guardar o resultado em: R7(quociente) e R6(resto) ORG DIV: MOV MOV DIV MOV MOV RET 200H A,R1 B,R0 AB R7,A R6,B ;guarda o quociente ;guarda o resto ;dividendo em A ;divisor em B

MICROCONTROLADORES (MCS-51)

4 - 31

CAPTULO IV

CONJUNTO DE INSTRUES

Listagem em hexadecimal com os opcodes: 200 201 202 203 204 205 206 207 E9 88 F0 84 FF AE F0 22 RET DIV MOV MOV AB R7,A R6,B MOV MOV A,R1 B,R0

EXEMPLO 5. SUBROTINA DIV_7: Verificar se o byte que est em R3 mltiplo de 7 e , se for, ativar o bit 0 da porta P1. ORG DIV_7: MOV MOV DIV MOV JZ CLR RET LB: SETB RET Listagem em hexadecimal com os opcodes: 200 201 202 203 204 205 206 207 208 209 20A 20B EB 75 F0 07 84 E5 F0 60 03 C2 90 22 RET CLR P1.0 JZ LB DIV MOV AB A,B MOV MOV A,R3 B,#7 P1.0 ;seta bit P1.0 200H A,R3 B,#7 AB A,B LB P1.0 ;dividir por 7 ;coloca o resto em A ;ha resto ? ;zera bit P1.0

4 - 32

MICROCONTROLADORES (MCS-51)

CAPTULO IV 20C (LB) 20D 20E D2 90 22 RET SETB

CONJUNTO DE INSTRUES P1.0

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. 200 201 202 203 204 205 206 207 208 209 20A 20B(LB) 20C 20D C2 90 EB 75 90 07 84 E5 F0 70 02 B2 90 22 RET CPL P1.0 JNZ LB DIV MOV AB A,B MOV MOV A,R3 B,#7 CLR P1.0

EXEMPLO 6. SUBROTINA INICIALIZAR: Inicializar com zero toda a RAM interna, ou seja, os endereos de 0 a 127 ORG ZERAR: CLR CLR CLR MOV LB: MOV DJNZ RET Listagem em hexadecimal com os opcodes: 200 201 C2 D4 CLR RS1 200H RS1 RS0 A R0,#127 @R0,A R0,LB ;maior endereo ;seleciona banco 0 ;seleciona banco 0

MICROCONTROLADORES (MCS-51)

4 - 33

CAPTULO IV 202 203 204 205 206 207(LB) 208 209 20A C2 D3 E4 78 7F F6 D8 FD 22 RET MOV DJNZ @R0,A R0,LB CLR MOV A R0,#127 CLR RS0

CONJUNTO DE INSTRUES

EXEMPLO 7. SUBROTINA MUL16: R7 R6 R5 R4 = (R3 R2)*(R1 R0) Em R1 e R0 existe um nmero de 16 bits e em R3 e R2 existe um outro. Multiplicar estes dois nmeros de 16 bits e guardar o resultado em R7, R6, R5 e R4. 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 2
24

2 R3*R1

16

R2*R1 R3*R0 R2*R0 R7 R6 R5 R4

Figura 4.4. Explicao da rotina de multiplicao. MUL16: MOV MOV MUL MOV MOV MOV MOV MUL 4 - 34 A,R2 B,R0 AB R4,A R5,B A,R3 B,R0 AB ; ; ;R2*R0 ;R4 contem LSB(R2*R0) ;R5 contem MSB(R2*R0) ;; ;; ;R3*R0 MICROCONTROLADORES (MCS-51)

CAPTULO IV ADD MOV CLR ADDC MOV MOV MOV MUL ADD MOV MOV ADDC MOV MOV MOV MUL ADD MOV CLR ADDC MOV RET EXEMPLO 8. SUBROTINA SUMBCD: A,R5 R5,A A A,B R6,A A,R2 B,R1 AB A,R5 R5,A A,B A,R6 R6,A A,R3 B,R1 AB A,R6 R6,A A A,B R7,A

CONJUNTO DE INSTRUES ;A contem LSB(R3*R0)+MSB(R2*R0) ;coloca em R5 o valor de A ;zera A ;A contem Carry + 0 + MSB(R3*R0) ;coloca em R6 o valor de A ; ; ;R2*R1 ;A contem LSB(R2*R1)+LSB(R3*R0)+MSB(R2*R0) ;coloca em R5 o valor de A ;A contem MSB(R2*R1) ;A contem Carry+MSB(R3*R0)+MSB(R2*R1) ;coloca em R6 o valor de A ;; ;; ;R3*R1 ;A contem LSB(R3*R1)+MSB(R2*R1)+MSB(R3*R0) ;coloca em R6 o valor de A ;zera A ;A contem Carry + 0 + MSB(R3*R1) ;coloca em R7 o valor de A

Em R1 e R0 existem 2 nmeros BCD que devero ser somados e o resultado deve ser armazenado em R7 e R6 SUMBCD: MOV ADD DA MOV CLR ADDC MOV RET A,R1 A,R0 A R6,A A A,#0 R7,A ;A contem R0 + R1 ;ajuste decimal depois de uma soma BCD ;coloca em R6 ;zera A ;A contem 0 + Carry + 0 ;coloca em R7

MICROCONTROLADORES (MCS-51)

4 - 35

CAPTULO IV EXEMPLO 9. SUBROTINA SUBBCD:

CONJUNTO DE INSTRUES

Em R1 e R0 encontra-se um nmero em BCD de quatro dgitos. Subtrair 86 deste nmero e colocar o resultado em R7 e R6. Como o "decimal adjust" (DA A) s funciona em somas, ser necessrio realizar a subtrao utilizando complemento a 10. Deve-se notar que 99 funciona como -1 e que 98 como -2. O complemento a 10 de 86 9914.

76 99 (-1) 1 75 ignorar este 1


SUBBCD: MOV ADD DA MOV MOV ADDC DA MOV RET EXEMPLO 10. SUBROTINA BINBCD: A,R0

76 98 (-2) 1 74 ignorar este 1

10000 86 9914 complemento a 10 de 86

A,#14H ;R0 + LSB de -86 A R6,A A,R1 A,#99 A R7,A ;R1 + MSB de -86 ;ajuste decimal da soma ;coloca em R7 ;ajuste decimal da soma ;coloca em R6

Converter um nmero binrio para BCD. Existem vrios casos de acordo com o valor do nmero a ser convertido: caso a: 0 a 99 caso b: 0 a 255 caso c: 0 a 999 caso d: 0 a 9999 (2 algarismos BCD) (1 byte) (3 algarismos BCD) (4 algarismos BCD)

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. BINBCD_99: MOV MOV DIV A,R4 B,#10 AB ; A=0X B=0Y

4 - 36

MICROCONTROLADORES (MCS-51)

CAPTULO IV SWAP ADD MOV RET A A,B R6,A ; A=X0 ; A=XY

CONJUNTO DE INSTRUES B=0Y B=0Y

;coloca em R6 o valor de A

CASO b: Em R4 existe um nmero de 0 a 255. Convert-lo para BCD e colocar o resultado em R7 e R6. Divide-se o nmero por 100 para separar a centena e depois usa-se a soluo do caso a. BINBCD_255: MOV MOV DIV MOV MOV MOV DIV SWAP ADD MOV RET CASO c: Em R5 e R4 existe um nmero de 0 a 999. Convert-lo para BCD e colocar o resultado em R7 e R6. A soluo usada aqui a de somar 256 em R7 e R6 e decrementar R5 at que este seja 0; depois se usa uma rotina idntica BINBCD_255. BINBCD_999: CLR MOV MOV MOV JZ ; LB2: MOV ADD DA MOV MOV ADDC DA MOV A,R6 A,#56H A R6,A A,R7 A,#2 A R7,A ;somar 256 BCD e decrementar ;R5 ate que este chegue ;a zero A R7,A R6,A A,R5 LB1 ;se R5=0 (0<= num <=255), seguir adiante ;zera A ;poe zero em R7 e R6 para ;receber os resultados A,R4 B,#100 AB R7,A A,B B,#10 AB A A,B R6,A ;separar centena (divide por 100) ;R7 guarda o quociente (digito BCD mais sigf.) ;igual a BINBCD_99

MICROCONTROLADORES (MCS-51)

4 - 37

CAPTULO IV DJNZ ; LB1: MOV MOV DIV ADD DA MOV MOV MOV DIV SWAP ADD ADD DA MOV MOV ADDC DA MOV RET A,R4 B,#100 AB A,R7 A R7,A A,B B,#10 AB A A,B A,R6 A R6,A A,R7 A,#0 A R7,A R5,LB2

CONJUNTO DE INSTRUES ;decrementar R5 ;parecido com BINBCD_255 (0<= num <=255)

;ha posibilidade de que se ;necessite passar um carry adiante

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. Com esta soluo pode-se pensar em um caso e mais geral: CASO e: Em R4 e R3 existe um nmero binrio de 16 bits (0 a 9999). Convert-lo para BCD e colocar seu resultado em R7, R6 e R5. Na soluo sero utilizadas algumas subrotinas auxiliares.

4 - 38

MICROCONTROLADORES (MCS-51)

CAPTULO IV

CONJUNTO DE INSTRUES

Converte um byte do ACC para BCD e coloca o resultado em AUXH e AUXL BCD8: MOV DIV MOV MOV MOV DIV SWAP ADD MOV RET Recebe um nmero BCD em R2 e R1 e o incrementa o nmero de vezes especificado em R0 (R0 > 0). ROT_INC: MOV MOV DEC R_INC: MOV ADD DA MOV MOV ADDC DA MOV DJNZ RET 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] SOMA: MOV ADD DA MOV A,@R0 A,R1 A @R0,A ;soma os LSBs ;ajuste decimal da soma ;guarda a soma em @R0 R1AUX,R1 R2AUX,R2 R0 A,R1AUX A,R1 A R1,A A,R2AUX A,R2 A R2,A R0,R_INC B,#100 AB AUXH,A A,B B,#10 A,B A A,B AUXL,A ;parecido com BINBCD_255

MICROCONTROLADORES (MCS-51)

4 - 39

CAPTULO IV INC MOV ADDC DA MOV RET Aqui est a subrotina principal: (R7, R6, R5) BCD(R4, R3) BCD16: MOV ACALL ; MOV MOV MOV ACALL ; MOV MOV MOV ACALL MOV ACALL CLR RLC MOV ; MOV MOV MOV ACALL ; MOV MOV XCHD SWAP XCH A,R2 R0,#1 A,@R0 A A,R1 ; 0Z 0X YX ; Z0 0X YX ; YX 0X Z0 R2,AUXH R1,AUXL R0,#5 ROT_INC R2,AUXH R1,AUXL R0,#6 ROT_INC R0,#5 SOMA A A R7,A R5,AUXL R6,AUXH A,R4 BCD8 A,R3 BCD8 R0 A,@R0 A,R2 A @R0,A

CONJUNTO DE INSTRUES ;vai para proximo endereco ;soma os MSBs com Carry ;ajuste decimal da soma ;guarda o MSB da soma

;coloca em A o LSB ;converte o LSB p/ BCD e coloca ;o resultado em AUXH e AUXL ;o LSB em BCD vai para R5 e R6 ;coloca em A o MSB ;converte o LSB p/ BCD e coloca ;o resultado em AUXH e AUXL ;o MSB em BCD vai para R1 e R2

;Calcula BCD(MSB)*6 ;Para que a soma seja colocada em R5 e R6 ;(R6,R5) <- (R6,R5) + 6*BCD(MSB) ;zera A ;houve carry? (por seguranca) ;coloca carry em R7 ;AUXH e AUXL ainda guardam o BCD(MSB)

;Calcula BCD(MSB)*5 ; A R2 R1 deslocar uma posicao BCD para a esquerda ; 0X 0X YZ

4 - 40

MICROCONTROLADORES (MCS-51)

CAPTULO IV SWAP XCH MOV ACALL MOV ADDC DA MOV ; MOV MOV MOV ACALL MOV ACALL RET R2,AUXH R1,AUXL R0,#2 ROT_INC R0,#6 SOMA A A,R2 R0,#5 SOMA A,R7 A,#0 A R7,A ; XY 0X Z0 ; 0X XY Z0

CONJUNTO DE INSTRUES (multipl. por 10)

;Para que a soma seja colocada em R5 e R6 ;(R6,R5) <- (R6,R5)+ 6*BCD(MSB)+50*BCD(MSB) ;acrescenta o carry a R7

;AUXH e AUXL ainda guardam o BCD(MSB)

;Calcula BCD(MSB)*2 ;Para que a soma seja colocada em R6 e R7

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. EXEMPLO 11. SUBROTINA NIB_ASC: Converter uma nibble que est no Acc para seu correspondente ASCII Exemplos: 0110 (6) 1010 (A) A soluo simples: Se n < 10 Se n >= 10 NIB_ASC: PUSH CLR SUBB POP JNC Acc C A,#10 Acc NIB_ASC1 somar 30H somar 37H ;coloca o conteudo de A na pilha ;zera Carry ;A-10 -> se CY=1 => A<10 ; ; -> se CY=0 => A>=10 36H 41H

MICROCONTROLADORES (MCS-51)

4 - 41

CAPTULO IV ADD RET NIB_ASC1: ADD RET EXEMPLO 12 SUBROTINA HEX_ASC: A,#37H ;de 41 a 46 (letras) A,#30H

CONJUNTO DE INSTRUES ;de 30 a 39 (algarismos)

Converter o byte que est em Acc em seus 2 correspondentes ASCII, guardando o mais significativo em Acc e o menos significativo em b. Exemplo: Acc = 0110 1010 HEX_ASC: MOV ANL ACALL XCH ANL SWAP ACALL RET EXEMPLO 13. SUBROTINA ASC_HEX: Converter os 2 caracteres ASCII que se encontram em Acc (mais significativo) e B (menos significativo) em seu binrio correspondente Exemplo: Acc = 43H e B = 38H => Acc =1100 1000 C ASC_HEX: ACALL SWAP XCH ACALL ADD RET Subrotina auxiliar, recebe um caracter ASCII no Acc e retorna sua nibble correspondente. ASCNIB: CLR SUBB JC PUSH SUBB C A,#30H ERRO Acc A,#10 ;zera Carry ;A-30H -> se CY=1 => A<30 (ERRO) ; -> se CY=0 => A>=30 ;guarda A-30H na pilha ;A-10 -> se CY=1 => A<10 ASCNIB A A,B ASCNIB A,B ;coloca as 2 nibbles em A ;troca as nibbles em A ;troca valores entre A e B 8 Acc = 36H e B = 41H B,A A,#0FH NIB_ASC A,B A,#0F0H A NIB_ASC ;troca os valores de A e B ;zera a nibble menos sigf. de A ;troca as nibbles de A ;coloca em B uma copia de A ;zera nibble mais sigf. de A

4 - 42

MICROCONTROLADORES (MCS-51)

CAPTULO IV JNC POP RET ; ASCNIB1: SUBB POP JNC SUBB RET ; ERRO: CPL SJMP P1.7 ERRO ;indica erro ;fica em loop A,#6 Acc ERRO A,#6 ASCNIB1 Acc ;

CONJUNTO DE INSTRUES -> se CY=0 => A>=10

;restaura o valor A-30H

;A-6 -> se CY=1 => A<6 ; -> se CY=0 => A>=6

;Notar que CY=1 (ou seja, A-37H)

EXEMPLO 14. UMA SUGESTO: Uma soluo para divises quando o dividendo fixo e tem mais de um byte: seja o caso em que necessrio dividir um nmero N por 836; no se pode fazer diretamente N/836 mas 836 =(aprox.) 65536/78 e ento se usa o seguinte truque: (N*78)/65536, ou seja, multiplica-se por 78 e se deixam de fora os dois ltimos bytes. No caso de converso de binrio para BCD de um nmero de 0 at 9999 necessrio dividi-lo por 1000. Esta diviso pode ser feita atravs de uma multiplicao seguida de uma diviso por um nmero que seja uma potencia de dois. Deve-se lembrar que dividir um nmero por 2 corresponde a 1 shift right, por 4 corresponde a 2 shift right, por 8 corresponde a 3 shift right, ... A diviso por 1000 pode ser feita usando vrios valores de N e n; a tabela a seguir ilustra o erro cometido.

MICROCONTROLADORES (MCS-51)

4 - 43

CAPTULO IV

CONJUNTO DE INSTRUES

1000 =

N n
erro % 97,656 97,656 97,656 97,656 97,656 100,708 100,708 99,945 99,945 99,945 100,040 99,993 99,993 delta % -2,344 -2,344 -2,344 -2,344 -2,344 +0,708 +0,708 -0,055 -0,055 -0,055 +0,044 -0,007 -0,007 bits fora 10 11 12 13 14 15 16 17 18 19 20 21 22

N 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152 4194304

n 1 2 3 4 16 33 66 131 262 524 1049 2097 4194

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


5.1. CONCEITOS DO AVMAC51 E DO AVLINK
O AVMAC 8051 um assembler (realocvel), com recursos de macros para a famlia do MCS-51. O AVMAC51 recebe como entrada um arquivo com instrues em assemby e procede da seguinte forma: Envia o arquivo a um pr-processador para validar as macros e as diretivas para assemblagem condicional. O pr-processador produz um segundo arquivo que enviado ao assembler propriamente dito. O assembler produz um arquivo objeto e um arquivo com a listagem do cdigo-fonte. O objeto produzido pelo assembler enviado (pelo usurio) ao linker, o qual produz um arquivo absoluto em formato .HEX.

ARQ.ASM

PRPROCESADOR

ARQ.MXP

ASSEMBLER

ARQ.PRN ARQ.OBJ
LINKER

ARQ.HEX

Figura 5.1. Fluxograma para utilizao do assembler e linker. Para ativar o assembler usa-se o comando que est ilustrado na figura 5.2.

AVMAC51

ARQUIVO

OPES

Nome do arquivo a ser assemblado. Primeiro procura o ARQUIVO e se no o encontra, busca o ARQUIVO.ASM

Opes da linha de comando

Figura 5.2. Linha de comando para a ativao do assembler. O linker usado da forma ilustrada na figura 5.3.

MICROCONTROLADORES (MCS-51)

5 - 1

CAPTULO V

ASSEMBLER E SIMULADOR

AVLINK

ARQ =

ARQ1 ARQ2

ARQ3 ...

Nome do arquivo que recebe os cdigos linkados Lista de arquivos objeto

Figura 5.3. Linha de comando para a ativao do linker. Por default, os arquivos absolutos sero feitos em formato INTEL HEX. Um programa em linguagem assembly consiste de uma seqncia de "sentenas", cada uma ocupando uma linha do arquivo. Cada sentena pode ter at 4 campos. Os campos so separados por espaos e tabulaes. Label Operao Existem sentenas de 2 tipos: Instrues do conjunto de instrues do microcontrolador Pseudo-instrues que orientam o assembler. Operando Comentrio

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 pseudoinstruo (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. COMENTRIO: Qualquer seqncia de caracteres precedida por ; (ponto e vrgula). IMPORTANTE: Labels Cdigos devem comear na primeira coluna. no devem comear na primeira coluna.

Comentrios pode comear na primeira coluna. Os smbolos (labels) podem ter quantos caracteres se deseje mas somente os primeiros 32 so significativos. Podem ser: A Z, 0 9, $.

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:

BASE 2 8 16

PRECEDIDO % @ $

SEGUIDO B O ou Q H

Exemplo: 254 0FEH ou $FE 127 1111111B ou %1111111 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

OPERADOR + + * / MOD SHL SHR HIGH LOW . NOT AND OR XOR LT LE EQ NE GE GT

USO x+y +x x-y -x x*y x/y x MOD y x SHL y x SHR y HIGH x LOW x data.bit NOT x x AND y x OR y x XOR y x LT y x LE y x EQ y x NE y x GE y x GT y x+y 0+x x-y 0-x

RESULTADO

x*y (sem sinal) xy (sem sinal) resto de xy (sem sinal) x deslocado esquerda y vezes x deslocado direita y vezes MSB de x LSB de x endereo do bit do byte data negao de x (complemento 1) AND lgico bit a bit (bitwise) OR lgico bit a bit (bitwise) XOR lgico bit a bit (bitwise) 1 se x<y, seno 0 1 se xy, seno 0 1 se x=y, seno 0 1 se xy, seno 0 1 se xy, seno 0 1 se x>y, seno 0

Figura 5.1. Lista com os operadores aritmticos.

5.2. PSEUDO-INSTRUES DO ASSEMBLER


Sempre que o assembler chamado, este primeiro envia o arquivo fonte para o prprocessador. Pode-se evitar este passo com o seguinte comando (se no houver instrues para o pr-processador): AVMAC51 ARQ.ASM NOMACEVAL

Normalmente definir TRUE = 0FFFFH e FALSE = 0 evita problemas com relaes. 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 DATA XDATA BIT NUMBER Exemplos: LB FLAG memria de programa, memria de dados interna, memria de dados externa, endereos do espao de bits, qualquer coisa, vlido em qualquer lugar. EQU EQU 5, CODE LB um endereo de programa 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 TXT L1 L2 DB DB DB DB "Isto uma string", 0DH,0AH,0 "Isto uma string\r\n\0" 8 1, 2, 3 ;reserva 1 byte e o inicializa com 8 ;reserva 3 bytes e os inicializa com estes valores

SMBOLO \n \r \t \0 \x nova linha

SIGNIFICADO retorno de carro tabulao NULL ou 0 precede um hexadecimal de 2 dgitos (\x0A=line feed)

DW (Define Word) como DB, mas trabalha com words (16 bits). PROC ,ENDPROC labels globais, permitem programas modulares.

Ex: L3

DW 123H

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 L?TOP: PROC MOV CPL DJNZ A,#7 P1.7 A,L?TOP ;L?TOP uma varivel local

ENDPROC

MICROCONTROLADORES (MCS-51)

5 - 5

CAPTULO V INCLUDE igual linguagem C, "ARQ"

ASSEMBLER E SIMULADOR

" " busca arquivo no diretrio corrente busca arquivo no diretrio indicado pela varivel MS/DOS "INCLUDE"

<ARQ> < >

SEG existem 4 segmentos j definidos CODE, DATA, XDATA e BIT. Se no foi indicado nada, usa-se o segmento CODE. A pseudo-instruo SEG permite trocar de segmentos Exemplo: MOV SEG MARCA DW SEG INC B,#20 DATA 45H CODE A ;Depois da assemblagem e linkagem ;no haver nada entre as instrues ;MOV B,#20 e INC A. O segmento ;DATA ser colocado em ;outra parte

DEFSEG permite a definio de outros segmentos, tais como: RAMDATA, ROMDATA, PILHA, etc. Na definio de um segmento pode-se informar: ABSOLUT no passa pela linkagem, deve ser dado o endereo inicial. RELOCABLE o linker define seu endereo. ALIGNMENT indica o tamanho do bloco para alinhamento; se for pedido um alinhamento de 100H, o linker tentar colocar o segmento em um endereo mltiplo de 100H. BLOCK indica ao linker que o segmento deve residir em um determinada rea. Se BLOCK=PAGE ento o segmento deve estar dentro de uma pgina de 2 KB. OVERLAID indica ao linker que o mesmo segmento em mdulos diferentes deve estar no mesmo endereo. CLASS define a classe do segmento; existem 4 classes: CODE, DATA, XDATA, BIT Exemplos: DEFSEG STACK, CLASS=DATA DEFSEG KUMQUATS DEFSEG BLOCK, START=200H DEFSEG TRW, ALIGN=PAGE ;stack um segmento redirecionvel ;KUMQUATS CODE por default ;BLOCK segmento CODE, iniciando em 200H. ;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 %. %IF - %ELSE - %ELSEIF - %ENDIF sem comentrios %SWITCH - %CASE - %DEFAULT - %ENDSW idntico linguagem C. Ex: %SWITCH PARAM %CASE 1 ... %CASE 9 .... %DEFAULT ... %ENDSW %REPT - %ENDREPT repetir uma seo do programa. Ex: %REPT 5 ... %ENDREPT %FOR - %ENDFOR sem comentrios. Ex: %FOR I = 1 TO 10 ... %ENDFOR %MACRO permite definir trechos de programa e represent-los por um smbolo. Exemplo: Definir um macro que represente 3 rotaes para a esquerda: RL3 %MACRO RL RL RL %ENDM Utilizao desta macro: ADD RL3 A,#5 A A A ;exemplo de macro sem parametros

MICROCONTROLADORES (MCS-51)

5 - 7

CAPTULO V SUBB SOMA A,B x,y,z A,z A,y x,A

ASSEMBLER E SIMULADOR

Definio de uma macro para representar a soma de trs variveis: %MACRO MOV ADD MOV %ENDM Utilizao da macro recm definida: MOV SOMA MOV B,A R7,R6,R5 R3,A ;exemplo de macro com parametros

%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. %IFEQ - %IFNEQ compara dois parmetros. %GENSYM gerar smbolos automaticamente Exemplo: A utilizao do FOR pode resultar em repetio de um label: % FOR AQUI % ENDFOR Vai resultar em: AQUI AQUI AQUI JNB JNB JNB P1.7,AQUI P1.6,AQUI P1.5,AQUI I JNB IN "P1.7","P1.6","P1.5" I,AQUI

O label AQUI foi definido trs vezes, o que um erro. A soluo usar GENSYM: % FOR AQUI Vai resultar em: ??0000 JNB ??0001 JNB ??0002 JNB P1.7,??0000 P1.6,??0001 P1.5,??0002 JNB I IN "P1.7","P.6","P1.5" I,AQUI % GENSYM AQUI % ENDFOR

Notar que se evitou a repetio do mesmo label.

5 - 8

MICROCONTROLADORES (MCS-51)

CAPTULO V

ASSEMBLER E SIMULADOR

OPES DO ASSEMBLER AVMAC51


As opes podem ser colocadas na linha de comando quando o assembler invocado ou em um arquivo fonte, usando a linha chamada "linha de opo". Ela deve iniciar na primeira coluna. $option opes,....

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 EXTI0 EXTI1 SINT seguintes smbolos: & segmento definido pelo usurio segmento CODE segmento DATA @ * segmento PAGE0 (se houver) label externo TIMER0 TIMER1 0 3 08H 13H 1BH 23H ;endereo a ser executado depois do RESET ;interrupo EXTERNA 0 ;interrupo do TIMER 0 ;interrupo EXTERNA 1 ;interrupo do TIMER 1 ;interrupo da PORTA SERIAL

Na listagem do arquivo com extenso .PRN gerado, o campo de endereos apresentar os

5.3. O LINKER - AVLINK


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. AVLINK invoca linker em modo interativo AVLINK @ARQ l arquivo e aguarda comandos

MICROCONTROLADORES (MCS-51)

5 - 9

CAPTULO V

ASSEMBLER E SIMULADOR

OPES (listadas com a opo h) :


MAP = mapfile redireciona o arquivo .MAP (MAP = COM). (MA=mapfile) NoMAP no gera .MAP. (-NM) ORDER (seg nombre, seg nombre...) fora que os segmentos sejam carregados na seqncia especificada. (-OC seg1, seg2, ...) HEX = arquivo imagem redireciona a sada .HEX. (HX = filename) NoOut no gera .HEX. (-NO) Out Format = format_type formato do arquivo absoluto: (OF= mot | mot0 | tek) HEX Intel HEX. TEK Tektronix. MOT Motorola. SYmbols = symfile redireciona a sada .SYM. (SY=filename) NoSymbols no gera arquivo .SYM (default). (-NS) SYmbols gera arquivo .SYM. (-SY) PlainDump tabela de smbolos. (-PD) QUiet no gera mensagens, incluindo os warnings. (-QU) STart (clase,endereo) endereo de incio para cada classe. ToP (clase,endereo) endereo limite para cada classe. RecLen= tamanho tamanho do record nos arquivos .HEX (default = 32). (-RL=tam) PutSeg (Segname, endereo) realoca o segmento especificado em Segname. (-PS(seg,addr)) DefSym (symname, endereo) define um smbolo pblico. (-DS(name,val)) MaxLen (segname, tamanho) tamanho mximo para um segmento. (-ML(seg,len)) ShowsMods coloca no arquivo .MAP a informao de cada arquivo .OBJ. (-SM) ShowPublics mostra no .MAP os labels pblicos de cada arquivo. (-SP) SortbyName ordena a lista gerada por ShowPublics. (-SN) RumsAt(segname, addr) ?. 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 (no ordenado) ARQ_OUT.HEX (ordenado)

Serve tambm para converter entre .HEX e o formato binrio com a sintaxe: hexform ARQ=ARQ AVLIB permite a criao de bibliotecas. Modelo para a utilizao: AVLIB linkado. ART.LIB = ARQ1.OBJ, ARQ2.OBJ Se um programa que usa a biblioteca ART.LIB, mas chama somente ARQ1, ento ARQ2 no ser

5 - 10

MICROCONTROLADORES (MCS-51)

CAPTULO V AVREF gera a referncia cruzada. Modelo para a utilizao: AVREF

ASSEMBLER E SIMULADOR

TESTE = TESTE.SYM, ARQ1.XRF, ARQ2.XRF, ARQ3.XRF

(Os arquivos ARQ1.XRF, ARQ2.XRF, ARQ3.XRF foram gerados por AVLINK). (O arquivo TESTE.HEX foi produzido pelos arquivos ARQ1.OBJ, ARQ2.OBJ, ARQ3.OBJ).

5.4. O FORMATO INTEL.HEX


O formato INTEL.HEX representa informaes binrias atravs de um texto ASCII imprimvel. Ele organizado em uma srie de records. Dentro de cada record o dado binrio representado por dgitos (hexadecimal) ASCII, 2 dgitos para cada byte. Cada record tem um endereo de carregamento a partir do qual os bytes devem ser carregados. Para cada record tambm h um checksum de 8 bits que um complemento a 2 da soma dos bytes de dados, contador, tipo de record e endereo. Notar que os valores binrios dos bytes, e no os cdigos ASCII, so usados no clculo do checksum. O checksum obtido somado ao que est no record deve resultar em zero.

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

CR - Carriage Return

LF - Line Feed

Figura 5.4. Descrio do formato INTEL.HEX. 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) Checksum para os records: 05 + 12H + 34H + 00 + 01 + 02 + 03 + 04 + 05 = 5AH 0 - 5AH = A6 00 + 00 + 00 + 01 = 01 0 - 01 = 0FFH

MICROCONTROLADORES (MCS-51)

5 - 11

CAPTULO V

ASSEMBLER E SIMULADOR

5.5. PROGRAMAS EXEMPLO


A seguir so apresentados trs programas fonte (.ASM) com a listagem (.PRN) gerada pelo assembler. Por simplicidade, todos os programas iniciam no endereo 0. PROGRAMA FONTE EXEMPLO 1: ;EXEMPLO1.ASM ; ;Somar dois numeros BCD de 4 digitos : R1R2R3 = R4R5 + R6R7 INICIO SEG MOV ADD DA MOV ; MOV ADDC DA MOV CLR ADDC MOV END CODE A,R7 A,R5 A R3,A A,R6 A,R4 A R2,A A A,#0 R1,A ; R7 + R5 ; R3 = R7 + R5 ; R6 + R4 + Carry ; R2 = R6 + R4 + Carry ; usar o Carry ; R1 = Carry

LISTAGEM DO ARQUIVO EXEMPLO1.PRN GERADO PELO ASSEMBLER: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ;EXEMPLO1.ASM ; ;Somar dois numeros BCD de 4 digitos : R1R2R3 = R4R5 + R6R7 INICIO SEG MOV ADD DA MOV ; MOV ADDC DA MOV CLR ADDC MOV END CODE A,R7 A,R5 A R3,A A,R6 A,R4 A R2,A A A,#0 R1,A ; R7 + R5 ; R3 = R7 + R5 ; R6 + R4 + Carry ; R2 = R6 + R4 + Carry ; usar o Carry ; R1 = Carry

0000' EF 0001' 2D 0002' D4 0003' FB 0004' EE 0005' 3C 0006' D4 0007' FA 0008' E4 0009' 34 00 000B' F9

5 - 12

MICROCONTROLADORES (MCS-51)

CAPTULO V PROGRAMA FONTE EXEMPLO 2: ; EXEMPLO2.ASM ; ; Converter para BCD um numero binario entre 0 e 999 ; R7R6(BCD) R5R4(Bin) ; Esta rotina esta no exemplo E10 caso c BB39 SEG CLR MOV MOV MOV JZ MOV ADD DA MOV MOV ADDC DA MOV DJNZ MOV MOV DIV ADD DA MOV MOV MOV DIV SWAP ADD ADD DA MOV MOV ADDC DA MOV SJMP END CODE A R7,A R6,A A,R5 LB1 A,R6 A,#56H A R6,A A,R7 A,#2 A R7,A R5,LB2 A,R5 B,#100 AB A,R7 A R7,A A,B B,#10 AB A A,B A,R6 A R6,A A,R7 A,#0 A R7,A $

ASSEMBLER E SIMULADOR

;ZERAR R7 E R6

LB2

;SE R5=0, SALTAR ESSA FASE ;SOMAR 256 BCD TANTAS VEZES ;QUANTO EH O VALOR DE R5

;ZERO R5 ;CONVERTE R4 PARA BCD ;SEPARA CENTENAS

LB1

;SEPARA DEZENAS ;SOMA COM O QUE EXISTE

MICROCONTROLADORES (MCS-51)

5 - 13

CAPTULO V

ASSEMBLER E SIMULADOR

LISTAGEM DO ARQUIVO EXEMPLO2.PRN GERADO PELO ASSEMBLER: 1 2 3 4 5 6 7 0000' E4 8 0001' FF 9 0002' FE 10 11 0003' ED 12 0004' 60 0C 13 0006' EE 14 0007' 24 56 15 0009' D4 16 000A' FE 17 000B' EF 18 000C' 34 02 19 000E' D4 20 000F' FF 21 0010' DD F4 22 23 0012' EC 24 0013'75 F0 64 25 0016' 84 26 0017' 2F 27 0018' D4 28 0019' FF 29 001A' E5 F0 30 001C'75 F0 0A31 001F' 84 32 0020' C4 33 0021' 25 F0 34 0023' 2E 35 0024' D4 36 0025' FE 37 0026' EF 38 0027' 34 00 39 0029' D4 40 002A' FF 41 002B' 80 FE 42 43 ; EXEMPLO2.ASM ; Converter para BCD um numero binario entre 0 e 999 ; R7R6(BCD) <-- R5R4(Bin) ; Esta rotina est no exemplo E10 C BB39 SEG CLR MOV MOV MOV JZ MOV ADD DA MOV MOV ADDC DA MOV DJNZ MOV MOV DIV ADD DA MOV MOV MOV DIV SWAP ADD ADD DA MOV MOV ADDC DA MOV SJMP END CODE A R7,A R6,A A,R5 LB1 A,R6 A,#56H A R6,A A,R7 A,#2 A R7,A R5,LB2 A,R5 B,#100 AB A,R7 A R7,A A,B B,#10 AB A A,B A,R6 A R6,A A,R7 A,#0 A R7,A $

;ZERAR R7 E R6

LB2

;SE R5=0, PULAR ESSA FASE ;SOMAR 256 BCD TANTAS VEZES ;QUANTO EH O VALOR DE R5

;ZERO R5 ;CONVERTE R4 PARA BCD ;SEPARA CENTENAS

LB1

;SEPARA DEZENAS ;SOMA COM O QUE EXISTE

;LOOP ETERNO

5 - 14

MICROCONTROLADORES (MCS-51)

CAPTULO V PROGRAMA FONTE EXEMPLO 3: ;EXEMPLO3.ASM

ASSEMBLER E SIMULADOR

;Converter um byte nos 2 caracteres HEXA ASCII correspondentes ; AB (HEXA ASCII) A ;Exemplo: se Acc=0110 1010 Acc=36H e B=41H ;Observacao: ASCII(6)=36H e ASCII(A)=41H ;Corresponde ao exemplo E12 do capitulo 4 ;Para ilustrar este programa sera criado o segmento "PROGRAMA" ;do tipo CODE, realocavel. DEFSEG SEG MOV ANL ACALL XCH ANL SWAP ACALL SJMP PROGRAMA, CLASS=CODE ;CRIAR SEGMENTO PROGRAMA ;ENTRAR NO SEGMENTO B,A ;GUARDAR UM BYTE A,#0FH ;SEPARAR LSNIBBLE NIBASC ;CONVERTER NIBBLE ASCII A,B ;RECUPERAR UM BYTE A,#0FOH ;SEPARAR MSNIBBLE A NIBASC $ ;PARAR EXECUO

HEXASC

;Rotina para converter uma nibble no ASCII correspondente NIBASC PUSH ACC ;GUARDAR NIBBLE CLR C SUBB A, #10 ;A-10 CY=1 ==> A<10 POP ACC ; CY=0 ==> A<=10 JNC NIBASC1 ADD A, #30H ;30H ... 39H RET NIBASC1 ADD A, #37H ;44H ... 46H RET END

MICROCONTROLADORES (MCS-51)

5 - 15

CAPTULO V

ASSEMBLER E SIMULADOR

LISTAGEM DO ARQUIVO EXEMPLO3.PRN GERADO PELO ASSEMBLER: 1 2 3 4 5 6 7 8 9 10 11 12 SEGMENTO 0000& F5 F0 0002& 54 0F 0004& ....X 0006& C5 F0 0008& 54 F0 000A& C4 000B& ....X 000D& 80 FE 000F& C0 E0 0011& C3 0012& 94 0A 0014& D0 E0 0016& 50 03 0018& 24 30 001A& 22 001B& 24 37 001D& 22 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 HEXASC SEG MOV ANL ACALL XCH ANL SWAP ACALL SJMP PROGRAMA B,A A,#0FH NIBASC A,B A,#0F0H A NIBASC $ ;ENTRAR EM SEGMENTO ;GUARDAR UM BYTE ;SEPARAR LSNIBBLE ;CONVERTER NIBBLE ASCII ;RECUPERAR UM BYTE ;SEPARAR MSNIBBLE ;PARAR EXECUO ;EXEMPLO3.ASM ;Converter um byte nos 2 caracteres HEXA ASCII correspondentes ;AB (HEXA ASCII) <-- A ;Exemplo: se Acc=0110 1010 Acc=36H e B=41H ;Observacao: ASCII(6)=36H e ASCII(A)=41H ;Corresponde ao exemplo E12 ;Para ilustrar este programa sera criado o segmento "PROGRAMA", ;do tipo CODE, realocavel. DEFSEG PROGRAMA, CLASS=CODE ;CRIAR

;Rotina para converter uma nibble em ASCII correspondente NIBASC PUSH ACC ;GUARDAR NIBBLE CLR C SUBB A,#10 ;A-10 CY=1 ==> A<10 POP ACC ; CY=0 ==> A<=10 JNC NIBASC1 ADD A,#30H ;30H ... 39H RET NIBASC1 ADD A,#37H ;41H ... 46H RET END

5 - 16

MICROCONTROLADORES (MCS-51)

CAPTULO V

ASSEMBLER E SIMULADOR

5.6. CONCEITOS DO AVSIM 8051


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.

Chama-se o programa com: AVSIM51 [keystrokes]. A verso 1.0 suporta apenas um argumento. AVSIM51 <CPU tipo> FL <command file_name> Para que o AVSIM51 rode eficientemente devem estar presentes trs arquivos: AVSIM51.OVR AVSIM51.REG AVSIM51.HLP

Se no foi especificado na linha de comando, o AVSIM51, ao ser invocado, pode especificar o tipo de CPU. Existem dois modos de operao (troca-se de modo usando ESC): Command mode Display mode Executar comando Acesso dentro da CPU

5.6.1. Modo Comando


Neste modo o cursor sempre est em uma linha de comando - prximo na parte inferior do monitor. D assim a possibilidade de executar todos os comandos. O modo comando feito por menus. Se o menu muito extenso, usa-se a barra de espao para mostrar o resto. Os comandos so selecionados por: barra highlighted uma letra.

MICROCONTROLADORES (MCS-51)

5 - 17

CAPTULO V

ASSEMBLER E SIMULADOR

Alguns comandos pedem uma linha para complement-lo. A seqncia CRTL + C usada para abortar qualquer comando ou menu e retornar ao menu principal.

5.6.2. Modo Display


Neste modo o cursor est em um dos campos da CPU que aparece na tela. Tudo o que pode ser acessado pelo cursor est em highlight. Cada campo na janela pertence a um dos tipos: HEX ASCII BINARY CODE

5.7. COMANDOS DO AVSIM51


Antes de iniciar o estudo dos comandos, necessrio uma srie de observaes. Sempre que um valor necessrio pode-se usar uma expresso aritmtica. Uma expresso composta por uma ou mais constantes conectadas por operadores. uma expresso: mltiplas expresses: sintaxe de endereo: 20H - (BF_BASE-1) MAIN , "AB", $-1, '0a' [adr space:] expresso D:BF_BASE

Os valores numricos podem estar na base 2, 8, 16 ou 10. @ indica base 8 quando usado com os mnemnicos @ em expresses indica o operador indireto. H diversos outros operadores: . + @ () um ponto um smbolo onde est o resultado da ltima expresso '.+100' expresso anterior +100. suma. subtrao ou negao. operador indireto. at 4 nveis.

Quando um endereo solicitado, o espao de endereamento pode ser explicitamente especificado como: Code Data C D Ex: C: Main Ex: D: BUFFER Ex: X: 0A

External X

5 - 18

MICROCONTROLADORES (MCS-51)

CAPTULO V

ASSEMBLER E SIMULADOR

5.7.1. Comandos de Ambiente:


-Carregar arquivos: Load Prog Load Data Load symbols Load Avocet Load Avocet atribui memria e carrega o programa atribui memria e carrega os dados carrega a tabela de .smbolos .do Cross.Assembler Load Symbols (.PRN) Load Program (.HEX ou .MIK)

-Arquivo de comando: evita a repetio dos comandos freqentes. Load Open Close Restart executa arquivo de comando. abrir arquivo de comando fechar arquivo de comando reiniciar arquivo de comando atribui espao de dados externo. (como ROM ou RAM e no pode ser liberada)

-Atribuir memria: Set memory_map:

5.7.2. Comandos para a Execuo de Programas:


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 O nmero de breakpoints que podem estar ativos simultaneamente depende somente da memria disponvel no PC. Dois breakpoints tipo "sticky" so instalados automaticamente: endereo. Set sticky_bkpt s desativado pelo usurio. se auto apaga quando ocorre. Set dynamic_bkpt todo endereo de memria no definido toda faixa de memria definida como ROM tem o tipo "write only break point".

Breakpoints incondicionais: sempre interrompem a execuo quando h acesso a um

MICROCONTROLADORES (MCS-51)

5 - 19

CAPTULO V Acesso: read/write ou write only Endereo: valor ou faixa de valores

ASSEMBLER E SIMULADOR

Para retardar uma interrupo at n passos a partir do breakpoint, entre com um valor decimal antes da seleo de acesso/endereo. Breakpoint dinmicos incondicionais podem ser ativadas usando "break point cursor keys" (F2, F3, F4). Quando um breakpoint ocorre, a execuo do programa se detm antes da instruo que ativa o breakpoint. Se dinmico, ele apagado e a execuo do programa pode prosseguir. Se do tipo "sticky" necessrio usar "single step".

Os comandos que operam com os breakpoints so: View breakpoints. Reset breakpoints. Reset all. Reset trap list.

5.7.2.2. Condies (Value, Range, Mask, Indirect) 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 MASK deve-se definir um limite inferior e um superior; quando o contedo estiver nesta mscara de 8 bits com 0, 1 e X (don't care). Quando os bits da mscara faixa (inclusive) o breakpoint ativado. 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.7.2.3. Pass Points: So idnticos aos breakpoints, mas em vez de gerar um trap, eles incrementam um contador de 32 bits.

5 - 20

MICROCONTROLADORES (MCS-51)

CAPTULO V 5.7.2.4. Opcode Traps:

ASSEMBLER E SIMULADOR

O PC usado para apontar um dado (um opcode neste caso), que ser comparado com um dado especificado. A opo pede um mnemnico completo ou, pelo menos, o primeiro byte usado na comparao. Exemplos: JNZ $ interrompe em toda instruo que tenha JNZ, provocar um trap em todos MOV R0, #X. MOV R0,#7 5.7.2.5. Execute Command: Permite executar um comando como se fosse um interpretador. Pode ser usado para desviar para qualquer lugar (JMP adr) ou para forar o retorno de uma subrotina.

5.7.3. Comandos de Display:


DUMP 1 / 2 Absolute DUMP 1 / 2 Indirect endereo de inicio da janela que mostra a rea de dados. Com o cursor deve ser fornecido uma endereo ou registro e tambm o valor de offset. dentro da janela, basta usar <SCROLL UP> ou <SCROLL DOWN>. O endereo indireto aparece em highlight. Exemplo: usa-se para monitorar transferncias com @R1 ou @R0.

5.7.4. Comandos de I/O:


Permite que se unam arquivos aos pinos do microcontrolador e assim se simulem as entradas e sadas. Em um simulador no existem dispositivos externos para interagir com os pinos do microcontrolador. So fornecidos dois recursos para simular atividade externa: I/O Interativo o usurio manualmente gera os sinais nos pinos de interesse. as entradas e sadas vo e vem dos arquivos. I/O por Arquivo

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. I/O, OPEN, (Y or N) rewind, IO rate, Mapbit: I/O rate n a cada n ciclos de mquina ser feita uma transferncia. Mapbit <I/O bit (0-7)> <memo bit(0-7)>, <endereo> <IN/OUT>: 7,RI, IN o valor do bit RI (do SCON) vir do bit 7 do arquivo de entrada. Exemplo: 7, 3, P1, OUT ir direcionar o bit P1.3 para o bit 7 do arquivo de sada.

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.7.5. Comandos de Memria:


Set Memory_map View Memory_map EXPRESION Memory Clear Memory Fill Memory Move Memory Search Define memria adicional RAM ou ROM, a qual inicializada com zeros. Ver os espaos de endereos de cada rea. Coloca o valor da expresso na posio do cursor. Preencher com zeros a rea especificada. Preencher com um valor a rea especificada. Deslocar reas de memria, mesmo quando h superposio. Buscar determinado caracter na memria.

5.7.6. Incremental Cross-Assembler:


Patch code Permite entrar com os mnemnicos em vez de dados hexadecimais (o endereo usado o que est no PC). Para alterar um byte de uma instruo pode-se usar a rea que est direita do PC. Open Output File Grava todas as instrues que foram digitadas para o patch.

5.8. FLUXOGRAMA DE OPERAO DO AVSIM51


A seguir ser apresentado o fluxograma de todas as opes que existem no AVSIM51. Usar-se- a seguinte conveno: em itlicos em negrito expresso. as informaes exibidas pelo AVSIM. as solicitaes de entradas, seja atravs de letra, highlight ou

5 - 22

MICROCONTROLADORES (MCS-51)

CAPTULO V

ASSEMBLER E SIMULADOR

DUMP D
configure memory dump windows select dump area: 1 2

(upper or lower) dump window dump: Absolute Indirect

Absolute

Indirect

dump start address enter expression in data address space:___

dump indirect address or register enter expression in data address space:___

index offset enter expression in data address space:___

EXPRESSION E
lugar onde a expresso ser armazenada enter expression:_____

COMMAND FILE F
load/save keypress sequences command file: Load save: Open Close Restart

L
command file to load enter filename:_____

O
command file to open enter filename:_____

C
fecha archivo

R
reinicaliza o arquivo ou seja, volta para o comeo

MICROCONTROLADORES (MCS-51)

5 - 23

CAPTULO V

ASSEMBLER E SIMULADOR

I/O I
configure I/O file attachment I/O file: Open Close

C
detach & close I/O file close I/O files: (lista de arquivos) Yes No

O
I/O input file enter filename:_____

replay input file at EOF: Yes No

Y N
I/O output file enter filename:_____

I/O trigger: Cycles Opcodes access

C
I/O rate: cycles per transfer enter decimal number:_____

I/O transfer: Mapbits mapByte

M
I/O transfer: I/O bit, memory bit, address, dir:In/Out enter expression:_____ I/O bit memory bit address qual bit do arquivo qual bit da RAM endereo do byte onde est o bit

5 - 24

MICROCONTROLADORES (MCS-51)

CAPTULO V

ASSEMBLER E SIMULADOR

LOAD L
load object files & symbol table load: Avocet Data Program Symbol_table

A
load Avocet enter filename:_____ load symbol table do .PRN load ROM com .HEX o .MIK

D
load data enter filename:_____ aloca memria durante a carga dos datos

P
load program enter filename:_____

S
load symbols enter filename:_____

MEMORY M
load object files & symbol table memory: Clear Fill Move Search searchNext

C
clear memory: lower address enter expression in data address space:___

search memory: lower address enter expression in data address space:___

clear memory: upper address enter expression in data address space:___ busca proxima ocorrncia

search memory: upper address enter expression in data address space:___

search data enter expression in data address space:___

move memory: lower address enter expression in data address space:___

fill memory: lower address enter expression in data address space:___

move memory: upper address enter expression in data address space:___

fill memory: upper address enter expression in data address space:___

move memory: destination address enter expression in data address space:___

fill value enter expression in data address space:___

MICROCONTROLADORES (MCS-51)

5 - 25

CAPTULO V

ASSEMBLER E SIMULADOR

PATCH P
peephole cross-assembler patch: Patch code Open output file Close file

O
enter filename:_____

P
patch code at PC enter mnemonic:_____

C
fecha o arquivo que guardava os patchs

QUIT Q
exit to DOS quit: Exit

RESET R
reset: Cpu Disptrace cYcles reset breakpoint: All Traplist Breakpoint

C
reset da CPU

D
reset display trace

Y
terminar contador de ciclos

B
remove select traps reset: A-R/W point B-R/W range C-write point D-write image

remove todos os address breakpoint e passpoint

reset breakpoint in trap list

SETUP U
setup: Undo

P
undo size: history holds xx steps enter decimal number:____

5 - 26

MICROCONTROLADORES (MCS-51)

CAPTULO V

ASSEMBLER E SIMULADOR

VIEW V
view traps, memory map, symbols view: Bkpts IO_files Memory_map Opc_traps Passpts Symbols

B
listagem com os breakpoints

M
listagem com: Code space: xxxx to xxxx Data space: xxxx to xxxx External data space: xxxx to xxxx

P
listagem com os passpoints

listagem com os IO files

listagem com os mnemonicos display symbol table view symbols: Alpha Registers Numbers Code Data eXternal Bit Sfr

C D

X B

diversas listagens com os dados solicitados

EXECUTE E
execute instruccin enter mnemonic:___

SET S
set: Memory_map Passpoints opoTions cYcles V_drive set breakpoint: Conditional Dynamic Opcode Sticky

Y
ativa o contador de ciclos

sero abordados nas pginas seguintes

select virtual memory disk drive set virtual memory drive: A B C D E F

MICROCONTROLADORES (MCS-51)

5 - 27

CAPTULO V

ASSEMBLER E SIMULADOR

continuao do comando SET

define memory space memory map: random_Access read_Only

C:

X:adr (external)

C:

X:adr

RAM memory lower address enter expression in code address space:___

ROM memory lower address enter expression in code address space:___

RAM memory upper address enter expression in code address space:___

ROM memory upper address enter expression in code address space:___

continuao do comando SET

count instead of trap on activation pass: A-R/W point B-R/W range C-write point D-write range

A
R/W pass address or register enter expression in code address space:___

D
W-O pass address or register enter expression in code address space:___

R/W pass lower address enter expression in code address space:___

W-O pass lower address enter expression in code address space:___

R/W pass upper address enter expression in code address space:___

W-O pass upper address enter expression in code address space:___

5 - 28

MICROCONTROLADORES (MCS-51)

CAPTULO V

ASSEMBLER E SIMULADOR

continuao do comando SET

trap when condition match set conditions: Indirect Mask Range Value

I
condition: expression=value of byte at (address at BKPT address+offset) enter expression:___

M
mask format: 0, 1or X enter mask:___

condition: expression=offset value in data space enter expression:___ aqui se pode entrar com um condition: Passpoint valor numrico n breakpoint: Dynamic Sticky antes de se escolher a opo; com isto o trap P D S gerado depois de D S n ocorrncias P: count instead of trap on activation D: cleared automatically upon trap S: trap set until clerared using reset A-R/W point B-R/W range C-write point D-write range

condition: expression=offset value of byte at BKPT address enter expression:___

condition: expression=low limit value of byte at BKPT address enter expression:___

condition: expression=high limit value of byte at BKPT address enter expression:___

C D

R-O pass address or register enter expression in code address space:___

A
R/W pass address or register enter expression in code address space:___

R-O pass lower address enter expression in code address space:___

R/W lower address enter expression in code address space:___

R-O pass upper address enter expression in code address space:___

R/W upper address enter expression in code address space:___

MICROCONTROLADORES (MCS-51)

5 - 29

CAPTULO V

ASSEMBLER E SIMULADOR

continuao do comando SET

set chip configuration set option: PAGE

page port P2 change external data drive with port P2 from [Yes or No] to : Yes No

Y
use P2 for upper byte address

N
zero upper byte address

continuao do comando SET

dynamic opcode trap enter mnemonic:____

HELP H
syntax & key definitions help: Commands Display Simulation Avocet

telas diversas com explicaes

5 - 30

MICROCONTROLADORES (MCS-51)

CAPTULO V

ASSEMBLER E SIMULADOR

5.9. TELAS DE AJUDA


5.9.1. Ajuda para os Comandos 5.9.2. Ajuda para o Display 5.9.3. Ajuda para a Simulao
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 F5 Speed: velocidade de simulao ALT+F5 Label Toggle Label: endereos e operandos simbolicamente ADDR: sem smbolos na desassemblagem F6 Display Toggle ON: a tela atualizada a cada instruo OFF: somente janelas de trace so atualizadas at que um trap ocorra ALT+F6 Trace Toggle ON: a janela atualizada mesmo quando o display est OFF OFF: a janela atualizada quando o disply est ON F8 Skip/Toggle: sai ou entra passo a passo em instrues CALL Teclas de controle de modo: ESC alterna modo display / comando F7 modo do cursor: Hex, ASCII, BIN CTRL+PgUp alterna o modo de scroll (rolamento) Movimento do cursor: setas do teclado movem 1 posio em cada sentido

MICROCONTROLADORES (MCS-51)

5 - 31

CAPTULO V HOME/END primeiro/ltimo caracter da janela PgUp/PgDn rola uma janela para cima/baixo Movimento entre janelas: RETURN vai para a ltima posio alterada CTRL + : move para a janela direita CTRL + : move para a janela esquerda Teclas de edio de objetos: +/- incrementa/decrementa byte/word/flag Ins alterna byte/nibble/bit (dependendo da posio) CTRL-END apaga da posio para o final do objeto CTRL-HOME apaga o objeto inteiro

ASSEMBLER E SIMULADOR

5.9.4. Ajuda para o AVOCET 5.9.5. Tela do 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.

6.1. REGISTROS ENVOLVIDOS


Os 4 registros, P0, P1, P2 e P3 so na realidade os latches das portas e no os pinos da CPU. Algumas instrues operam com o contedo destes latches e outras com os valores dos pinos. As portas paralelas so utilizadas pela CPU para efetuar vrias tarefas: P0 byte inferior de endereos e dados ==> BUS P2 byte superior de endereos P3 0 RXD 1 TXD 2 *INT0 3 *INT1 4 T0 5 T1 6 *WR 7 *RD - entrada serial - sada serial - interrupo externa 0 - interrupo externa 1 - entrada externa para o contador 0 - entrada externa para o contador 1 - strobe para escrita na memria de dados externa - strobe para leitura da memria de dados externa

Durante uma operao de escrita ou leitura de memria de dados, por exemplo, os dados das portas P0 e P2 so removidos e por eles se emitem os endereos e dados. Terminadas as operaes, o contedo do latch reaparece nos pinos da CPU. Existem detalhes sobre a utilizao de cada porta como entrada ou sada mas, de uma forma geral, pode-se dizer que: Sada: Basta escrever 0 ou 1 na porta que o nvel lgico aparece nos pinos corretos. Entrada: todos as portas (exceto P0) possuem um pull-up interno; quando se escreve 1 em um bit da porta, diz-se que este bit est programado como entrada pois dispositivos externos podem colocar (forar) este 1 em 0. Assim, para ter uma porta como entrada, escreve-se 1 e depois com a leitura ser lido 1 ou 0 de acordo com o nvel que externamente est aplicado no pino. Devido a isto, as portas so chamadas quasi-bidirecionais.

MICROCONTROLADORES (MCS-51)

6 - 1

CAPTULO VI

PORTAS PARALELOS

6.2. DESCRIO DO FUNCIONAMENTO


Cada porta paralela constituda por trs partes: um registro latch (SFR ==> P0,P1,P2,P3) um driver de sada Um buffer de entrada

Os drivers de sada de P0 e P2 e o buffer de entrada de P0 so usados para acessar a memria externa de programa ou de dados.

6.2.1. Porta P1
A figura 6.1 ilustra o esquema eltrico da porta 1.
READ LATCH Vcc

PULL-UP INTERNO BUS INTERNO

SFR P1
D WRITE TO LATCH Q G S FET D CLK P1.i Q LATCH

PINO DA CPU

READ PIN

Figura 6.1. Esquema para um bit da porta P1. 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

Vcc

T1

CORTADO

PULL-UP PINO DA CPU EM NVEL ALTO (1) G G=0 FET CORTADO S FET D

O PINO FORNECE CORRENTE PARA O TTL

D1 SADA TTL EM NVEL BAIXO (0) SATURADO 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 FUNCTION (AOF)

PULL-UP INTERNO PINO G S FET D DA CPU

BUS INTERNO

SFR P3
Q D CLK Q P3.i LATCH

WRITE TO LATCH

READ PIN

Figura 6.3. Esquema para um bit da porta P3. 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 1 Q=1 G=0 FET OFF sada=0 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 CTRL BUS INTERNO WRITE TO LATCH PINO M G S FET D DA CPU

SFR P2
D CLK P2.i Q LATCH Q

I1 Q I0 MUX 2/1

READ PIN

Figura 6.4. Esquema para um bit da porta P2. O funcionamento muito semelhante aos casos anteriores. Se o CONTROL = 0 e for escrito: 0 Q=0 M=0 G=1 FET ON sada=0 1 Q=1 M=1 G=0 FET OFF sada=1 (pull-up) Se o CONTROL = 1, ADDRESS controla o nvel no pino. Assim, com CONTROL = 1: ADDR=0 M=0 G=1 FET ON sada=0 ADDR=1 M=1 G=0 FET OFF sada=1 (pull-up) De acordo com o nvel lgico do sinal de CONTROL, permite-se a sada ao latch de P2 ou ao byte alto de endereo.

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:
READ LATCH

bus de dados da CPU byte menos significativo dos endereos porta paralela (bidirecional verdadeira)
ADDRESS Y DATO Vcc

CONTROL

G1

S1 F1 D1 PINO

BUS INTERNO

SFR P0
D WRITE TO LATCH Q CLK P0.i Q LATCH I1 I0

CTRL G2 S2 F2 D2 DA CPU

MUX 2/1

READ PIN

Figura 6.5. Esquema para um bit da porta P0. 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 1 *Q=0 G2=0 F2 OFF sada=0 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 ADR/DT=1 G1=1 F1 ON e G2=0 F2 ON F2 OFF sada=0 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 Se CONTROL=0 G1=0 F1 OFF Se Q=1 *Q=0 G2=0 F2 OFF Se F1 e F2 esto em OFF alta impedncia. A leitura da memria feita com o sinal READ PIN.

PORTAS PARALELOS

6.3. ESCRITA NAS PORTAS


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 S PINO DA CPU

FET G DEPLETION MODE

0,25 mA

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 B

D 30 mA S PINO DA CPU

FET ENHANCED MODE

Figura 6.7. Controle para o FET (enhanced mode). (HMOS)

6 - 6

MICROCONTROLADORES (MCS-51)

CAPTULO VI

PORTAS PARALELOS

Na figura 6.8 est o esquema completo da sada da porta paralela.


VCC

RETARDO 2 CLOCKS

0 1-->0

ENHANCEMENT MODE FET 0-->1 G

D S

D S

DEPLETION MODE FET

PINO DA CPU D FET S

Q 1 --> 0 (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 ANL ORL XRL JBC CPL INC DEC Exemplo ANL ORL XRL JBC CPL INC DEC P1,A P2,A P3,A P1.1,LB (pula se bit=1 e zera o bit) P3.0 P2 P2

MICROCONTROLADORES (MCS-51)

6 - 7

CAPTULO VI DJNZ MOV CLR PX.Y,C PX.Y DJNZ MOV CLR SETB P3,label P1.0,C P1.2 P1.3

PORTAS PARALELOS

SETB PX.Y

Pode parecer que as 3 ltimas instrues no so do tipo "read-modify-write". Na realidade, lido todo o byte da porta, o bit considerado alterado e o novo byte devolvido para a porta. Uma razo para usar o dado do latch e no o valor do pino evitar um equvoco na interpretao do nvel de tenso do pino, como por exemplo, quando um bit de uma porta est sendo usado para acionar a base de um transistor.
VCC

LED

P1.0

NPN

Figura 6.9. Bit 0 da porta 1 sendo usado para acender um led atravs de um transistor. Quando P1.0=1 LED aceso Quando P1.0=0 LED apagado 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.

EXERCCIO 6.1. PISCA1 E PISCA2


Acender os 3 leds em seqncia. No esquecer de colocar um retardo. O led se acende quando se pe nvel alto em um bit da porta.
;PISCA1.ASM ; RTD VERMELHO AMARELO VERDE ;

EQU EQU EQU EQU

60000 P1.0 P1.1 P1.2

;65536>RTD>256

INIC 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

DEFSEG PROG, CLASS=CODE, START=0 SEG PROG ORG RESET MOV P1,#0 ;APAGA OS LEDS SETB VERMELHO LCALL RETARD CLR VERMELHO SETB AMARELO LCALL RETARD CLR AMARELO SETB VERDE LCALL RETARD CLR VERDE SJMP AQUI

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
0 7 0 6 1 5 0 4 0 3 1 2 0 1 0 0 1

PUERTO P1 X
1 -- LED ACESO 0 -- LED APAGADO

VERDE AMARELO

VERMELHO

Figura 6.10. Uso do Acc e CY para acender leds em seqncia.

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 VERMELHO AMARELO VERDE ;

EQU EQU EQU EQU

60000 P1.0 P1.1 P1.2

;65536>RTD>256

INIC 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

DEFSEG PROG, CLASS=CODE, START=0 SEG PROG ORG RESET MOV A,#01001001B ; 01 CLR C MOV P1,A ACALL RETARD RLC A SJMP AQUI

001

001

EXERCCIO 6.2. CHAVE1, CHAVE2 E CHAVE3


Usando os trs leds como um contador de trs bits, construir um programa que conte os acionamentos da chave SW2 (a contagem ser observada nos trs leds). Note que a chave no necessita de pull-up porque usa o pull-up interno da porta. A figura 6.11 ilustra as conexes.

VCC LED VERMELHO R4 220 6 LED AMARELO R5 220 8 LED VERDE R6 220 SW2 P1.3 PUSHBUTTON

P1.O

3 U5B 74LS14 5 U5C 74LS14 9 U5D 74LS14

P1.1

P1.2

Figura 6.11. Conexes de leds e chave no circuito de prticas. No primeiro programa ser usada uma soluo simples, que tem o problema de bouncing.

6 - 10

MICROCONTROLADORES (MCS-51)

CAPTULO VI
;CHAVE1.ASM ; SW2 ;

PORTAS PARALELOS

EQU

P1.3

INIC AQUI1

AQUI2

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

No segundo programa apresentada uma soluo para eliminar o bouncing utilizando retardos. Ao detectar uma transio na chave, o programa aguarda um tempo para que se extinga o bouncing. O tempo que se deve aguardar determinado de forma emprica.
;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

A soluo de aguardar um tempo depois de detetar uma transio na chave funciona bem, mas oferece duas principais desvantagens. A primeira que se aguarda um intervalo de tempo fixo, ou seja, se a chave de baixa qualidade trocada por uma de melhor qualidade e que possua pouco bouncing, tem-se que mudar o programa. A segunda desvantagem sua vulnerabilidade a rudos pois estes podem provocar acionamentos indevidos. O programa chave 3, apesar de ser simples, soluciona estes problemas. Usam-se duas rotinas que detectam transies de 01 e de 1 0; o que se especifica quanto tempo a chave deve estar em 0 ou em 1 para que se considere o acionamento vlido (para que se considere o fim do bouncing).

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
O 8051 apresenta 5 tipos de interrupes: 2 externas 2 timers 1 serial Alguns outros membros da famlia MCS-51 podem apresentar outras interrupes; por exemplo, o 8052 tem uma interrupo adicional dedicada ao timer 2.

7.2. REGISTROS ENVOLVIDOS


Os registros dedicados s interrupes permitem um controle total sobre as mesmas. Cada interrupo pode ser habilitada ou desabilitada individualmente. Tambm possvel desabilitar todas as interrupes de uma s vez. O registro IE (Interrupt Enable) controla a habilitao das interrupes e ilustrado na figura 7.1. 1 7 6 habilita 5 4 ES 0 3 ET1 desabilita 2 EX1 1 ET0 0 EX0 EXTERNAL 0 TIMER 0 EXTERNAL 1 TIMER 1 SERIAL TODAS Figura 7.1. Registro IE - habilitao de interrupes. 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

IE

EA

CAPTULO VII

INTERRUPES

recebidas interrupes de diferentes prioridades, a de alta prioridade atendida primeiro. Se forem recebidas duas interrupes de igual prioridade, determina-se por uma seqncia interna de polling (consulta) qual ser atendida primeiro. Assim, dentro de um mesmo nvel de prioridade, existe uma seqncia de atendimento (a seqncia do polling). O contedo do registro IP define as prioridades e ilustrado na figura 7.2. 1 7 6 prioridade alta 5 4 PS 3 PT1 0 2 PX1 prioridade baixa 1 PT0 0 PX0 EXTERNAL 0 TIMER 0 EXTERNAL 1 TIMER 1 SERIAL Figura 7.2. Registro IP - prioridade das interrupes. 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 TR1 5 TF0 4 TR0 3 IE1 2 IT1 1 IE0 0 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 Figura 7.3. Registro TCON - diversas funes para interrupes e timers. TF1 flag de transbordamento (overflow) do contador/temporizador 1. Ativado por hardware quando h transbordamento no contador do timer 1 (timer/counter 1). apagado por hardware quando o processador desviado para a rotina de atendimento da interrupo. TR1 bit de partida/parada (run/stop) do contador/temporizador 1.

IP

TCON

TF1

7 - 2

MICROCONTROLADORES (MCS-51)

CAPTULO VII TF0

INTERRUPES

flag de transbordamento (overflow) do contador/temporizador 0. Ativado por hardware quando h transbordamento no contador do timer 0 (timer/counter 0). apagado por hardware quando o processador desviado para a rotina de atendimento da interrupo.

TR0 IE1

bit de partida/parada (run/stop) do contador/temporizador 0. flag da interrupo externa 1. ativado (colocado em um) por hardware quando se detecta uma interrupo externa 1. apagado (colocado em zero) por hardware (s no modo borda) quando o processador desviado para a rotina de atendimento da interrupo.

IT1

indica se a interrupo externa 1 opera por borda ou por nvel: 1 borda de descida (), 0 nvel baixo.

IE0

flag da interrupo externa 0. ativado (colocado um) por hardware quando se detecta uma interrupo externa 0. apagado (colocado em zero) por hardware (s em modo borda) quando o processador desviado para a rotina de atendimento da interrupo.

IT0

indica se a interrupo externa 0 opera por borda ou por nvel: 1 borda de descida (), 0 nvel baixo. O flag de interrupo da porta serial est em outro registro (SCON).
0 IT0 1 EA PT0 LOW HIGH IE1 EX1 EA PX1 LOW HIGH SEQNCIA DO POLLING IE0 EX0 EA PX0 LOW HIGH ET0 0 IT1 1 EA PT1 LOW HIGH ES IE EA PS LOW IP

*INT0 INT EXT 0 TF0 TIMER 0 *INT1 INT EXT 1 TF1 TIMER 1 TI RI SERIAL

HIGH

ET1

Figura 7.4. Esquema das interrupes na famlia MCS-51.

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 Externa 0 Timer 0 Externa 1 Timer 1 Serial IE0 TF0 IE1 TF1 RI+TI 00H 03H 0BH 13H 1BH 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.3. MANEJO DE INTERRUPES


Os flags das interrupes so amostrados na segunda fase do quinto estado (S5P2) de cada ciclo de mquina. As amostras so submetidas a polling (consulta) durante o prximo ciclo de mquina. A figura 7.5 ilustra a seqncia para atendimento de uma interrupo. Se um dos flags (de interrupo) est ativo durante S5P2, o prximo ciclo de polling vai detectar e identificar a interrupo a ser atendida e ser gerada uma instruo LCALL sempre que no seja bloqueada por: uma interrupo de prioridade igual ou mais alta que a que est sendo atendida, no tenha finalizado a instruo que se est processando no ciclo de polling corrente, a instruo em progresso um RETI ou uma escrita em IP ou IE.

CM1
S5P2 S6P1 S6P2

CM2

CM3

CM4

CM5

polling para decidir a interrup. coloca-se no latch as interrupes interrupo ativada no passado

LCALL para o endereo da rotina de interrupo

incio da rotina de interrupo

Figura 7.5. Seqncia para atendimento a uma 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.

7.4. INTERRUPES EXTERNAS


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
RESPOSTA MAIS RPIDA CM1 S5P2 PEDIDO CM2 POLLING CM3 CM4 CM5 ROTINA DE INTERRUPO

INTERRUPES

LCALL

RESPOSTA MAIS TARDIA CM1 S5P2 PEDIDO CM2 (RETI) POLLING CM3 CM4 CM5 CM6 CM7 CM8 CM9 ROTINA DE INTERRUPO

INSTRUO MUL OU DIV

LCALL

Figura 7.6. Latncia para as interrupes. Como os flags de interrupo serial e dos temporizadores/contadores so ativados em S5P2, o que foi estudado vlido para qualquer interrupo. Caso seja necessrio, pode-se usar um esquema como o da figura a seguir para expandir as interrupes externas:

7.5. PASSO A PASSO


A estrutura de interrupo do MCS-51 permite, de forma muito simples, uma implementao para a execuo de programas passo a passo (single step). Como j foi visto, uma interrupo no ser atendida quando uma interrupo de igual prioridade esteja sendo atendida e, quando esta interrupo termina com um RETI, obrigatoriamente uma instruo ser executada antes que se aceite a nova interrupo.

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
EXERCCIO 7.1. LED_INT1, LED_INT2 E LED_INT3
No circuito de prticas existe um pushbutton (SW3) para a interrupo 1 que ser usado para fazer acender os leds (vermelho, amarelo e verde) em seqncia. Cada vez que a chave for acionada, uma interrupo ser gerada e a rotina de atendimento interrupo dever trocar o led aceso.
;LED_INT1.ASM ; ; ; INICIO

DEFSEG PROG, CLASS=CODE, START=0 SEG PROG ORG AJMP ORG AJMP ORG MOV CLR MOV SETB SETB SJMP RESET INICIO EXTI1 EXT1 50H A,#01001001B C P1,A EX1 EA $

; ;ROTINA PARA ATENDER A INTERRUPCAO EXTERNA 1 EXT1 RLC A ;ACENDER LEDS EM SEQUENCIA MOV P1,A RETI END

;HABILITAR INT. EXT. 1 ;HABILITAR FLAG GERAL ;LOOP INFINITO

Nota-se um problema: os 3 leds se acendem quando a chave acionada e s um led fica aceso quando se libera a chave, mas nunca se sabe qual. Este problema acontece porque a rotina de interrupo muito mais rpida que a chave. Ao retornar da interrupo, a chave ainda est acionada e uma nova interrupo gerada. Para solucionar isso, pode-se monitorar o sinal INT1 (P3.3) e s permitir o retorno depois de que a chave esteja liberada (vai para um). Para ilustrar esta soluo, o programa LED_INT2.ASM foi implementado. O programa idntico ao anterior exceto por uma instruo antes do retorno da interrupo.
;LED_INT2.ASM SW3 ; ; ; INICIO

DEFSEG PROG, CLASS=CODE, START=0 SEG PROG EQU P3.3 ORG AJMP ORG AJMP ORG MOV CLR MOV SETB SETB SJMP RESET INICIO EXTI1 EXT1 50H A,#01001001B C P1,A EX1 EA $

; ;ROTINA PARA ATENDER A INTERRUPCAO EXTERNA 1 EXT1 RLC A ;ACENDER LEDS EM SEQUENCIA MOV P1,A

;HABILITAR INT. EXT. 1 ;HABILITAR FLAG GERAL ;LOOP INFINITO

7 - 8

MICROCONTROLADORES (MCS-51)

CAPTULO VII
AQUI JNB CLR RETI END SW3,AQUI IE1 ;AGUARDAR LIBERAR SW2

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 () ? devero acender na seqncia correta.
;LED_INT3.ASM ; ; ; INICIO

Supe-se que os leds

DEFSEG PROG, CLASS=CODE, START=0 SEG PROG ORG AJMP ORG AJMP ORG MOV CLR MOV SETB SETB SETB SJMP RESET INICIO EXTI1 EXT1 50H A,#01001001B C P1,A IT1 EX1 EA $

; ;ROTINA PARA ATENDER A INTERRUPCAO EXTERNA 1 EXT1 RLC A ;ACENDER LEDS EM SEQUENCIA MOV P1,A RETI END

;EXT 1 OPERA POR BORDA ;HABILITAR INT. EXT. 1 ;HABILITAR FLAG GERAL ;LOOP INFINITO

Talvez se note um acionamento indevido ao liberar a chave porque a chave ruidosa e, ao ser liberada, aparece o bouncing (seqncias de zeros e uns). Uma soluo definitiva usar a rotina de eliminao de bouncing para controlar a transio de 1 para 0.

EXERCCIO 7.2. PASSO_EXE.ASM


Escrever um programa que faa acender os leds em seqncia (vermelho, amarelo e verde). Executar esse programa com um controle passo a passo usando a interrupo 1. A soluo muito simples. No programa principal estar somente uma seqncia de instrues que acende os leds segundo a ordem especificada (sem retardo). A interrupo externa 1 estar programada para operar por nvel. A rotina de interrupo aguarda que a chave SW3 seja acionada (v a zero); quando isto ocorre, retorna-se da rotina de interrupo. Ao regressar, a entrada INT1 estar em zero (pela chave SW3) e uma nova interrupo gerada. Ou seja, a cada acionamento da chave SW3, executada uma instruo do programa principal. A primeira interrupo, para que o programa entre em controle passo a passo, provocada por software ao ativar o bit IE1.
;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
SW3 ; ; ; ; INIC EQU P3.3

INTERRUPES

DEFSEG PROG, CLASS=CODE, START=0 SEG PROG ORG AJMP ORG AJMP ORG MOV CLR MOV SETB SETB SETB NOP RLC MOV SJMP ORG ACALL ACALL RETI RESET INIC EXTI1 EXT1 50H A,#01001001B C P1,A EX1 EA IE1 A P1,A PRINCIPAL 100H RBT_0_1 RBT_1_0 ;CODIGO PARA ACENDER ;LEDS EM SEQUENCIA ;HABILITAR INT 1 ;HABILITAR GERAL ;PROVOCAR INT 1 ;AQUI O PROG INTERROMPE ;RODAR CODIGO ;ACENDER LEDS ;RETORNAR ;TRANSICAO DE 0 A 1 ;TRANSICAO DE 1 A 0

PRINCIPAL ; EXT1

; ;ELIMINAR BOUNCING NAS TRANSICOES DE 0 PARA 1 RBT_0_1 MOV R7,#RTD LB1 JNB SW3,RBT_0_1 DJNZ R7,LB1 RET ; ;ELIMINAR BOUNCING NAS TRANSICOES DE 1 PARA 0 RBT_1_0 MOV R7,#RTD LB2 JB SW3,RBT_1_0 DJNZ R7,LB2 RET END

7 - 10

MICROCONTROLADORES (MCS-51)

CAPTULO VIII

TEMPORIZADORES / CONTADORES

CAPTULO VIII TEMPORIZADORES / CONTADORES


8.1. INTRODUO
O 8051 tem dois registros contadores de 16 bits, denominados TIMER 0 e TIMER 1, dedicados s funes de contagem e temporizao (counter/timer-contador/temporizador). H uma importante distino entre os conceitos de contador e temporizador. Quando opera como temporizador, o registro incrementado a cada ciclo de mquina (usa como base o cristal da CPU). O sinal de contagem aparece com 1/12 da freqncia do clock. Quando opera como contador, o registro incrementado de acordo com o sinal que se coloca nas entradas T1 e T0, ou seja, o contador opera a cada transio de 1 para 0 (borda de descida ) na entrada T0 ou T1. Deve-se ter um cuidado quando em operaes em modo contador: j se sabe que as entradas so amostradas durante S5P2 de cada ciclo de mquina (figura 3.5). Quando em um ciclo de mquina a entrada detectada em 1 e depois em 0, no prximo ciclo o contador incrementado. O incremento acontece em S3P1 do ciclo seguinte ao que foi detectada a transio. Para garantir que o nvel correto tenha sido amostrado, necessrio que o sinal de entrada (o sinal que vai acionar os contadores) permanea pelo menos um ciclo de mquina em nvel alto e pelo menos outro ciclo de mquina em nvel baixo, quer dizer, a mxima freqncia que responder o contador de 1/24 da freqncia de clock. O sinal de entrada pode ter qualquer "duty cycle", desde que se respeite a restrio antes mencionada.

8.2. REGISTROS ENVOLVIDOS


Dois registros SFR so utilizados para controlar as funes e operaes do temporizador/contador: em TMOD especifica-se o modo de operao e em TCON controla-se a operao. A figura 8.1 ilustra o registro TMOD e a figura 8.2 ilustra o registro TCON.

MICROCONTROLADORES (MCS-51)

8 - 1

CAPTULO VIII
TIMER 1 7 6 5 4 M0 3 TIMER 0 2 1

TEMPORIZADORES / CONTADORES

0 M0 BIT0 PARA DEFINIR MODO BIT1 PARA DEFINIR MODO SELETOR CONTADOR/TEMPORIZADOR CONTROLE DO GATE BIT0 PARA DEFINIR MODO BIT1 PARA DEFINIR MODO SELETOR CONTADOR/TEMPORIZADOR CONTROLE DO GATE

TMOD

GATE C/*T M1

GATE C/*T M1

Figura 8.1. Descrio do registro TMOD. GATE especifica como ser feito o controle: se GATE = 1 conta somente se TR1=1 e INT1=high, (idem para TR0 e INT0) se GATE = 0 conta somente se TR1=1 (controle somente por software) (GATE especifica se INT1 ser usado para controlar o funcionamento do contador/temporizador pode ser usado para medir a largura de pulsos externos ligados a INT0 ou INT1) C/*T seleciona modo contador ou temporizador: se C/*T = 1 modo contador (conta usando a entrada T1) se C/*T = 0 modo temporizador (conta a cada ciclo de mquina) M1 M0 seleciona o modo de operao: 0 0 1 1 0 1 0 1 THi temporizador/contador de 8 bits e TLi um pre-scaler de 5 bits, THi e TLi formam um temporizador/contador de 16 bits, contador/temporizador de 8 bits com auto-recarga (TLi conta e THi valor para recarga), TL0 contador/temporizador de 8 bits (usando TR0, *INT0 e TF0) TH0 contador/temporizador de 8 bits (usando TR1, *INT1 e TF1) TH1 e TL1 parado (mas pode operar em outros modos)

8 - 2

MICROCONTROLADORES (MCS-51)

CAPTULO VIII 7 6 TR1 5 TF0 4 TR0 3 IE1 2 IT1

TEMPORIZADORES / CONTADORES 1 IE0 0 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 Figura 8.2. Descrio do registro TCON.

TCON

TF1

TF1

flag de transbordamento (overflow) do contador/temporizador 1. Ativado por hardware quando h transbordamento no timer 1. apagado por hardware quando o processamento desviado para a rotina de interrupo.

TR1 TF0

bit de partida/parada (run/stop) do contador/temporizador 1. flag de transbordamento (overflow) do contador/temporizador 0. Ativado por hardware quando h transbordamento no timer 0. apagado por hardware quando o processamento desviado para a rotina de interrupo.

TR0 IE1

bit de partida/parada (run/stop) do contador/temporizador 0. 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. Modos de operao


Os dois contadores/temporizadores (timer1 e timer0) podem trabalhar em 4 modos de operao que so selecionados empregando os bits M1 e M0 do registro TMOD. Os modos 0, 1 e 2 so iguais para os 2 contadores/temporizadores mas o modo 3 diferente.

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 C/*T=0 C/*T=1 PIN T1

CONTROL

(8 bits) TH1 xxxx xxxx

(5 bits) TL1 ???x xxxx

OVER FLOW

TF1

INTERRUPO

TR1 GATE *INT1 (PINO)

TIMER 1 MODO 0

Figura 8.3. Diagrama em blocos para o TIMER 1 em MODO 0.

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
CLOCK 1/12 C/*T=0 C/*T=1 PIN T1 CONTROL

TEMPORIZADORES / CONTADORES

(8 bits) TH1 xxxx xxxx

(8 bits) TL1 xxxx xxxx

OVER FLOW

TF1

INTERRUPO

TR1 GATE *INT1 (PINO)

TIMER 1 MODO 1

Figura 8.4. Diagrama em blocos para o TIMER 1 em MODO 1.

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 C/*T=0 C/*T=1 PIN T1

CONTROL

(8 bits) TL1 xxxx xxxx

OVER FLOW

TF1

INTERRUPO

RECARGA TH1 xxxx xxxx (8 bits)

TR1 GATE *INT1 (PINO)

TIMER 1 MODO 2
Figura 8.5. Diagrama em blocos para o TIMER 1 em MODO 2.

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

como se existem 2 contadores/temporizadores de 8 bits (TH0 e TL0) e outro de 16 bits (timer 1). O timer 1, entretanto, pode ser usado para operar em qualquer outro modo (0, 1 ou 2) e usa-se o modo 3 para det-lo. No h problemas porque os modos so independentes. Tambm se pode usar o timer 1 (em modo 2) para gerar o "baud rate" da porta serial.
CLOCK 1/12 C/*T=0 C/*T=1 PIN T0 TR0 GATE *INT0 (PIN) CONTROL (8 bits) TH0 xxxx xxxx TR1 OVER FLOW TF1

CONTROL

(8 bits) TL0 xxxx xxxx

OVER FLOW

INTERRUPO TF0 TIMER 0

TIMER 0 MODO 3

INTERRUPO TIMER 1

Figura 8.6. Diagrama em blocos para o TIMER 0 em MODO 3.

8.4. EXERCCIOS
EXERCCIO 8.1. LED_10HZ
Acender os leds vermelho, amarelo e verde a uma freqncia de 10 Hz. Para solucionar esse exerccio necessrio gerar um retardo equivalente ao perodo de 10 Hz. A figura 8.7 ilustra o clculo do valor do contador para gerar esse retardo.

CLOCK CLOCK 12*N

1/12

1/N CLOCK 12*F

F=

N=

Figura 8.7. Clculo de N para gerar uma determinada freqncia F. Se F=10 Hz e CLOCK=3,575611 Hz, ento N=29797. Como este um contador que conta para cima, temos que subtrair este valor de 65536. Com isto, N=65536-29797=35739 ou 8B9BH. Na realidade, a freqncia gerada no ser exatamente 10 Hz mas de um valor muito prximo: F = 3,575611 / 12*29797 = 9,99 Hz

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.

TMOD GATE 0

C/*T 0

M1 0

M0 0

GATE 0

C/*T 0

M1 0

M0 1

Figura 8.8. Valor a ser programado em TMOD.

IE

EA 1

ES 0

ET1 0

EX1 0

ET0 1

EX0 0

Figura 8.9. Valor a ser programado em IE.


;LED_10HZ.ASM ; ; DEZ_HZ ; ; ; INIC

DEFSEG PROG, CLASS=CODE, START=0 SEG PROG EQU ORG AJMP ORG AJMP ORG MOV MOV MOV MOV MOV MOV CLR SETB SJMP ORG MOV MOV RLC MOV RETI END 35739 RESET INIC TIMER0 TIM0 50H TL0,#LOW DEZ_HZ TH0,#HIGH DEZ_HZ TMOD,#1 ;TIMER 0 EM MODO 1 IE,#82H P1,#0 ;APAGAR TODOS OS LEDS A,#01001001B C TR0 $ 100H TL0,#LOW DEZ_HZ TH0,#HIGH DEZ_HZ A P1,A ;REINICALIZAR ;O CONTADOR

; TIM0

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

MOV ADD MOV MOV

A,#LOW (DEZ_HZ+2) A,TL0 TL0,A TH0,#HIGH (DEZ_HZ+2) ;1 ciclo ;1 ciclo

EXERCCIO 8.2. LED_1HZ


Acender os leds vermelho, amarelo e verde a uma freqncia de 1 Hz. A soluo idntica ao exerccio anterior, mas vai surgir uma dificuldade ao calcular os valores de recarga: CLOCK=3575611 Hz e F=1 Hz N=3575611 / 12*1 = 297968 Como se pode ver, o valor de recarga muito grande (297 968 > 65 536) e impede a utilizao do temporizador. Uma boa sada utilizar o esquema do exerccio anterior (com 10 Hz) e adicionar, por software, um divisor por 10.
;LED_1HZ.ASM ; ; DEZ_HZ DIVISOR ; ; ; INIC

DEFSEG PROG, CLASS=CODE, START=0 SEG PROG EQU EQU ORG AJMP ORG AJMP ORG MOV MOV MOV MOV MOV MOV MOV CLR SETB SJMP ORG MOV MOV DJNZ MOV RLC MOV RETI END 32203 10 RESET INIC TIMER0 TIM0 50H TL0,#LOW DEZ_HZ TH0,#HIGH DEZ_HZ R7,#DIVISOR ;PREPARAR DIVISAO POR 10 TMOD,#1 ;TIMER 0 EM MODO 1 IE,#82H P1,#0 ;APAGAR TODOS OS LEDS A,#01001001B C TR0 $ 100H TL0,#LOW DEZ_HZ TH0,#HIGH DEZ_HZ R7,FIM R7,#DIVISOR A P1,A ;REINICALIZAR ;O CONTADOR ;DIVIDIR POR 10

; TIM0

FIM

8 - 8

MICROCONTROLADORES (MCS-51)

CAPTULO VIII

TEMPORIZADORES / CONTADORES

EXERCCIO 8.3. ONDA1


Gerar atravs de P1.7 uma onda com o seguinte formato:

1 mseg

40 microseg
Figura 8.10. Sinal a ser gerado pela sada P1.7. Usando N = (t*CLOCK)/12, calcula-se o valor de recarga para o temporizador. Sero programados dois retardos alternadamente de forma a gerar o sinal pedido. Para t=1 ms N=298 65536-298=65238 Para t=40 s N=12 65536-12 =65524
;ONDA1.ASM ; SAIDA R_1MS R_40MICRO ; ; ; INICIO

DEFSEG PROG, CLASS=CODE, START=0 SEG PROG EQU EQU EQU ORG AJMP ORG AJMP ORG MOV MOV MOV MOV CLR SETB SJMP JB MOV MOV SETB RETI MOV MOV CLR RETI END P1.7 65238 65524 RESET INICIO TIMER0 TIM0 50H TL0,#LOW R_1MS TH0,#HIGH R_1MS TMOD,#1 ;TIMER 0 EM MODO 1 IE,#82H ;EA=1 E ET0=1 SAIDA TR0 ;PARTIDA DO TIMER 0 $ ;LOOP INFINITO SAIDA,LB1 TH0,#LOW (R_40MICRO+4) TL0,#HIGH (R_40MICRO+4) SAIDA TH0,#LOW (R_1MS+4) TL0,#HIGH (R_1MS+4) SAIDA ;2 ;2 ;2 ;1 ;2 CICLOS CICLOS CICLOS CICLO CICLOS ;RETARDO DE 1 MILISEG ;RETARDO DE 40 MICROSEG

; TIM0

LB1

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

EXERCCIO 8.4. ONDA2


Gerar atravs de P1.7 uma onda com o seguinte formato:

600 microseg

25 microseg
Figura 8.11. Sinal a ser gerado pela sada P1.7. Usando N = (t*CLOCK)/12, calcula-se o valor de recarga para o temporizador. O segredo ser trabalhar com o temporizador em modo 2 (os dois valores de recarga so menores que 256) e a rotina de interrupo apenas muda o valor da recarga (que est em TH0). Para t=600 seg N=179 256-179=77 Para t=25 seg N=7
;ONDA2.ASM ; SAIDA R_600MICRO R_25MICRO ; ; ; INICIO

256-7 =249

DEFSEG PROG, CLASS=CODE, START=0 SEG PROG EQU EQU EQU ORG AJMP ORG AJMP ORG MOV MOV MOV MOV CLR SETB SJMP JB MOV SETB RETI MOV CLR RETI END P1.7 77 249 RESET INICIO TIMER0 TIM0 50H TL0,#R_600MICRO ;PRIMEIRA CONTAGEM TH0,#R_25MICRO ;CONTAGEM SEGUINTE TMOD,#2 ;TIMER 0 EM MODO 2 IE,#82H ;EA=1 E ET0=1 SAIDA TR0 ;PARTIDA DO TIMER 0 $ ;LOOP INFINITO SAIDA,LB1 ;2 CICLOS TH0,#R_25MICRO ;2 CICLOS SAIDA ;1 CICLOS ;2 CICLOS TH0,#R_600MICRO SAIDA ;RETARDO DE 600 MICROSEG ;RETARDO DE 25 MICROSEG

; TIM0

LB1

8 - 10

MICROCONTROLADORES (MCS-51)

CAPTULO VIII

TEMPORIZADORES / CONTADORES

EXERCCIO 8.5. LEDS1


Acender os leds vermelho, amarelo e verde em seqncia, mudando a cada 10 pulsos em T1. Ser usado o contador/temporizador 1 como contador e programado para operar em modo 2, com um valor de recarga igual a 246 (256-10). O acumulador e carry sero usados para acender os leds na seqncia correta

TMOD GATE 0

C/*T 1

M1 1

M0 0

GATE 0

C/*T 0

M1 0

M0 01

Figura 8.12. Valor a ser programado em TMOD (contador 1, modo 2).

IE

EA 1

ES 0

ET1 1

EX1 0

ET0 0

EX0 0

Figura 8.9. Valor a ser programado em IE.


;LEDS1.ASM ; CONTA_10 ; ; ; INICIO

DEFSEG PROG, CLASS=CODE, START=0 SEG PROG EQU ORG AJMP ORG AJMP ORG MOV CLR MOV MOV MOV MOV MOV SETB SJMP RLC MOV RETI END 246 RESET INICIO TIMER1 TIM1 50H A,#01001001B C P1,A TL1,#CONTA_10 TH1,#CONTA_10 TMOD,#60H IE,#88H TR1 $ A P1,A

; TIM1

;CARREGAR CONTADOR ;VALOR DE RECARGA ;CONTADOR 1, MODO 2 ;EA=1, ET1=1 ;LIGAR CONTADOR ;LOOP INFINITO

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.

9.2. REGISTROS ENVOLVIDOS


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.

6 SM1

2 RB8

1 TI

0 RI INTERRUPO POR RECEPO INTERRUPO POR TRANSMISSO OITAVO BIT RECIBIDO OITAVO BIT PARA A TRANSMISSO HABILITAR RECEPO SERIAL COMUNICAO MULTIPROCESSADOR BIT 1 DO MODO BIT 0 DO MODO

SCON

SM0

SM2 REN TB8

Figura 9.1. Descrio do registro SCON.

MICROCONTROLADORES (MCS-51)

9 - 1

CAPTULO IX SM0 0 0 1 SM1 0 1 0 MODO 0 1 2 DESCRIO registro de deslocamento UART de 8 bits UART de 9 bits

PORTA SERIAL FREQNCIA clock/12 varivel clock/12 ou clock/64

UART de 9 bits

varivel

Figura 9.2. Modos de operao da porta serial. SM2 comunicao multiprocessador (habilitada com SM2=1): SM2=1 e em modo 1 SM2=1 e em modo 2 ou 3 ==> interrupo (RI=1) com o bit de parada (stop bit) igual a 1 ==> interrupo (RI=1) se for recebido RB8=1.

REN habilita a recepo serial (Reception Enable) TB8 oitavo bit a ser transmitido nos modos 2 e 3. RB8 oitavo bit recebido nos modos 2 e 3. TI flag de interrupo por trmino de transmisso pela porta serial: MODO 0 ativado no final do oitavo bit DEMAIS ativado no comeo do bit de parada RI flag de interrupo por recepo pela porta serial MODO 0 ativado no final do oitavo bit DEMAIS ativado na metade do bit de parada Observao: os flags TI e RI no so apagados por hardware e por isso a rotina de interrupo deve faz-lo, ou seja, estes flags devem ser zerados por software. 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 GF1 2 GF0 1 PD 0 IDL ATIVA MODO IDLE ATIVA MODO POWER DOWN BIT DE FINALIDADE GERAL BIT DE FINALIDADE GERAL

PCON

SMOD -

DOBRADOR DE BAUD RATE Figura 9.3. Descrio do registro PCON.

9 - 2

MICROCONTROLADORES (MCS-51)

CAPTULO IX

PORTA SERIAL

9.3. MODOS DE OPERAO


Existem quatro modos de operao da porta serial, cada um com uma finalidade. Ser apresentado um resumo de cada modo:

9.3.1. Modo 0 (sncrono, 8 bits)


Neste modo os dados entram e saem pelo pino RXD. O pino TXD fornece o clock para o deslocamento (shift). So transmitidos e recebidos dados de 8 bits (LSB primeiro). O baud rate de 1/12 da freqncia do clock (igual a 1 ciclo de mquina).

RX CONTROL LOAD SBUF SBUF READ SBUF BUS INTERNO WRITE SBUF TX CONTROL CLOCK (CRISTAL) 1/12 CICLO DE MQUINA PIN TXD

PIN RXD

Figura 9.4. Esquema da porta serial em modo 0. 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

9.3.2. Modo 1 (assncrono, 8 bits)


No Modo 1 so operados 10 bits com um baud rate programvel. Recebe-se pelo pino RXD e transmite-se pelo pino TXD. A figura 9.5 ilustra o frame de bits serial. O bit de partida (START) sempre zero e o bit de parada (STOP) sempre um na transmisso. Na recepo o bit de parada colocado no bit RB8.

START bit 0

bit 1

bit 2

bit 3

bit 4

bit 5

bit 6

bit 7

STOP

Figura 9.5. Frame de bits gerado pela porta serial em modo 1. Neste modo o baud rate gerado pelo contador/temporizador 1. A cada 16 (SMOD=1) ou 32 (SMOD=0) transbordamentos (overflows) enviado um pulso para o circuito serial. A figura 9.6 ilustra o esquema do gerador do baud rate e tambm apresenta algumas frmulas para o clculo do valor a ser programado no contador/temporizador.
BAUD RATE (BR) TIMER 1 1/12 1/N 1/2 BR = CLOCK 12*N*(1+SMOD)*16 N= SMOD=0 CLOCK 192*BR*(1+SMOD) SMOD=1 1/16 RX CONTROL PIN RXD TX CONTROL

PIN TXD

CLOCK

Figura 9.6. Esquema para a gerao do baud rate (BR) no modo 1. Usando o contador/temporizador 1 programa-se qualquer baud rate. Na grande maioria dos casos tem-se o baud rate e buscado o valor N a ser programado no contador/temporizador 1 (o mais cmodo usar o modo 2 - auto recarga). Um problema que sempre existe o erro gerado pela aproximao do valor a ser programado no contador/temporizador. Isto provoca a gerao de baud rates ligeiramente diferentes. 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

9.3.3. Modo 2 (assncrono, 9 bits, baud rate fixo)


Este modo opera com 11 bits e o baud rate pode ser de 1/32 ou 1/64 do clock. O bit TB8/RB8 serve para transmitir a paridade ou gerar um segundo bit de parada (TB8=1). O frame de bits usado neste modo ilustrado na figura 9.7.

START bit 0

bit 1

bit 2

bit 3

bit 4

bit 5

bit 6

bit 7

TB8

STOP

Figura 9.7. Frame de bits gerado pela porta serial no modo 2. 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) SMOD=1 CLOCK 1/12 1/2 SMOD=0 1/16 RX CONTROL PIN RXD TX CONTROL

PIN TXD

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).

9.3.4. Modo 3 (assncrono, 9bits, baud rate varivel)


idntico ao modo 2, exceto que a gerao do baud rate idntico ao modo1. A figura 9.9 ilustra o frame de bits e a gerao do baud rate.
START bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7 TB8 STOP

CLOCK

TIMER 1 1/12 1/N 1/2 BR = CLOCK 12*N*(1+SMOD)*16

SMOD=1

BAUD RATE (BR) 1/16

TX CONTROL

PIN TXD PIN RXD

SMOD=0 N= CLOCK 192*BR*(1+SMOD)

RX CONTROL

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

9.4. CUIDADOS COM A PORTA SERIAL


Nos quatro modos a transmisso se inicia quando escrito um byte em SBUF. A recepo habilitada quando REN=1 (no MODO 0 exige-se tambm RI=0). No se esquea de que somente existe uma nica interrupo dedicada porta serial, portanto ela gerada por duas condies: Trmino da transmisso de um byte flag TI Trmino da recepo de um byte flag RI Deve-se testar os flags RI e TI para determinar se a interrupo foi por transmisso ou por recepo. Os flags RI e TI devem ser apagados por software. Um outro cuidado muito importante com a gerao do baud rate. Muitas vezes no se consegue a comunicao serial devido impreciso do baud rate. Portanto o problema a seguir proposto: Programar o contador/temporizador 1 para gerar 9600 bauds para a porta serial operando em modo 3, sendo que o cristal de 4 MHz. Soluo: N = 4000000/(384*9600) = 1,085 (SMOD=0). Na soluo calculou-se que N=1,085 mas somente podem ser programados nmeros interos; assim, caso se aproxime para 1, o baud rate gerado ser de BR=4000000/384=10416,7. Ser que ir funcionar bem com esse baud rate ? Para responder esta pergunta necessrio compreender o que acontece com a transmisso serial. Esta transmisso assncrona, quer dizer, pode iniciar em qualquer instante; o inicio caracterizado pela presena de um bit de partida (START). Uma vez iniciada, deve-se garantir a durao de cada bit. Para cada byte transmitido um bit de partida, os bits de dados e um ou dois bits de parada. O que se deve buscar garantir que no haja um erro muito grande neste frame de bits. A figura 9.10 ilustra o caso da porta serial operando em modo 3.

BAUD RATE MENOR START bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7 TB8 STOP E1 BAUD RATE PROCURADO START bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7 TB8 STOP E2 BAUD RATE MAIOR START bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7 TB8 STOP

Figura 9.10. Erros provocados por diferenas no baud rate. 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

A equao pode ser simplificada para :

1 1 1 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.

9.5. Comunicao entre vrios 8051

MICROCONTROLADORES (MCS-51)

9 - 7

CAPTULO IX

PORTA SERIAL

Os modos 2 e 3 permitem interligar vrios 8051, sendo um mestre e vrios escravos. Nestes modos temos: 1 start bit; 8 bits de dados; um nono bit que vai para o bit RB8 ( na recepo) ou pode ser escolhido 0 ou 1 na transmisso escrevendo-se em TB8; 1 stop bit Note que se SM2 = 1 e RB8 = 1, a interrupo da serial ser atendida. O algoritmo de comunicao consiste em: 1) No incio, todos os escravos esto com SM2 = 1 2) Quando o mestre quiser enviar dados para algum escravo, ele escrever 1 em seu bit TB8 e ento enviar serialmente o endereo do escravo desejado, e como teremos todos os bits RB8 em 1, todos escravos sero interrompidos para verificar se seu o endereo enviado. 3) O escravo selecionado zerar o seu bit SM2 e estar preparado para receber os dados, os quais tero agora o nono bit (RB8) em 0. 4) Os demais escravos permanecero com SM2 em 1 e, dessa forma, no sero mais interrompidos pois os dados tm RB8 = 0. 5) Em resumo, o mestre envia endereos com o nono bit em 1 e os dados com o nono bit em 0, portanto, se o mestre desejar se comunicar com outro escravo basta enviar o novo endereo com o nono bit em 1.

9.6. Comunicao serial entre o 8051 e o PC


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

CIs 1488 (esquerda) e 1489 (direita)

9.7. EXERCCIOS

Exerccio 9.1. TX_SER


Usando um loop infinito, transmitir pela porta serial todos os caracteres ASCII de "0" a "Z". Usar 9600 bauds, 8 bits de dados, 1 bit de partida e 2 bits de parada. Para este caso o modo 3 o mais adequado e TB8=1 ser usado para gerar um bit de parada. A transmisso ser feita por interrupo, quer dizer, a cada byte transmitido haver uma interrupo. O contador/temporizador 1 ser programado para modo 2 (auto-recarga).

MICROCONTROLADORES (MCS-51)

9 - 9

CAPTULO IX
SM0 1 SM1 1 SM2 REN TB8 0 0 1 RB8 0 TI 0

PORTA SERIAL
RI 0

SCON

TMOD

GATE C/*T M1 0 0 1

M0 0

GATE C/*T M1 0 0 0

M0 0

IE

EA 1

ES 1

ET1 0

EX1 0

ET0 0

EX0 0

Figura 9.11. Inicializao de os registros para o exerccio 9.1. Clculo do divisor formado pelo contador/temporizador 1: N = 3575611/(384*9600) = 0,9699 1.
;TX_SER.ASM ; BR_9600 ; ; ; INIC

(TH1 = TL1 = 256 - 1 = 255).

DEFSEG PROG, CLASS=CODE, START=0 SEG PROG EQU ORG AJMP ORG AJMP ORG MOV MOV MOV SETB MOV MOV MOV SETB SJMP ORG CLR MOV INC CJNE MOV ACALL RETI MOV DJNZ RET END 255 RESET INIC SINT SERIAL 50H TMOD,#20H TH1,#BR_9600 TL1,#BR_9600 TR1 SCON,#0C8H IE,#90H A,#"0" TI $ 100H TI SBUF,A A A,#"Z"+1,SER1 A,#"0" RETARDO R7,#0 R7,AQUI ;TIMER 1 EM MODO 2 ;PROGRAMAR BAUD RATE ;INICIAR TIMER 1 ;MODO 3 COM TB8=1 ;HAB INTERRUP SERIAL ;PRIMERO ASCII ;TX PRIMEIRO ASCII ;LOOP INFINITO ;APAGAR FLAG ;TRANSMITIR ;FOI O ULTIMO ? ;REINICIALIZAR ;ATRASAR TRANSMISSAO

; SERIAL

SER1 ; RETARDO AQUI

Exerccio 9.2. RX_SER


O circuito dever responder aos seguintes comandos que chegam pela porta serial: 1 acender todos os leds R acender led vermelho A acender led amarelo V acender led verde 0 apagar todos os leds r apagar led vermelho a apagar led amarelo v apagar led verde

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 ; BR_9600 LED_VERMELHO LED_AMAR LED_VERDE CHEGOU ; ; ; INIC

DEFSEG PROG, CLASS=CODE, START=0 SEG PROG EQU EQU EQU EQU EQU ORG AJMP ORG AJMP ORG MOV MOV MOV SETB MOV MOV CLR JNB CLR CJNE CLR CLR CLR SJMP CJNE SETB SETB SETB SJMP CJNE SETB SJMP CJNE CLR SJMP CJNE SETB SJMP CJNE CLR SJMP CJNE SETB SJMP CLR SJMP CLR MOV SETB RETI END 255 P1.0 P1.1 P1.2 32.0 RESET INIC SINT SERIAL 50H TMOD,#20H TH1,#BR_9600 TL1,#BR_9600 TR1 SCON,#0D0H IE,#90H CHEGOU CHEGOU,ESPERA CHEGOU A,#"0",LB1 LED_VERMELHO LED_AMAR LED_VERDE ESPERA A,#"1",LB2 LED_VERMELHO LED_AMAR LED_VERDE ESPERA A,#"R",LB3 LED_VERMELHO ESPERA A,#"r",LB4 LED_VERMELHO ESPERA A,#"A",LB5 LED_AMAR ESPERA A,#"a",LB6 LED_AMAR ESPERA A,#"V",LB7 LED_VERDE ESPERA LED_AMAR ESPERA RI A,SBUF CHEGOU ;TIMER 1 EM MODO 2 ;PROGRAMAR BAUD RATE ;INICIAR TIMER 1 ;MODO 3 COM REN=1 ;HAB INTERRUP SERIAL ;APAGAR FLAG ;AGUARDAR UM COMANDO

ESPERA ;

;CHEGOU 0

; LB1

;CHEGOU 1

; LB2 LB3 ; LB4 LB5 ; LB6 LB7 ; SERIAL

;CHEGOU R ;CHEGOU r

;CHEGOU A ;CHEGOU a

;CHEGOU V ;CHEGOU v ;APAGAR FLAG DE INTERRUP ;COLOCAR DADO NO Acc

MICROCONTROLADORES (MCS-51)

9 - 11

BIBLIOGRAFIA

BIBLIOGRAFIA
Almoyna, Julio Martnez. "Dicionrio de Portugus-Espanhol", Ed Porto, Portugal. Becker, Idel "Dicionrio Espanhol-Portugus e Portugus-Espanhol", dcima segunda edio, Ed. Nobel, So Paulo, SP, 1992. 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. Manual da INTEL. "8 Bit Embedded Controller Handbook". 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. Nicolosi, Denys E. C. Microcontrolador 8051 detalhado, Ed. rica, So Paulo, 2000.

MICROCONTROLADORES (MCS-51)

BIBLI - 1

Você também pode gostar