PROJETOS COM MICROCONTROLADORES
|
|
|
- Ana Sofia Aires Santiago
- 10 Há anos
- Visualizações:
Transcrição
1 Escola de Engenharia Elétrica e de Computação Universidade Federal de Goiás PROJETOS COM MICROCONTROLADORES Versão em Processo de Atualização Prof. Dr. José Wilson Lima Nerys Goiânia, 2009
2 Projetos com Microcontroladores 2 SUMÁRIO 1 Introdução Conhecendo o Microcontrolador Microprocessador Microcontroaldor A Memória de Programa (ROM) A Memória de Dados (RAM) Os Registradores de Funções Especiais Reset, Clock e Ciclo de Máquina do Instruções Gerais do Microcontrolador Instruções Básicas Gerais Instruções de Comparação, Decisão e de Desvio Operações com bit Diretivas de programação Exemplos Gerais de Programas O Ambiente de Simulação e a Plataforma de Desenvolvimento Ambientes de Edição e Simulação A Plataforma de Desenvolvimento O Sistema Mínimo Outros Exemplos de Programas Interrupções Temporizadores Dispositivos para Entrada, Saída e Detecção de Dados Teclado Display de 7-Segmentos Display LCD Sensores de Presença Medição de Velocidade Acionamentos Elétricos Motores de Corrente Contínua Motor de Passo Lâmpada Incandescente Comunicação Serial Noções Básicas de Comunicação Serial Roteiros de Programas usando Comunicação Serial Montar em Laboratório Sensores, Transdutores e Condicionamento de Sinais... 66
3 Projetos com Microcontroladores Introdução Sensor de Temperatura LM Transdutor de Corrente de Efeito Hall LP55A Bibliografia... 70
4 Projetos com Microcontroladores 4 1 Introdução A presente apostila foi planejada com o intuito de dar suporte no desenvolvimento de projetos com microcontroladores da família Os projetos pensados incluem dispositivos de entrada e saída de dados e drivers diversos, além de alguns tipos de transdutores e atuadores. O objetivo básico é estudar as unidades de um sistema microcontrolado como o mostrado na figura 1.1, onde estão presentes unidades de entrada e saída de dados, uma unidade de condicionamento de sinais, uma unidade de processamento de dados, unidades de transdução e atuação e uma unidade monitoramento e controle. Figura 1.1: Sistema microcontrolado genérico Assim, o microcontrolador é estudado nos capítulos 2 a 6. No capítulo 2 são apresentados os registradores principais e a arquitetura do No capítulo 3 são apresentadas as principais instruções do 8051 e alguns exemplos de programação. O capítulo 4 traz os ambientes de edição, compilação e simulação dos programas em assembly do 8051 e a plataforma de desenvolvimento experimental. O capítulo 5 apresenta o princípio básico de operação das interrupções do 8051 e o capítulo 6 apresenta o princípio de operação dos temporizadores. Os dispositivos de entrada, saída e detecção de dados são apresentados no capítulo 7. São estudados o teclado, o display de 7-segmentos, o display LCD, o sensor de presença e o sensor de velocidade. O capítulo 8 trata de acionamentos elétricos. São apresentados os drivers e programas para o acionamento de motor de corrente contínua, motor de passo e lâmpada incandescente. O capítulo 9 trata da comunicação serial, incluindo alguns experimentos para laboratório. Os conceitos básicos e o princípio de funcionamento de alguns dos transdutores mais utilizados nos projetos já desenvolvidos pelos alunos do curso de microprocessadores são apresentados no capítulo 10.
5 Projetos com Microcontroladores 5 2 Conhecendo o Microcontrolador 8051 A figura 1.1 mostra o diagrama de blocos geral de um microcontrolador da família O componente básico contém 2 contadores/temporizadores, 4 portas paralelas de 8 bits, 2 fontes de interrupção externas e 3 internas, uma porta serial com um canal de entrada e outro de saída, memória RAM e memória ROM. A tabela 2.1 mostra algumas versões de microcontroladores dessa família. CI ROM Interna Tabela 2.1: Algumas versões de microcontroladores da família 8051 RAM Interna Versão sem ROM Interna Versão com EPROM Interna Versão com Memória Flash k Versão Memória Flash usada na plataforma k AT89S8252 Figura 2.1: Diagrama de blocos do microcontrolador da família 8051 CPU A Unidade de Central de Processamento (UCP ou CPU) é a responsável por todo o processamento de informações do microcontrolador. Contém os principais registradores, tal como o acumulador, que é o principal registrador de um microprocessador. Ela contém ainda a Unidade Lógica e Aritmética (ULA), responsável pelas operações de adição, subtração, multiplicação, divisão, rotação, and, or e outras. RAM As versões xx51 possuem memória de dados (RAM) de 128 bytes, enquanto a capacidade de memória RAM das versões xx52 é de 256 bytes. ROM As versões xx51 possuem memória de programa (ROM) interna de 4 kbytes, enquanto as versões xx52 possuem capacidade de 8 kbytes de memória ROM. A exceção é a versão 8032 que não possui memória ROM interna. Contadores/Temporizadores O microcontrolador padrão da família 8051 possui dois contadores/temporizadores de 16 bits, que podem trabalhar em 4 (quadro) modos diferentes: modo de 13 bits, modo de 16 bits, modo único de 8 bits com recarga automática e modo duplo independente de 8 bits. O contador é caracterizado por um clock externo, enquanto o
6 Projetos com Microcontroladores 6 temporizador usa o clock interno do microcontrolador. Essa unidade trabalha de forma independente da CPU e pode ser ativada tanto por software quanto por hardware. Porta Serial Há dois pinos para porta serial. O pino RxD é o pino de recepção de dados na forma serial e o pino TxD é o pino de transmissão de dados na forma serial. Portas Paralelas As portas paralelas, num total de 4 (quatro), são numeradas de P0 a P3 e são todas de 8 bits. A porta P3 tem dupla função: além de servir como canal de entrada e saída de dados também pode ser usada para a comunicação serial (P3.0 e P3.1), interrupções externas (P3.2 e P3.3), canal de freqüência para a operação como contador (P3.4 e P3.5) e canal de controle de gravação e leitura de memória externa (P3.6 e P3.7). A porta P0 tem uma característica diferente das outras portas: ela é de coletor aberto, o que significa que necessita de um resistor de pull-up e pode drenar uma corrente maior que as demais. A figura 2.2 mostra a pinagem de um microcontrolador de 40 pinos da família Figura 2.2: Pinagem do microcontrolador de 40 pinos da família Microprocessador Microcontroaldor Em termos de hardware, o esquema da figura 2.1 deixa claro onde acaba o microprocessador e quais as unidades adicionais presentes num microcontrolador. Assim, enquanto o microprocessador é mais freqüentemente usado no processamento de informações em computadores, onde são complementados com os drivers e periféricos que compõem o sistema, um microcontrolador é mais adequado para sistemas de controle, onde deseja-se um sistema com um mínimo de componentes periféricos e um programa gravado em ROM. Quanto à linguagem assembly do 8051, a título de ilustração e comparação superficial (nesse momento), um mesmo problema é resolvido a seguir usando a linguagem assembly do 8085 e a linguagem assembly do Problema: Faça um programa onde dois pinos de uma porta de entrada pré-definida sejam usados para definir o sentido de rotação de LEDs conectados a uma porta de saída. Quando o pino 7 da porta de entrada estiver em nível alto (e o pino 3 em nível baixo) os LEDs devem girar para a direita; quando o pino 3 estiver em nível alto (e o pino 7 em nível baixo) os LEDs devem girar para a esquerda e quando ambos estiverem em nível alto todos os LEDs devem ligar e desligar, alternadamente. (a) Fluxograma mais adequado para o 8085
7 Projetos com Microcontroladores 7 (b) Fluxograma mais adequado para o 8051
8 Projetos com Microcontroladores 8 (c) Programa usando o assembly do 8085 (para o ABACUS) e o assembly do A subrotina de atraso não foi incluída. Obs.: Para o 8051 as chaves estão conectadas à porta P1 (Ch7 = P1.7 e Ch3 = P1.3) e os LEDs à porta P2. Label Mnemônico 8085 Label Mnemônico 8051 LXI SP,20C0 h $MOD51 MVI A,02 h ORG 00H OUT 20 h LJMP INICIO MVI B,01h MVI C,00 h ORG 50H INICIO: MOV SP,#3FH Lê chaves: IN 21 h MOV R0,#01H ANI 88 h MOV R1,#00H CPI 88 h JNZ testa Ch7 REPETE: JNB P1.7, PULA2 MOV A,C JNB P1.3, PULA OUT 22 h MOV A,R1 CMA MOV P2,A MOV C,A CPL A JMP Lê chaves MOV R1,A SJMP REPETE testa Ch7: CPI 80 h JNZ testa Ch3 PULA: MOV A,R0 MOV A,B MOV P2,A RRC RR A OUT 22 h MOV R0,A MOV B,A SJMP REPETE JMP Lê chaves PULA2: JNB P1.3, REPETE testa Ch3: CPI 08 h MOV A,R0 JNZ Lê chaves MOV P2,A MOV A,B RL A RLC MOV R0,A OUT 22 h LJMP REPETE MOV B,A JMP Lê chaves END 2.2 A Memória de Programa (ROM) Nas versões que possuem memória ROM, ela pode ser expandida até o limite de bytes (64 kbytes) com uma pastilha externa, ou ainda usar somente uma pastilha externa de 64 kbytes (0000 a FFFF h). O pino EA\ (pino 31 da figura 2.2) é usado para selecionar a memória externa ou interna. Caso EA\ = 0, o microcontrolador busca informações na memória ROM externa; caso EA\ = 1, as informações são buscadas na memória ROM interna. Na plataforma construída e utilizada no desenvolvimento dos projetos aqui apresentados EA\ = 1, ou seja, é utilizada a memória ROM interna. O pino PSEN\ é usado para habilitação da leitura da memória externa. Caso PSEN\ = 1 a leitura da memória ROM interna está habilitada; caso PSEN\ = 0, a leitura da memória ROM externa está habilitada. Enquanto é usada a instrução MOV para manipulação de códigos na ROM interna, usa-se MOVC (MOV Code) para as mesmas operações com a ROM externa. A figura 2.3 ilustra a composição da memória ROM. São duas opções excludentes: Usa-se memória externa para expandir a memória interna ou somente memória externa.4
9 Projetos com Microcontroladores 9 Figura 2.3: Memórias ROM interna e externa 2.3 A Memória de Dados (RAM) A memória RAM, em qualquer versão, pode ser adicionada em 64 kbytes (0000 a FFFFh), além dos 128 ou 256 bytes de memória interna. A memória RAM interna é subdivida em duas regiões básicas: Endereço de 00 a 7F h (Parte baixa da RAM) Contém 128 bytes. Todas as versões do 8051 possuem essa região. O acesso pode ser direto ou indireto. Endereço de 7F a FFh (Parte alta da RAM) Essa faixa de endereço só está presente nas versões xx52. Ela contém 128 bytes, cujo acesso é sempre através de endereçamento indireto. Essa faixa de endereços coincide com a faixa de endereços dos registradores especiais. A diferença está no tipo endereçamento para acesso. Os registradores especiais são acessados sempre através de endereçamento direto. A manipulação de dados na memória RAM interna é através da instrução MOV, enquanto que na RAM externa é com uso da instrução MOVX (MOV extern). Os sinais RD\ e WR\ são usados na operação com a memória RAM externa. A figura 2.4 ilustra a composição da memória RAM. Figura 2.4: Memórias RAM interna e externa
10 Projetos com Microcontroladores 10 A região de 00 h a 7F h é vista em mais detalhe na figura 2.5. Figura 2.5: Detalhes da Parte baixa da memória RAM interna
11 Projetos com Microcontroladores 11 A seleção dos bancos de registradores (Banco 0 a Banco 3) é feita através dos bits RS1 e RS0, que fazem parte de um registrador especial chamado PSW (Program Status Word). Este registrador é endereçável por bit. Ele também contém as flags do microcontrolador 8051: flag de carry (CY), flag auxiliar de carry (AC), flag de uso geral (FD), flag de overflow (OV) e flag de paridade (P). CY AC FD RS1 RS0 0V P bit 4 bit 3 Carry Uso Geral Overflow Paridade Auxiliar de Carry RS1 RS0 Banco Selecionado Os 128 bits da região acima dos bancos de registradores podem ser usados individualmente, ou através de seus 16 bytes correspondentes. Os bits dessa região podem ser referenciados pelos seus endereços individuais ou através dos bytes dos quais eles fazem parte, como exemplificado a seguir: Bit 00h 20.0h; bit 01h 20.1h bit 07h 20.7h Bit 08h 21.0h; bit 09h 21.1h bit 0Fh 21.7h Bit 10h 22.0h; bit 11h 22.1h bit 17h 22.7h bit 7Fh 2F.7h 2.4 Os Registradores de Funções Especiais A tabela 1.2 mostra os principais Registradores Especiais, que ficam localizados na região de 80h a FF h. Os registradores dessa região, com endereços de final 0 ou 8, são endereçáveis por byte ou por bit. Os demais, apenas por byte. A tabela 1.2 mostra os bits individuais desses registradores de finais 0 e 8. Deve ser enfatizado que os registradores especiais ocupam os endereços de 80h a FFh, que coincide com os 128 bytes superiores da RAM interna dos microcontroladores xxx2. A diferença entre o acesso aos Registradores especiais e a parte superior da RAM interna é o tipo de endereçamento. Os registros especiais são acessados sempre por endereçamento direto, enquanto a parte superior da RAM interna é acessada somente por endereçamento indireto. Exemplos: MOV A, 80h - carrega o acumulador com o conteúdo do registrador especial 80 h (Porta P0) MOV RO, #80h MOV A,@RO carrega acumulador com o conteúdo da posição de memória RAM apontada por R0, ou seja, endereço 80 h da memória superior
12 Projetos com Microcontroladores 12 Tabela 2.2: Principais Registradores Especiais Registrador Mnemônico Endereço Endereços individuais dos Bits e denominações de alguns bits Latch da Porta 0 P0 80 H Apontador de Pilha SP 81 H Apontador de Dados DPTR 82H 83H LSB do Apontador de Dados DPL 82 H MSB do Apontador de Dados DPH 83 H Controle de Energia PCON 87 H Controle do Contador/Temporizador TCON 88 H 8F 8E 8D 8C 8B 8A TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 Controle do Modo do Temporizador/ TMOD 89 H G1 C/T1 M11 M01 G0 C/T0 M10 M00 Contador LSB do Temporizador/Contador 0 TL0 8A H LSB do Temporizador/Contador 1 TL1 8B H MSB do Temporizador/Contador 0 TH0 8C H MSB do Temporizador/Contador 1 TH1 8D H Latch da Porta 1 P1 90 H Controle da Porta Serial SCON 98 H 9F 9E 9D 9C 9B 9A SM1 SM2 SM3 REN TB8 RB8 TI RI Porta de Dados Seriais SBUF 99 H Latch da Porta 2 P2 A0 H A7 A6 A5 A4 A3 A2 A1 A0 Habilitador de Interrupção IE A8 H AF AE AD AC AB AA A9 A8 EA ES ET1 EX1 ET0 EX0 Latch da Porta 3 P3 B0 H B7 B6 B5 B4 B3 B2 B1 B0 Controle de Prioridade da Interrup. IP B8 H BF BE BD BC BB BA B9 B8 PS PT1 PX1 PT0 PX0 Registrador de Estado do Programa PSW D0 H D7 D6 D5 D4 D3 D2 D1 D0 CY AC F0 RS1 RS0 OV P Acumulador ACC ou A E0 H E7 E6 E5 E4 E3 E2 E1 E0 Registrador B B F0 H F7 F6 F5 F4 F3 F2 F1 F0 Algumas observações: Apontador de Pilha (Stack Pointer): SP: 81h - Como valor default, SP aponta para o endereço hexadecimal 07h da memória RAM interna. Ao contrário do Microprocessador 8085, o endereço do apontador de pilha é incrementado a cada endereço guardado na pilha e o byte menos significativo é guardado primeiro. Registradores DPH (83h) e DPL (82h) - Equivalem aos registradores H e L do 8085, que juntos formam o par HL. No 8051 DPH e DPL formam o registrador de 16 bits DPTR, usado principalmente no manuseio de tabelas. Registradores dos Temporizadores/Contadores TH e TL armazenam as partes alta e baixa, respectivamente, da contagem dos temporizadores/contadores; TMOD (89 h) define o modo de operação dos temporizadores/contadores e TCON (88 H) controla o início e o fim de uma contagem. Controle da Porta Serial: SCON (98 H) Registrador que contém todos os bits que definem o modo de operação e o controle da porta serial. SBUF (99 H) é o registrador que armazena tanto os dados a serem transmitidos quanto os dados recebidos via serial. Efetivamente há dois registradores de mesmo nome SBUF e mesmo endereço (99 H), um responsável pela transmissão e outro pela recepção de dados.
13 Projetos com Microcontroladores Reset, Clock e Ciclo de Máquina do 8051 A colocação de um capacitor de 10µF em série com um resistor de 8,2 kω conectados ao pino 9 do 8051, conforme mostra a Fig. 2.6, garante que o pino 9 fique em nível lógico alto por pelo menos 2 ciclos de máquina (24 períodos do oscilador) na energização do sistema. Com isso, os registradores assumem os valores mostrados na tabela 2.3, e o 8051 está pronto para iniciar o processamento. O botão em paralelo com o capacitor é usado para o Reset forçado. Figura 2.6: Circuito de Reset do Obs.: Caso o Microcontrolador seja o 80C51, não é necessário o resistor de 8,2 kω, por já existir um resistor interno. Tabela 2.3: Valores dos registradores especiais após o Reset Registro Valor Registro Valor PC 0000h TCON 00h A 00h TH0 00h B 00h TL0 00h PSW 00h TH1 00h SP 07h TL1 00h DPTR 0000h SCON 00h P0 - P3 FFh SBUF Indeterminado IP xxx00000b PCON(NMOS) 0xxxxxxxb IE 0xx00000b PCON(CMOS) 0xxx0000b TMOD 00h A Fig. 2.7 ilustra a conexão do oscilador (cristal) que definirá a freqüência de clock do microcontrolador e o ciclo de máquina. A freqüência de oscilação do cristal deve estar na faixa de 3.5 MHz a 12 MHz. Os valores recomendados para os capacitores no caso de oscilador a cristal são entre 20 pf e 40 pf.
14 Projetos com Microcontroladores 14 Figura 2.7: Conexão do cristal oscilador Um ciclo de máquina corresponde a uma seqüência de 6 estados (S1 a S6), cada um equivalente a 2 períodos do oscilador (1 ciclo de máquina = 12 períodos do oscilador). Se o oscilador (cristal) for de 12 MHz, 1 ciclo de clock corresponde a T clock = 1 f clock 1 = 12MHz E o ciclo de máquina é: T (ciclo de máquina) = 12*T (clock) = 1 µs S1 S2 S3 S4 S5 S6 Ciclo de máquina Cada instrução é executada em pelo menos 1 ciclo de máquina. Isso significa que, com um cristal de 12 MHz, o tempo mínimo de execução de qualquer instrução do 8051 é 1 µs. Por exemplo, a instrução MOV é executada em 1 ciclo de máquina e, portanto, 1 µs. A instrução DJNZ é executada em 2 ciclos de máquina e, portanto, 2 µs.
15 Projetos com Microcontroladores 15 3 Instruções Gerais do Microcontrolador Instruções Básicas Gerais mov a,#dado - Carrega o acumulador com o valor de dado. O símbolo # é necessário para diferenciar dado de registrador. Exemplos: mov a,#25h carrega acumulador com valor 25H mov a,#25 carrega acumulador com o decimal 25, que equivale ao hexadecimal 19 H mov a,# b carrega acumulador com o binário que corresponde a 59 H. mov a,direto - Copia no acumulador o conteúdo do registrador cujo endereço é direto. Exemplo: mov a,15h copia no acumulador o conteúdo do registrador R5 do banco 2 de registradores. mov a,reg Copia no acumulador o conteúdo do registrador reg, sendo reg = R0, R1,..., R7, do banco de registradores que estiver selecionado. Exemplo: mov a, r6 copia no acumulador o conteúdo do registrador R6. mov direto2,direto1 Copia no registrador cujo endereço é direto2 o conteúdo do registrador cujo endereço é direto1. Exemplo: mov r2,r5 copia em R2 o conteúdo do registrador R5 mov R0,#20h Carrega registrador R0 com valor 20h Copia o valor 55h na posição apontada pelo registrador R0. Se R0 = 20h, então copia valor 55h na posição 20h, ou seja, na primeira posição acima do banco de registradores. mov dptr,#200h Carrega registrador de 16 bits dptr com valor 200h. movc a,@a+dptr Carrega acumulador com o conteúdo da posição apontada por a+dptr. Se, por exemplo, dptr = 200 H, e a = 04 h, então carrega acumulador com o conteúdo da posição 204 H. add a,reg Adiciona o conteúdo do registrador reg ao conteúdo do acumulador: A = A + reg Exemplo: add a,r1 Se a = 07 H e R1 = 03 H, então, após a instrução, a = 0AH. add a,direto Adiciona o conteúdo do registrador de endereço direto ao conteúdo do acumulador: A = A + (direto) Exemplo: add a,10h Se a = 07 H e 10H = 03 H, então, após a instrução, a = 0AH. add a,#dado Adiciona ao conteúdo do acumulador o dado imediato dado : A = A + dado Exemplo: add a,#04h Se a = 07 H, então, após a instrução, a = 0BH. add a,@rn Adiciona ao conteúdo do acumulador o conteúdo da posição apontada por Rn. A = A + ((Rn)). Exemplo:
16 Projetos com Microcontroladores 16 mov R0,#20h add Se a = 07 H e registrador 20H = #03H, então, após a instrução, a = 0AH. subb a,byte Subtrai o conteúdo do acumulador do byte. A = A byte. Exemplo: subb a,#05h Se a = 07 H, então, após a instrução, a = 02 H. rl a Rotaciona o conteúdo do acumulador para a esquerda (rotate left). Por exemplo, se originalmente A= 21 H ( b), após a instrução, tem-se: A = 42 H ( b). rr a Rotaciona o conteúdo do acumulador para a direita (rotate right). Por exemplo, se originalmente A= 8C H ( b), após a instrução, tem: A = 46 H ( b). inc reg Incrementa conteúdo do registrador reg. Por exemplo, se R1 = 05H, então inc R1 resulta em R1 = 06 H. dec reg Decrementa conteúdo do registrador reg. Por exemplo, se R2 = 0B H, então dec R2 resulta em R2 = 0A H. cpl a Complementa o conteúdo do acumulador. Por exemplo, se originalmente, A = 55 H, então, após a instrução, A = AA H. swap a Faz a troca dos nibbles do acumulador, ou seja, o nibble mais significativo passa a ocupar o 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. da a Faz o ajuste decimal do acumulador. Adiciona 6 ao dígito que esteja no intervalo de A a F. Por exemplo, se originalmente A = 7A H, após a instrução torna-se A = 80 H. mul ab 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 16 bits, por isso precisa de dois registradores para o resultado. Exemplo: mul ab se A = 25 H e B = 30 H, após a instrução, tem-se: B = 06 H e A = F0 H, pois o resultado da multiplicação é: 6F0 H div ab Divide o conteúdo de A pelo conteúdo de B. A recebe o quociente e B o resto. Exemplo: div ab se A = CA H (202) e B = 19 H (25), após a instrução, tem-se: A = 08 H e B = 02, pois a divisão em decimal é: 202/25, que dá 8 e resta 2. anl a,byte Faz uma operação AND entre acumulador e BYTE. A = A (AND) BYTE. Exemplo: anl a,#0fh se originalmente a = 35 H, após a instrução torna-se: A = 05H. orl A,byte Faz uma operação OR entre o acumulador e byte. A = A (OR) byte. Exemplo: or a,#20h se originalmente a = 07 H, após a instrução torna-se: A = 27 H.
17 Projetos com Microcontroladores Instruções de Comparação, Decisão e de Desvio sjmp desvio Desvio incondicional curto (short jump) relativo. Pula até 127 bytes para a frente e até 128 bytes para trás. ajmp desvio Instrução de desvio para distâncias correspondentes a até 2048 bytes. (endereço de 11 bits). ljmp desvio Desvio incondicional longo, para qualquer posição da memória de programa. Endereço de 16 bits. jnz desvio Instrução de desvio condicional: (Jump if Not Zero). Vai para desvio se a operação anterior não for zero. Verifica automaticamente a flag de Zero. lcall subrotina Chamada de subrotina. Desvia para o endereço onde a subrotina está localizada retorna para a posição seguinte quando encontra ret. jc desvio Desvio condicional para a posição indicada por desvio. Desvia se a flag de CARRY estiver setada. jnc desvio Desvio condicional para a posição indicada por desvio. Desvia se a flag de CARRY não estiver setada. djnz reg,desvio Decrementa registrador reg e pula para a posição desvio se o resultado não for zero. É uma combinação das instruções DEC e JNZ do microprocessador cjne a,#dado,desvio Compara conteúdo do acumulador com dado e pula para a posição desvio se não forem iguais 3.3 Operações com bit jb bit,desvio Desvia para a posição desvio, caso o bit esteja setado. Exemplo: jb ligado,desliga Se ligado = 1, então o programa desvia para a posição deliga. jnb bit,desvio Desvia para desvio, caso o bit NÃO esteja setado. Exemplo: jnb ligado,liga Se ligado = 0, então o programa desvia para a posição liga. setb bit Seta o bit. Exemplo: setb ligado Torna o bit ligado igual a 1. clr bit Limpa o bit Exemplo: clr ligado Torna o bit ligado igual a zero. 3.4 Diretivas de programação Durante a programação em assembly, são necessárias algumas informações para o compilador. Essas informações não são compiladas, mas apenas informam sobre variáveis, sobre posicionamento na memória e sobre dados. As principais diretivas são dadas a seguir:
18 Projetos com Microcontroladores 18 org endereço Informa ao compilador o endereço onde deve ser armazenada a próxima instrução. Exemplo: org 30 H mov sp,#2fh Esta instrução será armazenada na posição 30 H da memória ROM. variável equ ender. reg. informa ao compilador que a variável equivale ao registrador cujo endereço é ender. reg. Exemplo: velocidade equ 05H Esta diretiva diz ao compilador que as operações com a variável velocidade equivalem às operações com o registrador R5 do banco 0 (endereço do registrador: 05 H). Por exemplo: mov velocidade,#52h equivale à instrução mov R5,#52H. variável bit ender. bit informa ao compilador que a variável é do tipo bit e será armazenada no endereço dado por ender.bit. Exemplo: sentido bit 00H Esta diretiva diz ao compilador que a variável sentido é do tipo bit e será armazenada no endereço 00H da região acima dos bancos de registradores. O endereço do bit 00H corresponde ao primeiro endereço dessa região, ou seja, posição 20.0H. db byte Esta diretiva diz ao compilador que o byte a seguir é um dado e não uma instrução. Exemplo: db 45H O valor 45H é tratado como um dado, não como uma instrução. 3.5 Exemplos Gerais de Programas (a) Programa que faz uma contagem hexadecimal crescente ininterrupta de 00 H a FF H. Rótulo Mnemônico Comentário sobre o Efeito da Operação $MOD51 Diretiva para inclusão de arquivo com variáveis pré-definidas ORG 00H Diretiva que indica que 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 Diretiva que indica que a próxima instrução estará no endereço 30h INICIO: MOV A,#00H Carrega acumulador com valor 00h VOLTA: MOV P1,A Transfere para a porta P1 o conteúdo do acumulador INC A Incrementa o conteúdo do acumulador SJMP VOLTA Pula para o endereço indicado pelo rótulo volta END Instrução obrigatória no fim de todo programa (b) Programa que faz uma contagem hexadecimal ininterrupta na seqüência h 00 h.
19 Projetos com Microcontroladores 19 Rótulo Mnemônico Comentário sobre o Efeito da Operação $MOD51 ORG 00H LJMP INICIO ORG 30H INICIO: MOV A,#00H VOLTA: MOV P1,A INC A CJNE A,#30H,VOLTA VOLTA2: MOV P1,A DJNZ ACC,VOLTA2 SJMP VOLTA END Diretiva para inclusão de arquivo com variáveis prédefinidas Diretiva que indica que a próxima instrução estará no endereço 00h Pula para o endereço indicado com o rótulo inicio Diretiva que indica que a próxima instrução estará no endereço 30h Carrega acumulador com valor 00h Transfere para a porta P1 o conteúdo do acumulador Incrementa o conteúdo do acumulador Compara conteúdo do acumulador com 30h. Caso não seja igual, volta Transfere para a porta P1 o conteúdo do acumulador Decrementa conteúdo do acumulador e vai para volta2 se não for zero Pula para volta. Não precisa usar LJMP porque a distância é curta. Instrução obrigatória no fim de todo programa (c) Programa que faz uma contagem decimal ininterrupta de 0 a 59 h. Rótulo Mnemônico Comentário sobre o Efeito da Operação $MOD51 ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#2FH MOV A,#00H VOLTA: MOV P1,A ADD A,#01H DA A CJNE A,#60H,VOLTA SJMP INICIO END Diretiva para inclusão de arquivo com variáveis pré-definidas Diretiva que indica que a próxima instrução estará no endereço 00h Pula para o endereço indicado com o rótulo inicio Diretiva que indica que a próxima instrução estará no endereço 30h Carrega apontador de pilha SP com valor 2Fh Carrega acumulador com valor 00h Transfere conteúdo do acumulador para porta P1 Adiciona 01 ao conteúdo do acumulador Faz o ajuste decimal do conteúdo do acumulador Compara conteúdo do acumulador com 60h. Caso seja diferente, volta Pula para inicio Instrução obrigatória no fim de todo programa A contagem do programa acima não apresenta qualquer atraso de tempo, o que pode dificultar a visualização da contagem durante a simulação e durante a implementação em laboratório. Dessa forma, é apresentada abaixo uma subrotina de atraso de tempo implementada com dois registradores. É suposto que a freqüência do cristal oscilador é de 12 MHz, o que significa um período de clock de 1/12 µs e um ciclo de máquina de 1 µs. Observar que as instruções djnz e ret são executadas em dois ciclos de máquina, enquanto a instrução mov é executada em apenas 1 ciclo.
20 Projetos com Microcontroladores 20 Rótulo Mnemônico No. ciclos No. vezes Tempo de atraso Comentário sobre o Efeito da Operação ATRASO: MOV R0,# µs Carrega R0 com 10 decimal REPETE: MOV R1,# µs Carrega R1 com 100 decimal. Repete instrução 10 vezes. DJNZ R1,$ µs Decrementa R vezes: 10 passagens com 100 decrementos DJNZ R0,REPETE µs Decrementa R0 10 vezes µs 2033 µs Atraso de tempo de 2 ms A subrotina de atraso deve ser incluída após a instrução sjmp inicio. Deve-se incluir também a chamada da subrotina lcall atraso, logo após a instrução mov P1,a.
21 Projetos com Microcontroladores 21 4 O Ambiente de Simulação e a Plataforma de Desenvolvimento 4.1 Ambientes de Edição e Simulação As ferramentas disponíveis para edição, compilação, simulação, gravação e implementação em laboratório dos programas do 8051 são apresentadas nesta seção. Há dois ambientes disponíveis para edição, compilação e simulação de programas para o 8051, são eles: o programa AsmEditor e o programa PEQui. O AsmEditor permite: 1. Digitar o mnemônico do programa desejado; 2. Compilar o programa desejado usando o compilador ASM51; 3. Verificar erros, inclusive com a listagem do programa compilado; 4. Simular usando o Simulador AVSIM51 para ambiente DOS; 5. Gravar usando uma gravadora e o programa Ez3, que permite gravar através da porta serial; 6. Gravar usando o programa AEC_ISP, que permite gravar através da porta paralela. A figura 4.1 mostra a tela principal do AsmEditor, onde o mnemônico do programa deve ser digitado. Figura 4.1: Tela principal do programa AsmEditor A Figura 4.2 mostra a régua principal do programa AsmEditor, onde, dentre outras, estão presentes as seguintes opções:
22 Projetos com Microcontroladores 22 Iniciar novo documento; Abrir documento existente; Gravar programa digitado com extensão.asm ; Compilar programa Um programa com extensão.hex é gerado. Figura 4.2: Régua principal do programa AsmEditor A Figura 4.3 mostra as opções disponíveis para Ferramentas. São elas: Compilar programa; Simulador AVSIM51 em ambiente DOS; Gravador Ez3, que grava programas no microcontrolador AT89C82; Gravador AEC_ISP, que grava através da porta paralela o AT89C52 Arquivo.LST, que mostra a listagem do programa com os possíveis erros. Figura 4.3: Opções disponíveis em Ferramentas O outro ambiente disponível para digitação e compilação do programa é o simulador PEQui. A tela principal desse programa é mostrada na figura 4.4. Figura 4.4: Tela principal do programa PEQui
23 Projetos com Microcontroladores 23 Figura 4.5: Régua principal do programa PEQui A figura 4.5 mostra a régua principal do programa PEQui, onde as seguintes opções estão disponíveis: Iniciar novo programa; Abrir programa existente; Salvar o programa com extensão.asm ; Compilar programa, gerando arquivo.hex ; Alternar entre a tela de digitação do mnemônico e o ambiente de simulação, mostrado na figura 3.6; Carregar programa compilado, com extensão.hex, para simulação. Como mostrado na figura 4.6, o programa PEQui possui um ambiente para simulação do programa digitado e compilado. Esse simulador permite visualizar os principais registradores do microcontrolador 8051 e ainda permite acoplar um mostrador do tipo display de 7-segmentos e um motor de passo. Figura 4.6: Ambiente de simulação do PEQui O outro ambiente disponível para simulação de programas é para ambiente DOS. É o programa AVSIM51, cuja tela principal é mostrada na figura 4.7, com destaque para as principais áreas: memória RAM, memória ROM, acumulador, Contador de Programa (PC), apontador de pilha (SP), registradores de R0 a R7, temporizadores, interrupções e portas de entrada e saída.
24 Projetos com Microcontroladores 24 Acumulador A, Flag de Carry C, contador de programa PC e apontador de pilha SP Temporizadores 0 e 1 Memória ROM Registradores R0 a R7, DPTR e B Memória RAM Interrupções 0 e 1 e porta serial Figura 4.7: Simulador AVSIM51 para ambiente DOS Portas de entrada e saída 4.2 A Plataforma de Desenvolvimento A Plataforma de Desenvolvimento, mostrada na figura 4.8, permite o acionamento de diversos componentes elétricos, tais como: motor de corrente contínua, motor de passo e lâmpada incandescente. Possui ainda sensores de presença, transdutores analógico e digital de velocidade, teclado, display de 7-segmentos e display LCD. Motores de passo e Driver Motores CC e Driver Lâmpada e Relé Fonte Sensores de Presença Display de 7-segmentos Display LCD Sistema Mínimo Figura 4.8: Plataforma de Desenvolvimento Teclado e Driver
25 Projetos com Microcontroladores O Sistema Mínimo O sistema mínimo, mostrado na figura 4.9, é baseado no microcontrolador AT89S8252 da família Possui um canal serial para gravação e um outro canal serial para comunicação com um microcomputador. A figura 4.10 mostra o circuito do sistema mínimo. Figura 4.9: Sistema mínimo Figura 4.10: Sistema mínimo
26 Projetos com Microcontroladores 26 Vários componentes estão disponíveis na plataforma implementada. Esses componentes a serem acionados estão conectados ao sistema mínimo de acordo com a figura A lâmpada, acionada através do pino P2.0, é ligada quando este pino estiver em nível lógico baixo. Observar que, após o RESET, todas as portas ficam em nível lógico alto, ou seja, 5 V. Sensor esquerdo da esteira Motor de passo da esteira Motor de passo isolado P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 Sensor direito da esteira Motor CC grande (sentido de rotação) 0 1 um sentido 1 0 no outro sentido Liga e controla velocidade do motor CC grande Motor CC pequeno Sentido de rotação e controle de velocidade Lâmpada INT0 INT1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 Parte baixa do display de 7-segmentos (código BCD do dado a ser mostrado) Comando para o primeiro display Comando para o segundo display Comando para o terceiro display Comando para o quarto display Sensor de presença 1 Sensor de presença 2 Sensor de velocidade do motor CC pequeno Pedido de interrupção do teclado Figura 4.10: Conexões do microcontrolador com os componentes a serem acionados 4.4 Outros Exemplos de Programas Código da tecla digitada no teclado (a) Programa que faz uma contagem decimal decrescente interrupta de 59 a 0. Acrescente a subrotina de atraso dada anteriormente. Rótulo Mnemônico Comentário sobre o Efeito da Operação $MOD51 Inclui biblioteca pré-definida ORG 00H A próxima instrução será alocada no endereço 00h LJMP INICIO Pula para o início do programa ORG 30H A próxima instrução será alocada no endereço 30h INICIO: MOV SP,#2FH Define a pilha na posição 2Fh da memória RAM MOV A,#60H Carrega acumulador com valor 60h VOLTA: ADD A,#99 Aciona 99 ao acumulador DA A Corrige para decimal MOV P1,A Transfere conteúdo do acumulador para a Porta P1 CJNE A,#00H,VOLTA Se conteúdo de A for diferente de 0 pula para volta SJMP INICIO Pula (Short Jump) para inicio END
27 Projetos com Microcontroladores 27 (b) Programa que rotaciona um bit alto na porta P0 para a esquerda e para a direita de forma ininterrupta. Rótulo Mnemônico Comentário sobre o Efeito da Operação $MOD51 ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#2FH VOLTA: RL A VOLTA2: RR A MOV A,# B MOV P0,A LCALL ATRASO CJNE A,#80H,VOLTA MOV P0,A LCALL ATRASO Diretiva para inclusão de símbolos usados pelo compilador Diretiva que indica que a próxima instrução será alocada no endereço 00h Pula para o início do programa Diretiva que indica que a próxima instrução será alocada no endereço 30h Define a pilha na posição 2Fh da memória RAM Carrega acumulador com valor binário b Rotaciona para a esquerda o conteúdo do acumulador Transfere para a porta P0 o conteúdo do acumulador Chama subrotina de atraso de tempo Se A for diferente de 80h desvia para VOLTA Rotaciona para a direita o conteúdo do acumulador Transfere para a porta P0 o conteúdo do acumulador Chama subrotina de atraso CJNE A,#01H,VOLTA2 Se A for diferente de 01h desvia para VOLTA2 SJMP VOLTA END Pula para VOLTA (c) Programa que lê os valores de uma tabela e mostra na porta P1 o maior desses valores. O maior valor será guardado em R0. O último elemento da tabela é FFh. DPTR aponta o início da tabela.
28 Projetos com Microcontroladores 28 Rótulo Mnemônico Comentário sobre o Efeito da Operação $MOD51 Diretiva para inclusão de símbolos usados pelo compilador ORG 00H Diretiva que indica que a próxima instrução será alocada no endereço 00h LJMP INICIO Pula para o início do programa ORG 30H INICIO: MOV SP,#2FH MOV A,#00H MOV R0,#00H MOV DPTR,#TABELA VOLTA: PUSH ACC MOVC A,@A+DPTR CJNE A,#0FFH,PULA MOV P1,R0 LJMP FIM PULA: MOV B,A SUBB A,R0 JC PULA2 MOV R0,B PULA2: POP ACC INC A SJMP VOLTA Diretiva que indica que a próxima instrução será alocada no endereço 30h Pilha na posição 2Fh da memória RAM Carrega acumulador com valor 00h Carrega registrador R0 com valor 00h DPTR recebe endereço inicial da tabela, que nesse programa é 100h Guarda na pilha o conteúdo do acumulador acumulador recebe o conteúdo da posição (a + dptr) Compara o conteúdo de a com FFh. Se for diferente pula Transfere para P1 o conteúdo de R0 sjmp não funcionaria aqui porque o pulo seria maior que 127 bytes. guarda em B o conteúdo do acumulador, para recuperá-lo após SUBB A,R0 Faz a subtração: A = A R0 Vai para pula2 caso a flag de carry esteja setada Carrega R0 com o conteúdo de b Recupera conteúdo do acumulador Incrementa o conteúdo do acumulador Pula para volta ORG 100H Diretiva com endereço do início da tabela TABELA: DB 05H Primeiro valor da tabela de dados DB 35H DB 12H DB 98H DB 0A1H Dados que começam com letra devem ser precedidos de 0 DB 0B5H DB 5AH DB 09H DB 72H DB 40H Ultimo dado de interesse da tabela DB 0FFH Valor usado para indicar fim da tabela FIM: NOP END Obs.: A instrução MOV DPTR,#TABELA faz com que o registrador de 16 bits DPTR assuma o valor correspondente ao endereço inicial da tabela. Nesse programa DPTR = 0100 H. Antes de fazer SUBB A,R0 fez-se necessário guardar em B o valor de A, para o caso de A ser menor que R0. Porque, nesse caso, é preciso trocar o valor de R0 pelo valor de A (que agora está em B).
29 Projetos com Microcontroladores 29 5 Interrupções Interrupção é o processo pelo qual a execução de um programa é interrompida para a execução de um outro processamento que pode ser solicitado por uma das três fontes abaixo: Interrupção por software (instrução) Interrupção pedida por periférico externo Interrupção pedida por periférico interno (temporizador/contador, porta serial ) O microcontrolador 8051 pode ser interrompido de cinco maneiras diferentes: Pela interrupção externa INTO\ - pino 12 (P3.2) Pelo timer/counter (temporizador/contador) interno TIMER0 Pela interrupção externa INT1\ - pino 13 (P3.3) Pelo timer/counter (temporizador/contador) interno TIMER1 Pelo canal de comunicação serial (Pinos 10 e 11 = P3.0 e P3.1) O pedido de interrupção pode ou não ser atendido, de acordo com a condição de certos registradores. No 8051 os registradores que comandam a interrupção são Registrador de Habilitação: IE (Interrupt Enable) = Reg. A8h Registrador de Prioridades: IP (Interrupt Priority) = Reg. B8h Registrador de Controlador: TCON (Timer Control) = Reg. 88h Registrador IE: (Reg. A8h) EA (Enable All) Bit 7 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 EA x x ES ET1 EX1 ET0 EX0 - Quando está zerado (EA = 0), todos as interrupções estão desabilitadas (mascaradas), independentemente de seus bits individuais de controle. Quanto está setada (EA = 1), cada uma das interrupções pode ser habilitada ou desabilitada fazendo seus bits de controle 1 ou 0. EX0 (Enable External Interrupt 0) - Quando está zerado (EX0 = 0) a interrupção externa, cujo pedido vem através do pino INT0\ está desabilitada. Quando está setado (EX0 = 1), a interrupção INT0\ fica habilitada. ET0 (Enable Timer 0) - Quando ET0 = 0, a interrupção pedida pelo temporizador/contador 0 fica desabilitada. Quando ET0 = 1, a interrupção vinda do temporizador/contador 0 fica habilitada. EX1 (Enable External Interrupt 1) - Quando está zerado (EX1 = 0) a interrupção externa, cujo pedido vem através do pino INT1\ está desabilitada. Quando está setado (EX1 = 1), a interrupção INT1\ fica habilitada. ET1 (Enable Timer 1) - Quando ET1 = 0, a interrupção pedida pelo temporizador/contador 1 fica desabilitada. Quando ET1 = 1, a interrupção vinda do temporizador/contador 1 fica habilitada. ES (Enable Serial) - Quando ES = 0, a interrupção pedida pela porta serial fica dasabilitada. Quando ES = 1 essa interrupção fica habilitada. Registrador IP: (Reg. B8h) Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 x x x PS PT1 PX1 PT0 PX0
30 Projetos com Microcontroladores 30 PX0 (Priority of External Interrupt 0) - Quando PX0 = 1 a interrupção externa INT0\ recebe prioridade alta. PT0 (Priority of Timer/Counter Interrupt 0) - Quando PT0 = 1 a interrupção pedida pelo temporizador/contador 0 recebe prioridade alta. PX1 (Priority of External Interrupt 1) - Quando PX1 = 1 a interrupção externa INT1\ recebe prioridade alta. PT1 (Priority of Timer/Counter Interrupt 1) - Quando PT1 = 1 a interrupção pedida pelo temporizador/contador 1 recebe prioridade alta. PS (Priority of Serial Port Interrupt) - Quando PS = 1 a interrupção pedida através da porta serial recebe prioridade alta. Quando PX0, PT0, PX1, PT1 e PS são zero, elas são de prioridade baixa. Caso uma interrupção de prioridade 1 seja solicitada durante a execução de uma de prioridade 0, o processamento é interrompido para o atendimento da interrupção de prioridade maior. No caso de todas as interrupções terem a mesma prioridade (0 ou 1), a ordem de atendimento das interrupções é: Interrupção externa 0 Temporizador/contador 0 Interrupção externa 1 Temporizador/contador 1 Canal serial Maior prioridade Menor prioridade As interrupções externas podem ser ajustadas para serem detectadas por nível 0 ou pela transição do nível 1 para o nível 0. O ajuste é feito através o registrador TCON, dado abaixo. Registrador TCON: (Reg. 88h) Controle do Temporizador Bit 3 Bit 2 Bit 1 Bit 0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 IT0 (Interrupt 0 Type) - Quando IT0 = 1 a interrupção externa 0 será reconhecida pela transição de 1 para 0 no pino INTO\. Quando IT0 = 0, a interrupção é reconhecida quando o sinal no pino INTO\ está em nível baixo (0). 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 I (retorno da subrotina de atendimento). IT1 (Interrupt 1 Type) - Quando IT1 = 1 a interrupção externa 1 será reconhecida pela transição de 1 para 0 no pino INT1\. Quando IT1 = 0, a interrupção é reconhecida quando o sinal no pino INT1\ está em nível baixo (0). IE1 (Interrupt 1 Edge Flag) - É setado pelo hardware quando uma interrupção externa através de INT1\ é detectada. É zerada quando da execução da instrução I (retorno da subrotina de atendimento). ENDEREÇOS DE DESVIO DAS INTERRUPÇÕES Quando ocorre uma das cinco interrupções do 8051 o processamento é desviado para os endereços abaixo. Como há pouco espaço em bytes nesses endereços, deve-se usar uma instrução de desvio para um outro endereço onde seja possível escrever toda a rotina de atendimento da interrupção. Interrupção Solicitada Reset INT0\ Timer/counter 0 INT1\ Timer/counter 1 Canal Serial Endereço de desvio 0000h 0003h 000Bh 0013h 001Bh 0023h
31 Projetos com Microcontroladores 31 Exemplos de Programas com Interrupção 1. Programa com interrupção externa 0. Quando a interrupção INT0 é solicitada através do pino P3.2 o processamento é desviado para a posição 03 h da memória ROM e, em seguida, é desviado para uma subrotina que manda uma contagem crescente para a porta P1. Rótulo Mnemônico Comentário sobre o Efeito da Operação $MOD51 ORG 00H LJMP INICIO ORG 03H LJMP ATENDE Endereço de desvio quando há um pedido da interrupção INT0 (pino P3.2). Quando há um pedido de interrupção através do pino P3.2, desvia para atende ORG 30H INICIO: MOV SP, #2FH MOV IE, #81H Habilita a interrupção externa 0 (EA = 1 e EX0 = 1) MOV TCON, #01H MOV A, #00H CJNE A,#01H, $ SJMP FIM INT0\ reconhecida pela transição de 1 para 0 (IT0 = 1). Poderia ser SETB IT0 Aguarda interrupção. Enquanto a 01h, fica aguardando nessa linha. O caractere $ indica desvio para a mesma linha. ATENDE: MOV P1,A INC A LCALL ATRASO CJNE A,#00H,ATENDE MOV A,#01H I Subrotina de atendimento da interrupção INT0. Faz P1 = a Incrementa valor de A Chama subrotina de atraso Compara a com 00h. Se for diferente, vai para atende Quando a = 00h, na linha anterior, então faz A = 01h, nesta linha. Retorna da subrotina de interrupção ATRASO: MOV R0,#10 REPETE: MOV R1,#100 DJNZ R1, $ DJNZ R0, REPETE FIM: NOP END Subrotina de atraso de tempo Repete a instrução que decrementa r1 até zerar r1 Obs.: O pedido de interrupção é atendido quando pino P3.2 do microcontrolador passa de 1 para 0.
32 Projetos com Microcontroladores Programa com as interrupções externas 0 e 1. Neste programa, quando a interrupção INT0 é acionada através do pino P3.2, o processamento é desviado para uma subrotina que faz uma contagem crescente na porta P1. Quando a interrupção INT1 é solicitada através do pino P3.3, uma contagem decrescente é enviada também para a porta P1. Lembrar de guardar o acumulador na pilha em cada atendimento de subrotina, uma vez que ele é utilizado nas duas subrotinas. Rótulo Mnemônico Comentário sobre o Efeito da Operação $MOD51 ORG 00H LJMP INICIO ORG 03H LJMP ATENDE0 Desvia para a subrotina de atendimento da interrupção INT0 ORG 13H LJMP ATENDE1 Desvia para a subrotina de atendimento da interrupção INT1 ORG 30H INICIO: MOV SP, #2fH MOV IE, #85H Habilita interrupções externas 0 e 1 (EA = 1, EX0 = 1 e EX1 = 1) MOV TCON, #05H INT0 e INT1 por transição de 1 para 0 (IT0 = 1 e IT1 = 1). MOV A, #00H SJMP $ Aguarda interrupção em um laço infinito ATENDE0: PUSH ACC Início da subrotina de atendimento da interrupção 0. MOV A,#00H VOLTA: MOV p1,a INC A LCALL ATRASO CJNE A,#00H,VOLTA Compara a com 00h. Se for diferente volta POP ACC Recupera da pilha o conteúdo do acumulador I retorna de subrotina de interrupção ATENDE1: PUSH ACC Início da subrotina de atendimento da interrupção 1. MOV A,#0ffH VOLTA2: MOV p1,a LCALL ATRASO DEC A Decrementa conteúdo do acumulador CJNE A,#0FFH,VOLTA2 Compara A com FFh. Se for diferente volta2 POP ACC Recupera conteúdo do acumulador que foi guardado na pilha I ATRASO: MOV R0,#10 REPETE: MOV R1,#100 DJNZ R1, $ DJNZ R0, REPETE END
33 Projetos com Microcontroladores Este programa funciona como o anterior, mas ao invés de uma contagem crescente e uma decrescente, ele faz um deslocamento à esquerda dos bits da porta P1 para um pedido de INT0 e um deslocamento à direita dos mesmos bits para um pedido de INT1. Rótulo Mnemônico Comentário sobre o Efeito da Operação $MOD51 ORG 00H LJMP INICIO ORG 03H LJMP ATENDE0 Desvia para a subrotina de atendimento da interrupção INT0 ORG 13H LJMP ATENDE1 Desvia para a subrotina de atendimento da interrupção INT1 ORG 30H INICIO: MOV SP, #2FH MOV IE, #85H Habilita interrupções externas 0 e 1 (EA = 1, EX0 = 1 e EX1 = 1) MOV TCON, #05H INT0 e INT1 por transição de 1 para 0 (IT0 = 1 e IT1 = 1). MOV A, #00H SJMP $ aguarda interrupção num loop infinito nessa linha ATENDE0: PUSH ACC MOV A,#01H VOLTA: MOV P1,A LCALL ATRASO RL A CJNE A,#01H,VOLTA POP ACC I Subrotina de atendimento da interrupção 0. Guarda acumulador na pilha Rotaciona para a esquerda o conteúdo do acumulador Compara a com 01h. Se for diferente volta Recupera da pilha o conteúdo do acumulador retorna de subrotina de interrupção ATENDE1: PUSH ACC MOV A,#80H VOLTA2: MOV P1,A LCALL ATRASO RR A CJNE A,#80H,VOLTA2 POP ACC I Subrotina de atendimento da interrupção 1. Guarda acumulador na pilha Rotaciona para a direita o conteúdo do acumulador Compara A com 80h. Se for diferente volta2 ATRASO: MOV R0,#10 REPETE: MOV R1,#100 DJNZ R1, $ DJNZ R0, REPETE END Obs.: 1. Lembrar que, na simulação, o pedido de interrupção é feito posicionando o cursor nos bits 2 e 3 da porta P3 e digitando 0 no lugar do 1 presente. As interrupções serão atendidas sempre na transição de 1 para zero, uma vez que TCON = 05h ( b). 2. Durante uma das contagens, simule dois pedidos de interrupção simultâneos fazendo a transição de 1 para 0 nos pinos P3.2 e P3.3. Verifique então que a interrupção INT0 será atendida primeiro, porque ela tem prioridade sobre a INT1.
34 Projetos com Microcontroladores 34 6 Temporizadores O 8051 tem dois temporizadores/contadores de 16 bits que podem trabalhar em 4 modos distintos: Modo 0: Contador/Temporizador de 8 bits com divisor de freqüência de até 32 vezes (pode contar até 8192 = 32 x 255) Modo 1: Contador/Temporizador de 16 bits (pode contar até 65535) Modo 2: Modo 3: 2 contadores/temporizadores de 8 bits com recarga automática. 2 contadores/temporizadores independentes de 8 bits (Modo 3 não vale para Contador/Temporizador 1, que fica inativo) Figura 6.1: Diagrama de blocos simplificado do temporizador/contador 0 O diagrama da figura 6.1 auxilia na análise do funcionamento do temporizador/contador. O bit C/T\ do registrador TMOD, por exemplo, define se o funcionamento é como contador (C/T\ = 1), ou como temporizador (C/T\ = 0). Como temporizador, o clock é interno, vindo do oscilador. A freqüência é 1/12 da freqüê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.2). Se Gate\ = 0, o comando SETB TR0 dispara o contador/temporizador e CLR TR0 interrompe.
35 Projetos com Microcontroladores 35 Exemplos usando Temporizadores: Exemplo 1: Subrotina de atraso usando temporizador Rótulo Mnemônico Comentário sobre o Efeito da Operação $MOD51 ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP, #2FH MOV TMOD,#01H Temporizador 0 no modo de 16 bits (modo 1) LCALL ATRASO Chama subrotina de atraso de tempo SJMP FIM ATRASO: MOV R0,#20 Registrador R0 recebe valor 20 decimal VOLTA: MOV TH0,#3CH TH0 recebe valor 3Ch MOV TL0,#0AFH TL0 recebe valor AFh. Contador conta de até = pulsos SETB TR0 TR0 = 1 dispara o temporizador 0 ESPERA: JNB TF0, ESPERA Espera a flag de fim de contagem ser setada Espera TF0 = 1. CLR TF0 Limpa flag que indica fim da contagem. DJNZ R0, VOLTA Decrementa R0 e volta se não for zero CLR TR0 Pára contador após o fim de 20 x contagens = pulsos. Retorna da subrotina. Se cada pulso corresponder a 1 µs atraso 1 s FIM: NOP END Exemplo 2: Uso do temporizador 1 no modo 2, com interrupção. Nesse exemplo, a cada vez que o temporizador 1 chega ao final da contagem (FFh), há um desvio para a subrotina atende1, onde o pino 0 da porta P1 é complementado e valor da recarga TH1 é incrementado de 1. Deve-se observar no laboratório que o efeito de incrementar TH1 e complementar P1.0 é uma onda quadrada com período ligado e desligado variável. Rótulo Mnemônico Comentário sobre o Efeito da Operação $MOD51 ORG 00H LJMP INICIO ORG 1BH Endereço de desvio para a interrupção do temporizador 1. LJMP ATENDE1 Desvia para a subrotina que atende o temporizador 1. ORG 30H INICIO: MOV SP, #2FH MOV TMOD,#20H Temporizador 1 no modo de recarga automática (modo 2) MOV TH1,#00H MOV TL1,TH1 Carrega registrador de recarga TH1 com valor 00h Transfere para TL1 o conteúdo do registrador TH1. TL1 é o contador no modo 2. SETB TR1 Dá início à contagem do temporizador 1 SJMP $ Fica num loop infinito, saindo a cada fim de contagem do temporizador 1 ATENDE1: CPL P1.0 Complementa o bit zero da porta P1 a cada fim de contagem do TEMP1 INC TH1 Incrementa TH1, de modo que cada contagem comece 1 unidade acima da anterior I Retorna da subrotina que atende a interrupção do temporizador 1. END
36 Projetos com Microcontroladores 36 7 Dispositivos para Entrada, Saída e Detecção de Dados 7.1 Teclado A figura 7.1(a) mostra o teclado presente na plataforma implementada e a figura 7.1(b), o esquema básico de conexões para um teclado de 4 linhas e 3 colunas. (a) C1 C2 C L * 0 (b) Figura 7.1: (a) Teclado e (b) esquema matricial de conexões do teclado A leitura da tecla digitada pode ser feita diretamente, através dos sete canais resultantes da matriz de 4 linhas e 3 colunas ou através de um decodificador de teclado que gera um código de 4 bits a partir do sinal dos sete canais. No primeiro caso, com leitura direta, pode-se colocar uma das três colunas em nível lógico baixo (C1, por exemplo) e monitorar o sinal das quatro linhas. As portas do microcontrolador estão normalmente em nível lógico alto e, assim, se o nível lógico da linha L1 torna-se baixo, significa que a tecla 1 foi pressionada. Com uma varredura periódica pode-se detectar cada uma das teclas pressionadas. A plataforma implementada utiliza o decodificador de teclado 74LS922 para a leitura das teclas. Nesse caso, o sinal resultante das 4 linhas e 3 colunas originadas do teclado é decodificado em um sinal de 4 bits. Além do código da tecla pressionada o decodificador também gera um bit de flag para indicar a disponibilidade do código na saída. Quando uma tecla é pressionada essa flag vai a zero, o que pode ser usado como pedido de interrupção para a leitura do dado disponível. Esse sinal é usado na plataforma para gerar um pedido de interrupção através do canal de interrupção INT1 (P3.3). # L2 L3 L4
37 Projetos com Microcontroladores 37 O conjunto teclado+decodificador implementado resulta numa saída hexadecimal diferente do número pressionado no teclado, o que exige a utilização de uma tabela-verdade como a mostrada na tabela 1. Verifica-se, por exemplo, que ao pressionar a tecla 1, o código hexadecimal resultante na saída do decodificador é 0 h. No entanto, ao se pressionar a tecla 4, por exemplo, o resultado é 4. Esse resultado deve-se ao fato de se utilizar um teclado de 12 teclas com um decodificador apropriado para teclado de 16 teclas. Isso exige a utilização da tabela 1 como subrotina de conversão dentro do programa desenvolvido. Tabela 7.1: tabela verdade do conjunto teclado + decodificador Tecla digitada Saída Saída Flag Liberação D C B A Hex DA A D 0 * C 0 # E 0 A figura 7.2 mostra o circuito adotado para o drive do teclado. O decodificador 74LS922 utilizado é de 18 pinos. Figura 7.2: Circuito do decodificador do teclado São apresentados a seguir dois programas-exemplo. Em ambos os exemplos a leitura da porta P3 é feita após o pedido de interrupção vindo do teclado através da interrupção INT1. No primeiro programa a tecla digitada é mostrada no primeiro display sem qualquer conversão, ou seja, deverá aparecer o número 0 no display ao ser digitado 1; deverá aparecer o número 1 ao ser digitado 2 e o número 4, as ser digitado 4 (ver tabela 1). No segundo exemplo o código da tecla digitada é convertido através da tabela 1, antes de ser mostrado no primeiro display. Deve-se observar que o código do teclado é lido através do nibble superior da porta P3 (P3.4, P3.5, P3.6, P3.7), o que significa que deverá haver uma troca de nibbles (swap a) antes de mostrar o dado através do nibble inferior da porta P1. Deve-se observar ainda que o dado é mostrado apenas no
38 Projetos com Microcontroladores 38 primeiro display, que é selecionado enviando um sinal alto para o pino P1.4, através da instrução ORL A,#10H. Esta instrução junta o conteúdo do acumulador (que é o dado a ser mostrado) com o comando para o primeiro display. A subrotina que mostra o resultado no display exige um atraso de tempo para que o dado do display seja retido pelo olho humano. Exemplo 1: A tecla digitada é mostrada no display de 7-segmentos sem conversão, ou seja, o código liberado pelo decodificador para cada tecla digitada é mostrado no display. O registrador R0 é usado para guardar o valor a ser mostrado no display. $MOD51 ORG 00H LJMP INICIO ORG 13H LJMP ATENDE_UM ORG 30H INICIO: MOV SP,#2FH MOV IE,#84H MOV TCON,#04H MOV R0,#00H VOLTA: LCALL DISPLAY SETB EA SJMP VOLTA ; PILHA ASSUME VALOR INICIAL DE 2FH ; HABILITA INTERRUPÇÃO EXTERNA UM ; A INTERRUPÇÃO EXTERNA UM É POR TRANSIÇÃO ; REGISTRADOR R0 = 00H ; CHAMA SUBROTINA "DISPLAY" MOSTRA CONTEÚDO DE R0 ; HABILITA NOVAMENTE A INTERRUPÇÃO UM ;================================================================================= ; SUBROTINA PARA MOSTRAR TECLA LIDA NO DISPLAY ;================================================================================ DISPLAY: MOV A,#0FH ANL A,R0 ORL A,#10H MOV P1,A LCALL ATRASO ; 0FH PARA SEPARAR O NIBBLE INFERIOR DO DADO DE R0 ; ISOLA NIBBLE INFERIOR DE R0 ; JUNTA CONTEÚDO DE R0 COM O COMANDO PARA O PRIMEIRO DISPLAY ; ENVIA "DADO + COMANDO" PARA A PORTA P1 ;=========== SUBROTINA DE ATRASO DE TEMPO ============ ATRASO:MOV R4,#10 REPETE:MOV R5,#100 DJNZ R5,$ DJNZ R4,REPETE ;=========== SUBROTINA PARA LEITURA DA TECLA PRESSIONADA ============== ATENDE_UM: PUSH ACC CLR EA MOV A,P3 SWAP A MOV R0,A POP ACC I ; GUARDA CONTEÚDO DE "A" NA PILHA ; DESABILITA INTERRUPÇÃO ; ACUMULADOR RECEBE CÓDIGO ENVIADO PELO TECLADO ; INVERTE NIBBLES INFERIOR E SUPERIOR ; GUARDA EM R0 VALOR LIDO DA PORTA P3 ; RECUPERA VALOR ORIGINAL DE "A" ; ORNA DA SUBROTINA DA INTERRUPÇÃO ZERO END
39 Projetos com Microcontroladores 39 Exemplo 2: A tecla digitada é mostrada no display de 7-segmentos após conversão, ou seja, para cada código liberado pelo teclado, é buscado numa tabela de conversão o código a ser mostrado no display. O registrador R0 é usado para guardar o valor a ser mostrado no display. $MOD51 ORG 00H LJMP INICIO ORG 13H LJMP ATENDE_UM ORG 30H INICIO:MOV SP,#2FH MOV IE,#84H MOV TCON,#04H MOV R0,#00H VOLTA: LCALL DISPLAY SETB EA SJMP VOLTA ; PILHA ASSUME VALOR INICIAL DE 2FH ; HABILITA INTERRUPÇÃO EXTERNA ZERO ; A INTERRUPÇÃO EXTERNA ZERO É POR TRANSIÇÃO ; REGISTRADOR R0 = 00H ; CHAMA SUBROTINA "DISPLAY" ;================================================================================= ; SUBROTINA PARA MOSTRAR TECLA LIDA NO DISPLAY ;================================================================================ DISPLAY: MOV A,#0FH ; ESTE ÚLTIMO BLOCO SEPARA O NIBBLE INFERIOR ANL A,R0 ; DE R0 PARA MOSTRÁ-LO NO PRIMEIRO DISPLAY ORL A,#10H ; JUNTA CONTEÚDO DE R0 COM O COMANDO PARA O PRIMEIRO DISPLAY MOV P1,A ; ENVIA "DADO + COMANDO" PARA A PORTA P1 LCALL ATRASO ;=========== SUBROTINA DE ATRASO DE TEMPO ============ ATRASO:MOV R4,#10 REPETE:MOV R5,#100 DJNZ R5,$ DJNZ R4,REPETE ;=========== SUBROTINA PARA LEITURA DA TECLA PRESSIONADA ============== ATENDE_UM: PUSH ACC ; GUARDA CONTEÚDO DE "A" NA PILHA CLR EA ; DESABILITA INTERRUPÇÃO MOV A,P3 ; JUNTA CONTEÚDO DE "A" AO DA PORTA P3 SWAP A ; INVERTE NIBBLES INFERIOR E SUPERIOR ANL A,#0FH ; ISOLA O NIBBLE INFERIOR MOV DPTR,#TABELA ; LÊ INÍCIO DA TABELA MOVC A,@A+DPTR ; CONVERTE LEITURA DO TECLADO MOV R0,A ; GUARDA EM R0 VALOR LIDO DA PORTA P3 POP ACC ; RECUPERA VALOR ORIGINAL DE "A" I ; ORNA DA SUBROTINA DA INTERRUPÇÃO ZERO TABELA: DB 01H ; TECLA DIGITADA: 1 -> SAÍDA: 0 H (0000) DB 02H ; TECLA DIGITADA: 2 -> SAÍDA: 1 H (0001) DB 03H ; TECLA DIGITADA: 3 -> SAÍDA: 2 H (0010) DB 0FFH ; NENHUMA TECLA: -> SAÍDA: 3 H (0011)-> NÃO EXISTENTE DB 04H ; TECLA DIGITADA: 4 -> SAÍDA: 4 H (1000) DB 05H ; TECLA DIGITADA: 5 -> SAÍDA: 5 H (0101) DB 06H ; TECLA DIGITADA: 6 -> SAÍDA: 6 H (0110) DB 0FFH ; NENHUMA TECLA: -> SAÍDA: 7 H (0111)-> NÃO EXISTENTE DB 07H ; TECLA DIGITADA: 7 -> SAÍDA: 8 H (1000) DB 08H ; TECLA DIGITADA: 8 -> SAÍDA: 9 H (1001) DB 09H ; TECLA DIGITADA: 9 -> SAÍDA: A H (1010) DB 0FFH ; NENHUMA TECLA: -> SAÍDA: B H (1011)-> NÃO EXISTENTE DB 0CH ; TECLA DIGITADA: * -> SAÍDA: C H (1100) DB 00H ; TECLA DIGITADA: 0 -> SAÍDA: D H (1101) DB 0EH ; TECLA DIGITADA: # -> SAÍDA: E H (1110) END
40 Projetos com Microcontroladores Display de 7-Segmentos O display de 7-segmentos utilizado no sistema implementado é do tipo catodo comum, cujos terminais são mostrados na figura 7.2. Figura 7.2: Display de 7-segmentos do tipo catodo comum O display mostrado pode ser acionado diretamente pelo microcontrolador conectando os terminais a, b, c, d, e, f, g e DP a uma porta de saída ou através de um driver decodificador. Para o acionamento direto é necessário criar uma tabela de conversão que associe o número que se deseja com os trechos a serem ativados no display. A tabela 7.2 mostra um exemplo de tabela que pode ser criada. Assim, desejando-se, por exemplo, mostrar o número 5 no display, o código 6Dh deve ser enviado para a porta escolhida. Tabela 7.2: código hexadecimal para cada dígito a ser mostrado no display Número desejado no Px.7 Px.6 Px.5 Px.4 Px.3 Px.2 Px.1 Px.0 Hexadecimal resultante display DP g f e d c b a B F D D F F A outra opção de acionamento, que é a escolhida para a plataforma implementada, utiliza o driver decodificador CD4511, cuja entrada é BCD (4 bits) e cuja saída alimenta cada um dos terminais mostrados (a, b, c, d, e, f, g). Quando se deseja também mostrar o ponto decimal, um bit extra deve alimentar o terminal DP (ponto decimal). O sistema implementado utiliza 4 displays, mas apenas um decodificador. Assim, a saída do decodificador alimenta simultaneamente os 4 displays, mas apenas um é selecionado de cada vez, com o uso de transistores conectados como mostrado na figura 4. Assim, além dos 4 bits de dados enviados para os displays, é necessário enviar mais 4 bits de comando para a seleção de cada display. A figura 7.3 mostra os pinos que devem ser utilizados para o envio de dados e de comando. Como a porta escolhida para o presente projeto é a porta P1, essa porta já é a escolhida na figura 7.3.
41 Projetos com Microcontroladores 41 g comum f a b g comum f a b g comum f a b g comum f a b a a a a f g b f g b f g b f g b e c e c e c e c d DP d DP d DP d DP e d c DP comum e d c DP comum e d c DP comum e d c DP comum Comandos Display 4 Display 3 Display 2 Display 1 Dados P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 Figura 7.3: Conjunto de displays de 7-segmentos e suas conexões É dado a seguir um programa-exemplo para ilustrar o uso dos displays de 7-segmentos, que estão conectados à Porta P1. Exemplo: É mostrada no display de 7-segmentos uma contagem decimal crescente de 0000 a O byte mais significativo da contagem é guardado em R1 e o byte menos significativo é guardado em R0. Cada dado é sempre enviado para o display através do nibble inferior da porta P1. $MOD51 4 CONTADOR EQU 07H ; VARIÁVEL "CONTADOR" EQUIVALE A REGISTRADOR 07H ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#2FH MOV R0,#00H MOV R1,#00H MOV CONTADOR,#10 VOLTA: LCALL CONTAGEM LCALL DISPLAY SJMP VOLTA ; PILHA ASSUME VALOR INICIAL DE 2FH ; REGISTRADOR R0 = 00H ; REGISTRADOR R1 = 00H ; CONTADOR ASSUME VALOR INICIAL 10 DECIMAL ; CHAMA SUBROTINA "CONTAGEM" ; CHAMA SUBROTINA "DISPLAY" ;============ SUBROTINA PARA MOSTRAR A CONTAGEM NO DISPLAY ================ DISPLAY: PUSH ACC ; ESTE PRIMEIRO BLOCO SEPARA O NIBBLE SUPERIOR MOV A,#0F0H ; DE R1 PARA MOSTRÁ-LO NO QUARTO DISPLAY ANL A,R1 ; INSTRUÇÃO QUE FAZ A SEPARAÇÃO DO NIBBLE SUPERIOR SWAP A ; INVERTE NIBBLE SUPERIOR COM INFERIOR ORL A,#80H ; JUNTA O DADO A SER MOSTRADO COM O COMANDO PARA O QUARTO DISPLAY MOV P1,A ; ENVIA "DADO + COMANDO" PARA A PORTA P1 LCALL ATRASO ; CHAMA SUBROTINA DE ATRASO MOV A,#0FH ; ESTE SEGUNDO BLOCO SEPARA O NIBBLE INFERIOR ANL A,R1 ; DE R1 PARA MOSTRÁ-LO NO TERCEIRO DISPLAY ORL A,#40H ; JUNTA O DADO A SER MOSTRADO COM O COMANDO PARA O 3 O DISPLAY MOV P1,A ; ENVIA "DADO + COMANDO" PARA A PORTA P1 LCALL ATRASO MOV A,#0F0H ; ESTE TERCEIRO BLOCO SEPARA O NIBBLE SUPERIOR ANL A,R0 ; DE R0 PARA MOSTRÁ-LO NO SEGUNDO DISPLAY SWAP A ; INVERTE NIBBLE SUPERIOR COM INFERIOR ORL A,#20H ; JUNTA O DADO A SER MOSTRADO COM O COMANDO PARA O SEGUNDO DISPLAY MOV P1,A ; ENVIA "DADO + COMANDO" PARA A PORTA P1 LCALL ATRASO MOV A,#0FH ANL A,R0 ORL A,#10H MOV P1,A LCALL ATRASO POP ACC ; ESTE ÚLTIMO BLOCO SEPARA O NIBBLE INFERIOR ; DE R0 PARA MOSTRÁ-LO NO PRIMEIRO DISPLAY ; JUNTA O DADO A SER MOSTRADO COM O COMANDO DO PRIMEIRO DISPLAY ; ENVIA "DADO + COMANDO" PARA A PORTA P1 DJNZ CONTADOR,DISPLAY; CONTADOR NECESSÁRIO PARA QUE A CONTAGEM SEJA MAIS LENTA MOV CONTADOR,#10
42 Projetos com Microcontroladores 42 ;=========== SUBROTINA DE ATRASO DE TEMPO ============ ATRASO:MOV R4,#10 REPETE:MOV R5,#100 DJNZ R5,$ DJNZ R4,REPETE ;=========== SUBROTINA PARA A CONTAGEM DECIMAL CRESCENTE ============== CONTAGEM: MOV A,R0 ; CARREGA ACUMULADOR COM VALOR ATUAL DO BYTE INFERIOR DA CONTAGEM ADD A,#01H ; INCREMENTA ACUMULADOR EM UMA UNIDADE DA A ; CORRIGE PARA DECIMAL O CONTEÚDO DE "A" MOV R0,A ; TRANSFERE PARA R0 VALOR ATUALIZADO DO BYTE INFERIOR DA CONTAGEM JNC PULA ; PULA NO CASO DE NÃO HAVER FLAG DE CARRY MOV A,R1 ; CARREGA ACUMULADOR COM VALOR ATUAL DO BYTE SUPERIOR DA CONTAGEM ADD A,#01H ; INCREMENTA ACUMULADOR EM 1, NO CASO DE CARRY NA ADIÇÃO ANTERIOR DA A ; CORRIGE PARA DECIMAL O CONTEÚDO DE "A" MOV R1,A ; TRANSFERE PARA R1 VALOR ATUALIZADO DO BYTE SUPERIOR DA CONTAGEM PULA: NOP END 7.3 Display LCD O display LCD usado no sistema implementado é de 2 linhas x 16 colunas. Essa informação é enviada na forma de comando para o LCD, numa rotina de inicialização necessária a cada vez que o LCD vai ser usado. Outras informações necessárias são: se o cursor vai ficar piscando, se a mensagem vai rolar para a esquerda ou para a direita, ou não vai rolar, se serão usados 4 ou 8 bits para os dados etc. O programa-exemplo a seguir mostra uma mensagem na primeira linha e uma contagem decimal crescente de 0000 a 9999 na segunda linha do LCD. São utilizados 8 bits para os dados e 3 bits de comando. No exemplo a porta P0 é usada para os dados e os pinos P2.4, P2.5 e P2.6 são usados para os comandos. A tabela 7.3 a seguir mostra as instruções mais comuns utilizadas no uso do LCD. Tabela 7.3: instruções mais comuns utilizadas para o display LCD DESCRIÇÃO MODO RS R/W Código (Hexa) Display Liga (sem cursor) 0 0 0C Desliga 0 0 0A/08 Limpa Display com Home cursor Controle do Cursor Liga 0 0 0E Desliga 0 0 0C Desloca para Esquerda Desloca para Direita Cursor Home Cursor Piscante 0 0 0D Cursor com Alternância 0 0 0F Sentido de deslocamento do cursor ao Para a esquerda entrar com caractere Para a direita Deslocamento da mensagem ao entrar Para a esquerda com caractere Para a direita Deslocamento da mensagem sem Para a esquerda entrada de caractere Para a direita 0 0 1C Endereço da primeira posição Primeira linha Segunda linha 0 0 C0 A tabela 7.4 mostra o endereço em decimal de cada posição do LCD de 16 colunas x 2 linhas.
43 Projetos com Microcontroladores 43 Tabela 7.4: Endereços em decimal do display LCD Colunas Linha Linha Exemplo: É mostrada no display LCD uma contagem decimal crescente de 0000 a O byte mais significativo da contagem é guardado em R1 e o byte menos significativo é guardado em R0. Cada um dos quatro dígitos da contagem é convertido para caractere ASCII e depois enviado para o LCD através da porta P0. $mod51 RS EQU P2.4 ; PINO DE DEFINIÇÃO: 0 => INSTRUÇÃO; 1 => DADO RW EQU P2.5 ; PINO PARA LEITURA/ESCRITA: 0 => ESCREVE NO LCD; 1 => LÊ DO LCD EN EQU P2.6 ; PINO PARA HABILITAÇÃO DO LCD: 0 => DESABILITA; 1 => HABILITA CONTADOR EQU 00H DADOS EQU P0 ; PORTA P0 RECEBE OS DADOS PARA O LCD ORG 00 JMP INICIO ORG 30H INICIO: MOV SP,#2FH MOV R7,#0FFH MOV R0,#00H ; VALOR INICIAL DO BYTE INFERIOR DA CONTAGEM MOV R1,#00H ; VALOR INICIAL DO BYTE SUPERIOR DA CONTAGEM LCALL INIT_LCD ; CHAMA SUBROTINA DE INICIALIZAÇÃO DO LCD LCALL CLEAR_LCD ; LIMPA LCD LCALL PRIMEIRALINHA ; CHAMA SUBROTINA PARA MOSTRAR MENSAGEM NA PRIMEIRA LINHA LCALL SEGUNDALINHA ; CHAMA SUBROTINA PARA MOSTRAR MENSAGEM NA SEGUNDA LINHA REPETE: LCALL CONTAGEM ; CHAMA SUBROTINA QUE UMA CONTAGEM DECIMAL CRESCENTE LCALL CONVERSAO4 ; CONVERTE O DÍGITO MAIS SIGNIFICATIVO PARA ASCII LCALL MOSTRAA4 ; MOSTRA O DÍGITO MAIS SIGNIFICATIVO NO LCD LCALL CONVERSAO3 ; CONVERTE O TERCEIRO DÍGITO PARA ASCII LCALL MOSTRAA3 ; MOSTRA O TERCEIRO DÍGITO NO LCD LCALL CONVERSAO2 ; CONVERTE O SEGUNDO DÍGITO PARA ASCII LCALL MOSTRAA2 ; MOSTRA O SEGUNDO DÍGITO NO LCD LCALL CONVERSAO1 ; CONVERTE O PRIMEIRO DÍGITO PARA ASCII LCALL MOSTRAA1 ; MOSTRA O PRIMEIRO DÍGITO NO LCD SJMP REPETE ;======================================================== ; SUBROTINA DE INICIALIZAÇÃO DO LCD ;======================================================== INIT_LCD: SETB EN ;EN = 1 => HABILITA LCD CLR RS ;RS = 0 => PREPARA PARA TRANSFERÊNCIA DE INSTRUÇÃO (NÃO DE DADOS) MOV DADOS,#38H;DATA = 38H => INSTRUÇÃO QUE INDICA LCD DE 16 COLUNAS X 2 LINHAS CLR EN ;EN = 0 => DESABILITA LCD LCALL WAIT_LCD ;CHAMA SUBROTINA DE ATRASO SETB EN CLR RS MOV DADOS,#38H CLR EN LCALL WAIT_LCD SETB EN CLR RS MOV DADOS,#0EH CLR EN LCALL WAIT_LCD ;EN = 1 => HABILITA LCD ;RS = 0 => PREPARA PARA TRANSFERÊNCIA DE INSTRUÇÃO ;INSTRUÇÃO QUE INDICA LCD DE 16 COLUNAS X 2 LINHAS ;EN = 0 => DESABILITA LCD ;CHAMA SUBROTINA DE ATRASO ;EN = 1 => HABILITA LCD ;RS = 0 => PREPARA PARA TRANSFERÊNCIA DE INSTRUÇÃO ;DATA = 0EH => INSTRUÇÃO PARA LIGAR O CURSOR ;EN = 0 => DESABILITA LCD ;CHAMA SUBROTINA DE ATRASO SETB EN CLR RS MOV DADOS,#06H CLR EN ;EN = 1 => HABILITA LCD ;RS = 0 => PREPARA PARA TRANSFERÊNCIA DE INSTRUÇÃO ;INSTRUÇÃO (04H + 02H) => DESLOCAR CURSOR DIREITA ;EN = 0 => DESABILITA LCD
44 Projetos com Microcontroladores 44 LCALL WAIT_LCD ;CHAMA SUBROTINA DE ATRASO ;=================================================================== ; SUBROTINA PARA LIMPAR O LCD ;=================================================================== CLEAR_LCD: SETB EN ;EN = 1 => HABILITA LCD CLR RS ;RS = 0 => PREPARA PARA TRANSFERÊNCIA DE INSTRUÇÃO MOV DADOS,#01H ;DADOS = 01 => INCTRUÇÃO PARA LIMPAR O DISPLAY CLR EN ;EN = 0 => DESABILITA LCD LCALL WAIT_LCD ;=================================================================== ; SUBROTINA PARA IMPRIMIR PRIMEIRA LINHA DE MENSAGENS NO LCD ;=================================================================== PRIMEIRALINHA: INC R7 MOV A,R7 MOV DPTR,#MENSAGEM ; DPTR RECEBE O ENDEREÇO DO PRÓXIMO CARACTERE A SER LIDO MOVC A,@A+DPTR ; TRANSFERE PARA ACUMULADOR CARACTERE A SER MOSTRADO NO LCD CJNE A,#0FFH,CONTINUA; TESTA SE CHEGOU NO FIM DA MENSAGEM CONTINUA: LCALL WRITE_TEXT LCALL WAIT_LCD SJMP PRIMEIRALINHA ;=================================================================== ; SUBROTINA PARA IMPRIMIR SEGUNDA LINHA DE MENSAGENS NO LCD ;=================================================================== SEGUNDALINHA: SETB EN CLR RS MOV DADOS,#192 CLR EN LCALL WAIT_LCD MOV R7,#0FFH ; EN = 1 => HABILITA LCD ; RS = 0 => PREPARA PARA TRANSFERÊNCIA DE INSTRUÇÃO ; ENVIA ENDEREÇO (192 = C0H) COMO INSTRUÇÃO ; EN = 0 => DESABILITA LCD ; CHAMA SUBROTINA DE ATRASO LOOP2: INC R7 ; INCREMENTA CONTADOR DOS CARACTERES A SEREM MOSTRADOS MOV A,R7 ; TRANSFERE CONTADOR PARA ACUMULADOR MOV DPTR,#MENSAGEM2 ; DPTR RECEBE O ENDEREÇO DO PRÓXIMO CARACTERE A SER LIDO MOVC A,@A+DPTR ; TRANSFERE PARA ACUMULADOR CARACTERE A SER MOSTRADO NO LCD CJNE A,#0FFH,CONTINUA2; TESTA SE CHEGOU NO FIM DA MENSAGEM CONTINUA2: LCALL WRITE_TEXT LCALL WAIT_LCD SJMP LOOP2 ; CHAMA SUBROTINA QUE ENVIA PARA O LCD O DADO A SER MOSTRADO ; CHAMA SUBROTINA DE ATRASO ;============================================================= ; SUBROTINA PARA FAZER A CONTAGEM DECIAM DE 0000 A 9999 ;============================================================= CONTAGEM: MOV A,R0 ; CARREGA ACUMULADOR COM VALOR ATUAL DO BYTE INFERIOR DA CONTAGEM ADD A,#01H ; INCREMENTA ACUMULADOR EM UMA UNIDADE DA A ; CORRIGE PARA DECIMAL O CONTEÚDO DE "A" MOV R0,A ; TRANSFERE PARA R0 VALOR ATUALIZADO DO BYTE INFERIOR DA CONTAGEM JNC PULA ; PULA NO CASO DE NÃO HAVER FLAG DE CARRY MOV A,R1 ; CARREGA ACUMULADOR COM VALOR ATUAL DO BYTE SUPERIOR DA CONTAGEM ADD A,#01H ; INCREMENTA A EM UMA UNIDADE, SE CARRY=1 NA ADIÇÃO ANTERIOR DA A ; CORRIGE PARA DECIMAL O CONTEÚDO DE "A" PULA: NOP MOV R1,A ; TRANSFERE PARA R1 VALOR ATUALIZADO DO BYTE SUPERIOR DA CONTAGEM
45 Projetos com Microcontroladores 45 ;============================================================= ; SUBROTINA DE CONVERSAO DE HEXADECIMAL PARA ASCII ;============================================================= CONVERSAO4: MOV A,#0F0H ; PREPARA ACUMULADOR PARA SEPARAR NIBBLE SUPERIOR DE R1 ANL A,R1 ; FAZ A SEPARAÇÃO DO NIBBLE SUPERIOR DE R1 SWAP A ; INVERTE NIBBLE SUPERIOR COM INFERIOR ORL A,#30H ; JUNTA 30H + R1 --> CONVERTE NIBBLE SUPERIOR DE R1 PARA ASCII ;============================================================= ; SUBROTINA DE CONVERSAO DE HEXADECIMAL PARA ASCII ;============================================================= CONVERSAO3: MOV A,#0FH ; PREPARA ACUMULADOR PARA SEPARAR NIBBLE INFERIOR DE R1 ANL A,R1 ; FAZ A SEPARAÇÃO DO NIBBLE INFERIOR DE R1 ORL A,#30H ; JUNTA 30H + R1 --> CONVERTE NIBBLE INFERIOR DE R1 PARA ASCII ;============================================================= ; SUBROTINA DE CONVERSAO DE HEXADECIMAL PARA ASCII ;============================================================= CONVERSAO2: MOV A,#0F0H ; PREPARA ACUMULADOR PARA SEPARAR NIBBLE SUPERIOR DE R0 ANL A,R0 ; FAZ A SEPARAÇÃO DO NIBBLE SUPERIOR DE R0 SWAP A ; INVERTE NIBBLE SUPERIOR COM INFERIOR ORL A,#30H ; JUNTA 30H + R0 --> CONVERTE NIBBLE SUPERIOR DE R0 PARA ASCII ;============================================================= ; SUBROTINA DE CONVERSAO DE HEXADECIMAL PARA ASCII ;============================================================= CONVERSAO1: MOV A,#0FH ; PREPARA ACUMULADOR PARA SEPARAR NIBBLE INFERIOR DE R0 ANL A,R0 ; FAZ A SEPARAÇÃO DO NIBBLE INFERIOR DE R0 ORL A,#30H ; JUNTA 30H + R0 --> CONVERTE NIBBLE INFERIOR DE R0 PARA ASCII ;=================================================================== ; SUBROTINAS PARA MOSTRAR O CONTEÚDO DO ACUMULADOR NO LCD ;=================================================================== MOSTRAA4: PUSH ACC SETB EN CLR RS MOV DADOS,#202 CLR EN LCALL WAIT_LCD POP ACC LCALL WRITE_TEXT MOSTRAA3: LCALL WRITE_TEXT MOSTRAA2: LCALL WRITE_TEXT MOSTRAA1: LCALL WRITE_TEXT LCALL ATRASO LCALL ATRASO LCALL ATRASO ; SUBROTINA PARA MOSTRAR PRIMEIRO DÍGITO NO LCD ; GUARDA NA PILHA CONTEÚDO DE A (DADO A SER MOSTRADO) ; HABILITA LCD ; PREPARA PARA TRANSFERÊNCIA DE INSTRUÇÃO (NÃO DE DADOS) ; ENVIA PARA O LCD O ENDEREÇO DO PRÓXIMO DADO ; DESABILITA LCD ; CHAMA SUBROTINA DE ATRASO ; RECUPERA DA PILHA CONTEÚDO DO ACUMULADOR ; CHAMA SUBROTINA QUE MOSTRA CONTEÚDO DE A NO LCD ; SUBROTINA PARA MOSTRAR SEGUNDO DÍGITO NO LCD ; CHAMA SUBROTINA QUE MOSTRA CONTEÚDO DE A NO LCD ; SUBROTINA PARA MOSTRAR TERCEIRO DÍGITO NO LCD ; CHAMA SUBROTINA QUE MOSTRA CONTEÚDO DE A NO LCD ; SUBROTINA PARA MOSTRAR PRIMEIRO DÍGITO NO LCD ; CHAMA SUBROTINA QUE MOSTRA CONTEÚDO DE A NO LCD ; SUBROTINAS DE ATRASO, ANTES DE VOLTAR PARA A CONTAGEM ;==================================================================== ; SUBROTINA PARA ESCREVER TEXTOS NO LCD ;====================================================================
46 Projetos com Microcontroladores 46 WRITE_TEXT: SETB EN SETB RS MOV DADOS,A CLR EN LCALL WAIT_LCD ;EN = 1 => HABILITA LCD ;RS = 1 => PREPARA PARA TRANSFERÊNCIA DE DADOS ;DADOS RECEBE O CONTEÚDO DE A ;EN = 0 => DESABILITA LCD ; ========================================================================= ; SUBROTINA DE ATRASO DE TEMPO, BASEADA NA VERIFICAÇÃO DO ESTADO DO LCD. ; LIBERA PARA NOVA OPERAÇÃO QUANDO O LCD ESTIVER LIVRE ;========================================================================== WAIT_LCD: SETB EN ;EN = 1 => HABILITA LCD CLR RS ;RS = 0 => PREPARA PARA TRANSFERÊNCIA DE INSTRUÇÃO SETB RW ;RW = 1 => É COMANDO DE LEITURA DO LCD MOV DADOS,#0FFH ;SETA TODOS OS PINO PARA FF, INICIALMENTE MOV A,DADOS ;LÊ O VALOR DE ORNO JB ACC.7,WAIT_LCD ;SE O BIT 7 ESTIVER ALTO, O LCD AINDA ESTÁ OCUPADO CLR EN ;EN = 0 => DESABILITA LCD CLR RW ;RW = 0 => ENCERRA COMANDO DE LEITURA. PREPARA PARA ESCRITA ; ================================================================== ; SUBROTINA DE ATRASO DE TEMPO, BASEADA EM REGISTRADORES ; TEMPO APROXIMADO DE 200 MS ;=================================================================== ATRASO:MOV R5,#200 VOLTA: MOV R6,#250 DJNZ R6,$ DJNZ R5,VOLTA MENSAGEM: DB 'MICROPROCESSADOR',0FFH MENSAGEM2: DB 'CONTAGEM: ',0FFH FIM: NOP END 7.4 Sensores de Presença A plataforma implementada usa dois tipos de fotosensores: um com nível lógico normalmente alto e outro com nível lógico normalmente baixo. Os dois modelos são mostrados na figura 7.4. O primeiro tipo foi montado com um circuito auxiliar modulador que diminui a influência da luz ambiente sobre o fotosensor. Esse circuito emite uma luz de cerca de 1 khz, que ao ser refletida satura o fototransistor. É utilizado o decodificador de freqüência NE567. O segundo modelo não usa circuito modulador. (a) (b) Figura 7.4: Sensor de presença com circuito auxiliar modulador e sem circuito modulador
47 Projetos com Microcontroladores 47 A diferença básica entre os sensores usados, além do circuito de modulação, está no encapsulamento. Em um deles (Figura 7.4a) o encapsulamento faz com que o fototransistor fique normalmente cortado (sem presença de luz); ele entra em saturação quando a luz do LED é refletida em um obstáculo. Assim, o sinal de saída V o passa de nível lógico alto para baixo, na presença de um obstáculo. (a) (b) Figura 7.5: (a) fototransistor normalmente cortado e (b) fototransistor normalmente saturado No outro tipo de encapsulamento (Figura 7.4b) a luz do LED incide diretamente sobre o fototransistor, fazendo com que ele fique normalmente saturado, ou seja, o sinal de saída V o fica inicialmente em nível lógico baixo; na presença de um obstáculo entre os dois componentes o fototransistor é levado ao corte e o sinal de saída vai para o nível lógico alto. 7.5 Medição de Velocidade O processo de medição de velocidade implementado na plataforma é digital. Um sensor do tipo apresentado na figura 7.5(b) é associado a uma roda com 60 furos (figura 7.6) e usado para medir a velocidade. A figura 7.7 mostra o esquema adotado. O sinal resultante do fotosensor, com a rotação da roda de 60 furos, é uma onda quadrada (figura 7.7). Esse sinal é conectado ao pino da interrupção zero do sistema mínimo e definido para ativar por transição (na passagem de nível lógico 1 para 0). A cada interrupção o registrador com o número atualizado de pulsos é incrementado em 1.. Figura 7.6: conjunto roda de 60 furos e fotosensor Figura 7.7: Sinal de saída do sensor de velocidade
48 Projetos com Microcontroladores 48 A medição de velocidade é feita estabelecendo-se um tempo de amostragem, ou seja, um tempo fixo em que o registro de pulsos é lido. Mostra-se a seguir que o fato de ter 60 furos na roda faz com que o número de pulsos registrados seja correspondente à velocidade em rotações por minuto (rpm), desde que o tempo de amostragem adotado seja 1 segundo. 1 rotação/segundo 60 furos/segundo 1 rotação/segundo 60 rotações/minuto 60 rpm 60 furos/s x rpm x furo/s Um tempo de amostragem menor que 1 segundo pode ser adotado, e é aconselhável em muitas aplicações. Sendo assim, deve-se fazer a devida transformação de número de furos lidos no tempo de amostragem para rotações por minuto.
49 Projetos com Microcontroladores 49 8 Acionamentos Elétricos 8.1 Motores de Corrente Contínua O motor de corrente contínua menor usa uma ponte H (mostrada na figura 8.1) que já vem na pastilha L298N. A chave simples é uma forma simplificada de representar a chave semicondutora (transistor), que trabalha na região saturada (chave fechada) ou cortada (chave aberta). Essa ponte permite a operação do motor de corrente contínua nos dois sentidos. O sentido de rotação é definido pelos dois pinos de controle (In1 e In2), conforme tabela 5. O controle de velocidade do motor pode ser feito alternando o estado (alto/baixo) de um dos pinos de forma que a razão entre o tempo em estado alto e o tempo em estado baixo define a velocidade. Os pinos usados na plataforma implementada são P2.1 e P2.2. Figura 8.1: esquema da ponte H nos dois sentidos de rotação Tabela 8.1: Pinos de controle da ponte H Pino 1 Pino 2 Efeito 0 0 Motor parado 0 1 Gira no sentido direto 1 0 Gira no sentido reverso 1 1 Motor parado O diagrama de blocos do driver L298N é mostrado na figura 9.2. Ele possui duas pontes H. Figura 8.2: Diagrama de blocos parcial do L298N
50 Projetos com Microcontroladores 50 É interessante notar que as chaves do mesmo ramo são acionadas com lógicas complementares, ou seja, o sinal para a chave inferior é o complemento do sinal da chave superior. Dessa forma não é possível acionar simultaneamente as duas chaves do mesmo ramo, o que resultaria num curto-circuito. É importante observar também que os diodos são fundamentais para o retorno da corrente, quando qualquer uma das chaves é desligada. No momento de desligamento das chaves, há energia armazenada nas indutâncias do motor; sem os diodos as chaves poderiam ser danificadas por sobretensão. O motor de corrente contínua maior usa também uma ponte H. No entanto, por questões econômicas e aproveitamento de componentes existentes, essa ponte foi montada com uma combinação de dois relés e um MOSFET, conforme mostrado na figura 8.3. Esse motor usa dois pinos de seleção de direção (P2.4 e P2.5), do mesmo modo que na tabela 8.1 e um terceiro pino (P2.3) que, em estado alto liga o motor e em estado baixo, desliga. Assim, esse terceiro pino pode ser usado para controlar a velocidade, do mesmo modo que foi explicado para o motor menor, ou seja, o tempo de período ligado/período desligado define a velocidade do motor. Observar que nessa montagem somente o MOSFET deve ser usado para o chaveamento que permite o controle de velocidade. Os relés devem ser usados apenas para a inversão de velocidade, de preferência com o motor parado. Observar que, quando P2.4 e P2.5 estão em nível lógico baixo, as chaves dos relés ficam na posição normalmente fechada (NF) e o motor permanece parado. Quando P2.4 passa para o nível lógico alto, a chave controlada por T1 muda de estado, conectando um dos terminais do motor à tensão da fonte (24 V), fazendo com que ele gire. No caso de P2.4 permanecer em zero e P2.5 ser comutado para nível alto, o motor gira no sentido contrário. Se P2.4 e P2.5 forem simultaneamente comutadas para nível lógico alto, os dois terminais do motor ficam conectados em 24 V e o motor permanece parado. Figura 8.3: Esquema para o acionamento do motor de corrente contínua grande O programa-exemplo dado a seguir foi feito para o motor menor. Ele permite aumentar a velocidade através da interrupção zero e diminuir através da interrupção 1. O temporizador zero é usado no modo 2 (recarga automática) para gerar um sinal de período constante, mas cujo intervalo de tempo em nível alto e baixo é alterado pelas interrupções. $MOD51 SAIDA0 EQU P2.1 ; BIT 1 DE P2 PARA ACIONAR O MOTOR SAIDA1 EQU P2.2 ; BIT 2 DE P2 PARA ACIONAR O MOTOR LIGADO BIT 00H ; FLAG QUE INDICA MOTOR LIGADO TON EQU 03H ; PERIODO LIGADO TOFF EQU 04H ; PERIODO DESLIGADO
51 Projetos com Microcontroladores 51 ORG 00H LJMP INICIO ORG 03H LJMP AUMENTA_SPEED ORG 0BH LJMP ATENDE_TEMP0 ORG 13H LJMP DIMINUI_SPEED ; INTERRUPÇÃO INT0 AUMENTA VELOCIDADE ; INTERRUPÇÃO TEMP0 CONTROLA VELOCIDADE ; INTERRUPÇÃO INT1 DIMINUI VELOCIDADE ORG 30H INICIO:MOV SP,#2FH MOV IE,#87H ; HABILITA INT0, INT1 E TEMP0 MOV TCON,#05H ; INT0 E INT1 SÃO POR TRANSIÇÃO MOV IP,#02H ; FAZ TEMP0 COM PRIORIDADE 1 MOV TMOD,#02H ; TEMP0 NO MODO 2 COM RECARGA MOV TON, #01H ; PERIODO LIGADO TON = 01H CLR SAIDA0 ; DESLIGA MOTOR CLR SAIDA1 ; DESLIGA MOTOR CLR LIGADO ; LIMPA FLAG QUE INDICA MOTOR LIGADO/DESLIGADO MOV TL0,TON ; TL0 = PERIODO LIGADO MOV A,TON ; FAZ A = PERIODO LIGADO CPL A ; ACHA PERIODO DESLIGADO MOV TH0,A ; TH0 = PERIODO DESLIGADO SETB TR0 SJMP $ ; INICIA TEMPORIZADOR TEMP0 A PARTIR DE TON ; LAÇO DE ESPERA INFINITO. O TEMPORIZADOR SÓ SAI DO ; LAÇO NO FINAL DE CADA CONTAGEM, QUANDO TF0=1. ; === SUBROTINA PARA CONTROLAR O FUNCIONAMENTO DO MOTOR === ATENDE_TEMP0: JB LIGADO, DESLIGA SETB SAIDA0 SETB LIGADO MOV TH0,TON I DESLIGA: CLR SAIDA0 CLR LIGADO MOV TH0,TOFF I ; SE MOTOR ESTÁ LIGADO DESLIGA ; LIGA MOTOR, QUE ESTAVA DESLIGADO ; SETA FLAG QUE INDICA MOTOR LIGADO ; TH0 = PERIODO LIGADO. VALOR DE RECARGA ; MOTOR É DESLIGADO ; LIMPA FLAG QUE INDICA MOTOR LIGADO ; FAZ A = PERIODO DESLIGADO ; ====== SUBROTINA PARA AUMENTAR A VELOCIDADE ====== AUMENTA_SPEED: CLR EX0 ; DESABILITA INT0 CLR CY ; LIMPA FLAG DE CARRY MOV A,TON ; FAZ A = PERIODO LIGADO ADD A,#0AH ; FAZ A = A + 10; JNC PULA ; SE CY = 0 ENTAO PULA MOV A,#0FEH ; FAZ A = FEH, SE CY = 1 PULA: MOV TON,A ; FAZ PERIODO LIGADO = A CPL A ; ENCONTRA PERÍODO DESLIGADO MOV TOFF,A ; DEFINE PERÍODO DESLIGADO SETB EX0 ; REABILITA INT0 I ; ======= SUBROTINA PARA DIMINUIR A VELOCIDADE ====== DIMINUI_SPEED: CLR EX1 ; DESABILITA INT1 CLR CY ; LIMPA FLAG DE CARRY MOV A,TOFF ; FAZ A = PERIODO DESLIGADO ADD A,#0AH ; FAZ A = A + 10; JNC PULA2 ; SE CY = 0 ENTAO PULA MOV A,#0FEH ; FAZ A = FEH, SE CY = 1 PULA2: MOV TOFF,A ; FAZ PERIODO DESLIGADO = A
52 Projetos com Microcontroladores 52 END CPL A MOV TON,A SETB EX1 I ; ENCONTRA PERÍODO LIGADO ; DEFINE PERÍODO LIGADO ; REABILITA INT1 8.2 Motor de Passo O motor de passo consiste de um estator contendo bobinas que são acionadas usando corrente contínua e um rotor de ímã permanente, que gira a cada mudança das bobinas acionadas. Embora nas figuras a seguir as quatro bobinas sejam mostradas como únicas (concentradas), na prática elas são distribuídas ao longo do estator. Assim, pode-se obter um passo bem pequeno entre um pedaço de bobina e outro. O ângulo de passo típico de um motor de passo é 1,8 o. As figuras a seguir ilustram, de maneira simplificada, o funcionamento de um motor de passo. Observe que, na figura, uma volta completa do motor é alcançada após percorrer todas as bobinas uma vez. Na prática, uma volta completa é conseguida após uma passagem por todas as partes de cada bobina. Se cada passo for de 1,8 o, uma volta completa é alcançada com 200 passos. Na figura 8.4 são mostrados os transistores usados no acionamento e as bobinas concentradas. A tabela 6 mostra os comandos que devem ser enviados para a porta de saída (P0 no caso implementado) de forma que o motor de passo gire de meio em meio passo e com passo completo. Figura 8.4: Esquema que ilustra um motor de passo Tabela 8.2: comandos para meio passo e passo completo Passo T0 T1 T2 T3 HEX Passo T0 T1 T2 T3 HEX A A A A
53 Projetos com Microcontroladores 53 O circuito da figura 8.4 é o circuito típico utilizado no acionamento de motor de passo, entretanto, há pastilhas integradas que são também utilizadas para essa função. Na plataforma implementada foi utilizado o CI ULN2004A para acionamento dos motores de passo. A estrutura interna desse componente é mostrada na figura 8.5. Trata-se de um conjunto de transistores do tipo darlington, com capacidade de corrente de 500 ma. Cada uma das 4 bobinas do motor é ligada ao terminal comum (COM), que é conectado ao Vcc, e a uma das saída (OUT). Figura 8.5: Esquemático do driver ULN2004 Para ilustrar o funcionamento do motor de passo são apresentados a seguir três exemplos: Exemplo 1: Esse exemplo utiliza os sensores de presença para inverter o sentido de rotação do motor de passo. Os sensores de presença estão conectados aos pinos P3.0 e P3.1. Exemplo 2: Esse exemplo usa a interrupção 1, que está sendo usada pelo teclado, para inverter o sentido de rotação do motor de passo. Assim, a qualquer tecla pressionada, o motor de passo inverte o sentido de rotação. Exemplo 3: Nesse exemplo é utilizado o motor de passo da esteira. Os sensores das extremidades são usados para inversão do sentido de rotação do motor de passo. Observar que esses sensores estão normalmente em nível lógico baixo, ao contrário dos sensores do exemplo 1. Exemplo 1: Neste exemplo um motor de passo é acionado nos dois sentidos de rotação. Um sensor de presença no pino P3.0 define o sentido direto e um sensor no pino P3.1 define o sentido inverso. $MOD51 SENTIDO BIT 00H SENSOR1 EQU P3.0 SENSOR2 EQU P3.1 ORG 00H LJMP INICIO ORG 30H INICIO:MOV SP,#2FH CLR SENTIDO ; COMEÇA COM "SENTIDO = 0" COMECO:MOV A,#00H DECIDE:JB SENSOR1,OUTRO ; SE SENSOR1 DETECTAR PRESENÇA CLR SENTIDO ; FAZ BIT DE SENTIDO = 0 OUTRO: JB SENSOR2,VAI ; SE SENSOR2 DETECTAR PRESENÇA SETB SENTIDO ; FAZ BIT DE SENTIDO = 1
54 Projetos com Microcontroladores 54 VAI: JB SENTIDO,INVERSO ; VERIFICA BIT DE SENTIDO. SE FOR 1, VAI PARA "INVERSO" MOV DPTR,#DIO ; SE SENTIDO=0 --> LÊ TABELA "DIO" SJMP FRENTE INVERSO: MOV DPTR,#REVERSO ; SE SENTIDO=1 --> LÊ TABELA "REVERSO" FRENTE:PUSH ACC ; GUARDA CONTAGEM DE "A" NA PILHA. "A" VARIA DE 0 A 4 MOVC A,@A+DPTR ; CARREGA "A" COM VALOR DA TABELA "DIO" OU "REVERSO" CJNE A,#0FFH,PULA ; VERIFICA SE O VALOR DA TABELA JÁ É O ÚLTIMO "FFH" POP ACC ; RECUPERA DA PILHA A CONTAGEM QUE ESTÁ EM "A" SJMP COMECO ; VOLTA PARA O COMEÇO PARA REINICIAR CONTAGEM EM "A" PULA: MOV P2,A ; TRANSFERE PARA A PORTA P2 O CONTEÚDO DE "A" LCALL ATRASO ; CHAMA A SUBROTINA DE ATRASO QUE DEFINE A VELOCIDADE POP ACC ; RECUPERA DA PILHA A CONTAGEM QUE ESTÁ EM "A" INC A ; INCREMENTA O VALOR DE "A" SJMP DECIDE ; VOLTA PARA O PONTO DA LEITURA DOS SENSORES ;=================================================================================== ; SUBROTINA DE ATRASO DE TEMPO QUE DEFINE A VELOCIDADE DE ROTAÇÃO DO MOTOR DE PASSO ;=================================================================================== ATRASO:MOV R0,#3FH VOLTA: MOV R1,#3FH DJNZ R1,$ DJNZ R0,VOLTA ;=================================================================================== ; TABELA PARA A ROTAÇÃO DO MOTOR DE PASSO NO SENTIDO DIO ;=================================================================================== DIO: DB 0AH DB 06H DB 05H DB 09H DB 0FFH ;=================================================================================== ; TABELA PARA A ROTAÇÃO DO MOTOR DE PASSO NO SENTIDO REVERSO ;=================================================================================== REVERSO: DB 09H DB 05H DB 06H DB 0AH DB 0FFH END EXEMPLO 2: NESTE EXEMPLO UM MOTOR DE PASSO É ACIONADO NOS DOIS SENTIDOS DE ROTAÇÃO. UM SENSOR DE PRESENÇA NO PINO P3.3 (INTERRUPÇÃO 1) É USADO PARA INVERTER O SENTIDO DE ROTAÇÃO DO MOTOR. $MOD51 SENTIDO BIT 00H ORG 00H LJMP INICIO ORG 13H CPL SENTIDO I ; COMPLEMENTA BIT DE SENTIDO ORG 30H INICIO:MOV SP,#2FH MOV IE,#84H ; HABILITA INTERRUPÇÃO UM MOV TCON,#04H ; INTERRUPÇÃO UM É POR TRANSIÇÃO DE 1 PARA 0
55 Projetos com Microcontroladores 55 CLR SENTIDO ; LIMPA FLAG DE SENTIDO COMECO:MOV A,#00H ; INICIA COM A = 0 DECIDE:JB SENTIDO,INVERSO ; VERIFICA FLAG DE SENTIDO. SE FOR 1, É SENTIDO INVERSO MOV DPTR,#DIO ; SE SENTIDO=0, É SENTIDO DIO SJMP FRENTE ; VAI PARA A ROTINA DE LEITURA DA TABELA INVERSO: MOV DPTR,#REVERSO ; SE SENTIDO=1, É SENTIDO INVERSO FRENTE:PUSH ACC MOVC A,@A+DPTR CJNE A,#0FFH,PULA POP ACC SJMP COMECO PULA: MOV P0,A LCALL ATRASO POP ACC INC A SJMP DECIDE ; GUARDA CONTAGEM QUE ESTÁ EM "A" ; CARREGA EM "A" CONTEÚDO DA TABELA ; VERIFICA SE VALOR LIDO DA TABELA É FFH ; RECUPERA CONTAGEM QUE ESTÁ EM "A", QUANDO TERMINA TABELA ; VOLTA PARA O COMEÇO, QUANDO A TABELA TERMINA ; TRANSFERE PARA P2 CONTEÚDO LIDO DA TABELA ; CHAMA ATRASO QUE DEFINE VELOCIDADE DE ROTAÇÃO ; RECUPERA CONTAGEM DE "A" ; INCREMENTA CONTAGEM PARA LEITURA PRÓXIMO VALOR DA TABELA ; VOLTA PARA "DECIDE" ;====== SUBROTINA DE ATRASO DE TEMPO QUE DEFINE VELOCIDADE DO MOTOR DE PASSO ========= ATRASO:MOV R0,#3FH VOLTA: MOV R1,#3FH DJNZ R1,$ DJNZ R0,VOLTA ;====== TABELA PARA ROTAÇÃO NO SENTIDO DIO ============ DIO: DB DB DB DB DB 0AH 06H 05H 09H 0FFH ; ====== TABELA PARA ROTAÇÃO NO SENTIDO REVERSO =========== REVERSO: DB DB DB DB DB 09H 05H 06H 0AH 0FFH END Exemplo 3: Neste exemplo um motor de passo adaptado a um carro de impressora é acionado. Dois sensores, adaptados nas extremidades do carro são usados para inverter o sentido de rotação do motor. $MOD51 SENTIDO BIT 00H SENSOR1 EQU P2.7 ; SENSOR DA EXTREMIDADE ESQUERDA SENSOR2 EQU P2.6 ; SENSOR DA EXTREMIDADE DIREITA ORG 00H LJMP INICIO ORG 30H INICIO:MOV SP,#2FH CLR SENTIDO ; COMEÇA COM "SENTIDO = 0" COMECO:MOV A,#00H DECIDE:JNB SENSOR1,OUTRO ; SE SENSOR1 DETECTAR PRESENÇA
56 Projetos com Microcontroladores 56 CLR SENTIDO ; FAZ BIT DE SENTIDO = 0 OUTRO: JNB SENSOR2,VAI ; SE SENSOR2 DETECTAR PRESENÇA SETB SENTIDO ; FAZ BIT DE SENTIDO = 1 VAI: JB SENTIDO,INVERSO ; VERIFICA BIT DE SENTIDO. SE FOR 1, VAI PARA "INVERSO" MOV DPTR,#DIO ; SE SENTIDO=0 --> LÊ TABELA "DIO" SJMP FRENTE INVERSO: MOV DPTR,#REVERSO ; SE SENTIDO=1 --> LÊ TABELA "REVERSO" FRENTE:PUSH ACC ; GUARDA CONTAGEM DE "A" NA PILHA. "A" VARIA DE 0 A 4 MOVC A,@A+DPTR ; CARREGA "A" COM VALOR DA TABELA "DIO" OU "REVERSO" CJNE A,#0FFH,PULA ; VERIFICA SE O VALOR DA TABELA JÁ É O ÚLTIMO "FFH" POP ACC ; RECUPERA DA PILHA A CONTAGEM QUE ESTÁ EM "A" SJMP COMECO ; VOLTA PARA O COMEÇO PARA REINICIAR CONTAGEM EM "A" PULA: MOV P2,A ; TRANSFERE PARA A PORTA P2 O CONTEÚDO DE "A" LCALL ATRASO ; CHAMA A SUBROTINA DE ATRASO QUE DEFINE A VELOCIDADE POP ACC ; RECUPERA DA PILHA A CONTAGEM QUE ESTÁ EM "A" INC A ; INCREMENTA O VALOR DE "A" SJMP DECIDE ; VOLTA PARA O PONTO DA LEITURA DOS SENSORES ;=================================================================================== ; SUBROTINA DE ATRASO DE TEMPO QUE DEFINE A VELOCIDADE DE ROTAÇÃO DO MOTOR DE PASSO ;=================================================================================== ATRASO:MOV R0,#3FH VOLTA: MOV R1,#03FH DJNZ R1,$ DJNZ R0,VOLTA ;=================================================================================== ; TABELA PARA A ROTAÇÃO DO MOTOR DE PASSO NO SENTIDO DIO ;=================================================================================== DIO: DB 0AH DB 06H DB 05H DB 09H DB 0FFH ;=================================================================================== ; TABELA PARA A ROTAÇÃO DO MOTOR DE PASSO NO SENTIDO REVERSO ;=================================================================================== REVERSO: DB 09H DB 05H DB 06H DB 0AH DB 0FFH END 8.3 Lâmpada Incandescente É necessário apenas um bit para o controle da lâmpada. No entanto, deve-se observar que a lâmpada está ligada no contato normalmente fechado. Assim, ao ser ligado o interruptor, a lâmpada acende. Em outras palavras, o sinal baixo de P2.0 é que acende a lâmpada; sinal alto faz com que ela apague. Essa lógica foi invertida com relação à versão anterior porque todos os bits das portas do microcontrolador ficam normalmente alto e deseja-se que lâmpada fique apagada no início de cada projeto. É utilizada uma lâmpada de 20 W / 220V e um relé para o circuito de acionamento, como mostrado na figura 8.6.
57 Projetos com Microcontroladores 57 Figura 8.6 Acionamento de uma lâmpada incandescente ;======================================================================= ; LÂMPADA INCANDESCENTE ; O programa-exemplo acende e apaga a lâmpada incandescente em ; intervalos de tempo regulares através do bit P2.0 ;Um contador é usado juntamente com o temporizador 0 para contar o tempo ;======================================================================= $MOD51 CONTADOR EQU 07H ; VARIÁVEL "CONTADOR" EQUIVALE A REGISTRADOR 07H LAMPADA BIT P2.0 ; BIT USADO PARA LIGAR/DESLIGAR A LÂMPADA ORG 00H LJMP INICIO ORG 0BH LJMP TEMP ORG 30H INICIO: MOV SP,#2FH ; PILHA ASSUME VALOR INICIAL DE 2FH MOV TMOD,#01H ; SELECIONA O MODO 1 DO TEMPORIZADOR ZERO MOV IE,#82H ; HABILITA INTERRUPÇÃO DO TEMPORIZADOR ZERO MOV CONTADOR,#200 ; CONTADOR ASSUME VALOR INICIAL 100 DECIMAL SETB TR0 ; INICIA TEMPORIZADOR ZERO SJMP $ ; LAÇO INFINITO TEMP: PULA: DJNZ CONTADOR,PULA CPL LAMPADA MOV CONTADOR,#200 CLR TF0 I END
58 Projetos com Microcontroladores 58 9 Comunicação Serial 9.1 Noções Básicas de Comunicação Serial A comunicação serial consiste em enviar ou receber pacotes de informação bit a bit. No caso do 8051 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. Na comunicação serial síncrona, são utilizados dois canais: um para transmitir os dados e outro para transmitir um sinal de sincronismo. O transmissor, portanto, é o responsável pela sincronização. A cada sinal de sincronismo recebido o receptor lê o canal de dados. No caso do 8051 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.1) é usado para o sinal de sincronismo. Na transmissão serial síncrona via MODEM, que não é o caso tratado aqui, a informação de sincronismo é enviada junto com os dados. Para isso existem técnicas especiais de codificação, que não são tratadas nesta apostila. Na comunicação assíncrona não há um 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 da transmissão deve ser enviado Um bit de fim de transmissão deve ser enviado Assim, um pacote de informações pode ser ilustrado como a seguir: Figura 9.1: Pacote de informações na comunicação serial Observe que 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, é
59 Projetos com Microcontroladores 59 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 especificada. Observe ainda que, 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. Assim, se houver erro na transmissão que implique na alteração da paridade, esse bit extra detecta o erro. A verificação de erros através do bit de paridade não detecta erro quando há inversão, por exemplo, de dois bits de dados. Assim, normalmente são utilizados outros métodos de verificação de erros, principalmente quando a informação é constituída de vários bytes. São utilizados ainda os chamados protocolos de comunicação, que garantirão uma transmissão serial mais segura. Um método utilizado para detecção de erros na transmissão de vários bytes é o método do checksum, onde o complemento de 2 da soma dos dados é acrescentada ao pacote de informações. Assim, na recepção, o processador adiciona todos os bytes e verifica se o resultado é zero. Caso não seja, houve um erro na transmissão. Veja a exemplificação abaixo: No projeto de irrigação desenvolvido na EEEC/UFG dois pacotes de informação são utilizados: no primeiro pacote cada byte de dados (pressão numa tubulação de água) do transmissor 1 é enviado juntamente com seu complementar. O primeiro byte é um byte que indica início dos dados (foi escolhido o byte 13h) e o último byte indica fim do pacote (foi escolhido o byte 01h). O segundo pacote de informações é composto pelos dados do transmissor 1 e os dados do transmissor 2. Para o byte de início foi escolhido o byte 17h e o byte de fim escolhido foi o byte 01h. Novamente o complemento dos dados é enviado. Na recepção os dados são verificados. Se for detectado erro de transmissão, os dados são enviados novamente. É necessário destacar outro ponto da comunicação serial: normalmente a comunicação serial entre dois dispositivos se dá usando o padrão ASCII. Um exemplo é o display de cristal líquido (LCD). Para mostrar o número 1 no display LCD deve-se enviar seu código ASCII, ou seja, 31h. Da mesma forma, na comunicação entre o computador e o 8051, o código ASCII é utilizado. A tabela ASCII é mostrada a seguir.
60 Projetos com Microcontroladores 60 Tabela 9.1: Códigos ASCII Tabela 9.2: Registrador de Controle da Comunicação Serial (SCON) = SM0 SM1 SM2 REN TB8 RB8 TI RI SM0 SM1 Modo Descrição Baud Rate Registrador de Deslocamento f osc./ UART de 8 bits variável UART de 9 bits f osc./64 ou f osc./ UART de 9 bits variável Símbolo Nome e Significado SM2 Habilita a característica de comunicação de multiprocessadores no modo 2 e 3. Nesses modos, se SM2=1, RI não será ativado se o nono bit de dado recebido for igual a 0. No modo 1, se SM2=1, RI não será ativado se um stop bit válido não for recebido. No modo 0, deverá ser 0. REN Bit habitador da recepção serial. Setado/limpado por software para habilitar ou desabilitar a recepção serial. TB8 É o nono bit de dado que será transmitido no modo 2 e 3. Setado ou limpado por software. RB8 No modo 2 e 3, é o nono bit de dado que foi recebido. No modo 1, se SM2=0, RB8 é o stop bit que foi recebido. No modo 0, RB8 não é usado. TI É o flag de interrupção de transmissão. Setado por hardware no final do tempo do 8 bit no modo 0 ou no início do stop bit em outros modos, em qualquer transmissão serial. Deverá ser limpado por software. RI É o flag de interrupção de recepção. Setado por hardware no final do tempo do 8 bit no modo 0 ou na metade do tempo do stop bit em outros modos, em qualquer recepção serial. Deverá ser limpado por software.
61 Projetos com Microcontroladores 61 O canal serial do 8051 pode operar em 4 modos diferentes, definidos através do registrador especial SCON (mostrado na tabela 9.2), cujos bits podem ser manipulados individualmente. O modo 0 é uma comunicação síncrona. Os demais modos são do tipo assíncrono. Modo 0: Taxa de transmissão fixa e igual à freqüência de clock dividida por 12. A recepção tem início com REN = 1 e RI = 0. Ao final da recepção o bit RI é setado por hardware e o conteúdo recebido é transferido para um registrador denominado por SBUF. RI deve ser ressetado antes da próxima recepção. A transmissão é iniciada automaticamente quando o conteúdo do acumulador é transferido para o SBUF. Quanto ao registrador SBUF da transmissão, embora tenha o mesmo nome do registrador da recepção, trata-se de um outro registrador específico para a transmissão. Ao final da transmissão o bit TI é setado por hardware. TI deve ser ressetado antes da próxima transmissão. Modo 1: Comunicação assíncrona com taxa de transmissão a ser definida pelo usuário. São transmitidos 8 bits de dados, além de um bit de início e um bit de fim. A recepção tem início quando há uma transição do nível lógico 1 para 0 no pino RxD (pino P3.0) e o bit RI está zerado. Ao final da recepção o RI é setado por hardware. A transmissão é iniciada quando há uma transferência de dados para SBUF. Ao final da transmissão o bit TI é setado. Modo 2: Modo assíncrono onde 11 bits são transmitidos (bit de início + 9 bits de dados + bit de fim). A taxa de transmissão/recepção pode ser 1/32 ou 1/64 da freqüência de clock. A recepção tem início quando há uma transição do nível lógico 1 para 0 no pino RxD (pino P3.0) e o bit RI está zerado. Ao final da recepção o bit RI é setado por hardware. O nono bit de dados é guardado em RB8. Esse bit pode ser o bit de paridade. A transmissão é iniciada quando há uma transferência de dados para SBUF. Ao final da transmissão o bit TI é setado. O nono bit a ser transmitido é guardado em TB8. Esse bit pode ser o bit de paridade. Expressão que define a taxa de transmissão no modo 2. Baud rate = 2 SMOD * f osc 64 ( bits / s) Se o bit SMOD for zero, a taxa é 1/64, caso seja igual a 1, a taxa é 1/32. Modo 3: É semelhante ao modo 1; a diferença está no bit a mais de dados no modo 3. Tanto no modo 1 quanto no modo 3 a taxa de transmissão é definida pelo usuário, seguindo a equação a seguir: Baud rate = 2 32 SMOD f osc * ( bits / s) 12*(256 TH1) Nesses dois modos (1 e 3) o temporizador 1 deve ser configurado para operar no modo de recarga automática (modo 2). O valor da recarga (TH1), juntamente com o bit SMOD, é que define a freqüência de comunicação (transmissão e recepção). A tabela a seguir fornece alguns dos valores mais comuns de taxa de transmissão.
62 Projetos com Microcontroladores 62 Tabela 9.3: Taxas de transmissão mais comuns Timer 1 Baud Rate (bits/seg) Freq. Osc. (MHz) SMOD C/Tbarra Modo Valor Recar. Modo 0 Máx: 1MHz 12 X X X X Modo 2 Máx: 375K 12 1 X X X Modo 1, 3: 62,5K FFh 19,2K 11, FDh 9,6K 11, FDh 4,8K 11, FAh 2,4K 11, F4h 1.2K 11, E8h 137,5 11, Dh h FEEBh 9.2 Roteiros de Programas usando Comunicação Serial Montar em Laboratório 1. No programa a seguir a porta serial é configurada no modo 0 e usada para transmitir uma contagem crescente, que é simultaneamente mostrada no display de 7-segmentos. Usar o osciloscópio para observar e interpretar os sinais de saída nos pinos P3.0 (RxD) e P3.1 (TxD). Congele as ondas na tela do osciloscópio, num instante qualquer da contagem, e esboçe os dois sinais. Anote o tempo total correspondente aos 8 bits. RÓTULO INSTRUÇÃO RÓTULO INSTRUÇÃO $MOD51 MOSTRAP1: CLR TI MOV CONTADOR,#200 CONTADOR EQU 07H ESPERA: MOV A,#0F0H ANL A,R0 ORG 00H SWAP A LJMP INICIO ORL A,#20H MOV P1,A ORG 30H LCALL ATRASO INICIO: MOV SP,#2FH MOV R0,#00H MOV A,#0FH LOOP: MOV SBUF,R0 ANL A,R0 JNB TI,$ ORL A,#10H LCALL MOSTRAP1 MOV P1,A MOV A,R0 LCALL ATRASO ADD A,#01 DJNZ CONTADOR,ESPERA DA A MOV R0,A ATRASO: MOV R4,#10 SJMP LOOP REPETE: MOV R5,#100 DJNZ R5,$ DJNZ R4,REPETE END
63 Projetos com Microcontroladores 63 Formas de onda do canal serial 2. O programa a seguir é equivalente ao anterior, mas utiliza o modo 1 da comunicação serial com baud rate de 9600 bps. Uma vez que o cristal oscilador da plataforma é de 11,059 MHz, da Tabela 2 tem um valor de recarga TH1 = FDH, para o temporizador 1 no modo 2 (recarga automática). Desenhe a forma de onda observada no osciloscópio para um valor qualquer da contagem. Anote o tempo total correspondente aos 8 bits de dados. RÓTULO INSTRUÇÃO RÓTULO INSTRUÇÃO $MOD51 SERIAL: CLR TI MOV CONTADOR,#200 CONTADOR EQU 07H ESPERA: MOV A,#0F0H ANL A,R0 ORG 00H SWAP A LJMP INICIO ORL A,#20H MOV P1,A ORG 30H LCALL ATRASO INICIO: MOV SP,#2FH MOV SCON,#40H MOV A,#0FH MOV TMOD,#20H ANL A,R0 MOV TL1,#0FDH ORL A,#10H MOV TH1,#0FDH MOV P1,A MOV R0,#00H LCALL ATRASO SETB TR1 DJNZ CONTADOR,ESPERA LOOP: MOV SBUF,R0 JNB TI,$ LCALL SERIAL ATRASO: MOV R4,#10 MOV A,R0 REPETE: MOV R5,#100 ADD A,#01 DJNZ R5,$ DA A DJNZ R4,REPETE MOV R0,A SJMP LOOP END
64 Projetos com Microcontroladores 64 Formas de onda do canal serial 3. No programa a seguir o microcontrolador recebe dados via serial no modo 1, com taxa de recepção de 4800 bps, usando interrupção. O dado recebido é mostrado no display de 7-segmentos. Uma vez que o cristal oscilador da plataforma é de 11,059 MHz, da Tabela 2 tem-se o valor de recarga TH1 = FAH, para o temporizador 1 no modo 2 (recarga automática). Use o HyperTerminal do microcomputador, configurado para 4800 bps e 8 bits de dados. Digite dados no hyperterminal e observe o resultado no display de 7-segmentos e no osciloscópio. Registre a onda observada no osciloscópio. Observar que os dados que chegam ao microcontrolador são os caracteres ASCII dos dados digitados no HyperTerminal. Exemplo: Digitando 4, chega 34 no microcontrolador. Formas de onda do canal serial
65 Projetos com Microcontroladores 65 RÓTULO INSTRUÇÃO RÓTULO INSTRUÇÃO $MOD51 SERIAL: CLR RI MOV R0,SBUF ORG 00H I LJMP INICIO DISPLAY: MOV A,#0F0H ORG 23H ANL A,R0 LJMP SERIAL SWAP A ORL A,#20H ORG 30H MOV P1,A INICIO: MOV SP,#2FH LCALL ATRASO MOV SCON,#40H MOV IE,#90H MOV A,#0FH MOV TMOD,#20H ANL A,R0 MOV TL1,#0FAH ORL A,#10H MOV TH1,#0FAH MOV P1,A MOV R0,#00H LCALL ATRASO SETB TR1 SETB REN MOSTRA: LCALL DISPLAY ATRASO: MOV R4,#10 SJMP MOSTRA REPETE: MOV R5,#100 DJNZ R5,$ DJNZ R4,REPETE END Meça o tempo correspondente a 1 bit de dados recebidos (a partir da medida do tempo correspondente aos 8 bits). Tempo total medido: Período de 1 bit: Mude os registradores TL1 e TH1 de modo a resultar numa baud rate de 2400 bps. Faça a mesma mudança no HyperTerminal e registre o tempo correspondente a 1 bit dos dados recebidos. Tempo total medido: Período de 1 bit: 4. Volte ao programa do item 3, mude o baud rate do HyperTerminal para 9600 bps e observe no computador a contagem enviada pelo microcontrolador. Observações: 1. A conexão serial entre o microcontrolador 8051 e um computador exige um componente para adaptação dos níveis de tensão. Enquanto no microcontrolador tensão zero representa nível lógico 0 e tensão de 5 V representa o nível lógico 1, no computador é diferente. No computador o nível lógico 0 é representado por uma tensão de + 12 V e o nível lógico 1 é representado por uma tensão de 12 V. Essa adaptação entre os níveis de tensão é conseguida com o componente MAX O cabo de conexão entre o microcontrolador e o PC, para o caso da plataforma, deve ser do tipo invertido, conforme mostra o diagrama a seguir.
66 Projetos com Microcontroladores Sensores, Transdutores e Condicionamento de Sinais 10.1 Introdução Sensor é um dispositivo que detecta uma mudança em uma propriedade física e a transforma em um sinal que pode ser medido. Alguns metais, a platina, por exemplo, são usados como sensor de temperatura pela propriedade de variar sua resistência de forma linear com a temperatura. Transdutor é um dispositivo que converte um sinal de entrada em um sinal de saída de outra forma, por exemplo, sinal elétrico. Um exemplo é o transdutor de corrente de efeito Hall, que converte um sinal de corrente em um sinal de tensão proporcional. Normalmente a faixa de variação do sinal de saída deve ser adaptada para corresponder à faixa de variação permitida pelo componente que processa esse sinal (conversor AD, por exemplo). Pode ainda ser necessária a eliminação de sinais indesejáveis (ruídos) do sinal principal. A esse processo de adaptação do sinal dá-se o nome de condicionamento de sinal. Nas subseções seguintes alguns transdutores são abordados e um circuito de condicionamento de sinal é sugerido Sensor de Temperatura LM35 O circuito integrado sensor de temperatura LM35, mostrado na figura 10.1, apresenta uma saída linear com a temperatura em graus centígrados, conforme figura (a) (b) Figura 10.1: Configurações para o sensor de temperatura (a) (b) Figura 10.2: Corrente quiescente do sensor temperatura
67 Projetos com Microcontroladores 67 A faixa de variação de temperatura na configuração mostrada em (a) é de 2 ºC a 150 ºC e em (b) é de 55ºC a 150ºC. A razão entre a tensão de saída e a temperatura é 10 mv/ºc. Figura 10.3: Circuito para conversão da temperatura de sinal analógico para digital A figura 10.3 é um circuito, extraído do datasheet do LM35, para detecção da temperatura, condicionamento do sinal de temperatura e conversão de sinal analógico para digital, através do conversor AD O condicionamento do sinal de saída do sensor é feito ajustando a tensão de referência do conversor AD para 0,64 V, uma vez que a tensão de saída do sensor é pequena. Assim, para uma tensão de entrada de 0,64 V, tem-se uma saída digital FF h (fundo de escala). O sinal INTR pode ser usado para o pedido de interrupção de um microcontrolador que pode ser usado para processar a temperatura Transdutor de Corrente de Efeito Hall LP55A O efeito Hall é ilustrado na figura Consiste na separação de cargas em uma barra percorrida por corrente e imersa em um campo magnético. Como conseqüência surge uma força eletromotriz na direção perpendicular à corrente e ao campo magnético. Figura 10.4: Efeito Hall A força que atua na separação das cargas é o resultado da interação entre o campo magnético B e os portadores de carga, que se deslocam com velocidade v. Essa força, magnética, é dada pela expressão a seguir.
68 Projetos com Microcontroladores 68 r r r F = q v B A separação das cargas resulta em uma força contrária, de natureza elétrica, que estabelece o equilíbrio do sistema. r r r r r F e = F m qe = q v B E = vb A força eletromotriz entre as extremidades da barra percorrida por corrente é proporcional à densidade de fluxo magnético que atravessa a barra. Dessa forma, sendo constante a distância d entre as extremidades e a velocidade v dos portadores de carga, a fem é um retrato da densidade de fluxo magnético, como ilustram as figuras 10.5 e fem = Ed = vdb Figura 10.5: Princípio de funcionamento do transdutor de efeito Hall Na figura 10.6 tem-se uma realimentação do sinal de saída e pode-se escrever a relação entre a corrente de saída e de entrada como: N I = N P P S I S Figura 10.6: Transdutor de corrente de efeito Hall Sendo N P = 1 (número de espiras do primário) e N S = 1000 (número de espiras do secundário), tem-se:
69 Projetos com Microcontroladores 69 N P 1 I S = I P = I P N S 1000 Assim, para cada 1 A de corrente primária, tem-se 1 ma de corrente secundária. O resistor R M é usado para converter o sinal de corrente em sinal de tensão, que pode ser convertido para sinal digital através de um conversor AD, como mostrado na figura 10.7, retirada do datasheet do ADC Nessa aplicação a corrente primária máxima prevista é de 10 A e, portanto, foram utilizadas 5 espiras no primário para que toda a faixa de entrada do transdutor (0 a 50 A) seja utilizada. Sendo R M = 100 ohms, tem-se uma saída de 0,5 V/A. Nesse caso, para uma corrente de entrada de 10 A tem-se uma saída de 5 V e, portanto, o conversor AD, cuja tensão nominal é de 5 V pode ter uma tensão de referência também de 5 V. 0,5 V/A 100 O V IN (+) Figura 10.7: Uso do conversor AD para digitalizar o sinal de corrente Na aplicação descrita os pinos CS\ e RD\ do AD podem ser conectados ao pino de terra, de forma que a pastilha do conversor fique o tempo todo habilitada e no modo de leitura. O pino INTR\ do AD pode ser conectado ao pino de interrupção zero (INT0 = P3.2). Assim, o trecho de programa a seguir pode ser usado para a leitura do AD, com interrupção, e mostrado no display. RÓTULO INSTRUÇÃO RÓTULO INSTRUÇÃO $MOD51 DISPLAY: MOV A,#0F0H ANL A,R0 ORG 00H SWAP A LJMP INICIO ORL A,#20H MOV P1,A ORG 03H LCALL ATRASO LJMP LEITURA MOV A,#0FH ORG 30H ANL A,R0 INICIO: MOV SP,#2FH ORL A,#10H MOV IE,#81H MOV P1,A MOV TCON,#01H LCALL ATRASO MOV R0,#00 MOSTRA: LCALL DISPLAY SJMP MOSTRA ATRASO: MOV R4,#10 REPETE: MOV R5,#100 LEITURA: MOV R0,P2 DJNZ R5,$ I DJNZ R4,REPETE END
70 Projetos com Microcontroladores Bibliografia 1. SILVA JÚNIOR, Vidal Pereira da, "Aplicações Práticas do Microcontrolador 8051," Érica, São Paulo, YERALAN, Sencer e AHLUWALIA, Ashutosh, "Programming and Interfacing the 8051 Microcontroller," Addison Wesley, Reading, FLEURY, Cláudio A. e BARBACENA, Ilton L., Microcontrolador 8051, Goiânia, Março MACKENZIE, I. Scott, The 8051 Microcontroller, Prentice Hall, New Jersey, GIMENEZ, Salvador P., Microcontrolador 8051, Prentice Hall, NICOLOSI, Denys E. C., Microcontrolador 8051 Detalhado, Érica, São Paulo, 2000.
Laboratório de Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação Universidade Federal de Goiás Laboratório de Microprocessadores e Microcontroladores Experimento 4: Temporizadores e Motor de Passo Alunos: Matrícula:
Microprocessadores e Microcontroladores. Prova Substitutiva Uma Solução
Prova Substitutiva Uma Solução Aluno: Matrícula: Uso de Interrupções e do Temporizador 1. Faça um programa (usando o assembly do 8051) para acionamento de um motor de corrente contínua, com as seguintes
Oprojeto apresenta três níveis de dificuldade: fácil, médio e difícil. No modo fácil tem-se uma
Jogo de Memória (Memorex v. 3.0) José Wilson Lima Nerys Universidade Federal de Goiás [email protected] Abstract No presente projeto uma sequência de Leds é criada pelo microcontrolador, e deve ser repetida
Microprocessadores e Microcontroladores Parte 3. Expansão de Memória Mapeamento de Memória
Microprocessadores e Microcontroladores Parte 3 Expansão de Memória José Wilson Lima Nerys www.eee.ufg.br/ jwilson 2013 Um microcontrolador padrão da família 8051 possui normalmente uma memória de programa
EXPERIÊNCIA 17 USO DO TEMPORIZADOR INTERNO
EXPERIÊNCIA 17 USO DO TEMPORIZADOR INTERNO Parte I Fundamentos Teóricos O que diferencia um microcontrolador (como o 8051) de um microprocessador é o fato de que o primeiro pode apresentar, integrados
Aplicações de Microprocessadores I. Prof. Adilson Gonzaga
Aplicações de Microprocessadores I Prof. Adilson Gonzaga Exercício -1 Fazer um programa em Assembly do 8051 que informe a temperatura de um forno. O programa deve enviar inicialmente um String em ASCII
ULA Sinais de Controle enviados pela UC
Solução - Exercícios Processadores 1- Qual as funções da Unidade Aritmética e Lógica (ULA)? A ULA é o dispositivo da CPU que executa operações tais como: Adição Subtração Multiplicação Divisão Incremento
Aula 10 Microcontrolador Intel 8051 Parte 2
SEL 0415 Aula 10 Microcontrolador Intel 8051 Parte 2 SEL 0415 INTROD À ORGANIZAÇÃO DE COMPUTADORES Prof Dr Marcelo A C Vieira SEL 415 Mapeamento das memórias internas Memória de dados interna (RAM) n 8051
Arquitetura de Computadores. Tipos de Instruções
Arquitetura de Computadores Tipos de Instruções Tipos de instruções Instruções de movimento de dados Operações diádicas Operações monádicas Instruções de comparação e desvio condicional Instruções de chamada
LABORATÓRIO DE MICROPROCESSADORES E MICROCONTROLADORES
Escola de Engenharia Elétrica e de Computação Universidade Federal de Goiás LABORATÓRIO DE MICROPROCESSADORES E MICROCONTROLADORES Prof. Dr. José Wilson Lima Nerys Goiânia, 1º semestre de 2012 Laboratório
MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 UMA SOLUCAO POSSÍVEL
MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 UMA SOLUCAO POSSÍVEL Aluno: Matrícula: 1. Escreva as instruções necessárias para atender a cada uma das configurações solicitadas. Valor: 2,0 (a) Interrupção
CONSTRUÇÃO DE UMA UCP HIPOTÉTICA M++ INTRODUÇÃO
CONSTRUÇÃO DE UMA UCP HIPOTÉTICA M++ INTRODUÇÃO O seguinte artigo apresenta uma UCP hipotética construída no software simulador DEMOWARE Digital Works 3.04.39. A UCP (Unidade Central de Processamento)
Laboratório de Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação Universidade Federal de Goiás Laboratório de Microprocessadores e Microcontroladores Experimento 2: Interrupções Externas e Relés Alunos: Matrícula:
Laboratório de Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação Universidade Federal de Goiás Laboratório de Microprocessadores e Microcontroladores Experimento 3: Temporizadores e Display LCD Alunos: Matrícula:
Laboratório de Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação Universidade Federal de Goiás Laboratório de Microprocessadores e Microcontroladores Experimento 3: Temporizadores e Display LCD Alunos: Matrícula:
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 Aluno: Matrícula: UMA SOLUÇÃO POSSÍVEL Obs.: Todas as questões têm valor 2,0. Boa prova e Feliz Natal e Ano Novo!!!! 1. Escreva um pequeno, em assembly do
MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 (Tema: Microcontrolador 8051) Resposta Esperada
MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 (Tema: Microcontrolador 8051) Resposta Esperada 1. Tema: programação geral do microcontrolador 8051. Valor: 2,5 A Tabela 1 mostra um programa, em linguagem
MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 Resposta Esperada
MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 Aluno: Matrícula: 1. Na figura a seguir 8 Leds são conectados à porta P1 e 8 à porta P2. Valor: 2,5 Faça um programa em assembly do 8051 em que as interrupções
Estrutura de um Computador
SEL-0415 Introdução à Organização de Computadores Estrutura de um Computador Aula 7 Prof. Dr. Marcelo Andrade da Costa Vieira MODELO DE VON NEUMANN PRINCÍPIOS A arquitetura de um computador consiste de
EXERCÍCIOS RESOLVIDOS
EXERCÍCIOS RESOLVIDOS Modos de endereçamento direto ; inclui no programa assembly o arquivo (REG51.inc) ORG 0000H ; o programa inicia na linha 0000H da EPROM MOV A,#01010101B ; carrego no ACC por binário
Laboratório de Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação Universidade Federal de Goiás Laboratório de Microprocessadores e Microcontroladores Experimento 2: Interrupções Externas e Relés Alunos: Matrícula:
7. PROGRAMANDO O MICROCONTROLADOR. Microcontroladores - Prof: Demantova
7. PROGRAMANDO O MICROCONTROLADOR 1 7. PROGRAMANDO O MICROCONTROLADOR: Hardware parte física do circuito eletrônico CPU onde está localizado o microcontrolador. Dentro do microcontrolador existe um conjunto
Laboratório de Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação Universidade Federal de Goiás Laboratório de Microprocessadores e Microcontroladores Experimento 4: Motor de Passo e Display LCD Alunos: Matrícula:
CONJUNTO DE INSTRUÇÕES
CONJUNTO DE INSTRUÇÕES Rn - Registrador R0 R7 do banco de registradores selecionado. direto - 8-bits de endereço da posição da RAM de dados Podem ser referentes tanto à RAM interna (0 7F) como ao espaço
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
SEL-433 APLICAÇÕES DE MICROPROCESSADORES I Temporização da CPU Todos os Microcontroladores da família MCS-51 têm um oscilador interno. Para uso deste oscilador deve-se conectar um cristal entre os pinos
Laboratório de Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação Universidade Federal de Goiás Laboratório de Microprocessadores e Microcontroladores Experimento 1 Introdução ao Microcontrolador 8051 Alunos: Matrícula:
MICROPROCESSADORES E MICROCONTROLADORES. Prova 1 Resposta Esperada
MICROPROCESSADORES E MICROCONTROLADORES Prova 1 Resposta Esperada 1. Tema: Conceitos Gerais Valor: 1,0 Os microcontroladores da família 8051 possuem arquitetura CISC, e os microcontroladores da família
Laboratório de Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação Universidade Federal de Goiás Laboratório de Microprocessadores e Microcontroladores Experimento 1 Introdução ao Microcontrolador 8051 Alunos: Matrícula:
CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA
8 CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA A porta paralela, também conhecida por printer port ou Centronics e a porta serial (RS-232) são interfaces bastante comuns que, apesar de estarem praticamente
Sistemas Microprocessados. sato<at>utfpr<dot>edu<dot>br
Sistemas Microprocessados satoutfpredubr http://pessoal.utfpr.edu.br/sato/ Assembly do 805 satoutfpredubr Sobre o material Essas transparências foram baseadas em materiais elaborados
MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 - RESPOSTA ESPERADA
MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 - RESPOSTA ESPERADA 1. Escreva as instruções para as configurações pedidas. Valor: 2,0 a) Habilita as interrupções externas zero e um e a interrupção do
Prof. Adilson Gonzaga
Prof. Adilson Gonzaga Temporização da CPU Todos os Microcontroladores da família MCS-51 têm um oscilador interno. Para uso deste oscilador deve-se conectar um cristal entre os pinos Xtal1 e Xtal2 da CPU.
Dispositivos de Entrada e Saída
SEL-0415 Introdução à Organização de Computadores Dispositivos de Entrada e Saída Aula 9 Prof. Dr. Marcelo Andrade da Costa Vieira ENTRADA e SAÍDA (E/S) (I/O - Input/Output) n Inserção dos dados (programa)
Ambiente de desenvolvimento de Programação Assembly MCU 8051 IDE
SEL-433 APLICAÇÕES DE MICROPROCESSADORES I Prof. Evandro L. L. Rodrigues Ambiente de desenvolvimento de Programação Assembly MCU 8051 IDE http://mcu8051ide.sourceforge.net/ Tela inicial Criar novo projeto:
MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 - Uma Solução Possível
Parte 3 Parte 1 Parte 2 Goiânia, 5 de junho de 2014. MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 - Uma Solução Possível 1. Suponha um sistema com um conjunto de 8 LEDs conectados à porta P1 e duas
MICROCONTROLADOR 8051
MICROCONTROLADOR 8051 Notas de Aula (v.2014) Prof. André R. Hirakawa Prof. Paulo S. Cugnasca Prof. Carlos E. Cugnasca ARQUITETURA 8051 APLICAÇÕES MAIS FREQUENTES SISTEMAS COMPACTOS: MEMÓRIAS ROM / RAM
USJT Universidade São Judas Tadeu ENGENHARIA ELÉTRICA - LAB. INTEGRADO. EXP4 : Interrupções do uc 8051
USJT Universidade São Judas Tadeu ENGENHARIA ELÉTRICA - LAB. INTEGRADO EXP4 : Interrupções do uc 8051 Prof. Vladimir Chvojka Jr Eng. Elétrica- Lab. Integrado - uc 8051 - Prof. Vladimir Chvojka Jr Exp4:
PIC16F628a. Pinagem do PIC16F628a:
PIC16F628a O PIC16F628a é um microcontrolador fabricado pela Microchip Technology (www.microchip.com), com as seguintes características: - composto de 18 pinos; - possui somente 35 instruções no seu microcódigo;
UTFPR Departamento Acadêmico de Eletrônica Curso Técnico em Eletrônica Microcontroladores 1 - Prof. Cion nov/2010 (atualizado em jul 2015)
UTFPR Departamento Acadêmico de Eletrônica Curso Técnico em Eletrônica Microcontroladores 1 - Prof. Cion nov/2010 (atualizado em jul 2015) Interrupção e Contadores/Temporizadores Este texto apresenta uma
CEFET-SP. Microcontroladores Família MCS-51 Conceitos, Aplicações e Projetos versão 6.0 2004 Wilson Ruiz. Wilson Ruiz
CEFET-SP Microcontroladores Família MCS-51 Conceitos, Aplicações e Projetos versão 6.0 2004 Wilson Ruiz Harpia harpyja Harpia ou Águia Real Brasil 1 CAPÍTULO 1: HARDWARE DOS MICROCONTROLADORES DA FAMÍLIA
Interrupções. As interrupções são casos especiais de chamadas de procedimentos.
Interrupções Uma interrupção é equivalente a uma chamada de procedimento. A chamada é equivalente a um CALL gerado pela execução de uma instrução. As interrupções são casos especiais de chamadas de procedimentos.
O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware
1 2 Revisão de Hardware 2.1 Hardware O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware 2.1.1 Processador O Processador
Interrupção. Prof. Adilson Gonzaga
Interrupção Prof. Adilson Gonzaga Estrutura de Programação Assembly Programa Principal Chamada de Sub-rotina1 Programa Principal Chamada de Sub-rotina2 Sub-rotina1 Subrotina2 Programa Principal Chamada
Laboratório de Sistemas Processadores e Periféricos Lista de comandos de Assembly
Laboratório de Sistemas Processadores e Periféricos Lista de comandos de Assembly Gustavo G. Parma Lista dos comandos assembly que serão utilizados ao longo das práticas. 1 Comandos 1. ADD destino, fonte
ORGANIZAÇÃO DE MEMÓRIA NO 8051: Microcontroladores - Prof: Demantova 1
ORGANIZAÇÃO DE MEMÓRIA NO 8051: 1 8. ORGANIZAÇÃO DE MEMÓRIA NO 8051: 00H 0000H BANCOS DE REGISTROS 00H 7FH 80H RAM INTERNA REGISTROS ESPECIAIS REGISTROS ENDEREÇÁVEIS POR BIT RAM DE USO GERAL 1FH 20H 2FH
Microprocessadores. Organização de Memória
Microprocessadores Organização de Memória Prof. Clayrton Henrique rev. 01 fev. 2016 Roteiro Introdução; RAM Interna; Parte de Dados; Parte de SFR; Registradores; Assembly; Referências... 2 Introdução RAM
Memória de Dados Interna. Memória de Dados Interna
Memória de Dados Interna Memória de Dados Interna - faixa de endereço endereçável diretamente: 00 a 7F hexadecimal. - faixa de endereço endereçável indiretamente: 00 a FF hexadecimal. - espaço endereçável
Programação de Microprocessadores. Programação de Microprocessadores SEL-433 APLICAÇÕES DE MICROPROCESSADORES I
SEL-433 APLICAÇÕES DE MICROPROCESSADORES I Programação de Microprocessadores Microprocessadores são Máquinas de Estado Seqüenciais Síncronas que operam mediante a execução de uma seqüência de códigos binários
www.vwsolucoes.com Copyright 2011 VW Soluções
1 Apresentação O adaptador ADP.v01 é utilizado para facilitar a instalação de display Lcd 16x2 ou display Lcd 20x4 nos CLP PIC28 ou CLP PIC40 através de um flat cable de 10vias de acordo com a necessidade
Programação de Robótica: Modo Circuitos Programados - Avançado -
Programação de Robótica: Modo Circuitos Programados - Avançado - 1 Programação de Robótica: Modo Circuitos Programados - Avançado ATENÇÃO Lembramos que você poderá consultar o Manual de Referência do Software
Temporização Interrupções. Prof: Evandro L. L. Rodrigues. Rotinas de Atraso
Temporização Interrupções Prof: Evandro L. L. Rodrigues Rotinas de Atraso Temporização da CPU Todos os Microcontroladores da família MCS-51 têm um oscilador interno. Para uso deste oscilador deve-se conectar
Sistemas Embarcados:
Sistemas Embarcados: Microcontroladores Prof. Protásio Laboratório de Microengenharia/DEE/CEAR/UFPB Programação Assembly 8051 Programação Assembly Ferramentas de simulação MCU 8051 IDE v1.4.7 An open source
MICROCONTROLADORES FAMÍLIA 8031/8051
MANUAL MICROCONTROLADORES FAMÍLIA 8031/8051 PROF. EDSON PEDRO FERLIN CURITIBA, PR ABRIL 2004 Sumário CAPÍTULO 1 INTRODUÇÃO... 3 CAPÍTULO 2 VISÃO GERAL... 4 1.1) Características de Hardware... 6 1.1) Pinagem
mov R1,10H ; Carrega o dado do endereço 10H em R1 mov R1,#10H ; Carrega 10H em R1
--------------------------------------------------------------- Programa: primeiro.asm Move dado da acumulador para o registro B e vice-versa. Autor: Vargas Data:16:52 16/02/01 ---------------------------------------------------------------
ARQUITETURA DE COMPUTADORES - 1866
7 Unidade Central de Processamento (UCP): O processador é o componente vital do sistema de computação, responsável pela realização das operações de processamento e de controle, durante a execução de um
Programação Básica em STEP 7 Operações Binárias. SITRAIN Training for Automation and Drives. Página 6-1
Conteúdo Página Operações Lógicas Binárias: AND, OR...2 Operações Lógicas Binárias: OR Exclusivo (XOR)...3 Contatos Normalmente Abertos e Normalmente Fechados. Sensores e Símbolos... 4 Exercício...5 Resultado
1. CAPÍTULO COMPUTADORES
1. CAPÍTULO COMPUTADORES 1.1. Computadores Denomina-se computador uma máquina capaz de executar variados tipos de tratamento automático de informações ou processamento de dados. Os primeiros eram capazes
As 5 partes fundamentais. Linguagem de Programação Pinagem Características Elétricas Ambiente de Desenvolvimento Integrado - IDE
SEL-433 APLICAÇÕES DE MICROPROCESSADORES I Como conhecer/estudar um Microprocessador/Microcontrolador As 5 partes fundamentais Programação de Microprocessadores Prof: Evandro L. L. Rodrigues Arquitetura
SEL-614 MICROPROCESSADORES E APLICAÇÕES. Adilson Gonzaga
SEL-614 MICROPROCESSADORES E APLICAÇÕES Prof: Adilson Gonzaga HISTÓRICO Microprocessador Circuito integrado ( chip ) capaz de executar instruções. 1971 Intel Corporation lançou no mercado o microprocessador
ENTRADA E SAÍDA DE DADOS
ENTRADA E SAÍDA DE DADOS Os dispositivos de um computador compartilham uma única via de comunicação BARRAMENTO. BARRAMENTO Elétrica/Mecânica + Protocolo. GERENCIAMENTO DE E/S O controle da troca de dados
DIAGRAMA DE BLOCOS DE UM MICROCONTROLADOR
DIAGRAMA DE BLOCOS DE UM MICROCONTROLADOR BARRAMENTO [BUS] DE ENDEREÇOS UNIDAD CENTRAL DE PROCESO C.P.U INTERFACE SERIE UNIDADE DE CONTROLE U.L.A REGITRADORES TIMERS ROM RAM PORTAS E/S [I/O] BUS DE DADOS
Ocircuito da Fig.1 é usado para o acionamento dos Leds do Cubo.
Cubo de Leds José Wilson Lima Nerys Universidade Federal de Goiás [email protected] Abstract Esse projeto é um bom exemplo de uso das instruções setb e clr do 8051. Elas são usadas para ativar e desativar
EEC2104 Microprocessadores
EEC2104 Microprocessadores Edição 2005/2006 Contadores / Temporizadores Contadores/temporizadores em geral... Hardware para contagem de impulsos Externos Internos (derivados do relógio interno) Contagem
Controladores Lógicos Programáveis CLP (parte-3)
Controladores Lógicos Programáveis CLP (parte-3) Mapeamento de memória Na CPU (Unidade Central de Processamento) de um CLP, todas a informações do processo são armazenadas na memória. Essas informações
Laboratório de Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação Universidade Federal de Goiás Laboratório de Microprocessadores e Microcontroladores Experimento 2: Teclado e Rotação de LEDs Alunos: Matrícula:
Prof. Adilson Gonzaga
Microprocessadores são Máquinas de Estado Seqüenciais Síncronas que operam mediante a execução de uma seqüência de códigos binários armazenados em memória. Prof. Adilson Gonzaga 1 As ordens ou comandos
Sistemas Computacionais II Professor Frederico Sauer
Sistemas Computacionais II Professor Frederico Sauer Livro-texto: Introdução à Organização de Computadores 4ª edição Mário A. Monteiro Livros Técnicos e Científicos Editora. Atenção: Este material não
Microcontroladores Família MCS51
Microcontroladores Família MCS51 Colégio Técnico de Campinas COTUCA Disciplina TDM II- Departamento Eletroeletrônica 1- Conceitos Básicos Um sistema computador é constituído por três blocos de base ligados
Acetatos de apoio às aulas teóricas
Microprocessadores e Aplicações Acetatos de apoio às aulas teóricas Ana Cristina Lopes Dep. Engenharia Electrotécnica http://orion.ipt.pt [email protected] Ana Cristina Lopes, 24 de Outubro de 2004 Microprocessadores
1. SINTAXE DA LINGUAGEM ASSEMBLY
1. SINTAXE DA LINGUAGEM ASSEMBLY Antes de se escrever em assembly, é conveniente construir um fluxograma do programa. Um fluxograma não faz referência à linguagem a utilizar, pelo que pode ser utilizado
4.3. Máquina de estados: São utilizados em sistemas de complexos, é de fácil transformação para ladder desde que não haja muitas ramificações.
Parte 4 - Técnicas de programação (Lógica simples) INTRODUÇÃO Programar em ladder é muito simples, desde que ele tenha uma estrutura sob a qual o programa deve ser desenvolvido, ou seja, se deve ter um
Sistemas Operacionais. Prof. André Y. Kusumoto [email protected]
Sistemas Operacionais Prof. André Y. Kusumoto [email protected] Estruturas de Sistemas de Computação O sistema operacional precisa garantir a operação correta do sistema de computação. Operação
Componentes do Computador e. aula 3. Profa. Débora Matos
Componentes do Computador e modelo de Von Neumann aula 3 Profa. Débora Matos O que difere nos componentes que constituem um computador? Princípios básicos Cada computador tem um conjunto de operações e
O cursor se torna vermelho e uma Paleta de Edição contendo as instruções mais utilizadas é apresentada.
Editor de Ladder para VS7 Versão Teste O editor de ladder é um software de programação que permite que o VS7 e o µsmart sejam programados em linguagem de contatos. Esse editor está contido na pasta Público
28/9/2010. Unidade de Controle Funcionamento e Implementação
Arquitetura de Computadores Unidade de Controle Funcionamento e Implementação Prof. Marcos Quinet Universidade Federal Fluminense P.U.R.O. Operação da Unidade de Controle Unidade de controle: parte do
Unidade Central de Processamento (CPU) Processador. Renan Manola Introdução ao Computador 2010/01
Unidade Central de Processamento (CPU) Processador Renan Manola Introdução ao Computador 2010/01 Componentes de um Computador (1) Computador Eletrônico Digital É um sistema composto por: Memória Principal
Microcontroladores 8051
Microcontroladores 8051 1. Microcontroladores Microcontrolador é o nome dado ao componente que incorpora em um só "chip" todos os elementos necessários a um microcomputador. Deve ter : CPU, Memória e Interfaces
Microcontrolador 8051
Microcontrolador 8051 Inicialmente fabricado pela INTEL, atualmente fabricado por várias empresas; Possui uma grande variedade de dispositivos, com diversas características, porém compatíveis em software;
Laboratório de Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação Universidade Federal de Goiás Laboratório de Microprocessadores e Microcontroladores Experimento 5: Comunicação Serial Alunos: Matrícula: Prof. Dr.
Capítulo 2. Numéricos e Códigos. 2011 Pearson Prentice Hall. Todos os direitos reservados.
Capítulo 2 Sistemas Numéricos e Códigos slide 1 Os temas apresentados nesse capítulo são: Conversão entre sistemas numéricos. Decimal, binário, hexadecimal. Contagem hexadecimal. Representação de números
Arquitetura de Computadores - Revisão -
Arquitetura de Computadores - Revisão - Principais funções de um Sistema Operacional Componentes básicos da Arquitetura Barramentos Registradores da CPU Ciclo de Instruções Interrupções Técnicas de E/S
5 Entrada e Saída de Dados:
5 Entrada e Saída de Dados: 5.1 - Arquitetura de Entrada e Saída: O sistema de entrada e saída de dados é o responsável pela ligação do sistema computacional com o mundo externo. Através de dispositivos
Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini E-mail: [email protected] /
Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini E-mail: [email protected] / [email protected] MATÉRIA: ICO Aula N : 09 Tema: Unidade Central de
ARQUITETURA DE COMPUTADORES
01001111 01110010 01100111 01100001 01101110 01101001 01111010 01100001 11100111 11100011 01101111 00100000 01100100 01100101 00100000 01000011 01101111 01101101 01110000 01110101 01110100 01100001 01100100
Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores.
Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores. 7.3.1.2 Registradores: São pequenas unidades de memória, implementadas na CPU, com as seguintes características:
2 Formalidades referentes ao trabalho
Bacharelado em Ciência da Computação DINF / UFPR Projetos Digitais e Microprocessadores 1 o Semestre de 2006 MICO-v12.r0 07/03/2006 Profs. Luis Allan Künzle e Armando Luiz Nicolini Delgado Atenção: Este
Prof. Adilson Gonzaga
Prof. Adilson Gonzaga Memória de Dados Interna (RAM Interna) O endereçamento é feito com 8 bits Chips com 128 bytes de RAM não possuem a área I (Apenas Endereçamento Indireto) Memória de Dados Interna
Organização Básica do Computador
Organização Básica do Computador Modelo de Von Neumann MEMÓRIA ENTRADA ARITMÉTICA LÓGICA SAÍDA CONTROLE Modelo de Von Neumann Introduziu o conceito do computador controlado por programa armazenado. Todo
O processador é composto por: Unidade de controlo - Interpreta as instruções armazenadas; - Dá comandos a todos os elementos do sistema.
O processador é composto por: Unidade de controlo - Interpreta as instruções armazenadas; - Dá comandos a todos os elementos do sistema. Unidade aritmética e lógica - Executa operações aritméticas (cálculos);
MICROPROCESSADORES E MICROCONTROLADORES Parte 2 Microcontrolador 8051
MICROPROCESSADORES E MICROCONTROLADORES Parte 2 Microcontrolador 8051 José Wilson Lima Nerys Página: www.emc.ufg/~jwilson Emails: [email protected] e [email protected] Prof. José Wilson 1 Lima
Programação Básica em Arduino Aula 2
Programação Básica em Arduino Aula 2 Execução: Laboratório de Automação e Robótica Móvel Variáveis são lugares (posições) na memória principal que servem para armazenar dados. As variáveis são acessadas
Organização de Memórias
Intel 8051 O Intel 8051 é um microcontrolador de 8 bits que pertence a família MCS-51 da Intel e foi lançado em 1977. É tido como o microcontrolador mais popular do mundo, pois é muito versátil e possui
MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 (Tema: Microcontrolador 8051)
MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 (Tema: Microcontrolador 8051) 1. Tema: programação geral do microcontrolador 8051. Valor: 2,0 A Figura a seguir mostra um sistema no qual um motor de passo
Linguagem de Montagem Funcionamento de CPU e Assembly Rudimentar
Componentes de um Computador (5) Linguagem de Montagem Funcionamento de CPU e Assembly Rudimentar Prof. João Paulo A. Almeida ([email protected]) 2007/01 - INF02597 Com slides de Roberta Lima Gomes
Boletim Técnico R&D 03/08 CARACTERÍSTICAS DO DRIVER MPC6006L 14 de março de 2008
Boletim Técnico R&D 03/08 CARACTERÍSTICAS DO DRIVER MPC6006L 14 de março de 2008 O objetivo deste boletim é mostrar as características do driver MPC6006L. Tópicos abordados neste boletim: APRESENTAÇÃO
