MICROPROCESSADORES E MICROCONTROLADORES Parte 2 Microcontrolador 8051

Documentos relacionados
MICROPROCESSADORES E MICROCONTROLADORES Parte 2 Microcontrolador 8051

Laboratório de Microprocessadores e Microcontroladores

Laboratório de Microprocessadores e Microcontroladores

Laboratório de Microprocessadores e Microcontroladores

Laboratório de Microprocessadores e Microcontroladores

MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 - RESPOSTA ESPERADA

MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 Resposta Esperada

MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 - Uma Solução Possível

MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 UMA SOLUÇÃO POSSÍVEL. Obs.: Todas as questões têm valor 2,0. Boa prova e Feliz Natal e Ano Novo!!!!

MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 (Tema: Microcontrolador 8051) Resposta Esperada

CONJUNTO DE INSTRUÇÕES

Laboratório de Microprocessadores e Microcontroladores

MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 UMA SOLUCAO POSSÍVEL

Microprocessadores e Microcontroladores. Prova Substitutiva Uma Solução

7. PROGRAMANDO O MICROCONTROLADOR. Microcontroladores - Prof: Demantova

MICROPROCESSADORES E MICROCONTROLADORES. Prova 1 Resposta Esperada

Programação de Microprocessadores. Programação de Microprocessadores SEL-433 APLICAÇÕES DE MICROPROCESSADORES I

UTFPR Departamento Acadêmico de Eletrônica Curso Técnico em Eletrônica Microcontroladores 1 - Prof. Cion nov/2010 (atualizado em jul 2015)

MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 (Tema: Microcontrolador 8051)

Sistemas Microprocessados. sato<at>utfpr<dot>edu<dot>br

As 5 partes fundamentais. Linguagem de Programação Pinagem Características Elétricas Ambiente de Desenvolvimento Integrado - IDE

Laboratório de Microprocessadores e Microcontroladores

Laboratório de Microprocessadores e Microcontroladores. Experimento 7:

Laboratório de Microprocessadores e Microcontroladores. Experimento 6: Conversor Analógico/Digital e Conversor Digital/Analógico

Laboratório de Microprocessadores e Microcontroladores

Aula 10 Microcontrolador Intel 8051 Parte 2

Prof. Adilson Gonzaga

Laboratório de Microprocessadores e Microcontroladores. Experimento 7:

SEL-614 MICROPROCESSADORES E APLICAÇÕES. Adilson Gonzaga

Laboratório de Microprocessadores e Microcontroladores

Laboratório de Microprocessadores e Microcontroladores

Laboratório de Microprocessadores e Microcontroladores

Conjunto de Instruções do 8051

Temporização da CPU SEL-433 APLICAÇÕES DE MICROPROCESSADORES I. Ciclos de Máquina. Ciclos de Máquina. Temporização Interrupções Rotinas de Atraso

Laboratório de Microprocessadores e Microcontroladores

Laboratório de Microprocessadores e Microcontroladores

Temporização Interrupções. Prof: Evandro L. L. Rodrigues. Rotinas de Atraso

Prof. Adilson Gonzaga

mov R1,10H ; Carrega o dado do endereço 10H em R1 mov R1,#10H ; Carrega 10H em R1

Interrupção. Prof. Adilson Gonzaga

EXERCÍCIOS RESOLVIDOS

DIAGRAMA DE BLOCOS DE UM MICROCONTROLADOR

MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 (Tema: Microcontrolador 8051)

ORGANIZAÇÃO DE MEMÓRIA NO 8051: Microcontroladores - Prof: Demantova 1

Oprojeto apresenta três níveis de dificuldade: fácil, médio e difícil. No modo fácil tem-se uma

Organização de Memórias

1. Instruções de Desvio

CAPÍTULO 4 CONJUNTO DE INSTRUÇÕES

Temporizadores e Contadores (Timer/Counter)

Temporizadores e Contadores

PRÁTICAS. Microcontroladores: (LT36D) Prof: DaLuz. Práticas - 2º sem Microcontroladores LT36D - 26/04/ :56 1/16

Microcontroladores 8051

PROJETOS COM MICROCONTROLADORES

MICROCONTROLADOR 8051

Memória de Dados Interna. Memória de Dados Interna

MICROPROCESSADORES E MICROCONTROLADORES PROVA 1

Lista de Exercícios 2

Microcontroladores. Conjunto de Instruções do Prof. Guilherme Peron Prof. Heitor Lopes Prof. Ronnier Rohrich Prof. Rubão

208 = D0 h TMOD. MOV TMOD,#20h ;TMOD = Timer 1 no ;Modo 2, controle por software SCON. ;Canal Serial

Prof. Adilson Gonzaga

Família 8051 (introdução) 2011/1

Microprocessadores. Organização de Memória

O microcontrolador Quatro partes importantes

Aula 8 Microcontrolador 8051

Tópicos: 1 - Modos de endereçamento do Pilha e instruções de Pilha. 3 - Instruções que usam pilha: - instrução CALL - instrução RET

Aula 8 Microcontrolador 8051

Lista de Exercícios 1

UNIVERSIDADE PAULISTA (UNIP) Curso de Engenharia Mecatrônica Disciplina: Microprocessadores e Microcontroladores (MM) LISTA III

EXERCÍCIOS 2 Prof. Adilson Gonzaga

Microcontrolador 8051

Prof. Adilson Gonzaga

NOTAS DE AULA 06 MICROCONTROLADOR 8051

Microcontroladores (µcs) e microprocessadores (µps) A família 80C51. 80C51: Arquitectura do núcleo de base. Os µcs da família 80C51

Lista de Exercícios 1

SEL 0415 INTROD. À ORGANIZAÇÃO DE COMPUTADORES

Aplicações de Microprocessadores I. Prof. Adilson Gonzaga

SEMINÁRIO ASSEMBLY: Arquitetura 8051

Microcontrolador 8051:

Apontamentos sobre o 8051 Prof. Eng Luiz Antonio Vargas Pinto Versão revista e ampliada em 01/07/2009 Revisada em 28/02/2006 Revisada em 18/11/2007

Transcrição:

MICROPROCESSADORES E MICROCONTROLADORES Parte Microcontrolador 805 José Wilson Lima Nerys Página: www.emc.ufg/~jwilson Emails: jwlnerys@gmail.com e jose_wilson_nerys@ufg.br Prof. José Wilson Lima Nerys Microprocessadores

Leitura de Tabela no 8085 x 805 Mostra valores menores que 50H e valores maiores que 85H Início Início Fluxograma para o 8085 Configurações iniciais: SP ß 070H, HL ß 050H Configurações iniciais: SP ß FH, DPTR ß #Tabela R0 ß 00H, R7 ß 00H Fluxograma para o 805 A ß ((H,L)) A ß R7 A ß ((A + DPTR)) A < 50H? N A > 85H? S S A = FFH? N A < 50H? S S Fim N Display ß A N A > 85H? S HL ß HL + L ß A N N A = 60H? R7 ß R7 + P ß A S Fim Prof. José Wilson Lima Nerys Microprocessadores

3 Assembly do 8085 Endereço Mnemônico Endereço Dado Endereço Mnemônico 000H LXI SP, 070H 050H 0H 030H MVI C,50H 003H LXI H,050H 05H 50H 03H DCR C 006H MOV A,M 05H 5H 033H JNZ 03H 007H CPI 50H 053H 60H 036H RET 009H JC 04H 054H 65H 00CH CPI 85H 055H A0H 00EH JC 0CH 056H 70H 0H JZ 0CH 057H 90H 04H PUSH H 058H 85H 069H 05H CALL MOSTRA 059H 87H 06AH 08H CALL ATRASO 05AH 45H 06BH 0BH POP H 05BH 39H 06CH BH 0CH INX H 05CH C5H 06DH 0H 0DH MOV A,L 05DH H 06EH 55H 0EH CPI 60H 05EH 33H 06FH 0H Prof. José Wilson 00HLima JNZ Nerys 006H 05FH DH 070H 3 Microprocessadores 3

Assembly do 805 Universidade Federal de Goiás Rótulo Mnemônico Rótulo Mnemônico Rótulo Dado 0000H LJMP INICIO JC V TABELA: 0H JZ V 50H ORG 30H MOSTRA: MOV P,R0 5H INICIO: MOV SP,#FH LCALL ATRASO 60H MOV DPTR,#TABELA V: INC R7 65H MOV R7,#00H SJMP V0 A0H V0: MOV A,R7 70H MOVC A,@A+DPTR ATRASO: MOV R,#00 90H CJNE A,#0FFH,V DJNZ R,$ 85H SJMP FIM RET 87H V: CLR CY 45H MOV R0,A 39H SUBB A,#50H C5H JC MOSTRA H MOV A,R0 33H 4 SUBB A,#85H DH Prof. José Wilson Lima Nerys 4 Microprocessadores FFH

Prof. José Wilson 5 Lima Nerys 5 Microprocessadores 5

Prof. José Wilson 6 Lima Nerys 6 Microprocessadores 6

Memória RAM Prof. José Wilson 7 Lima Nerys 7 Microprocessadores 7

Memória RAM Prof. José Wilson 8 Lima Nerys 8 Microprocessadores 8

Memória RAM Prof. José Wilson 9 Lima Nerys 9 Microprocessadores 9

Memória RAM Prof. José Wilson 0Lima Nerys 0 Microprocessadores 0

MOV R0,#80H MOV @R0,A MOV 80H,A Conteúdo de A é armazenado na posição 80H da memória RAM Conteúdo de A é armazenado no registrador especial 80H, que corresponde à Porta P0 Prof. José Wilson Lima Nerys Microprocessadores

Registradores Especiais Prof. José Wilson Lima Nerys Microprocessadores

Registradores Especiais Prof. José Wilson 3Lima Nerys 3 Microprocessadores

Algumas Instruções do 805 Instrução MOV A,#Dado8 MOV Rn,#Dado8 MOV A,B MOV Rn,A MOV A,direto MOV dir,dir MOV @R0,A MOV DPTR,#dado6 MOVC A,@A+DPTR Descrição Carrega acumulador com o Dado de 8 bits Carrega registrador Rn (n=0 a 7) com o Dado de 8 bits Copia no registrador A (acumulador) o conteúdo do registrador B Copia no registrador Rn (n = 0 a 7) o conteúdo do acumulador Copia em A o conteúdo do registrador identificado pelo endereço direto Copia no registrador identificado pelo endereço dir o conteúdo do registrador identificado pelo endereço dir Copia o conteúdo de A na posição apontada por R0 O registrador duplo DPTR recebe um dado de 6 bits Carrega acumulador com o conteúdo da posição apontada por A+DPTR Prof. José Wilson 4Lima Nerys 4 Microprocessadores

Instrução CJNE A,#dado,Ender CJNE Rn,#dado,Ender DJNZ Rn,desvio SJMP ender LJMP ender Descrição Algumas Instruções do 805 Compara conteúdo de A com o dado ; se não forem iguais, desvia para o endereço Ender Compara conteúdo do registrador Rn (n = 0 a 7) com o dado ; se não forem iguais, desvia para o endereço Ender Decrementa o registrador Rn (n = 0 a 7); se o resultado não for zero, desvia para desvio Desvia para o endereço ender. SJMP = Short Jump ( bytes de código) Desvia para o endereço ender. LJMP = Long Jump (3 bytes de código) JNZ ender Desvia para o endereço ender, se a flag Z = 0 JZ ender Desvia para ender, se a flag Z = JNC ender Desvia para ender, se a flag CY = 0 JC ender Desvia para ender, se a flag CY = Codificação: 80 XX, onde XX = número de bytes (em complemento de ) a ser adicionado ao endereço da próxima instrução, para desviar para o endereço ender Prof. José Wilson 5Lima Nerys 5 Microprocessadores

Algumas Instruções do 805 Instrução ADD A,Rn ADD A,#dado8 SUBB A,direto SUBB A,@R0 RL A RR A DA A INC Rn INC DPTR CPL A Descrição Adiciona o conteúdo de Rn (n = 0 a 7) ao conteúdo do acumulador Adiciona o dado8, de 8 bits ao conteúdo do acumulador Subtrai o conteúdo do registrador identificado pelo endereço direto, do conteúdo do acumulador Subtrai o conteúdo da posição apontada pelo registrador R0 do conteúdo do acumulador Rotaciona o conteúdo de A para a esquerda Rotaciona o conteúdo de A para a direita Faz o ajuste decimal do conteúdo de A Incrementa em uma unidade o conteúdo do registrador Rn Incrementa em uma unidade o conteúdo do registrador duplo DPTR Complementa o conteúdo do acumulador Prof. José Wilson 6Lima Nerys 6 Microprocessadores

Algumas Instruções do 805 Instrução MUL AB DIV AB ANL A,#dado ORL A,#dado SWAP A Descrição Multiplica o conteúdo de A pelo conteúdo de B. O resultado está em B A. O resultado da multiplicação é um número de 6 bits, por isso precisa de dois registradores para o resultado. Divide o conteúdo de A pelo conteúdo de B. A recebe o quociente e B o resto. Faz a operação AND, bit a bit, entre o acumulador e o dado de 8 bits Faz a operação OR, bit a bit, entre o acumulador e o dado de 8 bits Faz a troca dos nibbles do acumulador, ou seja, o nibble mais significativo passa a ocupar os quatro primeiros bits do acumulador e o nibble menos significativo passa a ocupar os quatro últimos bits. Por exemplo, se originalmente, A = 35 H, após a instrução, A = 53 H. Prof. José Wilson 7Lima Nerys 7 Microprocessadores

Algumas Instruções do 805 Operações com bits Instrução JB bit,desvio Descrição Desvia para a posição desvio, caso o bit esteja setado (se bit=). Exemplo: Se F0 =, então a instrução JB F0,V faz o processamento desviar para a posição V JNB bit,desvio Desvia para desvio, caso o bit seja zero (se bit = 0). SETB bit Faz bit = CLR bit Faz bit = 0 CPL bit MOV bit,c Complementa o bit. Se bit =, então bit torna-se bit=0. Copia no bit o conteúdo da Flag de Carry. Prof. José Wilson 8Lima Nerys 8 Microprocessadores

0x0_ 0x_ 0x_ 0x3_ 0x4_ 0x5_ 0x6_ 0x7_ 0x8_ 0x9_ 0xA_ 0xB_ 0xC_ 0xD_ 0xE_ 0xF_ Universidade Federal de Goiás seus Escola períodos de Engenharia de Elétrica, execução Mecânica e de Computação 0x_0 0x_ 0x_ 0x_3 0x_4 0x_5 0x_6 0x_7 NOP JBC bit,rel JB bit, rel JNB bit, rel JC rel JNC rel JZ rel JNZ rel SJMP rel MOV dptr,#data6 ORL C, /bit ANL C, /bit PUSH direct POP direct MOVX A,@DPTR MOVX @DPTR,A Instruções do 805 com seus opcodes e AJMP add ACALL add AJMP add ACALL add AJMP add ACALL add AJMP add ACALL add AJMP add ACALL add AJMP add ACALL add AJMP add ACALL add AJMP add ACALL add LJMP add6 LCALL add6 RET RETI ORL dir,a ANL dir,a XRL dir,a ORL C,bit ANL C,bit MOV bit,c MOV C,bit CPL bit CLR bit SETB bit MOVX A,@R0 MOVX @R0,A RR A RRC A RL A RLC A ORL dir,#dado ANL dir,#dado XRL dir,#dado JMP @A+DPTR MOVC A,@A+PC MOVC A,@A+DPTR INC DPTR CPL C CLR C SETB C MOVX A,@R MOVX @R,A INC A DEC A ADD A,#dado ADDC A,#dado ORL A,dado ANL A,#dado XRL A,#dado MOV A,#dado DIV AB 4 SUBB A,#dado MUL AB 4 CJNE A,#dado,rel SWAP A DA A CLR A CPL A INC dir DEC dir ADD A,#dir ADDC A,dir ORL A,dir ANL A,dir XRL A,dir MOV dir,#dado MOV dir,dir SUBB A,dir CJNE A,dir,rel XCH A,dir DJNZ dir,rel MOV A,dir MOV dir,a INC @R0 DEC @R0 ADD A,@R0 ADDC A,@R0 ORL A,@R0 ANL A,@R0 XRL A,@R0 MOV @R0,#dado MOV dir,@r0 SUBB A,@R0 MOV @R0,dir CJNE @R0,#dado,rel XCH A,@R0 XCHD A,@R0 MOV A,@R0 9 MOV @R0,A INC @R DEC @R ADD A,@R ADDC A,@R ORL A,@R ANL A,@R XRL A,@R MOV @R,#dado MOV dir,@r SUBB A,@R MOV @R,dir CJNE @R,#dado,rel XCH A,@R XCHD A,@R MOV A,@R MOV @R,A Prof. José Wilson 9Lima Nerys 9 Microprocessadores

