Professional Documents
Culture Documents
MCS-51
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
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
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
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
LED1 (Q_VD) ON --> BOOT SERIAL (BOOT=1) OFF --> PROG RAM (BOOT=0) VCC
25V
25V
*INT1 T1
Q_VD
RUN
6 74LS74
*BOOT
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
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
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)
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
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
10-1
10-1 10-2 10-3
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
A-1
A-1 A-1 A-2 A-3 B-1
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
ROM
RAM
ENDEREOS E DADOS
CPU
PORTA PARALELA
PORTA SERIAL
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
MICROCONTROLADORES (MCS-51)
1 - 5
CAPTULO X
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
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
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.
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
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
O Reset a outra forma de terminar o modo Idle. Como o oscilador est funcionando, so necessrios apenas 24 perodos de clock. O Reset coloca em zero o bit IDL de forma assncrona e a CPU reassume a execuo a partir da instruo que ativou o IDL. Podem acontecer 2 a 3 ciclos de mquina antes que a CPU retome o controle. O hardware interno inibe o acesso RAM interna durante o perodo de modo Idle mas no os acessos aos pinos das portas. Para evitar erros, a instruo que vem em seguida ativao do IDL no deve escrever nas portas ou na memria externa.
A 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.
MICROCONTROLADORES (MCS-51)
10 - 3
CAPTULO X
TAMANHO 4 KB 4 KB 4 KB 8 KB
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
RST 1 1 1 1
*PSEN 0 0 0 0
ALE
1 1
X 1 VPP
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
8 8
8751
P2.0,1,2,3
D0...D7 50 mseg
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.
8 8
P1
8751
P2.0,1,2,3 P2.4 P2.5 P2.6 P2.7 XTAL2 4-6 MHz XTAL1 VSS
X - Don't care
Figura 10.7. O CPU 8751 em modo verificao. MICROCONTROLADORES (MCS-51) 10 - 5
CAPTULO X
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 - 6
MICROCONTROLADORES (MCS-51)
CAPTULO XI
PLACA DE TESTES
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
R_VD
U5D
9 P1.2 74LS14
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
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
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 18 PSEN 20
CE OE/VPP 2732
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
11 - 4
MICROCONTROLADORES (MCS-51)
CAPTULO XI
PLACA DE TESTES
VCC
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
(ENTRADA 9V DC)
PHONEJACK
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
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
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
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
MICROCONTROLADORES (MCS-51)
11 - 7
CAPTULO XI
VCC VCC
PLACA DE TESTES
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
P1.2
U5D 74LS14
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
PASSO A PASSO
SW4 SW SPST
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
11 - 10
MICROCONTROLADORES (MCS-51)
CAPTULO XI
PLACA DE TESTES
BOOT 0 1
EPROM *PSEN X
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.
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
2 1
P1.7 P1.6
P1.7 P1.6
74LS04
*PSEN
10 U6C 74LS32 9
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
RESET
SW1 SW PUSHBUTTON R1 82
BOOT *BOOT
74LS74
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"
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
-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
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.
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
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
VCC
PHONEJACK
MICROCONTROLADORES (MCS-51)
11 - 17
CAPTULO XI
PLACA DE TESTES
8751H A0 A1 A2 A3 A4 A5 A6 A7 H 1 2 0
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
LM317
Vin Vout ADJ Vref
R1
I1
Vout Iadj V2 I2
R2
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:
I2 = I1 + Iadj =
R2 =
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
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
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
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
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
PSW ROM
1 KB
8 bits
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.
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)
TXD RXD
PORTA SERIAL 4 KB
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
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)
(A8-A15) *OE
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)
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
ROM ROM ROM ROM ROM ROM ROM ROM ENDER. (A0-A12) *CS *CS *CS *CS *CS *CS *CS *CS
*Y0 *Y1
DECOD 138
*Y7
*EA
8051
(A0-A12)
*CS
*CS
*CS
*CS
*CS
*CS
*CS
*CS
DADOS (D0-D7)
*RD *WR
P 3.7 P 3.6
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
128 UPPER
(S para 8052)
S F R
80H
30H
(128 LOWER + SFR + 128 UPPER) endereveis com modo direto ou indireto 128 bits endereos 0 ... 7FH
RAM INTERNA
128 LOWER
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
18H 18
BANCO 2
10H 10
BANCO 1
8
BANCO 0
0
2 - 8
MICROCONTROLADORES (MCS-51)
CAPTULO II
FAMLIA MCS-51
BIT * * *
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
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
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
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
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
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
2 - 12
MICROCONTROLADORES (MCS-51)
CAPTULO II
FAMLIA MCS-51
MICROCONTROLADORES (MCS-51)
2 - 13
CAPTULO II
FAMLIA MCS-51
2 - 14
MICROCONTROLADORES (MCS-51)
CAPTULO III
PINAGEM E TEMPORIZAO
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
CAPTULO III
(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).
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
3 - 2
MICROCONTROLADORES (MCS-51)
CAPTULO III
PINAGEM E TEMPORIZAO
OBS: A figura a seguir ilustra as possveis ligaes dos pinos XTAL1 e XTAL2:
MICROCONTROLADORES (MCS-51)
3 - 3
CAPTULO III
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
DATA IN
DATA IN
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
FLOAT
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
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
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.
11 PERODOS DE CLOCK
19 PERODOS DE CLOCK
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
8051
DIODO
2 74LS14
RESET
R 10
C 10 uF
SCHMITT TRIGGER
MICROCONTROLADORES (MCS-51)
3 - 9
CAPTULO IV
CONJUNTO DE INSTRUES
MICROCONTROLADORES (MCS-51)
4 - 1
CAPTULO IV
CONJUNTO DE INSTRUES
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
MICROCONTROLADORES (MCS-51)
4 - 3
CONJUNTO DE INSTRUES
O acumulador um dos operandos e tambm armazena o resultado. So 4 instrues de soma com carry:
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:
MC 1 1 1 1
CY
AC
OV
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)
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) :
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
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
MC 1 1 1 1 1 2
CY
AC
OV
MICROCONTROLADORES (MCS-51)
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:
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:
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
MC
CY -
AC -
OV -
X X
RL
Acc
RR
Acc
RLC
C Acc
A
C
RRC
Acc
SWAP
Acc xxxx
A
zzzz
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
MICROCONTROLADORES (MCS-51)
4 - 9
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.
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.
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.
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 -
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.
bytes 1
MC 2
CY -
AC -
OV -
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
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.
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.
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.
MC 2
CY
AC
OV
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
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.
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
CY -
AC -
OV -
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
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 -
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
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)
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
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)
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
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
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
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
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
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
CONJUNTO DE INSTRUES +3 --
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)
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)
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
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
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.
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)
;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
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)
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
;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
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
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 ;
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
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
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
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 ...
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
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
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
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
ASSEMBLER E SIMULADOR
" " busca arquivo no diretrio corrente busca arquivo no diretrio indicado pela varivel MS/DOS "INCLUDE"
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
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
5 - 8
MICROCONTROLADORES (MCS-51)
CAPTULO V
ASSEMBLER E SIMULADOR
OBSERVAES:
Duas instrues genricas JMP e CALL so fornecidas. O assembler decide qual instruo usar em funo da distncia, de forma que obtenha o menor tamanho. Isso vlido para referncias para trs. Em referncias para adiante obrigatrio o uso de LJMP, AJMP ou LCALL, ACALL. Todos os nomes dos SFR e dos bits j esto definidos. Tambm j esto definidos os seguintes endereos de interrupes RESET 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
MICROCONTROLADORES (MCS-51)
5 - 9
CAPTULO V
ASSEMBLER E SIMULADOR
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)
ASSEMBLER E SIMULADOR
(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).
RECORD DE DADOS
COUNT 2 char
TIPO 00
CHECKSUM 2 char
CR
LF
RECORD FINAL
COUNT 00
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
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
LB1
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
LB1
;LOOP ETERNO
5 - 14
MICROCONTROLADORES (MCS-51)
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
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
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.
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
-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)
MICROCONTROLADORES (MCS-51)
5 - 19
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)
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.
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 - 22
MICROCONTROLADORES (MCS-51)
CAPTULO V
ASSEMBLER E SIMULADOR
DUMP D
configure memory dump windows select dump area: 1 2
Absolute
Indirect
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:_____
Y N
I/O output file enter filename:_____
C
I/O rate: cycles per transfer enter decimal number:_____
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:___
clear memory: upper address enter expression in data address space:___ busca proxima ocorrncia
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
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 mnemonicos display symbol table view symbols: Alpha Registers Numbers Code Data eXternal Bit Sfr
C D
X B
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
MICROCONTROLADORES (MCS-51)
5 - 27
CAPTULO V
ASSEMBLER E SIMULADOR
C:
X:adr (external)
C:
X:adr
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:___
5 - 28
MICROCONTROLADORES (MCS-51)
CAPTULO V
ASSEMBLER E SIMULADOR
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
C D
A
R/W pass address or register enter expression in code address space:___
MICROCONTROLADORES (MCS-51)
5 - 29
CAPTULO V
ASSEMBLER E SIMULADOR
page port P2 change external data drive with port P2 from [Yes or No] to : Yes No
Y
use P2 for upper byte address
N
zero upper byte address
HELP H
syntax & key definitions help: Commands Display Simulation Avocet
5 - 30
MICROCONTROLADORES (MCS-51)
CAPTULO V
ASSEMBLER E SIMULADOR
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 - 32
MICROCONTROLADORES (MCS-51)
CAPTULO VI
PORTAS PARALELOS
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
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
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
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
BUS INTERNO
SFR P3
Q D CLK Q P3.i LATCH
WRITE TO LATCH
READ PIN
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
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
6 - 6
MICROCONTROLADORES (MCS-51)
CAPTULO VI
PORTAS PARALELOS
RETARDO 2 CLOCKS
0 1-->0
D S
D 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.
;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
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 ;
;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
VCC LED VERMELHO R4 220 6 LED AMARELO R5 220 8 LED VERDE R6 220 SW2 P1.3 PUSHBUTTON
P1.O
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
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)
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
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.
CM1
S5P2 S6P1 S6P2
CM2
CM3
CM4
CM5
polling para decidir a interrup. coloca-se no latch as interrupes interrupo ativada no passado
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.
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
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 - 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
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
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
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.
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
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)
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.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
OVER FLOW
TF1
INTERRUPO
TIMER 1 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
OVER FLOW
TF1
INTERRUPO
TIMER 1 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
OVER FLOW
TF1
INTERRUPO
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
OVER FLOW
TIMER 0 MODO 3
INTERRUPO TIMER 1
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.
1/12
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
IE
EA 1
ES 0
ET1 0
EX1 0
ET0 1
EX0 0
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
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
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
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
TMOD GATE 0
C/*T 1
M1 1
M0 0
GATE 0
C/*T 0
M1 0
M0 01
IE
EA 1
ES 0
ET1 1
EX1 0
ET0 0
EX0 0
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
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
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
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 -
9 - 2
MICROCONTROLADORES (MCS-51)
CAPTULO IX
PORTA SERIAL
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
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
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).
CLOCK
SMOD=1
TX CONTROL
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
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
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.
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 - 8
MICROCONTROLADORES (MCS-51)
CAPTULO IX
PORTA SERIAL
9.7. EXERCCIOS
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
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
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
;CHEGOU R ;CHEGOU r
;CHEGOU A ;CHEGOU a
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