0x0_ 0x_ 0x_ 0x3_ 0x4_ 0x5_ 0x6_ 0x7_ 0x8_ 0x9_ 0xA _ 0xB _ 0xC _ 0xD _ 0xE _ 0xF_ Universidade Federal de Goiás seus Escola períodos de Engenharia de Elétrica, execução Mecânica e de Computação 0x_8 0x_9 0x_A 0x_B 0x_C 0x_D 0x_E 0x_F INC R0 DEC R0 ADD A,R0 ADDC A,R0 ORL A,R0 ANL A,R0 XRL A,R0 MOV R0,#dado MOV dir,r0 SUBB A,R0 MOV R0,dir CJNE R0,#dado,rel XCH A,R0 DJNZ R0,rel MOV A,R0 0 MOV R0,A Instruções do 805 com seus opcodes e INC R DEC R ADD A,R ADDC A,R ORL A,R ANL A,R XRL A,R MOV R,#dado MOV dir,r SUBB A,R MOV R,dir CJNE R,#dado,rel XCH A,R DJNZ R,rel MOV A,R MOV R,A INC R DEC R ADD A,R ADDC A,R ORL A,R ANL A,R XRL A,R MOV R,#dado MOV dir,r SUBB A,R MOV R,dir CJNE R,#dado,rel XCH A,R DJNZ R,rel MOV A,R MOV R,A INC R3 DEC R3 ADD A,R3 ADDC A,R3 ORL A,R3 ANL A,R3 XRL A,R3 MOV R3,#dado MOV dir,r3 SUBB A,R3 MOV R3,dir CJNE R3,#dado,rel XCH A,R3 DJNZ R3,rel MOV A,R3 MOV R3,A INC R4 DEC R4 ADD A,R4 ADDC A,R4 ORL A,R4 ANL A,R4 XRL A,R4 MOV R4,#dado MOV dir,r4 SUBB A,R4 MOV R4,dir CJNE R4,#dado,rel XCH A,R4 DJNZ R4,rel MOV A,R4 MOV R4,A INC R5 DEC R5 ADD A,R5 ADDC A,R5 ORL A,R5 ANL A,R5 XRL A,R5 MOV R5,#dado MOV dir,r5 SUBB A,R5 MOV R5,dir CJNE R5,#dado,rel XCH A,R5 DJNZ R5,rel MOV A,R5 MOV R5,A Prof. José Wilson Lima Nerys 0 Microprocessadores 0 INC R6 DEC R6 ADD A,R6 ADDC A,R6 ORL A,R6 ANL A,R6 XRL A,R6 MOV R6,#dado MOV dir,r6 SUBB A,R6 MOV R6,dir CJNE R6,#dado,rel XCH A,R6 DJNZ R6,rel MOV A,R6 MOV R6,A INC R7 DEC R7 ADD A,R0 ADDC A,R7 ORL A,R7 ANL A,R7 XRL A,R7 MOV R7,#dado MOV dir,r7 SUBB A,R7 MOV R7,dir CJNE R7,#dado,rel XCH A,R7 DJNZ R7,rel MOV A,R7 MOV R7,A

Contagem crescente Rótulo Mnemônico Comentário sobre o Efeito da Operação Tempo ORG 00H LJMP INICIO A próxima instrução estará no endereço 00h Pula para o endereço indicado com o rótulo inicio ORG 30H INICIO: MOV A,#00H A próxima instrução estará no endereço 30h Carrega acumulador com valor 00h Endereço da próxima instrução V: MOV P,A Transfere para a porta P o conteúdo do acumulador µs Codificação: V corresponde ao endereço 003H = 0037 + FB (considerando somente o byte menos significativo) INC A Incrementa em o conteúdo do acumulador. A ß A + µs SJMP V Pula para o endereço indicado pelo rótulo V µs END Instrução obrigatória no fim de todo programa 4 µs ORG 00H 0000 00030 LJMP INICIO 3 4 ORG 30H 0030 7400 5 INICIO: MOV A,#00H 003 F590 6 V: MOV P,A 0034 04 7 INC A 0035 80FB 8 SJMP V 9 END Intervalo entre cada dois envios para a Porta P: 4 µs Período: 56 x 4 µs = 04 µs Prof. José Wilson Lima Nerys Microprocessadores

Universidade Federal de Goiás Contagem crescente Resultado visual (saída do Conversor Digital-Analógico): Onda Dente de Serra Rótulo Mnemônico Tempo ORG 00H LJMP INICIO ORG 30H INICIO: MOV A,#00H V: MOV P,A µs INC A µs SJMP V µs END 4 µs Período medido com o Proteus: 00 µs Intervalo entre cada dois envios para a Porta P: 4 µs Cristal oscilador: MHz Período calculado: 55 x 4 µs = 00 µs Prof. José Wilson Lima Nerys Microprocessadores

Contagem crescente e decrescente Rótulo Mnemônico Comentário sobre o Efeito da Operação Início ORG 00H A próxima instrução estará no endereço 00h A ß 00H LJMP INICIO Pula para o endereço indicado com o rótulo inicio P0 ß A ORG 30H A próxima instrução estará no endereço 30h Aß A + INICIO: MOV A,#00H Carrega acumulador com valor 00h N A = FFH? S P0 ß A V: MOV P0,A Transfere para a porta P0 o conteúdo do acumulador INC A CJNE A,#0FFH,V Incrementa o conteúdo do acumulador Compara conteúdo do acumulador com 30h. Caso não seja igual (Compare, Jump if Not Equal), desvia para V N Aß A - A = 00? S V: MOV P0,A Transfere para a porta P0 o conteúdo do acumulador DJNZ ACC,V Decrementa conteúdo do acumulador e vai para V se não for zero SJMP V Pula para V. Não precisa usar LJMP porque a distância é curta. END Instrução obrigatória no fim de todo programa Quando A = FFH, vai para a próxima linha. Acaba o ciclo crescente e começa o decrescente Prof. José Wilson 3Lima Nerys 3 Microprocessadores 3

Universidade Federal de Goiás Contagem crescente e decrescente Saída do Conversor Digital-Analógico: Onda Triangular Rótulo Mnemônico Tempo Período ORG 00H LJMP INICIO ORG 30H µs CJNE A,#0FFH,V µs V: MOV P0,A DJNZ ACC,V SJMP V END µs µs = 00 µs INC A µs=765 µs µs 55 x 3 V: MOV P0,A 55 x 4 µs INICIO: MOV A,#00H O primeiro semi-período (crescente: 00 µs, calculado e 00 µs medido) é maior que o segundo (decrescente: 765 µs calculado e 78 µs medido) porque o número de instruções executadas é diferente para o primeiro e para o segundo semi-período. 4 4 Prof. José Wilson Lima Nerys 4 Microprocessadores

Universidade Federal de Goiás Contagem crescente e decrescente Saída do Conversor Digital-Analógico: Onda Triangular Rótulo Mnemônico Tempo Período ORG 00H LJMP INICIO ORG 30H µs CJNE A,#0FFH,V µs V: MOV P0,A µs NOP µs DJNZ ACC,V SJMP V END 5 Prof. José Wilson Lima Nerys µs = 00 µs INC A 00 µs µs 55 x 4µs = V: MOV P0,A 55 x 4 µs INICIO: MOV A,#00H Com a inclusão da instrução NOP, os dois semiperíodos ficaram com tempos calculados iguais e tempos medidos muito próximos (00 µs e 030 µs) Instrução NOP (No Operation) usada apenas para gerar um atraso de µs. 5 5 Microprocessadores

Universidade Federal de Goiás A Onda triangular pode ser obtida, também com um código ligeiramente modificado Rótulo Mnemônico Tempo Período ORG 00H LJMP INICIO ORG 30H µs CJNE A,#0FFH,V µs V: MOV P0,A µs DEC A µs CJNE A,#00H,V µs = 00 µs INC A 00 µs µs 55 x 4µs = V: MOV P0,A 55 x 4 µs INICIO: MOV A,#00H Com uma estrutura no segundo semi-ciclo semelhante à estrutura no primeiro semiciclo, o tempo é equivalente nos dois intervalos. SJMP V END 6 Prof. José Wilson Lima Nerys Instruções DEC A, e CJNE A,#00H,V, produzem, juntas, um atraso de 3 µs, não havendo necessidade 6 da instrução NOP. 6 Microprocessadores

Universidade Federal de Goiás Onda quadrada no pino P.0 Endereço 0000H Código Rótulo 0 00 30 Mnemônico Comentário sobre o Efeito da Operação Tempo ORG 00H A próxima instrução estará no endereço 00h LJMP INICIO Pula para o endereço indicado com o rótulo inicio ORG 30H A próxima instrução estará no endereço 30h Complementa o bit 0 da Porta P µs MOV R0,#50 Carrega registrador R0 com valor decimal 50 µs D8 FE DJNZ R0,$ Decrementa o conteúdo de R0, até R0 = 0 80 F8 SJMP INICIO Retorna para o início END Instrução obrigatória no fim de todo programa 0030H B 90 003H 78 3 0034H 0036H INICIO: CPL P.0 0038H 00 µs µs 04 µs Tempo calculado para meio período Tempo medido para meio período com o Proteus: 05,0 µs Cristal oscilador: MHz 7 Prof. José Wilson Lima Nerys 7 Microprocessadores

Leitura de Tabela adaptada para ler 56 valores que, enviados para o Conversor DA, resulta em uma curva senoidal Rótulo Mnemônico CONTADOR EQU 07H ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#FH MOV DPTR,#Tabela MOV CONTADOR,#00h Mnemônico Tempo V: MOV A,CONTADOR µs MOVC A,@A+DPTR µs MOV P0,A µs INC CONTADOR µs SJMP V µs Tempo entre leituras: 7 µs Período senoide: 7 µs x 56 = 79 µs Período medido:,80 ms 556 Hz Como a Tabela de seno tem 56 valores, não há necessidade fazer uma contagem desses valores, uma vez que o CONTADOR volta ao valor zero após atingir o valor máximo FFh. Assim, a leitura volta para o início da Tabela após CONTADOR = FFh. Prof. José Wilson 8Lima Nerys 8 Microprocessadores 8

Tabela: seno Universidade Federal de Goiás Parte Parte Parte 3 Parte 4 Parte 5 Parte 6 DB 7 DB 05 DB 50 DB 43 DB 86 DB 04 DB 30 DB 08 DB 5 DB 4 DB 83 DB 0 DB 33 DB 0 DB 5 DB 40 DB 80 DB 98 DB 36 DB 3 DB 5 DB 39 DB 77 DB 95 DB 39 DB 5 DB 53 DB 37 DB 74 DB 9 DB 43 DB 7 DB 53 DB 35 DB 7 DB 88 DB 46 DB 9 DB 53 DB 34 DB 68 DB 86 DB 49 DB DB 54 DB 3 DB 66 DB 83 DB 5 DB 3 DB 54 DB 30 DB 63 DB 80 DB 55 DB 5 DB 54 DB 8 DB 59 DB 77 DB 58 DB 7 DB 54 DB 6 DB 56 DB 74 DB 6 DB 9 DB 54 DB 4 DB 53 DB 7 DB 64 DB 3 DB 54 DB DB 50 DB 68 DB 67 DB 33 DB 54 DB 0 DB 47 DB 66 DB 70 DB 35 DB 53 DB 8 DB 44 DB 63 DB 73 DB 36 DB 53 DB 6 DB 4 DB 60 DB 76 DB 38 DB 5 DB 4 DB 38 DB 58 DB 79 DB 39 DB 5 DB DB 35 DB 55 DB 8 DB 4 DB 5 DB 09 DB 3 DB 5 DB 84 DB 4 DB 5 DB 07 DB 9 DB 50 DB 87 DB 43 DB 50 DB 04 DB 5 DB 47 DB 90 DB 45 DB 49 DB 0 DB DB 45 DB 93 DB 46 DB 48 DB 99 DB 9 DB 43 DB 95 DB 47 DB 47 DB 96 DB 6 DB 40 DB 98 DB 48 DB 46 DB 94 DB9 3 DB 38 DB 00 DB 49 DB 45 DB 9 DB 0 DB 36 Prof. José Wilson DB Lima 03Nerys DB 50 DB 44 DB 88 DB 07 9 Microprocessadores DB 34 9

Parte 7 Parte 8 Parte 9 Parte 0 Parte Parte DB 3 DB 7 DB 0 DB 3 DB 44 DB 87 DB 30 DB 6 DB DB 5 DB 46 DB 90 DB 8 DB 5 DB DB 6 DB 49 DB 93 DB 6 DB 4 DB DB 8 DB 5 DB 96 DB 4 DB 3 DB DB 9 DB 54 DB 99 DB DB 3 DB DB DB 56 DB 0 DB 0 DB DB 3 DB 3 DB 59 DB 05 DB 9 DB DB 4 DB 5 DB 6 DB 08 DB 7 DB DB 4 DB 7 DB 64 DB DB 5 DB DB 5 DB 9 DB 67 DB 5 DB 4 DB 0 DB 6 DB 3 DB 70 DB 8 DB 3 DB 0 DB 7 DB 33 DB 73 DB DB DB 0 DB 8 DB 35 DB 75 DB 4 DB 0 DB 0 DB 9 DB 37 DB 78 DB 7 DB 9 DB 0 DB DB 39 DB 8 DB 8 DB 0 DB DB 4 DB 84 Prof. José Wilson 30Lima Nerys 30 Microprocessadores

Gerador de Função com valores fixos de frequência para cada onda: Onda quadrada Onda dente de serra 3 Onda triangular 4 Onda senoidal CONTADOR EQU 07H QUAD EQU P.0 Chave de escolha Onda quadrada SERRA EQU P. Chave de escolha Dente de serra TRI EQU P. Chave de escolha Triangular SENO EQU P.3 Chave de escolha Senoide Primeira parte do programa: INICIO: ORG 00H LJMP INICIO ORG 30H MOV SP,#FH MOV DPTR,#Tabela MOV CONTADOR,#00h V: MOV A,#00H JNB QUAD, QUADRADA Se QUAD = 0 quadrada JNB SERRA, DENTE_SERRA JNB TRI, TRIANGULAR JNB SENO, SENOIDAL Se SENO = 0 Senoidal SJMP V Prof. José Wilson 3Lima Nerys 3 Microprocessadores 3

Leitura de Tabela com Quantidade de Dados menor que 56 Usando tabela para acionamento de motor de passo Prof. José Wilson 3Lima Nerys 3 Microprocessadores 3

Rótulo Universidade Federal de Goiás Acionamento de Motor de Passo com Passo Completo e Meio Passo Mnemônico ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#FH MOV DPTR,#Tabela V: MOV R7,#00h Rótulo Mnemônico V: MOV A,R7 A subrotina de atraso de tempo não foi incluída MOVC A,@A+DPTR MOV P,A LCALL ATRASO INC R7 CJNE R7,#04H,V SJMP V Rótulo Tabela Passo Completo Tabela: DB 03H DB 06H DB 0CH DB 09H Tabela Meio Passo DB 0H DB 03H DB 0H DB 06H DB 04H DB 0CH DB 08H DB 09H Essa tabela, com apenas 4 valores, pode ser usada para o acionamento de um motor de passo (PASSO COMPLETO). A tabela com 8 valores é para acionamento do motor de passo com MEIO PASSO. O motor deve estar conectado, através de um driver, ao nibble inferior da Porta P. 33 Prof. José Wilson 33Lima Nerys 33 Microprocessadores END END Offset R7 0 3 4 5 6 7 8

Acionamento de Motor de Passo Driver ULN 803 Capacidade de corrente: 500 ma Tensão máxima no pino COM: 50 V Prof. José Wilson 34Lima Nerys 34 Microprocessadores

Rótulo Universidade Federal de Goiás Mnemônico CH0 EQU P.0 CH EQU P. CH EQU P. CH3 EQU P.3 ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#FH Rótulo ATRASO: V: MOV R7,#00h Mnemônico MOV R0,#80 V3: MOV R,#5 DJNZ R,$ DJNZ R0,V3 RET Tabela3: Tabela4: Usando Chaves externas para escolher a configuração do acionamento CH0 sentido horário com passo completo CH sentido anti-horário com passo completo CH sentido horário com meio passo CH3 sentido anti-horário com meio passo Tarefa:. Escolher uma das chaves para Ligar/Desligar. Escolher uma das chaves para definir o sentido horário ou anti-horário 3. Escolher uma das chaves para definir se o acionamento é com meio passo ou passo completo Tabela: DB 03H, 06H, 0CH, 09H, 0FFH Tabela: DB 09H, 0CH, 06H, 03H, 0FFH DB 0H, 03H, 0H, 06H, 04H, 0CH, 08H, 09H, 0FFH DB 09H, 08H, 0CH, 04H, 06H, 0H, 03H, 0H, 0FFH Rótulo Mnemônico V0: JB CH0,VCH MOV DPTR,#Tabela SJMP V VCH: JB CH,VCH MOV DPTR,#Tabela SJMP V Prof. José Wilson 35Lima Nerys 35 Microprocessadores VCH: JB CH,VCH3 MOV DPTR,#Tabela3 SJMP V VCH3: JB CH3,V0 MOV DPTR,#Tabela4 V: MOV A,R7 MOVC A,@A+DPTR CJNE A,#0FFH,V4 SJMP V V4: MOV P,A LCALL ATRASO INC R7 SJMP V

Mostra em P o Maior valor de uma Tabela R0 recebe o maior valor, antes de mostrar em P Início Configurações iniciais: SP ß FH, DPTR ß #Tabela R0 ß 00H, R7 ß 00H A ß R7 A ß ((A + DPTR)) A = FF? S S N A >= R0? P ß R0 R0 ß A N R7 ß R7 + Fim Prof. José Wilson 36Lima Nerys 36 Microprocessadores

Mostra em P o Maior valor de uma Tabela Rótulo Mnemônico Rótulo Mnemônico Rótulo Mnemônico Offset R7 ORG 00H V: MOV A,R7 Tabela: DB 0A3H 0 LJMP INICIO MOVC A,@A+DPTR DB 6H CJNE A,#0FFH,SEGUE DB 05H ORG 30H MOV P,R0 DB 09H 3 INICIO: MOV SP,#FH SJMP FIM DB 0AH 4 MOV DPTR,#Tabela DB 35H 5 MOV R0,#00h SEGUE: CLR CY DB 0C5H 6 MOV R7,#00H MOV B,A DB 7H 7 SUBB A,R0 JC V MOV R0,B DB 40H DB 0FFH 8 9 V: INC R7 FIM: END SJMP V Prof. José Wilson 37Lima Nerys 37 Microprocessadores

Contagem decimal crescente de 0 a 59 e decrescente de 59 a 0 Rótulo Mnemônico Rótulo Mnemônico ORG 00H ORG 00H LJMP INICIO LJMP INICIO ORG 30H INICIO: MOV SP,#FH MOV A,#00H V: MOV P,A ADD A,#0H DA A CJNE A,#60H,V SJMP INICIO END Enquanto A < 60H, continua contagem crescente ORG 30H INICIO: MOV SP,#FH MOV A,#60H V: ADD A,#99H Prof. José Wilson 38Lima Nerys 38 Microprocessadores DA A MOV P,A CJNE A,#00H,V SJMP INICIO END Enquanto A > 00H, continua contagem decrescente

Relógio HH:MM:SS Prof. José Wilson 39Lima Nerys 39 Microprocessadores

RÓTULO MNEMÔNICO SEG EQU 0H MIN EQU H HORA EQU H ORG 00H LJMP INICIO Relógio HH:MM:SS RÓTULO MNEMÔNICO MOV A,SEG ADD A,#0H DA A MOV SEG,A RÓTULO MNEMÔNICO ADD A,#0H DA A MOV HORA,A CJNE A,#4H,V CJNE A,#60H,V SJMP V INICIO: ORG 30H MOV SP,#FH V: MOV SEG,#00H MOV MIN,#00H MOV HORA,#00H V: MOV P,SEG MOV P,MIN MOV P0,HORA LCALL ATRASO MOV SEG,#00H MOV A,MIN ADD A,#0H DA A MOV MIN,A CJNE A,#60H,V MOV MIN,#00H MOV A,HORA ATRASO: MOV R0,#50 V3: MOV R,#50 DJNZ R,$ DJNZ R0,V3 Prof. José Wilson 40Lima Nerys 40 Microprocessadores RET END

Cronômetro: MM:SS Prof. José Wilson 4Lima Nerys 4 Microprocessadores

RÓTULO MIN SEG MNEMÔNICO EQU H EQU H BUZZER EQU P3.7 INICIO: ORG 00H LJMP INICIO ORG 30H MOV SP,#FH CLR BUZZER MOV MIN,#0H MOV SEG,#00H V: MOV P,MIN MOV P,SEG LCALL ATRASO Cronômetro Decrescente: MM:SS RÓTULO MNEMÔNICO MOV A,SEG ADD A,#99H DA A MOV SEG,A CJNE A,#99H,V MOV SEG,#59H MOV A,MIN ADD A,#99H DA A MOV MIN,A CJNE A,#99H,V MOV MIN,#00H MOV SEG,#00H RÓTULO ATRASO: MNEMÔNICO MOV P,MIN MOV P,SEG SETB BUZZER MOV R7,#0 V: LCALL ATRASO DJNZ R7,V CLR BUZZER SJMP $ MOV R0,#50 V3: MOV R,#50 DJNZ R,$ DJNZ R0,V3 Prof. José Wilson 4Lima Nerys 4 Microprocessadores RET END

Interrupções do 805 Endereços de Desvio das Interrupções: Interrupção Solicitada Reset INT0\ Timer/counter 0 INT\ Timer/counter Canal Serial Endereço de desvio 0000h 0003h 000Bh 003h 00Bh 003h Registradores associados à interrupção: Registrador de Habilitação: IE (Interrupt Enable) = Registrador A8h Registrador de Prioridades: IP (Interrupt Priority) = Registrador B8h Registrador de Controle: TCON (Timer Control) = Registrador 88h Prof. José Wilson 43Lima Nerys 43 Microprocessadores

Registrador de Habilitação: IE (Interrupt Enable) = Registrador A8h pino P3. são atendidas. Com EX0 = 0 elas são ignoradas. Prof. José Wilson Lima Nerys 44 Microprocessadores 44 Bit 7 Bit 4 Bit 3 Bit Bit Bit 0 EA x x ES ET EX ET0 EX0 EA Enable All. Com EA =, todas as interrupções podem ser habilitadas individualmente. Com EA = 0, ficam todas mascaradas. ES Enable Serial. Com ES =, a interrupção pelo canal serial fica habilitada. Com ES = 0 os pedidos de interrupção da serial são ignorados. ET Enable Timer. Com ET =, as interrupções pedidas pelo Timer são atendidas. Com ET = 0 elas são ignoradas. EX Enable External Interrupt. Com EX =, as interrupções pedidas através do pino P3.3 são atendidas. Com EX = 0 elas são ignoradas. ET0 Enable Timer 0. Com ET0 =, as interrupções pedidas pelo Timer 0 são atendidas. Com ET0 = 0 elas são ignoradas. EX0 Enable External Interrupt 0. Com EX0 =, as interrupções pedidas através

Registrador de Controle: TCON (Timer Control) = Registrador 88h TCON = TF TR TF0 TR0 IE IT IE0 IT0 IE Interrupt Edge Flag - É setado pelo hardware quando uma interrupção externa através de INT\ é detectada. É zerada quando da execução da instrução RETI (retorno da subrotina de atendimento). IT (Interrupt Type) - Quando IT = a interrupção externa será reconhecida pela transição de para 0 no pino P3.3. Quando IT = 0, a interrupção é reconhecida quando o sinal no pino P3.3 está em nível baixo (0 = interrupção por nível). IE0 (Interrupt 0 Edge Flag) - É setado pelo hardware quando uma interrupção externa através de INT0\ é detectada. É zerada quando da execução da instrução RETI. IT0 (Interrupt 0 Type) - Quando IT0 = a interrupção externa 0 será reconhecida pela transição de para 0 no pino INTO\. Quando IT0 = 0, a interrupção é reconhecida quando o sinal no pino INTO\ está em nível baixo (0). Prof. José Wilson 45Lima Nerys 45 Microprocessadores

Registrador de Prioridade: IP (Interrupt Priority) = Registrador B8h IP = X X X PS PT PX PT0 PX0 PS Priority of Serial Port Interrupt Sendo PS =, a interrupção serial tem prioridade alta. PT Priority of Timer Interrupt Sendo PT =, a interrupção do temporizador tem prioridade alta. PX Priority of External Interrupt Sendo PX =, a interrupção externa tem prioridade alta. PT0 Priority of Timer Interrupt 0 Sendo PT0 =, a interrupção do temporizador 0 tem prioridade alta. PX0 Priority of External Interrupt 0 Sendo PX0 =, a interrupção externa 0 tem prioridade alta. Prof. José Wilson 46Lima Nerys 46 Microprocessadores

Uma interrupção ter prioridade alta (Prioridade ) significa que ela será atendida sempre que solicitada, mesmo quando o programa está executando uma outra interrupção. No caso de todos os canais de interrupção terem prioridade 0 ou, a escala de prioridade é como segue: Interrupção Externa 0 Prioridade Maior Temporizador 0 Externa Temporizador Serial Menor Prof. José Wilson 47Lima Nerys 47 Microprocessadores

Usando Interrupções (antes de estudar interrupções) Para escolher o valor inicial do cronômetro e para iniciar a contagem RÓTULO MNEMÔNICO COMENTÁRIO ORG 00H LJMP INICIO ORG 03H Endereço da Interrupção externa 0 (EX0) MOV A,MIN A recebe o valor atual dos Minutos ADD A,#0H Acrescenta 0H ao conteúdo de A DA A Faz o ajuste decimal do conteúdo de A MOV MIN,A Transfere para MIN o conteúdo atualizado dos minutos RETI Retorna da Interrupção externa 0 ORG 3H Endereço da Interrupção externa 0 (EX) SETB F0 Faz F0 = para dar início à contagem RETI Retorna da interrupção externa Prof. José Wilson 48Lima Nerys 48 Microprocessadores

Usando Interrupções (antes de estudar interrupções) Para escolher o valor inicial do cronômetro e para iniciar a contagem RÓTULO MNEMÔNICO COMENTÁRIO ORG 30H INÍCIO: MOV SP,#FH MOV IE,#85H Habilita as interrupções externas 0 e MOV TCON,#05H As interrupções externas 0 e são por transição CLR F0 Limpa a flag F0, que é usada para iniciar a contagem MOV SEG,#00H Faz o registrador SEG = 0 CLR BUZZER Limpa a saída que aciona o alarme V: MOV P,SEG Mostra valor atual de MINuto e SEGundo MOV P,MIN JNB F0,V Aguarda enquanto F0 = 0 Prof. José Wilson 49Lima Nerys 49 Microprocessadores

Rotação de Leds à esquerda (CH0 = 0) e à direita (CH = 0) Rótulo Mnemônico CH0 EQU P3. CH EQU P3.3 ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#FH MOV A,#0H V: JB CH0,VCH Rótulo Mnemônico MOV P,A RL A LCALL ATRASO SJMP V VCH: JB CH,V MOV P,A RR A LCALL ATRASO SJMP V Rótulo Mnemônico ATRASO: MOV R0,#00 V: MOV R,#00 DJNZ R,$ DJNZ R0,V RET END Prof. José Wilson 50Lima Nerys 50 Microprocessadores

Leds piscando (CH0 = 0) e alternando (CH = 0) Rótulo Mnemônico CH0 EQU P3. CH EQU P3.3 ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#FH MOV R6,#00H MOV R7,#55H V: JB CH0,VCH Rótulo Mnemônico MOV P,R6 MOV A,R6 LCALL ATRASO CPL A MOV R6,A SJMP V VCH: JB CH,V MOV P,R7 MOV A,R7 LCALL ATRASO CPL A MOV R7,A SJMP V Rótulo Mnemônico ATRASO: MOV R0,#00 V: MOV R,#00 DJNZ R,$ DJNZ R0,V RET END Prof. José Wilson 5Lima Nerys 5 Microprocessadores

Multiplicação e Divisão de Números de 8 bits Rótulo Mnemônico Rótulo Mnemônico ORG 00H ORG 00H LJMP INICIO LJMP INICIO ORG 00H INICIO: MOV SP,#FH MOV A,#00 MOV B,#40 MUL AB JB P3.,$ MOV P,A MOV P,B END ORG 00H INICIO: MOV SP,#FH MOV A,#00 MOV B,#40 DIV AB JB P3.,$ MOV P,A MOV P,B END Prof. José Wilson 5Lima Nerys 5 Microprocessadores

Adição e Subtração de Números de 6 bits Prof. José Wilson 53Lima Nerys 53 Microprocessadores

; ADIÇÃO DE NÚMEROS DE 6 BITS Z = X + Y XH EQU 0H ; Número X de 6 bits XL EQU H YH EQU H ; Número Y de 6 bits YL EQU 3H ZH EQU 4H ; Resultado da adição de 6 bits ZL EQU 5H ZOV BIT 00H ; Flag de carry do resultado de 6 bits ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#FH MOV XH,#40H MOV XL,#00H MOV YH,#35H MOV YL,#50H MOV A,XL ADD A,YL MOV ZL,A MOV A,XH ADDC A,YH MOV ZH,A MOV ZOV,C ; Adição do byte inferior, sem carry ; Adição do byte superior, com carry END Prof. José Wilson 54Lima Nerys 54 Microprocessadores

; SUBTRAÇÃO DE NÚMEROS DE 6 BITS Z = X - Y XH EQU 0H ; Número X de 6 bits XL EQU H YH EQU H ; Número Y de 6 bits YL EQU 3H ZH EQU 4H ; Resultado da adição de 6 bits ZL EQU 5H ZOV BIT 00H ; Flag de carry do resultado de 6 bits ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#FH MOV XH,#40H MOV XL,#00H MOV YH,#35H MOV YL,#50H 55 MOV A,XL CLR CY SUBB A,YL MOV ZL,A MOV A,XH SUBB A,YH MOV ZH,A MOV ZOV,C END Prof. José Wilson Lima Nerys 55 Microprocessadores

Exemplos Universidade Federal de Goiás Programa que envia uma contagem crescente para a porta P a cada solicitação da interrupção INT0 (através do pino P3.). Contagem encerra quando A retorna para 00 RÓTULO MNEMÔNICO ORG 00H LJMP INICIO ORG 03H LJMP CONTAGEM RÓTULO MNEMÔNICO CONTAGEM: MOV P,A INC A LCALL ATRASO CJNE A,#00H,CONTAGEM RETI ORG 30H INICIO: MOV SP, #FH MOV IE, #8H MOV TCON, #0H MOV A, #00H SJMP $ ATRASO: MOV R0,#0 V: MOV R,#00 DJNZ R, $ DJNZ R0, V RET END Habilita interrupção externa 0 por transição Laço infinito aguardando interrupção Prof. José Wilson 56Lima Nerys 56 Microprocessadores

RÓTULO Universidade Federal de Goiás Programa que envia uma contagem crescente para a porta P a cada solicitação da interrupção INT0 e uma decrescente a cada solicitação da INT. MNEMÔNICO ORG 00H LJMP INICIO ORG 03H LJMP ATENDE0 ORG 3H LJMP ATENDE ORG 30H INICIO: MOV SP, #FH MOV IE, #85H MOV TCON, #05H RÓTULO ATENDE0: PUSH ACC MNEMÔNICO MOV A,#00H V: MOV P,A INC A LCALL ATRASO CJNE A,#00H,V POP ACC RETI Exemplos Habilita Interrupções INT0 e INT por transição RÓTULO MNEMÔNICO ATENDE: PUSH ACC MOV A,#0FFH V: MOV P,A LCALL ATRASO DEC A CJNE A,#0FFH,V POP ACC SJMP $ Laço infinito aguardando interrupção Prof. José Wilson 57Lima Nerys 57 Microprocessadores RETI ATRASO: MOV R0,#0 V3: MOV R,#00 DJNZ R, $ DJNZ R0, V3 RET END

Programa que envia uma contagem decimal crescente para a porta P a cada solicitação da interrupção INT0 e uma decimal decrescente a cada solicitação da INT. RÓTULO MNEMÔNICO ORG 00H LJMP INICIO ORG 03H LJMP ATENDE0 ORG 3H LJMP ATENDE ORG 30H INICIO: MOV SP, #FH MOV IE, #85H MOV TCON, #05H RÓTULO ATENDE0: PUSH ACC V: MOV P,A MNEMÔNICO ADD A,#0H DA A LCALL ATRASO CJNE A,#00H,V POP ACC RETI Adiciona e faz ajuste decimal Exemplos Subtrai e faz ajuste decimal Habilita Interrupções INT0 e INT por transição RÓTULO MNEMÔNICO ATENDE: PUSH ACC V: ADD A,#99H MOV A,#00H SJMP $ Laço infinito aguardando interrupção Prof. José Wilson 58Lima Nerys 58 Microprocessadores DA A MOV P,A LCALL ATRASO CJNE A,#00H,V POP ACC RETI ATRASO: MOV R0,#50 V3: MOV R,#50 DJNZ R, $ DJNZ R0, V3 RET END

RÓTULO Universidade Federal de Goiás Programa que envia uma contagem crescente para a porta P a cada solicitação da interrupção INT0 e uma decrescente a cada solicitação da INT (Prioridade alta). SJMP $ Prof. José Wilson Lima Nerys Laço infinito aguardando interrupção 59 Microprocessadores 59 MNEMÔNICO ORG 00H LJMP INICIO ORG 03H LJMP ATENDE0 ORG 3H LJMP ATENDE ORG 30H INICIO: MOV SP, #FH MOV IE, #85H MOV TCON, #05H MOV IP,#04H RÓTULO ATENDE0: PUSH ACC MNEMÔNICO MOV A,#00H V: MOV P,A INC A LCALL ATRASO CJNE A,#00H,V POP ACC RETI Exemplos Habilita Interrupções INT0 e INT por transição. INT tem prioridade alta RÓTULO MNEMÔNICO ATENDE: PUSH ACC MOV A,#0FFH V: MOV P,A LCALL ATRASO DEC A CJNE A,#0FFH,V POP ACC RETI ATRASO: MOV R0,#0 V3: MOV R,#00 DJNZ R, $ DJNZ R0, V3 RET END

RÓTULO Universidade Federal de Goiás MNEMÔNICO ORG 00H LJMP INICIO ORG 03H LJMP ATENDE0 ORG 3H LJMP ATENDE Programa rotaciona Leds conectados à porta P. INT0 rotaciona à esquerda; INT rotaciona à direita. RÓTULO ATENDE0: PUSH ACC MNEMÔNICO MOV A,#0H V: MOV P,A RL A LCALL ATRASO CJNE A,#0H,V POP ACC RETI Exemplos RÓTULO MNEMÔNICO ATENDE: PUSH ACC MOV A,#80H V: MOV P,A LCALL ATRASO ORG 30H V3: MOV R,#50 INICIO: MOV SP, #FH DJNZ R, $ DJNZ R0, V3 MOV IE, #85H Habilita Interrupções INT0 e INT por transição RET MOV TCON, #05H END SJMP $ Laço infinito aguardando interrupção Prof. José Wilson 60Lima Nerys 60 Microprocessadores RR A CJNE A,#80H,V POP ACC RETI ATRASO: MOV R0,#50

RÓTULO Universidade Federal de Goiás SJMP $ Prof. José Wilson Lima Nerys Laço infinito aguardando interrupção 6 Microprocessadores 6 MNEMÔNICO ORG 00H LJMP INICIO ORG 03H LJMP ATENDE0 ORG 3H LJMP ATENDE ORG 30H INICIO: MOV SP, #FH Programa rotaciona Leds conectados à porta P. INT0 rotaciona à esquerda; INT rotaciona à direita (com prioridade alta). MOV IE, #85H MOV TCON, #05H MOV IP,#04H RÓTULO ATENDE0: PUSH ACC MNEMÔNICO MOV A,#0H V: MOV P,A RL A LCALL ATRASO CJNE A,#0H,V POP ACC RETI Exemplos Habilita Interrupções INT0 e INT por transição. INT tem prioridade alta RÓTULO MNEMÔNICO ATENDE: PUSH ACC MOV A,#80H V: MOV P,A LCALL ATRASO RR A CJNE A,#80H,V POP ACC RETI ATRASO: MOV R0,#50 V3: MOV R,#50 DJNZ R, $ DJNZ R0, V3 RET END

RÓTULO Universidade Federal de Goiás SJMP $ Prof. José Wilson Lima Nerys Laço infinito aguardando interrupção 6 Microprocessadores 6 Programa rotaciona Motor de Passo conectado ao nibble inferior da porta P. INT0 rotaciona para a esquerda; INT rotaciona para a direita. MNEMÔNICO ORG 00H LJMP INICIO ORG 03H LJMP ATENDE0 ORG 3H LJMP ATENDE ORG 30H INICIO: MOV SP, #FH MOV IE, #85H MOV TCON, #05H MOV A,#H RÓTULO ATENDE0: PUSH ACC MNEMÔNICO MOV R7,#8 V: MOV P,A RL A LCALL ATRASO DJNZ R7,V POP ACC RETI São 8 passos de 5º Total: 90º Exemplos Habilita Interrupções INT0 e INT por transição RÓTULO MNEMÔNICO ATENDE: PUSH ACC MOR R7,#36 V: MOV P,A RR A LCALL ATRASO DJNZ R7,V POP ACC RETI ATRASO: MOV R0,#50 V3: MOV R,#50 DJNZ R, $ DJNZ R0, V3 RET END

INT0 mostra em P maior valor de uma Tabela. INT mostra o menor valor Rótulo Mnemônico ORG 00H LJMP INICIO ORG 03H LJMP MAIOR ORG 3H LJMP MENOR Rótulo Mnemônico ORG 30H INICIO: MOV SP,#FH MOV IE,#85H MOV TCON,#05H MOV DPTR,#TABELA V: MOV R7,#00H MOV R0,#00H MOV R,#0FFH SJMP V Prof. José Wilson 63Lima Nerys 63 Microprocessadores 63

Rótulo Universidade Federal de Goiás INT0 mostra em P maior valor de uma Tabela. INT mostra o menor valor MAIOR: Mnemônico MOV A,R7 MOVC A,@A+DPTR CJNE A,#0FFH,V MOV P,R0 RETI V: CLR CY MOV B,A SUBB A,R0 JC V3 MOV R0,B V3: INC R7 SJMP MAIOR Rótulo MENOR: Mnemônico MOV A,R7 MOVC A,@A+DPTR CJNE A,#0FFH,V4 MOV P,R Prof. José Wilson 64Lima Nerys 64 Microprocessadores RETI V4: CLR CY MOV B,A SUBB A,R JNC V5 MOV R,B V5: INC R7 SJMP MENOR 64 Rótulo TABELA: Dado DB 05H DB 35H DB H DB 98H DB 0AH DB 0B5H DB 5AH DB 09H DB 7H DB 40H DB 0FFH END

Breve Introdução aos Conversores AD e DA Como os dados de um microprocessador estão na forma digital e os dados do mundo exterior estão na forma analógica (contínua), é necessário fazer a conversão entre esses dados. Assim, tem-se o Conversor Analógico-Digital (ADC), que faz a conversão de sinal analógico para sinal digital e o Conversor Digital-Analógico (DAC), que faz a conversão de sinal digital para sinal analógico. Velocidade Temperatura Tensão Corrente Sinal Analógico ADC Sinal Digital Microcontrolador Sinal Digital DAC Sinal Analógico Pressão Prof. José Wilson 65Lima Nerys 65 Microprocessadores 65

Conversor DA Básico de 4 bits I I I I 3 I0 VREF 0 3 I ( D3 D D D0 ) R VREF I ( D3 0,5 D 0,5 D 0,5 D0 ) R Prof. José Wilson 66Lima Nerys 66 Microprocessadores V saída R saída I 66 I I I I 3 V R V 0 REF REF R V REF 4R V REF 8R

Conversor DA Básico De 4 bits D 3 D D D 0 Corrente saída (V ref = 5 V e R = 5 kω) Prof. José Wilson 67Lima Nerys 67 Microprocessadores 67 Fração do máximo 0 0 0 0 0 0 0 0 0 0.5 /5 0 0 0 0.50 /5 0 0 0.375 3/5 0 0 0 0.500 4/5 0 0 0.65 5/5 0 0 0.750 6/5 0 0.875 7/5 0 0 0.000 8/5 0 0.5 9/5 0 0.50 0/5 0.375 /5 0 0.500 /5 0.65 3/5 0.750 4/5.875 5/5

Conversor DA Básico de 4 bits máx LSB 0 Prof. José Wilson 68Lima Nerys 68 Microprocessadores 68

Resolução de um DA (a) Cada degrau (menor incremento possível) corresponde a LSB (bit menos significativo) (b) Número de degraus de um conversor: n, onde n é o número de bits. Para n = 4 5 degraus. Resolução: É a relação entre o menor incremento possível, LSB e a saída máxima. Resolução = n, onde n é número de bits. No caso de n = 4 Resolução = /5 Resolução Percentual = Resolução 00% No caso de 4 bits Resolução Percentual = 6.67% Prof. José Wilson 69Lima Nerys 69 Microprocessadores 69

Resolução do DA versus Número de bits Número de bits Resolução Resolução Percentual (%) 4 /5 6,67 8 /55 0,39 0 /03 0,09775 /4095 0,044 6 /65535 0,00038 Prof. José Wilson 70Lima Nerys 70 Microprocessadores 70

Conversor DA com resistores em escada Prof. José Wilson 7Lima Nerys 7 Microprocessadores 7

Conversor DAC 0808 Prof. José Wilson 7Lima Nerys 7 Microprocessadores 7

Conversor ADC Básico Prof. José Wilson 73Lima Nerys 73 Microprocessadores 73

Conversor ADC com Aproximação Sucessiva Prof. José Wilson 74Lima Nerys 74 Microprocessadores 74

Conversor ADC 0804 Saída Sinais de Controle CS\ habilita o CI RD\ habilita a saída dos dados RW\ trigger Prof. José Wilson 75Lima Nerys 75 Microprocessadores 75

Diagrama de Temporização do Conversor ADC0804 Tempo de conversão aproximado: 00 µs Prof. José Wilson 76Lima Nerys 76 Microprocessadores 76

Programa para leitura do Conversor AD Rótulo Instrução Rótulo Instrução Rótulo Instrução CS EQU P3.4 LE_AD: CLR CS ATRASO: MOV R0,#50 RS EQU P3.5 LCALL ATRASO DJNZ R0,$ RW EQU P3.6 SETB RW RET INICIO: ORG 00H LJMP INICIO ORG 30H MOV SP,#FH V: LCALL LE_AD MOV P,A SJMP V Loop infinito: Chama subrotina de Leitura do AD e mostra resultado em A LCALL ATRASO CLR RW LCALL ATRASO SETB RW SETB CS JB P3.3,$ CLR CS CLR RS LCALL ATRASO MOV A,P SETB RS SETB CS RET ; Começa a conversão ; Aguarda fim de conversão ; Liberada dados na saída ; Transfere resultado para A Prof. José Wilson 77Lima Nerys 77 Microprocessadores 77 END Loop infinito: Aguarda sinal de fim de conversão. Pino INTR do AD conectado ao pino P3.3 do 805

Temporização no problema anterior CS\ RS\ INTR Leitura habilitada (libera dados na saída) Fim da conversão WR\ Início da conversão Prof. José Wilson 78Lima Nerys 78 Microprocessadores

Rótulo Instrução ORG 00H LJMP INICIO Programa : Conversor AD usando interrupção O conversor AD está operando de forma independente e ininterrupta. O sinal de final de conversão é usado para dar início à próxima conversão. INICIO: ORG 03H MOV A,P RETI ORG 30H MOV SP,#FH MOV IE,#8H MOV TCON,#0H A cada fim de conversão do conversor AD, um sinal de pedido de interrupção é enviado ao 805, através do pino P3. (interrupção zero). Assim, o processamento desvia para o endereço 03H, onde o resultado da conversão (disponibilizado na porta P) é transferido para A Interrupção externa zero é habilitada por transição. V: MOV P,A SJMP V END Loop infinito: O conteúdo de A é copiado na porta P (Leds). A atualização de A ocorre a cada final de conversão, através da interrupção externa zero. Prof. José Wilson 79Lima Nerys 79 Microprocessadores 79

Uso do Teclado com Interrupção (Decodificador de teclado: 74C9) A saída (AD3, AD, AD, AD0) do decodificador 74C9 é conectado ao nibble inferior da Porta P Sinal alto (saída) quando a conversão acaba Pedido de interrupção para o 805 (na transição de alto para baixo) Sinal baixo (entrada) para liberar o resultado na saída A B C D Prof. José Wilson 80Lima Nerys 80 Microprocessadores 80

Rótulo Instrução ORG 00H LJMP INICIO ORG 3H MOV A,P ANL A,#0FH RETI Uso do Teclado com Interrupção (Decodificador de teclado: 74C9) Endereço da interrupção externa O conteúdo da porta P é copiado no acumulador. A instrução ANL A,#0FH (AND) elimina o nibble superior da leitura de P. ORG 30H INICIO: MOV SP,#FH MOV IE,#84H MOV TCON,#04H V: MOV P,A interrupção externa por transição Loop infinito: Mostra o conteúdo de A, que é atualizado, através da interrupção externa, a cada vez que o teclado é pressionado SJMP V END Prof. José Wilson 8Lima Nerys 8 Microprocessadores 8

Uso do Teclado com Interrupção (Decodificador de teclado: 74C9) Nesse programa o Teclado é usado para entrar com um número de dois dígitos. Rótulo INICIO: Instrução ORG 00H LJMP INICIO ORG 3H LJMP LE_TECLADO ORG 30H MOV SP,#FH MOV IE,#84H MOV TCON,#04H CLR F0 V: MOV P,A SJMP V Rótulo LE_TECLADO: NIBBLE: Instrução JB F0,NIBBLE MOV A,P ANL A,#0FH SWAP A MOV B,A SETB F0 RETI MOV A,P ANL A,#0FH ORL A,B CLR F0 RETI END Leitura do dígito superior do número de dois dígitos. O dado lido de P passa por uma operação AND para eliminar o nibble superior (lixo). A instrução SWAP A transfere o dado lido (nibble inferior) para o nibble superior. O resultado é guardado em B. A flag F0 é setada para direcionar a próxima interrupção para NIBBLE. Leitura do dígito inferior do número de dois dígitos. O dado lido de P passa por uma operação AND para eliminar o nibble superior (lixo). A instrução OR entre junta conteúdo de A (dígito inferior) com o conteúdo de B (dígito superior). A flag F0 é zerada para direcionar a próxima interrupção para a primeira parte dessa subrotina. Loop infinito: Mostra o conteúdo de A, que é atualizado, através 8 da interrupção externa, a cada vez que o teclado é pressionado Prof. José Wilson 8Lima Nerys 8 Microprocessadores

Temporizadores O 805 tem temporizadores/contadores de 6 bits que podem operar de 4 modos distintos: Modo 0 Contador/Temporizador de 3 bits com divisor de frequência de até 3 vezes. Pode contar até 89 (3 55). Modo Contador/Temporizador de 6 bits. Pode contar até 65535. Modo contadores/temporizadores de 8 bits com recarga automática. Modo 3 contadores/temporizadores independentes de 8 bits. O microcontrolador AT89S85 possui 3 temporizadores. Prof. José Wilson 83Lima Nerys 83 Microprocessadores

Temporizadores Os registradores que comandam o Contador-Temporizador são: Registrador do Temporizador: TMOD (Timer Mode) = Registrador 89h TMOD = G C/T M M0 G0 C/T0 M0 M00 0 0 Modo 0 0 Modo 0 Modo Modo 3 0 0 Modo 0 0 Modo 0 Modo Modo 3 Registrador de Controle: TCON (Timer Control) = Registrador 88h TCON = TF TR TF0 TR0 IE IT IE0 IT0 Temporizador Temporizador zero Prof. José Wilson 84Lima Nerys 84 Microprocessadores

Temporizadores Registrador do Temporizador: TMOD (Timer Mode) = Registrador 89h TMOD = G C/T M M0 G0 C/T0 M0 M00 G Gate Sendo 0, o disparo do temporizador/contador é interno, através de TR. Sendo, o disparo pode ser através de TR ou através do pino externo P3. (INT0\) ou P3.3 (INT\). C/T\ Sendo 0, a operação é como temporizador, onde a freqüência de operação é / da frequência do cristal oscilador. Sendo, a frequência é determinada por um componente externo, através do pino P3.4 (T0) ou P3.5 (T). Prof. José Wilson 85Lima Nerys 85 Microprocessadores 85

Temporizadores Registrador de Controle: TCON (Timer Control) = Registrador 88h TCON = TF TR TF0 TR0 IE IT IE0 IT0 TR Quando G = 0, fazendo-se TR =, o temporizador inicia a contagem a partir do valor armazenado em TH e TL. TR = 0 para o temporizador. TF A cada fim de contagem TF é setado (TF = ) pelo hardware. Se a interrupção do temporizador estiver habilitada, ocorre o desvio para o endereço correspondente, 0Bh para o temporizador 0 e Bh para o temporizador. Prof. José Wilson 86Lima Nerys 86 Microprocessadores 86

Temporizadores Lógica para habilitar contagem Prof. José Wilson 87Lima Nerys 87 Microprocessadores 87

Temporizadores O bit C/T\ do registrador TMOD define se o funcionamento é como contador (C/T\ = ), ou como temporizador (C/T\ = 0). Como temporizador, o clock é interno, vindo do oscilador. A frequência é / da frequência do cristal oscilador. Como contador, o clock é externo, vindo através de T0 (P3.4). O pino Gate\ define se o sinal de disparo do contador/temporizador vem através de software (bit TR0), ou de um sinal externo, através do pino INT0\ (P3.). Se Gate\ = 0, o comando SETB TR0 dispara o contador/temporizador e CLR TR0 interrompe. Prof. José Wilson 88Lima Nerys 88 Microprocessadores 88

Exemplos com temporizadores e contadores Cristal de MHz ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#FH MOV TMOD,#0H MOV TH0,#HIGH(55535) MOV TL0,#LOW(55535) SETB TR0 SJMP $ END TH0 = D8H TL0 = EFH Nesse exemplo o temporizador zero foi configurado para o modo (TMOD = 0000 000) e a primeira contagem começa do valor 55.535. Toda contagem vai até 65.535, e, então, o valor de TH0-TL0 torna-se zero e a contagem continua. A contagem não para, enquanto TR0 permanecer em nível lógico alto (TR0 = ). Assim, a primeira contagem, nesse exemplo, conta 0.000 pulsos. A partir da segunda contagem, no entanto, TH0-TL0 contam, continuamente, de 0 a 65.535. Prof. José Wilson 89Lima Nerys 89 Microprocessadores 89

Exemplos com temporizadores e contadores Cristal de MHz ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#FH MOV TMOD,#0H V: MOV TH0,#HIGH(5535) MOV TL0,#LOW(5535) SETB TR0 CPL P.0 JNB TF0,$ CLR TF0 SJMP V END Nesse exemplo o temporizador zero foi configurado para o modo (TMOD = 0000 000). Ao contrário do exemplo anterior, todas as contagens começam do valor 5.535 porque, a cada final de contagem (quando TF0 = ), o processamento retorna para V, onde os valores de TH0 e TL0 são recarregados. Assim, a contagem é de 50.000 pulsos. Sendo o cristal de MHz, o contador conta 50 ms. O exemplo também apresenta uma forma de verificar o tempo de contagem do temporizador, gerando uma onda quadrada no pino P.0 com período de 00 ms. Loop de espera do fim da contagem A Flag TF0 (fim de contagem) deve ser zerada antes de recarregar TH0 e TL0 Prof. José Wilson 90Lima Nerys 90 Microprocessadores

Exemplos com temporizadores e contadores ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#FH MOV TMOD,#0H V: MOV TH0,#4BH MOV TL0,#0FFH SETB TR0 CPL P.0 JNB TF0,$ CLR TF0 SJMP V END Cristal de.059 MHz Esse exemplo é idêntico ao anterior, com a diferença de usar um cristal oscilador de.059 MHz. Dessa forma, cada período do temporizador corresponde a,085 µs, ao invés de µs. Assim, para gerar uma contagem de 50 ms, são necessários 46.080 pulsos (pois, 46.080 x,085 µs = 50 ms). Ou seja, a contagem deve começar de TH0-TL0 = 4BFFH, que corresponde ao número decimal 9.455. No programa poderia ter sido usado: MOV TH0, #HIGH(9455) MOV TL0,#LOW(9455) Prof. José Wilson 9Lima Nerys 9 Microprocessadores

Exemplos com temporizadores e contadores Cristal de.059 MHz ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#FH MOV TMOD,#09H SETB TR0 V: MOV TH0,#HIGH(9455) MOV TL0,#LOW(9455) CPL P.0 JNB TF0,$ CLR TF0 SJMP V END Nesse exemplo, o temporizador zero, no modo, gera uma onda quadrada com período de 00 ms (contagem de 9455 a 65535, com cristal de.059 MHz). No entanto, o disparo do temporizador é EXTERNO, através do pino P3. (uma chave tipo push-button deve ser conectada entre o pino P3. e o Terra). Com P3. = 0, o temporizador fica parado; com P3. =, o temporizador prossegue a contagem. TMOD = 09H = 0000 00 Pino G\ = (disparo externo) e M-M0 = 0 (temporizador zero no modo ) A Flag TR0 é setada para habilitar esse disparo externo. Prof. José Wilson 9Lima Nerys 9 Microprocessadores

Exemplos com temporizadores e contadores Cristal de.059 MHz ORG 00H LJMP INICIO Nesse exemplo tem-se um CONTADOR no modo (6 bits). ORG 30H INICIO: MOV SP,#FH MOV TMOD,#05H SETB TR0 V: MOV P,TH0 MOV P,TL0 SJMP V END O valor de TH0 é mostrado na porta P O valor de TL0 é mostrado na porta P O Sinal de clock é aplicado ao pino P3.4. Duas situações podem ser criadas, no Proteus:. Conectar uma chave entre os pinos P3.4 e o Terra. A cada pulso dessa chave, a contagem em TH0-TL0 é incrementada em.. Conectar um gerador de função, com pulso quadrado, ao pino P3.4. A contagem em TH0-TL0 seguirá esse clock., TMOD = 05H = 0000 00 Pino C/T\ = (contador) e M-M0 = 0 (contador zero no modo ) O bit TR0 é setado para o início da contagem Prof. José Wilson 93Lima Nerys 93 Microprocessadores

Exemplos com temporizadores e contadores ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#FH MOV TMOD,#04H SETB TR0 V: MOV P,TH0 MOV P,TL0 SJMP V END O valor de TH0 é mostrado na porta P O valor de TL0 é mostrado na porta P Cristal de.059 MHz Nesse exemplo tem-se um CONTADOR no modo 0 (3 bits). O Sinal de clock é aplicado ao pino P3.4. As mesmas situações do exemplo anterior podem ser utilizadas. A diferença é que os valores mostrados em P e P são diferentes: P (valor de TL0) mostra uma contagem de 00h até Fh, continuamente. Ao final de cada contagem, o valor mostrado em P (valor de TH0) é incrementado em TMOD = 04H = 0000 000 Pino C/T\ = (contador) e M-M0 = 00 (contador zero no modo 0) O bit TR0 é setado para o início da contagem Prof. José Wilson 94Lima Nerys 94 Microprocessadores

Exemplos com temporizadores e contadores ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#FH MOV TMOD,#06H SETB TR0 MOV TH0,#40H V: MOV P,TH0 MOV P0,TL0 SJMP V END Cristal de.059 MHz Nesse exemplo tem-se um CONTADOR no modo (8 bits com recarga automática). No modo (recarga automática), cada nova contagem começa do valor de TH0. Assim, no programa mostrado, cada nova contagem começa de TH0 = 40H. O sinal de clock deve ser conectado ao pino P3.4. TMOD = 06H = 0000 00 Pino C/T\ = (contador) e M-M0 = 0 (contador zero no modo 0) O valor de TH0 é mostrado na porta P O valor de TL0 é mostrado na prota P Valor da recarga Prof. José Wilson 95Lima Nerys 95 Microprocessadores

Exemplos com temporizadores e contadores ORG 00H LJMP INICIO ORG 03H MOV A,TH0 ADD A,#5 MOV TH0,A RETI ORG 30H INICIO: MOV SP,#FH MOV IE,#8H MOV TCON,#0H MOV TMOD,#06H SETB TR0 MOV TH0,#40H V: MOV P,TH0 MOV P0,TL0 SJMP V END Cristal de.059 MHz Nesse exemplo tem-se um CONTADOR no modo (8 bits com recarga automática). É idêntico ao exemplo anterior, com uma exceção: A interrupção externa zero (por transição) é usada para incrementar em 5 o valor da recarga, TH0. Assim, cada nova contagem começa do valor anterior de TH0 + 5. Subrotina de atendimento da interrupção externa zero IE = 8h = 000 000 Interrupção externa zero habilitada TCON = 0H = 0000 000 Interrupção externa zero por transição Prof. José Wilson 96Lima Nerys 96 Microprocessadores

Exemplos com temporizadores e contadores COM INTERRUPÇAO ORG 00H LJMP INICIO ORG 0BH MOV TH0,#HIGH(9455) MOV TL0,#LOW(9455) CPL P.0 RETI ORG 30H INICIO: MOV SP,#FH MOV IE,#8H MOV TMOD,#0H MOV TH0,#HIGH(9455) MOV TL0,#LOW(9455) SETB TR0 SJMP $ END 97 Cristal de.059 MHz Nesse exemplo tem-se um TEMPORIZADOR no modo (6 bits), com interrupção ao final de cada contagem. A cada final de contagem (de 9455 a 65535) o processamento desvia para o endereço 0BH. Nesse endereço, recarrega-se TH0 e TL0 e complementa-se o pino P.0 (gera onda quadrada). Com uma contagem de 46080 e um cristal de.059 MHz, tem 50 ms para cada meio período (onda quadrada com 00 ms de período) Subrotina de atendimento da interrupção do temporizador zero. IE = 000 000 Interrupção do temporizador zero habilitada. Loop infinito esperando interrupção Prof. José Wilson Lima Nerys 97 Microprocessadores

Cristal de.059 MHz Universidade Federal de Goiás Exemplos com temporizadores e contadores COM INTERRUPÇAO ORG 00H LJMP INICIO ORG 0BH MOV TH0,#HIGH(9455) MOV TL0,#LOW(9455) DJNZ R0,V CPL P.0 MOV R0,#0 V: NOP RETI ORG 30H INICIO: MOV SP,#FH MOV IE,#8H MOV TMOD,#0H MOV TH0,#HIGH(9455) MOV TL0,#LOW(9455) MOV R0,#0 SETB TR0 SJMP $ Nesse exemplo tem-se um TEMPORIZADOR no modo (6 bits), com interrupção ao final de cada contagem. A cada final de contagem (de 9455 a 65535) o processamento desvia para o endereço 0BH. Nesse endereço, recarrega-se TH0 e TL0. No entanto, o pino P.0 somente é complementado a 0 passagens pela subrotina (R0 = 0). Com uma contagem de 46080 e um cristal de.059 MHz, tem 50 ms para cada meio período, mas o pino P. 0 é complementado a cada 0 x 50 ms = 0,5 s (resulta em onda quadrada com,0 s de período) Subrotina de atendimento da interrupção do temporizador zero. P.0 somente é complementado a cada 0 atendimentos dessa subrotina. IE = 000 000 Interrupção do temporizador zero habilitada. R0 = 0 contador para contar 0 vezes 50 ms END Loop infinito esperando interrupção Prof. José Wilson 98Lima Nerys 98 Microprocessadores

Cristal de.059 MHz Universidade Federal de Goiás Exemplos com temporizadores e contadores COM INTERRUPÇAO ORG 00H LJMP INICIO Nesse exemplo tem-se o TEMPORIZADOR zero no modo 0 (3 bits) e o TEMPORIZADOR no modo (6 bits) ORG 0BH ORG BH ORG 30H INICIO: CPL P.0 RETI CPL P. RETI MOV SP,#FH MOV IE,#8AH MOV TMOD,#0H SETB TR0 SETB TR SJMP $ END Ambos começam a contagem de 0 e ambos utilizam suas interrupções. Ao final de cada contagem de 3 bits (0 a 8.9) o processamento desvia para o endereço 0Bh, onde o pino P.0 é complementado (gerando uma onda quadrada no pino P.0). Ao final de cada contagem de 6 bits (0 a 65.535) o processamento desvia para o endereço Bh, onde o pino P. é complementado (gerando uma onda quadrada no pino P.). IE = 000 00 Interrupções dos temporizadores zero e habilitadas. TMOD = 0h = 000 0000 Temporizador zero no modo 0 (3 bits); Temporizador modo (6 bits) Prof. José Wilson 99Lima Nerys 99 Microprocessadores

Exemplos com temporizadores e contadores COM INTERRUPÇAO Período da onda quadrada no modo zero: 7,77 ms Período da onda quadrada no modo : 4,9 ms período no modo 6 bits corresponde a 8 períodos do modo 3 bits. Prof. José Wilson 00Lima Nerys 00 Microprocessadores 00

Programa com uma subrotina de atraso de tempo com temporizador ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#FH MOV TMOD,#0H MOV A,#0H V: MOV P0,A CPL P.0 LCALL ATRASO RL A SJMP V ATRASO: MOV R0,#0 V: MOV TH0,#HIGH(9455) MOV TL0,#LOW(9455) SETB TR0 JNB TF0,$ CLR TF0 DJNZ R0,V CLR TR0 RET END Para o temporizador São 0 contagens de 50 ms (tempo total: s) Contador conta de 9.455 até 65.535 (46.080 pulsos) Dispara o temporizador Espera o final de cada contagem do temporizador Limpa a flag que indica fim de contagem Decrementa R0; se não der zero, volta para nova contagem de 50 ms Onda quadrada em P.0 (período de s) e rotação de Leds na porta P0, com atraso de s Cristal oscilador:.059 MHz Prof. José Wilson 0Lima Nerys 0 Microprocessadores 0

Relógio HH:MM:SS Prof. José Wilson 0Lima Nerys 0 Microprocessadores

Relógio com subrotina comum de atraso de tempo SEG MIN HORA ORG 00H LJMP INICIO EQU 0H EQU H EQU H ORG 30H INICIO: MOV SP,#FH MOV TMOD,#0H CLR P3.7 V: MOV SEG,#00H MOV MIN,#00H MOV HORA,#00H V: MOV P,SEG MOV P,MIN MOV P0,HORA LCALL ATRASO MOV A,SEG ADD A,#0H DA A MOV SEG,A CJNE A,#60H,V MOV SEG,#00H MOV A,MIN ADD A,#0H DA A MOV MIN,A CJNE A,#60H,V MOV MIN,#00H MOV A,HORA ADD A,#0H DA A MOV HORA,A CJNE A,#4H,V SJMP V ATRASO: MOV R0,#0 V3: MOV TH0,#HIGH(9455) MOV TL0,#LOW(9455) SETB TR0 JNB TF0,$ CLR TF0 DJNZ R0,V3 CLR TR0 RET END Subrotina de atraso de s Relógio HH:MM:SS Cristal de.059 MHz Prof. José Wilson 03Lima Nerys 03 Microprocessadores

HH MM SS Prof. José Wilson 04Lima Nerys 04 Microprocessadores

SEG MIN HORA Universidade Federal de Goiás Relógio com tempo de s marcado com temporizador, com interrupção ORG 00H LJMP INICIO EQU 0H EQU H EQU H ORG 0BH LJMP ATRASO ORG 30H INICIO: MOV SP,#FH MOV IE,#8H MOV TMOD,#0H MOV TH0,#HIGH(9455) MOV TL0,#LOW(9455) SETB TR0 CLR P3.7 MOV R0,#0 Relógio HH:MM:SS V: MOV SEG,#00H MOV MIN,#00H MOV HORA,#00H V: MOV P,SEG MOV P,MIN MOV P0,HORA JNB F0,$ CLR F0 MOV A,SEG ADD A,#0H DA A MOV SEG,A CJNE A,#60H,V MOV SEG,#00H MOV A,MIN ADD A,#0H DA A MOV MIN,A CJNE A,#60H,V MOV MIN,#00H MOV A,HORA ADD A,#0H DA A MOV HORA,A CJNE A,#4H,V SJMP V ATRASO: MOV TH0,#HIGH(9455) MOV TL0,#LOW(9455) DJNZ R0,V3 MOV R0,#0 SETB F0 V3: NOP RETI Prof. José Wilson 05Lima Nerys 05 Microprocessadores END Cristal de.059 MHz

Escola Relógio de Engenharia HH:MM:SS Elétrica, Mecânica e de Computação CLR RS Relógio no LCD RS EQU P3.5 RW EQU P3.6 EN EQU P3.7 LCD EQU P0 HORA EQU 0H MIN EQU H SEG EQU H ORG 00H LJMP INICIO ORG 0BH LJMP ATRASO REPETE: INICIA: LCALL HORARIO LCALL DISPLAY JNB F0,$ CLR F0 SJMP REPETE MOV A,#38H LCALL INSTR_WR MOV A,#38H LCALL INSTR_WR MOV A,#0EH LCALL INSTR_WR MOV A,#06H LCALL INSTR_WR MOV A,#0H LCALL INSTR_WR RET INSTR_WR:SETB EN CLR RW MOV LCD, A CLR EN LCALL ATRASO_LCD RET TEXTO_WR:SETB EN CLR RW SETB RS MOV LCD, A CLR EN LCALL ATRASO_LCD RET HORARIO:MOV A,SEG ADD A,#0H DA A MOV SEG,A CJNE A,#60H,V4 MOV SEG,#00 MOV A,MIN ADD A,#0H DA A MOV MIN,A CJNE A,#60H,V4 MOV MIN,#00H MOV A,HORA ADD A,#0H DA A MOV HORA,A CJNE A,#4H,V4 MOV SEG,#00H MOV MIN,#00H MOV HORA,#00H V4: NOP ORG 30H INICIO: MOV SP,#FH MOV IE,#8H MOV TMOD,#0H MOV TH0,#HIGH(9455) LINHA: INC R7 MOV TL0,#LOW(9455) MOV A,R7 MOV SEG,#00 MOV DPTR,#MSG MOV MIN,#00 MOVC A,@A+DPTR MOV HORA,#00 CJNE A,#0FFH,V MOV R0,#0 RET MOV R7,#0FFH V: LCALL TEXTO_WR LCALL INICIA SJMP LINHA LCALL LINHA Prof. José Wilson 06 SETB Lima TR0 Nerys Cristal de.059 MHz 06RET Microprocessadores

Cronômetro: MM:SS Prof. José Wilson 07Lima Nerys 07 Microprocessadores

SEG EQU 0H MIN EQU H BUZZER EQU P3.7 ORG 00H LJMP INICIO ORG 03H MOV A,MIN ADD A,#0H DA A MOV MIN,A RETI ORG 3H SETB F0 RETI ;======Configurações iniciais ORG 30H INICIO: MOV SP,#FH MOV TMOD,#0H MOV IE,#85H MOV TCON,#05H MOV R0,#0 CLR F0 CLR BUZZER MOV SEG,#00H 08 V4: MOV P,MIN MOV P,SEG JNB F0,V4 ;-------------------------------------- V: MOV P,MIN MOV P,SEG LCALL ATRASO MOV A,SEG ADD A,#99H DA A MOV SEG,A CJNE A,#99H,V MOV SEG,#59H MOV A,MIN ADD A,#99H DA A MOV MIN,A CJNE A,#99H,V MOV MIN,#00H MOV SEG,#00H MOV P,MIN MOV P,SEG SETB BUZZER MOV R7,#3 V: LCALL ATRASO DJNZ R7,V CLR BUZZER CLR F0 SJMP INICIO ATRASO: SETB TR0 V3: MOV TH0,#4BH MOV TL0,#0FFH JNB TF0,$ CLR TF0 DJNZ R0,V3 MOV R0,#0 RET Prof. José Wilson Lima Nerys 08 Microprocessadores END s Cristal de.059 MHz

MM SS Prof. José Wilson 09Lima Nerys 09 Microprocessadores

Acionamento temporizado de Motor de Corrente Contínua:. Motor gira no sentido horário por 0 s e para por 5 s. Motor gira no sentido anti-horário por 0 s e para. IN EQU P.3 IN EQU P. LIGA EQU P3. ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#FH MOV TMOD,#0H MOV R0,#0 CLR IN CLR IN MOV R7,#5 V: LCALL ATRASO DJNZ R7,V CLR IN SETB IN MOV R7,#0 V4: LCALL ATRASO DJNZ R7,V4 ATRASO: SETB TR0 V3: MOV TH0,#3CH MOV TL0,#0AFH JNB TF0,$ CLR TF0 DJNZ R0,V3 MOV R0,#0 CLR TR0 RET END V0: JB LIGA,$ SETB IN CLR IN MOV R7,#0 V: LCALL ATRASO DJNZ R7,V CLR IN CLR IN SJMP V0 Cristal de MHz Prof. José Wilson 0Lima Nerys 0 Microprocessadores 0

Acionamento temporizado de Motor de Passo:. Motor gira no sentido horário por 0 s e para por 5 s. Motor gira no sentido anti-horário por 0 s e para. ORG 00H LJMP INICIO ORG 0BH LJMP TEMPO_R7s ;===== Configurações ===== ORG 30H INICIO: MOV SP,#FH MOV IE,#8H MOV TMOD,#0H MOV TH0,#4BH MOV TL0,#0FFH MOV R0,#0 LIGA: JB P3.,$ SAI: MOV TH0,#4Bh CLR TR0 MOV TL0,#0FFH CLR F0 RETI MOV R7,#0 SETB TR0 END MOV A,#0H Cristal de.059 MHz Prof. José Wilson Lima Nerys Microprocessadores DIRETO: VF0: MOV P,A LCALL ATRASO RL A CJNE A,#0H,VF0 MOV A,#0H JNB F0,DIRETO CLR TR0 CLR F0 MOV R7,#5 SETB TR0 JNB F0,$ CLR TR0 CLR F0 MOV R7,#0 SETB TR0 MOV A,#08H REVERSO:MOV P,A LCALL ATRASO RR A CJNE A,#80H,VF MOV A,#08H VF: JNB F0,REVERSO SJMP LIGA ;== Atraso para o motor de passo ATRASO: MOV R6,#50 V: MOV R5,#50 DJNZ R5,$ DJNZ R6,V RET ;---------------------------------------------- TEMPO_R7s: DJNZ R0,SAI MOV R0,#0 DJNZ R7,SAI SETB F0

Temporizador no modo recarga automática (Temp_9_6A) Modo com interrupção complementa TH Modo com interrupção complementa TH e P.0 PWM fixo para acionamento de motor CC Incrementa TH e complementa P.0 Aciona motor CC com velocidade variável Aciona motor CC com velocidade variável e mudança de sentido de rotação Prof. José Wilson Lima Nerys Microprocessadores

Comunicação Serial do 805 Prof. José Wilson 3Lima Nerys 3 Microprocessadores 3

Comunicação Serial A comunicação serial consiste em enviar ou receber pacotes de informação bit a bit. No caso do 805 o canal de comunicação serial é do tipo full duplex, o que significa que ele pode, ao mesmo tempo, receber e transmitir dados. Uma grande questão da transmissão serial é como informar o receptor do início e do final do pacote de informação, ou seja, qual o primeiro bit da informação e qual é o último. Assim, existem dois tipos de comunicação: síncrona e assíncrona. Prof. José Wilson 4Lima Nerys 4 Microprocessadores 4

Na comunicação serial síncrona, são utilizados dois canais: um para transmitir/receber os dados e outro para transmitir/receber o sinal de sincronismo. No caso do 805 a transmissão e também a recepção síncrona de dados são feitas através do pino RxD (pino P3.0). O pino TxD (pino P3.) é usado para o sinal de sincronismo. Prof. José Wilson 5Lima Nerys 5 Microprocessadores 5

Na comunicação assíncrona não há a sinal de sincronismo e, portanto, alguns cuidados especiais devem ser tomados: As taxas de recepção e de transmissão devem ser iguais. Um bit de início e outro de fim de transmissão devem ser enviados, além dos dados. O bit de início de transmissão é zero, isto porque o canal normalmente fica em repouso no nível lógico alto. Assim, a primeira passagem para zero, após a habilitação da transmissão, é interpretada como o sinal de início. O sinal de parada é de nível lógico alto, após ser recebida a quantidade de bits previstos. Além do bit de início (Start bit) e do bit de fim (Stop bit), também pode existir um terceiro bit extra, que é o bit de paridade, usado para verificar a consistência dos dados. Prof. José Wilson 6Lima Nerys 6 Microprocessadores 6

Formato da Comunicação Serial Assíncrona Prof. José Wilson 7Lima Nerys 7 Microprocessadores 7

Registrador SCON Configuração da Comunicação Serial Prof. José Wilson 8Lima Nerys 8 Microprocessadores 8

Serial Modo 0 (síncrono registrador de deslocamento) Taxa de comunicação (baud rate): igual à frequência de clock dividida por. Recepção: Fica habilitada fazendo REN = e RI = 0. Ao final da recepção o bit RI é setado por hardware, e deve ser ressetado por software (CLR RI) antes da recepção seguinte. O conteúdo recebido é transferido para o registrador SBUF. Transmissão: É iniciada automaticamente quando o conteúdo de um registrador é transferido para o registrador SBUF. Ao final da transmissão o bit TI é setado por hardware, e deve ser ressetado por software (CLR TI) antes da transmissão seguinte. Obs.: Há um registrador SBUF para transmissão e outro para recepção Prof. José Wilson 9Lima Nerys 9 Microprocessadores 9

Rótulo Instruções MOV SCON,#00H MOV A,#00H V: MOV SBUF,A JNB TI,$ CLR TI INC A SJMP V END Instrução que dá início à transmissão Aguarda a transmissão de todos os bits. Quando o processo acaba, o micro faz TI =. Sinais de RxD e TxD durante uma transmissão síncrona Prof. José Wilson 0Lima Nerys 0 Microprocessadores 0

Serial Modo (assíncrono de 8 bits) Taxa de comunicação (baud rate): Bit 7 do registrador especial PCON O pacote de comunicação inclui 8 bits de dados, bit de start e um bit de stop. Recepção: Fica habilitada fazendo REN = e RI = 0. Tem início quando há uma transição de nível alto para baixo no pino P3.0 (RxD) Ao final da recepção o bit RI é setado por hardware, e deve ser ressetado por software (CLR RI) antes da recepção seguinte. O conteúdo recebido é transferido para o registrador SBUF. Transmissão: É iniciada automaticamente quando o conteúdo de um registrador é transferido para o registrador SBUF. Ao final da transmissão o bit TI é setado por hardware, e deve ser ressetado por software (CLR TI) antes da transmissão seguinte. Recarga do Temporizador no modo Prof. José Wilson Lima Nerys Microprocessadores

Rótulo Instruções MOV SCON,#40H MOV TMOD,#0H MOV TH,#0FDH MOV TL,#0FDH SETB TR MOV A,#00H Configura serial modo (assíncrono modo ) Timer no modo. Baud rate de 9600 bps, para cristal de,059 MHz. Sinal de TxD (P3.) durante uma transmissão assíncrona no modo V: MOV SBUF,A JNB TI,$ CLR TI INC A SJMP V Instrução que dá início à transmissão END Aguarda a transmissão de todos os bits. Quando o processo acaba, o micro faz TI =. Prof. José Wilson Lima Nerys Microprocessadores

ORG 00H LJMP INICIO Transmissão Serial no Modo ORG 30H INICIO: MOV SP,#FH MOV SCON,#40H MOV TMOD,#0H MOV TH,#0FDH MOV TL,#0FDH SETB TR MOV DPTR,#MSG Baud-rate de 9600 bps, no modo Cristal oscilador:,059 MHz V: MOV R7,#00 V: MOV A,R7 MOVC A,@A+DPTR CJNE A,#0FFH,ENVIA SJMP V ENVIA: MOV SBUF,A JNB TI,$ CLR TI INC R7 SJMP V MSG: DB 'HELLO WORLD!!!', 0DH, 0FFH MSG: DB 'MICRO 07 ', 0Dh, 0FFH end Código ASCII para mudança de linha Prof. José Wilson 3Lima Nerys 3 Microprocessadores 3

; Transmissão de mensagem via serial. Cristal:.059 MHz. Taxa de transmissão: 4800 bps ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#FH ; Posição inicial da Pilha: FH MOV SCON,#40H ; Serial no modo : assíncrona de 8 bits MOV TMOD,#0H ; Timer no modo (recarga automática) MOV TH,#0FAH ; Valor da recarga: FAH baud rate: 4800 bps SETB TR ; Dispara Timer MOV DPTR,#MSG ; DPTR assume o valor do endereço inicial da tabela MSG V: MOV R7,#00H ; Offset para leitura da MSG assume valor inicial 00H V3: MOV A,R7 ; Acumulador recebe o valor atual do Offset MOVC A,@A+DPTR ; Acumulador recebe o conteúdo da posição A+DPTR da MSG CJNE A,#0FFH,V ; Verifica se A = FFH (fim da MSG). Se não for, desvia para V SJMP V ; Retorna para V após cada fim de MSG V: MOV SBUF,A ; Transfere de A para SBUF o valor ser transmitido via serial JNB TI,$ ; Aguarda final da transmissão do conteúdo de SBUF CLR TI ; Limpa a flag TI, de transmissão serial INC R7 ; Incrementa o valor do Offset SJMP V3 ; Retorna para V3, para ler o próximo caractere de MSG MSG: MSG: END DB ' MICRO 07 ', 0DH, 0FFH DB 4DH, 49H, 43H, 5H, 4FH, 0H, 3H, 30H, 3H, 37H, 0DH, 0FFH As mensagens MSG e MSG são equivalentes Prof. José Wilson 4Lima Nerys 4 Microprocessadores 4

LAMP EQU P.7 ORG 00H LJMP INICIO ORG 30H INICIO: Universidade Federal de Goiás MOV SP,#FH MOV SCON,#40H MOV TMOD,#0H MOV TH,#0FDH MOV TL,#0FDH SETB TR CLR RI SETB REN MOV A,#0H V0: JNB RI,$ MOV R0,SBUF CLR RI CJNE R0,#'D',V SJMP LED_DIREITA V: CJNE R0,#'E',V3 SJMP LED_ESQUERDA V3: CJNE R0,#'L',V4 CPL LAMP SJMP V0 Se R0 = 4CH (ASCII de L), aciona 5 a lâmpada (apaga/liga) Prof. José Wilson Lima Nerys 5 Microprocessadores 5 Recepção Serial no Modo Se R0 = 4DH (ASCII de M), aciona o motor CC (liga/desliga) Aguarda receber dados via serial e transfere os dados para R0 Se R0 = 43H (ASCII de D), rotaciona Leds para a direita. Enquanto RI = 0, continua rotacionando para a direita Se R0 = 44H (ASCII de E), rotaciona Leds para a esquerda. São 64 passos para a esquerda, que corresponde a 8 giros completos para a esquerda. V4: CJNE R0,#'M',V0 MOTOR: CLR P.3 CPL P. SJMP V0 LED_DIREITA: V5: MOV P,A RR A LCALL ATRASO JNB RI,V5 SJMP V0 LED_ESQUERDA: MOV R3,#64 V6: MOV P,A RL A LCALL ATRASO DJNZ R3,V6 SJMP V0 ATRASO: MOV R,#00 V: MOV R,#00 DJNZ R,$ DJNZ R,V RET END

LAMP EQU P.7 ORG 00H LJMP INICIO ORG 3H ORG 30H INICIO: Universidade Federal de Goiás MOV R0,SBUF CLR RI RETI MOV SP,#FH MOV IE,#90H MOV SCON,#40H MOV TMOD,#0H MOV TH,#0FDH MOV TL,#0FDH SETB TR CLR RI SETB REN MOV A,#0H V0: CJNE R0,#'D',V SJMP LED_DIREITA V: CJNE R0,#'E',V3 SJMP LED_ESQUERDA V3: CJNE R0,#'L',V4 SETB LAMP SJMP V0 V4: CJNE R0,#'F',V5 CLR LAMP 6 Recepção Serial no Modo Com interrupção Se R0 = 4DH (ASCII de M), aciona o motor CC (liga/desliga) R0 recebe os dados recebidos via serial, através de interrupção Se R0 = 43H (ASCII de D), rotaciona Leds para a direita. Continua rotação, até R0 receber outro caractere. Se R0 = 44H (ASCII de E), rotaciona Leds para a esquerda. Enquanto R0 = 44H, continua rotacionando para a esquerda Se R0 = 4CH (ASCII de L), liga a lâmpada. Se R0 = 45H (ASCII de F), desliga a lâmpada. V5: CJNE R0,#'M',V6 MOTOR: CLR P.3 SETB P. SJMP V0 V6: CJNE R0,#'N',V0 CLR P.3 CLR P. SJMP V0 LED_DIREITA: MOV P,A RR A LCALL ATRASO SJMP V0 LED_ESQUERDA: MOV P,A RL A LCALL ATRASO SJMP V0 ATRASO: MOV R,#00 V: MOV R,#00 DJNZ R,$ DJNZ R,V 6 RET SJMP V0 Prof. José Wilson Lima Nerys END 6 Microprocessadores

Serial Modo (assíncrono de 9 bits) Taxa de comunicação (baud rate): Bit 7 do registrador especial PCON O pacote de comunicação inclui 8 bits de dados, bit extra (RB8 ou TB8), bit de start e um bit de stop. O bit extra pode ser a paridade. Recepção: Fica habilitada fazendo REN = e RI = 0. Tem início quando há uma transição de nível alto para baixo no pino P3.0 (RxD) Ao final da recepção o bit RI é setado por hardware, e deve ser ressetado por software (CLR RI) antes da recepção seguinte. O nono bit chega através do bit RB8. Transmissão: É iniciada automaticamente quando o conteúdo de um registrador é transferido para o registrador SBUF. Ao final da transmissão o bit TI é setado por hardware, e deve 7 ser ressetado por software (CLR TI) antes da transmissão seguinte. O nono bit é transmitido através de TB8. 7 Prof. José Wilson Lima Nerys 7 Microprocessadores

Serial Modo 3 (assíncrono de 9 bits) Taxa de comunicação (baud rate): Bit 7 do registrador especial PCON O pacote de comunicação inclui 8 bits de dados, bit extra, bit de start e um bit de stop. Recepção: Fica habilitada fazendo REN = e RI = 0. Tem início quando há uma transição de nível alto para baixo no pino P3.0 (RxD) Ao final da recepção o bit RI é setado por hardware, e deve ser ressetado por software (CLR RI) antes da recepção seguinte. O conteúdo recebido é transferido para o registrador SBUF. Transmissão: É iniciada automaticamente quando o conteúdo de um registrador é transferido para o registrador SBUF. Ao final da transmissão o bit TI é setado por hardware, e deve 8 ser ressetado por software (CLR TI) antes da transmissão seguinte. 8 Recarga do Temporizador no modo Prof. José Wilson Lima Nerys 8 Microprocessadores

Prof. José Wilson 9Lima Nerys 9 Microprocessadores 9

Prof. José Wilson 30Lima Nerys 30 Microprocessadores 30

INICIO: Universidade Federal de Goiás RS EQU P3.5 RW EQU P3.6 EN EQU P3.7 DADOS EQU P0 ORG 00H LJMP INICIO ORG 3H CLR RI MOV A,SBUF MOV P,A LCALL TEXTO_WR RETI ORG 30H MOV SP,#FH MOV SCON,#40H MOV IE,#90H MOV TMOD,#0H MOV TL,#0FDH MOV TH,#0FDH MOV R7,#0FFH SETB TR SETB REN LCALL INICIA SJMP $ 3 Mensagens: Computador Micro LCD INICIA: MOV A,#38H LCALL INSTR_WR MOV A,#38H LCALL INSTR_WR MOV A,#0EH LCALL INSTR_WR MOV A,#06H LCALL INSTR_WR MOV A,#0H LCALL INSTR_WR RET INSTR_WR: SETB EN CLR RW CLR RS MOV DADOS,A CLR EN LCALL ATRASO_LCD RET A recebe valor via serial e envia para P e para o LCD Serial_LCD 6.asm Subrotina para escrever instrução no LCD TEXTO_WR:SETB EN CLR RW SETB RS MOV DADOS,A CLR EN LCALL ATRASO_LCD RET ATRASO_LCD: MOV R4,#0 V6: MOV R5,#80 DJNZ R5,$ DJNZ R4,V6 RET Prof. José Wilson Lima Nerys 3 Microprocessadores END Subrotina de inicialização do LCD Subrotina para escrever dados no LCD

Motor de Passo via serial Rótulo 3 Mnemônico ORG 00H LJMP INICIO ORG 3H CLR RI MOV R0,SBUF RETI ORG 30H INICIO: MOV SP,#FH MOV SCON,#40H MOV IE,#90H MOV TMOD,#0H MOV TL,#0FDH MOV TH,#0FDH MOV R0,#00H MOV A,#H SETB TR SETB REN Rótulo Serial_Passo 6.asm Mnemônico V: CJNE R0,#44H,V LJMP DIREITA V: CJNE R0,#45H,V LJMP ESQUERDA DIREITA: MOV P,A RR A LCALL ATRASO SJMP V ESQUERDA: MOV P,A RL A LCALL ATRASO SJMP V ATRASO: MOV R7,#00 V3: MOV R6,#50 DJNZ R6,$ DJNZ R7,V3 RET END Prof. José Wilson Lima Nerys 3 Microprocessadores 3

CHAVE EQU P3.3 ; CHAVE (P3.3) MOTOR LIGA (P3.3 = 0) OU DESLIGA (P3.3 = ) STATUS EQU H ; registrador que guarda o estado das chaves M0 EQU P. ; IN0 do driver para acionamento do motor CC M EQU P.3 ; IN do driver para acionamento do motor CC ORG 00H LJMP INICIO Serial_estado 6.asm ORG 30H INICIO: MOV SP,#FH ; Pilha no endereço inicial Fh MOV TMOD,#0H ; Temporizador no modo (recarga automática) para o gerar o baud rate MOV SCON,#40H ; SCON = 000 0000 Serial no modo MOV TH,#0FAH ; Recarga para baud rate de 4800 bps MOV TL,#0FAH ; Valor inicial de contagem, desde a primeira contagem SETB TR ; Dispara temporizador MOV R7,#00H ; Contador (offset) para leitura das mensagens a serem enviadas via serial MOV STATUS,#00H ; Zera o registrador de STATUS para eliminar a possibilidade de lixo CLR M0 CLR M ; Motor CC parado Transfere conteúdo de P3 para A, isola o pino P3.3 e verifica se houve mudança de estado V: MOV A,P3 ; Leitura da porta P3 (onde está a chave que liga e desliga o motor) ANL A,#0000000B ; Faz uma operação AND entre A e 08H, para isolar o pino P3.3 XRL A,STATUS ; Verifica se houve alteração no STATUS JZ V ; Se A XOR STATUS for zero, não houve mudança, então volta para V (A=0 e Z=) ; Se houve mudança na posição da CHAVE, atualiza a situação e o STATUS JNB CHAVE,LIGA_M ; Se CHAVE = 0, liga o motor MOV DPTR,#M_OFF ; DPTR aponta para o início da mensagem de motor desligado LCALL SERIAL ; Chama subrotina para mostrar a mensagem de motor desligado CLR M0 CLR M ; Motor desligado SETB STATUS.3 ; Atualiza registrador de STATUS com valor na posição STATUS.3 33 SJMP V Prof. José Wilson 33Lima Nerys 33 Microprocessadores

Continuação do programa Serial_estado 6.asm LIGA_M: MOV DPTR,#M_ON ; DPTR aponta para o início da mensagem de motor ligado LCALL SERIAL ; Chama subrotina para mostrar a mensagem de motor ligado SETB M0 CLR M ; Motor ligado CLR STATUS.3 ; Atualiza registrador de STATUS com valor 0 na posição STATUS.3 SJMP V SERIAL: MOV A,R7 ; Transfere para A o valor do offset MOVC A,@A+DPTR ; A recebe o conteúdo da tabela CJNE A,#0FFH,ENVIA ; Verifica se já chegou ao final da tabela MOV R7,#00H ; Se a tabela já acabou, faz R7 = 0 RET ; Retorna da subrotina SERIAL ENVIA: MOV SBUF,A ; Envia conteúdo da tabela/mensagem para o computador JNB TI,$ ; Aguarda terminar a transmissão CLR TI ; limpa flag de transmissão INC R7 ; incrementa R7 (offset para leitura da tabela / mensagem) SJMP SERIAL ; retorna para SERIAL M_ON: M_OFF: DB 'MOTOR DE CORRENTE CONTINUA LIGADO', 0DH, 0DH, 0FFH DB 'MOTOR DE CORRENTE CONTINUA DESLIGADO', 0DH, 0DH, 0FFH END Prof. José Wilson 34Lima Nerys 34 Microprocessadores 34

Serial_Leds_8_6.asm Universidade Federal de Goiás Rotação de Leds via serial Rótulo Mnemônico ORG 00H LJMP INICIO ORG 3H CLR RI MOV R0,SBUF RETI Rótulo Mnemônico V: CJNE R0,#44H,V MOV B,#44H SJMP DIREITA V: CJNE R0,#45H,V4 MOV B,#45H SJMP ESQUERDA V4: CJNE R0,#50H,V5 SJMP V ORG 30H INICIO: MOV SP,#FH MOV SCON,#40H MOV IE,#90H MOV TMOD,#0H MOV TL,#0FDH MOV TH,#0FDH MOV R0,#00H MOV A,#0H SETB TR SETB REN V5: MOV R0,B SJMP V DIREITA: MOV P,A RR A LCALL ATRASO SJMP V ESQUERDA: MOV P,A RL A LCALL ATRASO SJMP V END Prof. José Wilson 35Lima Nerys 35 Microprocessadores 35

Acionamentos diversos com informação de status para o computador Prof. José Wilson 36Lima Nerys 36 Microprocessadores

INICIO: Universidade Federal de Goiás CH_STEP EQU P.0 CH_MCC EQU P. CH_LAMP EQU P. M0 EQU P0.0 M EQU P0. LAMP EQU P0.7 STATUS ORG 00H LJMP INICIO 37 JZ V EQU H ORG 30H MOV SP,#FH MOV TMOD,#0H MOV SCON,#40H MOV TH,#0FAH MOV TL,#0FAH SETB TR MOV R7,#00H MOV P,#00H MOV STATUS,#00H CLR M0 CLR M CLR LAMP V: MOV A,P ANL A,#00000B XRL A,STATUS STATUS indica o estado atual dos dispositivos. STATUS.0 = 0 motor de passo ligado STATUS. = 0 motor CC ligado STATUS. = 0 lâmpada ligada Compara o estado atual das chaves (leitura de P) com o conteúdo de STATUS (XRL A,STATUS). Enquanto eles forem iguais (Z=), aguarda no loop. Quando houver mudança da posição de qualquer das chaves, sai desse loop e atualiza tudo. ;== Acionamento da Lâmpada =========== V5: JNB CH_LAMP,LIGA_Lamp MOV DPTR,#Lamp_OFF LCALL SERIAL CLR LAMP SETB STATUS. SJMP V LIGA_Lamp: MOV DPTR,#Lamp_ON LCALL SERIAL SETB LAMP CLR STATUS. ; ;== Acionamento do Motor CC ============ V: JNB CH_MCC,LIGA_M MOV DPTR,#M_OFF LCALL SERIAL CLR M0 CLR M SETB STATUS. SJMP V3 LIGA_M: MOV DPTR,#M_ON LCALL SERIAL SETB M0 CLR M CLR STATUS. Prof. José Wilson Lima Nerys Envia a atualização via serial 37 Microprocessadores 37

;== Acionamento do Motor de Passo ======= V3: JNB CH_STEP,LIGA_P MOV DPTR,#PASSO_OFF LCALL SERIAL MOV P,#00H SETB STATUS.0 SJMP V LIGA_P:MOV DPTR,#PASSO_ON LCALL SERIAL CLR STATUS.0 MOV R6,#H V6: MOV P,R6 LCALL ATRASO MOV A,P ANL A,#00000B XRL A,STATUS JNZ V5 MOV A,R6 RL A MOV R6,A SJMP V6 Para manter o motor de passo ligado, é necessário rotacionar os bits da porta P. Assim, é necessário manterse nesse loop de V6, verificando se há mudança em alguma chave. ;== Envia Mensagem via Serial ======= SERIAL: MOV A,R7 MOVC A,@A+DPTR CJNE A,#0FFH,ENVIA MOV R7,#00H RET ENVIA: MOV SBUF,A JNB TI,$ CLR TI INC R7 SJMP SERIAL ATRASO: MOV R0,#00 V4: MOV R,#50 DJNZ R,$ DJNZ R0,V4 RET Lamp_ON: DB 'Lampada Ligada', 0DH, 0FFH Lamp_OFF: DB 'Lampada Desligada', 0DH, 0FFH M_ON: DB 'Motor de Corrente Continua Ligado', 0DH, 0FFH M_OFF: DB 'Motor de Corrente Continua Desligado', 0DH, 0FFH PASSO_ON: DB 'Motor de Passo Ligado', 0DH, 0DH, 0FFH PASSO_OFF: DB 'Motor de Passo Desligado', 0DH, 0DH, 0FFH END Prof. José Wilson 38Lima Nerys 38 Microprocessadores

Comunicação entre Microcontroladores (Mestre Escravos) Serial Modo 3 (assíncrono de 9 bits) Micro Mestre Micro Escravo Micro Escravo Micro Escravo 3 RX TX TX RX TX RX TX RX A comunicação entre microcontrolador Mestre e ou mais Microcontroladores Escravos pode ser feita no Modo ou 3 da serial Procedimento:. Todos os Micros Escravos tem SM=; assim, quando Mestre transmite a mensagem (endereço do escravo a ser ativado) com TB8 =, todos recebem o nono bit, RB8 =, e desviam para a interrupção da serial;. Todos eles fazem uma verificação do endereço recebido na primeira mensagem (primeiro byte recebido deve indicar qual dos escravos está sendo solicitado); 3. Aquele Micro Escravo que tem o endereço correto faz SM = 0; 4. O Micro Mestre, então, envia as informações desejadas para aquele Micro Escravo que tem SM = 0. A informação é enviada com TB8 = 0. Assim, todos os micros escravos recebem RB8 = 0, mas somente aquele com SM = 0 é interrompido para receber as informações; 5. No final da transmissão dos dados, o micro escravo ativo faz SM =, voltando à condição Prof. José Wilson Lima Nerys 39 Microprocessadores inicial. 39

Exemplo demonstrativo: Comunicação entre Microcontroladores (Mestre Escravos) Serial Modo 3 (assíncrono de 9 bits) Micro Escravo aciona um motor de passo, quando ele recebe a mensagem A, do mestre. Ao receber a mensagem A, a flag F0 é setada. Essa flag é usada na rotina principal para entrar no loop de acionamento do motor de passo. Ao final faz-se SM=. Micro Escravo aciona (liga/desliga) uma lâmpada quando recebe a mesma mensagem A. Ao receber a mensagem A, o Micro Escravo liga ou desliga a lâmpada, dependendo do estado anterior. Ao final, faz-se SM =. Micro Escravo 3 Escreve no LCD a mensagem recebido do Micro Mestre. Uma vez identificado que o endereço recebido é do Escravo 3, esse micro passa a a verificar o conteúdo dos próximos caracteres, para identificar se a mensagem já chegou ao final. Foi escolhido o código F (que corresponde a / ) como fim da mensagem. Todos os caracteres recebidos são enviados para o LCD, exceto FH. Ao receber FH, SM é setado e é enviado o código de endereço 80H para o LCD. Assim, o curso volta para a posição inicial. Mestre: As chaves CH0 (em P.0), CH(em P.) e CH (em P.) são utilizadas para enviar uma mensagem a cada um dos micros escravos. Prof. José Wilson 40Lima Nerys 40 Microprocessadores

Comunicação entre Microcontroladores (Mestre Escravos) Serial Modo 3 (assíncrono de 9 bits) Prof. José Wilson 4Lima Nerys 4 Microprocessadores

Comunicação entre Microcontroladores (Mestre Escravos) Serial Modo 3 (assíncrono de 9 bits) Programa do Micro Mestre ; PRIMEIRO MICRO ESCRAVO: ENDEREÇO: "" ; SEGUNDO MICRO ESCRAVO: ENDEREÇO: "" ; TERCEIRO MICRO ESCRAVO: ENDEREÇO: "3" CH0 BIT P.0 CH BIT P. CH BIT P. ORG 00H LJMP INICIO Chave CH0 estabelece a comunicação Mestre < --- > Escravo ORG 30H INICIO: MOV SP,#FH MOV SCON,#0C0H ; 000000B --> Serial no modo 3 com SM = 0 MOV TMOD,#0H MOV TH,#0FDH ; Baud rate = 9600 bps MOV TL,#0FDH V0: JB CH0,V ; Verifica estado de CH0 (P.0). Se CH0 =, desvia para V ; Se CH0 = 0, envia endereço do Escravo SETB TB8 ; Seta bit TB8 de SCON, para envio do endereço SETB TR ; Dispara o Timer, que gera o baud rate MOV A,#3H ; Faz A = 3H (número ) MOV SBUF,A ; Envia valor para os micros escravos JNB TI,$ ; Aguarda flag TI setar (fim da transmissão) CLR TI ; Limpa a Flag TI 4 Endereço do Escravo (3H = ). Enviado junto com TB8 Prof. José Wilson Lima Nerys 4 = Microprocessadores

Programa do Micro Mestre - CONTINUAÇÃO LCALL ATRASO ; Aguarda um tempo antes de enviar a msg principal CLR TB8 ; Limpa TB8, para envio da msg principal MOV A,#4H ; Faz A = 4H (Letra A) = mensagem principal MOV SBUF,A ; Envia valor para o Escravo JNB TI,$ ; Aguarda flag TI setar (fim da transmissão) CLR TI ; Limpa a Flag TI JNB CH0,$ ; Aguarda a chave CH0 ser liberada CLR TR ; Para Timer SJMP V0 ; Retorna para o loop principal V: JB CH,V ; Verifica estado de CH (P.). Se CH =, desvia para V ; Se CH = 0, envia endereço do Escravo SETB TB8 ; Seta bit TB8 de SCON, para envio do endereço SETB TR ; Dispara o Timer, que gera o baud rate MOV A,#'' ; Faz A = 3H (número ) MOV SBUF,A ; Envia valor para os micros escravos JNB TI,$ ; Aguarda flag TI setar (fim da transmissão) CLR TI ; Limpa a Flag TI LCALL ATRASO CLR TB8 MOV A,#4H ; Faz A = 4H (Letra A) = mensagem principal MOV SBUF,A JNB TI,$ CLR TI JNB CH,$ CLR TR SJMP V0 ; Limpa TB8, para envio da msg principal ; Aguarda flag TI setar (fim da transmissão) ; Limpa a Flag TI ; Aguarda a chave CH ser liberada ; Para Timer Envia mensagem principal com TB8 = 0 Endereço do Escravo ( = 3H). Enviado junto com TB8 = Envia mensagem principal com TB8 = 0 Prof. José Wilson 43Lima Nerys 43 Microprocessadores

ENVIA: MOV SBUF,A JNB TI,$ CLR TI INC R7 LCALL ATRASO SJMP V4 Universidade Federal de Goiás Programa do Micro Mestre - CONTINUAÇÃO V: JB CH,V0 ; Verifica estado de CH (P.). Se CH =, volta para V0 SETB TB8 ; Limpa TB8, para envio da msg principal SETB TR ; Dispara Timer MOV A,#'3' ; Faz A = 33H (número 3) MOV SBUF,A ; Envia valor para os micros escravos JNB TI,$ ; Aguarda flag TI setar (fim da transmissão) CLR TI ; Limpa a Flag TI LCALL ATRASO ; Chama atraso de tempo CLR TB8 ; Limpa TB8, antes de enviar a msg principal MOV DPTR,#MSG ; DPTR assume o endereço inicial da MSG MOV R7,#00 ; Offset para leitura da MSG é zerado V4: MOV A,R7 MOVC A,@A+DPTR ; Acumulador recebe caractere da Mensagem (MSG) CJNE A,#FH,ENVIA ; Verifica se já chegou ao final da mensagem MOV SBUF,A ; Envia código de final de msg para o escravo 3 JNB TI,$ ; Aguarda flag TI setar (fim da transmissão) CLR TI ; Limpa a Flag TI CLR TR ; Para Timer JNB CH,$ ; Aguarda CH ser liberada ATRASO: SJMP V0 ; Envia valor para os micros escravos ; Aguarda flag TI setar (fim da transmissão) ; Limpa a Flag TI ; Incrementa Offset para leiura da Mensagem ; Chama atraso de tempo Endereço do Escravo 3 ( 3 = 33H). Enviado junto com TB8 = Envio de mensagem para o Escravo 3. Será mostrada em um LCD conectado ao escravo 3. Com TB8 = 0 MOV R,#00 V3: MOV R,#50 DJNZ R,$ DJNZ R,V3 RET Prof. José Wilson 44Lima Nerys 44 Microprocessadores MSG: DB 'MASTER-->SLAVE3', FH END

; PRIMEIRO MICRO ESCRAVO: ENDEREÇO: "" ORG 00H LJMP INICIO Programa do Micro Escravo ORG 3H LJMP SERIAL ORG 30H INICIO: MOV SP,#FH MOV IE,#90H MOV SCON,#0E0H ; SCON = 00000B --> Serial no modo 3 com SM = MOV TMOD,#0H MOV TH,#0FDH ; Baud rate = 9600 bps MOV TL,#0FDH CLR P3.7 SETB TR SETB REN V0: JNB F0,$ ; Fica nesse loop aguardando F0 = Habilita recepção serial e fica aguardando a flag F0 ser setada CJNE A,#4H,V0 ; Se F0 =, verifica se a msg recebida foi 4H = A MOV A,#H ; Se a msg foi 4H, faz A = H, para acionamento do motor de passo MOV R0,#00 ; R0 = 00, para contagem dos passos a serem dados pelo motor V: MOV P,A ; Transfere conteúdo de A para o motor de passo LCALL ATRASO RL A ; Rotaciona conteúdo de A à esquerda DJNZ R0,V ; Verifica o número de passo CLR F0 ; Quando R0 = 0, faz F0 = 0 CLR P3.7 ; Desliga Led indicador de conexão SJMP V0 Se a mensagem recebida for A, rotacional o motor de passo 00 passos no sentido anti-horário Prof. José Wilson 45Lima Nerys 45 Microprocessadores

Programa do Micro Escravo CONTINUAÇÃO SERIAL: MOV A,SBUF ; Transfere o conteúdo do SBUF para o acumulador CLR RI ; Limpa a flag RI, de recepção (ITEM FUNDAMENTAL) JNB RB8,EXECUTA ; Verifica se o valor recebido em RB8 é CJNE A,#3H,SAI ; Se RB8 =, verifica se o endereço é do Escravo CLR SM ; Se a mensagem for para o Escravo, limpa SM SETB P3.7 ; e Seta o pino P3.7 (para verificação visual da conexão) SJMP SAI EXECUTA: SETB SM ; Seta SM, voltando ao estado inicial SETB F0 ; Seta F0, que é usado para entrar no loop do motor SAI: NOP RETI ; volta para o loop JNB F0,$, de onde sai para acionar o motor, pois F0 = ATRASO: MOV R,#00 V: MOV R,#50 DJNZ R,$ DJNZ R,V RET END Se RB8 =, verifica se o endereço recebido na primeira mensagem é 3H =. Se for, faz SM = 0 e retorna para o loop de espera da serial. Se RB8 = 0, significa que já foi definido na mensagem anterior que a mensagem atual é para o Escravo. Assim, a flag F0 é setada para acionamento do motor de passo e faz-se SM=, para voltar ao estágio inicial. Prof. José Wilson 46Lima Nerys 46 Microprocessadores

; SEGUNDO MICRO ESCRAVO: ENDEREÇO: "" ORG 00H LJMP INICIO ORG 3H ORG 30H INICIO: LJMP SERIAL Programa do Micro Escravo MOV SP,#FH MOV IE,#90H MOV SCON,#0E0H ; SCON = 00000B --> Serial no modo 3 com SM = MOV TMOD,#0H MOV TH,#0FDH MOV TL,#0FDH SETB TR SETB REN CLR P3.7 CLR P.7 SJMP $ ; Baud rate = 9600 bps ; Desliga a Lâmpada EXECUTA: CJNE A,#'A',SAI CPL P.7 ; Complementa estado da Lâmpada SAI: CLR P3.7 ; Desliga o Led em P3.7 SETB SM ; Seta SM, voltando ao estado inicial RETI SERIAL: MOV A,SBUF ; Transfere o conteúdo do SBUF para o acumulador CLR RI ; Limpa a flag RI, de recepção (ITEM FUNDAMENTAL) JNB RB8,EXECUTA ; Verifica se o valor recebido em RB8 é CJNE A,#'',SAI ; Se RB8 =, verifica se o endereço é do Escravo CLR SM ; Se a mensagem for para o Escravo, limpa SM SETB P3.7 ; e Seta o pino P3.7 (para verificação visual) SAI: NOP RETI Prof. José Wilson 47Lima Nerys 47 Microprocessadores END Se RB8 = 0, significa que já foi definido na mensagem anterior que a mensagem atual é para o Escravo. Assim, o pino P.7 é complementado, para ligar/desligar a lâmpada. Faz-se SM=, para voltar ao estágio inicial. Habilita recepção serial e fica aguardando em um loop infinito Se RB8 =, verifica se o endereço recebido na primeira mensagem é 3H =. Se for, faz SM = 0 e retorna para o loop de espera da serial.

; Rede de Microcontroladores ; TERCEIRO MICRO ESCRAVO: ENDEREÇO: "3" ORG 00H LJMP INICIO RS EQU P3.3 RW EQU P3.4 EN EQU P3.5 DADOS EQU P Programa do Micro Escravo 3 ORG 3H ORG 30H INICIO: SJMP SERIAL MOV SP,#FH MOV IE,#90H MOV SCON,#0E0H ; SCON = 00000B --> Serial no modo 3 com SM = MOV TMOD,#0H MOV TH,#0FDH ; Baud rate = 9600 bps MOV TL,#0FDH SETB TR SETB REN CLR P3.7 LCALL INICIA Habilita recepção serial, inicializa o LCD e fica aguardando em um loop infinito SJMP $ Prof. José Wilson 48Lima Nerys 48 Microprocessadores

49 Programa do Micro Escravo 3 SERIAL: MOV A,SBUF ; Transfere o conteúdo do SBUF para o acumulador CLR RI ; Limpa a flag RI, de recepção (ITEM FUNDAMENTAL) JNB RB8,EXECUTA ; Verifica se o valor recebido em RB8 é CJNE A,#'3',SAI ; Se RB8 =, verifica se o endereço é do Escravo 3 CLR SM ; Se a mensagem for para o Escravo 3, limpa SM SETB P3.7 ; e Seta o pino P3.7 (para verificação visual) SAI: NOP RETI EXECUTA: CJNE A,#FH,OK ; Se RB8 = 0, verifica se já chegou ao fim dos dados para o Escravo 3 SETB SM ; Seta SM, voltando ao estado inicial CLR P3.7 ; Limpa o pino P3.7, após encerrada a comunicação Mestre --> Escravo 3 MOV A,#80H ; código para retornar o cursor para a posição 80H do LCD LCALL INSTR_WR ; Escreve a instrução de posição 80H no LCD RETI OK: LCALL TEXTO_WR ; Mostra no LCD os dados recebidos RETI ; SUBROTINA DE INICIALIZAÇÃO DO DISPLAY LCD INICIA: MOV A,#38H ; Código para habilitação da primeira linha do LCD LCALL INSTR_WR ; Escreve o código no LCD MOV A,#38H ; Código para habilitação da segunda linha do LCD LCALL INSTR_WR ; Escreve o código no LCD MOV A,#0EH LCALL INSTR_WR MOV A,#06H LCALL INSTR_WR MOV A,#0H LCALL INSTR_WR RET Se RB8 =, verifica se o endereço recebido na primeira mensagem é 33H = 3. Se for, faz SM = 0 e retorna para o loop infinito. Se RB8 = 0, significa que já foi definido na mensagem anterior que a mensagem atual é para o Escravo 3, que receberá uma mensagem a ser enviada ao LCD. Assim, ele passa a verificar se cada caractere recebido é FH, que indica fim da mensagem para o LCD. Enquanto não for, envia caractere para o LCD; quando for FH, faz SM= e retorna para o loop infinito. Prof. José Wilson Lima Nerys 49 Microprocessadores

Programa do Micro Escravo 3 INSTR_WR:SETB EN CLR RW CLR RS MOV DADOS,A LCALL ATRASO_LCD CLR EN RET TEXTO_WR:SETB EN CLR RW SETB RS MOV DADOS,A LCALL ATRASO_LCD CLR EN RET ; Habilita o display LCD ; Operação de escrita no LCD ; Operação de escrita de instrução ; Transfere o conteúdo de A para o LCD ; Chama subrotina de atraso de tempo ; Desabilita o LCD ; Habilita o display LCD ; Operação de escrita no LCD ; Operação de escrita de Dados ; Transfere o conteúdo de A para o LCD ; Chama subrotina de atraso de tempo ; Desabilita o LCD ATRASO_LCD: MOV R4,#0 V6: MOV R5,#00 DJNZ R5,$ DJNZ R4,V6 RET END Prof. José Wilson 50Lima Nerys 50 Microprocessadores

Bibliografia [] Salvador P. Gimenez, Microcontroladores 805: Teoria do hardware e do software/aplicações em controle digital/laboratório e simulação, Pearson Education do Brasil, São Paulo, 00. ISBN: 85.8798-8-. [] Vidal Pereira da Silva Jr., Aplicações Práticas do Microcontrolador 805, Editora Érica, São Paulo, 994. ISBN: 85-794-94-7 [3] Sencer Yeralan, Ashutosh Ahluwalia, Programming and Interfacing the 805 Microcontroller, Addison-Wesley Publishing Company, 995. ISBN: 0-0-63365-5. Prof. José Wilson 5Lima Nerys 5 Microprocessadores