SlideShare uma empresa Scribd logo
Escola SENAI “Prof. Dr. Euryclides de Jesus Zerbini”
Campinas/SP
2002
Microcomputadores
Microcomputador
 SENAI-SP, 2002
Trabalho elaborado pela
Escola SENAI “Prof. Dr. Euryclides de Jesus Zerbini”
Coordenação Geral Magno Diaz Gomes
Equipe responsável
Coordenação Geraldo Machado Barbosa
Elaboração Romeu Corradi Júnior
Equipe responsável pela formatação
Coordenação Luciano Marcelo Lucena da Silva
Formatação David Tadeu Cassini Manzoti
Edmar Fernando Camargo
Edney Messias Soares
Eudenir Scheffer Junior
Fabrício Monteiro G. Dias
Versão 1.0
SENAI - Serviço Nacional de Aprendizagem Industrial
Escola SENAI “Prof. Dr. Euryclides de Jesus Zerbini”
Avenida da Saudade, 125, Bairro Ponte Preta
CEP 13041-670 - Campinas, SP
senaizerbini@sp.senai.br
Microcomputadores
Sumário
3
Sumário
Introdução 05
SAB 8051 - Diagrama em Blocos 07
Características Gerais 09
Organização de Memória em Dispositivos SAB-51 11
O Conjunto de Instruções 17
Ciclo de Máquina 27
Estrutura de Interrupção 29
Temporizadores 33
Interface Serial 35
Principais Vantagens do Microcontrolador 8051 37
Atuais Tendências 39
Software do 8051 41
Atividades de Laboratório 53
Introdução 55
LABORATÓRIO 1: Travando conhecimento com o EB-153. 57
LABORATÓRIO 2: Sub-rotinas monitoras. 65
LABORATÓRIO 3: Instruções sobre transferência de dados. 73
LABORATÓRIO 4: Portas de entrada e saída. 81
LABORATÓRIO 5: Operações aritméticas e lógicas. 89
LABORATÓRIO 6: Operações de transferência de controle. 95
LABORATÓRIO 7: Interrupções externas. 101
LABORATÓRIO 8: Temporizadores e contadores de eventos. 107
LABORATÓRIO 9 : Comunicações seriais. 115
APÊNDICE A: Rotinas monitoras. 121
APÊNDICE B: Como endereçar memórias. 123
APÊNDICE C: Microcontrolador. 127
07_-_Microcomputadores e microcontroladores
Microcomputadores
Introdução 5
Introdução
O que é um Microcontrolador?
Microcontrolador é um dispositivo utilizado para controlar e monitorar funções durante
um processo.
A partir do advento dos circuitos integrados TTL, pode-se delinear três gerações no
que diz respeito à implementação de controladores.
Na primeira geração estão os projetos envolvendo circuitos integrados TTL, na sua
maioria. O alto consumo de energia, a grande quantidade de chips envolvidos e a
dificuldade em se realizar reengenharia tornou a segunda geração atraente aos
projetistas.
O advento dos microprocessadores tornou versátil o projeto de circuitos destinado ao
controle: era a segunda geração dos controladores. Boa parte das funções antes
implementadas por hardware passaram a ser implementadas por software.
A terceira geração veio para integrar em um único chip boa parte dessa estrutura.
Microcontroladores integram as funções de um microprocessador, memória de dados e
de instruções e ainda, dependendo da complexidade, portas seriais e paralelas
bidirecionais, conversores A/D, timers, watchdog e outros.
Fabricantes de Microcontroladores
• Motorola
• Mitsubishi
• Siemens
• NEC
• Hitachi
• Microchip
• Matsushita
• Toshiba
• National Semiconductor
• Zilog
Microcomputadores
Introdução
6
• Philips
• Intel
• Texas Instruments
• Sharp
Mercado de Microcontroladores
WorldWide Microcontroller Shipments (in millions of dollars)
1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000
4 bit 1393 1597 1596 1698 1761 1826 1849 1881 1856 1816 1757
8 bit 2077 2615 2862 3703 4689 5634 6553 7529 8423 9219 9715
16 bit 192 303 340 484 810 1170 1628 2191 2969 3678 4405
Fonte: WSTS & ICE – 1994
WorldWide Microcontroller Shipments (in Millions)
1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000
4 bit 778 906 979 1036 1063 1110 1100 1096 1064 1025 970
8 bit 588 753 843 1073 1490 1803 2123 2374 2556 2681 2700
16 bit 22 38 45 59 106 157 227 313 419 501 585
Fonte: WSTS & ICE – 1994
Na tabela acima, podemos notar que o mercado de microcontroladores tende a
aumentar, principalmente os de 8 e 16 bits. Pode-se notar também que mais da
metade dos negócios são efetuados com microcontroladores de 8 bits.
Microcomputadores
SAB 8051 – Diagrama em Blocos 7
SAB 8051 – Diagrama em
Blocos
07_-_Microcomputadores e microcontroladores
Microcomputadores
Características Gerais 9
Características Gerais
Esse trabalho focaliza o microcontrolador da Siemens Components, Inc. mas o
componente é totalmente compatível com o de outros fabricantes.
O SAB 8051 é o membro original da família SAB-51. Entre as características do SAB-
8051, estão:
• CPU de 8bits otimizada para aplicações em controle.
• Alta capacidade de processamento booleano (manipulação de variáveis de um bit).
• 32 linhas de E/S bidirecionais e individualmente endereçáveis.
• 128 bytes de RAM interna destinada a dados
• RAM de baixo consumo de energia.
• 2 temporizadores/contadores de 16bits
• UART full duplex
• 5 estruturas de interrupção com 2 níveis de prioridade
• Clock interno
• 4 Kbytes de memória de programa interna
• 64 Kbytes de memória de programa endereçáveis
• 64 Kbytes de memória de dados endereçáveis
• Freqüência de clock entre 1.2 MHz e 12 MHz
O SAB 8051 é um microcontrolador de alta-performance que opera em +5V, construído
sob a alta tecnologia Siemens MYMOS (III). O SAB 8031 difere do SAB 8051 por não
ter memória ROM interna. Dessa forma, todas as instruções são buscadas na memória
externa.
07_-_Microcomputadores e microcontroladores
Microcomputadores
Organização de Memória em Dispositivos SAB-51 11
Organização de Memória em
Dispositivos SAB-51
Separação Lógica de Memória de Programa e de Dados
Toda a família SAB-51 tem espaços de endereços separados para memória de
programas e de dados (configuração Harvard). Essa separação permite que a memória
de dados seja acessada por endereços de 8bits, podendo ser mais rapidamente
manipulada pela CPU de também 8bits. Não obstante, endereços de 16bits para essa
memória possam ser gerados através do registrador DPTR.
O microcontrolador pode acessar 4Kbytes de memória de programas internamente e
mais 64Kbytes externamente. O dispositivo emite o sinal PSEN ( Program Store
Enable) para ler a memória de programa externa.
Os 64Kbytes de Memória de Dados Externa são acessados pelo dispositivo através
dos sinais RD e WR. Os sinais PSEN e RD podem ser injetados na entrada de um
porta AND e a saída dessa porta utilizada como sinal de requisição de leitura a uma
memória externa de dados e programas convencional.
Memória de Programas
Na Memória de Programas estão alocadas as posições alvos de interrupções. Em
cada uma dessas posições, deve iniciar a rotina que serve à respectiva interrupção. O
espaçamento entre essas posições fixas é de 8bytes. Na maioria das aplicações de
controle, essas rotinas cabem inteiramente nesse intervalo, de outra forma, um jump
nessas posições se faz necessário.
Os primeiros 4Kbytes da Memória de Programas podem ser endereçados interna ou
externamente. Se o pino EA (External Acces) estiver em nível alto, esses bytes são
Microcomputadores
Organização de Memória em Dispositivos SAB-51
12
acessados on-chip. Levando o pino EA a nível baixo, o acesso a tais bytes é feito na
memória externa.
A configuração do hardware para execução de programas externos é mostrado na
Figura1. As 16 linhas de E/S ( Portas 0 e 2) são dedicadas para desempenhar função
de bus durante buscas na Memória de Programas. A Porta 0 emite o byte menos
significativo do Contador de Programas (PCL). Nesse momento o sinal ALE funciona
como clock para o Latch armazenando o PCL. As linhas da Porta 0 entram em estado
de alta impedância. Enquanto isso, a Porta 2 emite o byte mais significativo do
Contador de Programas (PCH). O Latch e a Porta 2 formam portanto o endereço
necessário ao acesso da ROM externa. O sinal PSEN, em nível baixo, habilita a ROM
à leitura. A Porta 0 entra no modo entrada e a instrução da ROM do correspondente
endereço é enviado à essa porta.
Figura 1 – Execução a partir de memória externa.
Memória de Dados
A figura 2 mostra a configuração do hardware para o acesso de 2Kbytes de RAM
externa. Neste caso a CPU está executando a partir da ROM interna. O endereço pode
ter largura 1 ou 2bytes. Quando utilizando 1byte, uma ou mais outras linhas de E/S
Microcomputadores
Organização de Memória em Dispositivos SAB-51 13
podem ser utilizadas, como mostrado na figura. Quando utilizando 2bytes de largura, o
byte mais significativo é enviado pela Porta2.
Figura 2 – Acesso à memória de dados externa
O mapeamento da memória interna é mostrada Figura 3. Ela é dividida em três blocos
que são referidos como Lower 128, Upper 128 e SFR. Os registradores, mapeados em
memória, ocupam os primeiros 32bytes do bloco Lower, agrupados em bancos de 8
(R0 a R7). Dois bits na Palavra de Status de Programa (PSW-Program Status Word)
seleciona um dos bancos. Isto permite maior eficiência no espaço do código, uma vez
que, instruções que referem a registradores são menores que as instruções de
endereçamento direto.
Figura 3 - Memória de dados interna
Microcomputadores
Organização de Memória em Dispositivos SAB-51
14
Os 16bytes acima do banco de registradores, formam o espaço de bits endereçáveis.
O conjunto de instruções do SAB-51 inclui uma grande quantidade de instruções de
um único bit, e os 128 bits dessa área podem ser acessados por essas instruções. O
bloco Lower ocupa o intervalo de endereços de 00H até 7FH e seu mapeamento é
visto na Figura 4.
Figura 4 – Região Lower 128
Todos os bytes do bloco Lower podem ser acessados direta ou indiretamente (veja
seção 5.2). O bloco Upper 128, não disponível no 8051 mas sim, no 8053B, no 80515
e no 80C517, é acessado unicamente por endereçamento indireto.
O bloco SFR (Special Function Register), mostrado na Figura 5, inclui latches, timers,
controle de periféricos, etc. e ocupa o espaço de endereçamento 80H a FFH. Tais
registradores podem ser acessados exclusivamente por acesso direto.
Microcomputadores
Organização de Memória em Dispositivos SAB-51 15
Figura 5 – Região SFR ( Special Function Registers )
07_-_Microcomputadores e microcontroladores
Microcomputadores
O Conjunto de Instruções 17
O Conjunto de Instruções
Todos os membros da família 8051 executam o mesmo conjunto de instruções
classificadas como: aritméticas, lógicas, transferência de controle, transferência de
dados e booleanas. Dispõem de uma variedade de rápidos modos de endereçamento
à RAM interna, para facilitar operações com bytes em pequenas estruturas de dados.
Suporte à variáveis de um bit também é disponível, permitindo manipulação direta em
sistemas de controle e lógica que requerem processamento booleano.
Program Status Word (PSW)
Este byte, localizado no espaço SFR, contém alguns bits de status que refletem o
estado da CPU. Mostrado na figura 6, contém flags Carry, Auxiliay Carry, Overflow,
Paridade, dois bits (RS0 e RS1) de seleção de banco de registradores e dois bits de
status definidos pelo usuário.
Figura 6 – Registrador PSW ( Program Status Word )
Microcomputadores
O Conjunto de Instruções
18
Modos de Endereçamento
Para acessar um dado, as instruções do microcontrolador 8051 contam com seis tipos
de endereçamentos: Direto, Indireto, por Registradores, por Registrador Específico,
Imediato e Indexado.
Endereçamento Direto
Nesse modo, o endereço do operando é especificado por um campo de 8bits na
instrução. Somente RAM de dados interna e a região SFR pode ser diretamente
endereçadas.
Endereçamento Indireto
A instrução especifica um registrador que contém o endereço do operando. Ambas
externa e interna RAM’s podem ser indiretamente acessadas. Se tal endereço possui
8bits, seu valor é armazenado em R0 ou R1, do respectivo banco selecionado, ou no
Stack Pointer. Por outro lado, se tal endereço possui 16bits, seu valor é armazenado
no registrador DPTR.
Endereçamento por Registradores
Instruções que suportam um espaço de três bits em seu opcode podem acessar
registradores de R0 a R7 dos bancos de registradores. Tais instruções são eficientes
por eliminarem um byte de endereço. Quando uma instrução desse tipo é executada,
um dos quatro bancos de registradores é selecionado pelos bits RS0 e RS1 de PSW
em tempo de execução.
Endereçamento por Registrador Específico
Algumas instruções são específicas a certos registradores. Por exemplo, algumas
instruções sempre operam no Acumulador e, para elas, não é necessário um ponteiro.
O próprio opcode é capaz de realizar tal tarefa.
Endereçamento Imediato
Quando uma constante segue o opcode.
Endereçamento Indexado
Somente a Memória de Programas, cuja única operação é leitura, pode ser acessada
por esse modo. É usado para fazer leituras em tabelas na Memória de Programas. Um
registrador de 16bits (DPTR ou PC) aponta para o início da tabela enquanto o
Acumulador é ajustado para a n-ésima posição da mesma. O endereço de uma
Microcomputadores
O Conjunto de Instruções 19
entrada para a tabela é formado pela soma entre o Acumulador e o registrador de
16bits. Uma outra aplicação desse tipo de endereçamento é na formação do endereço
destino de jumps pela soma do índice e do valor do Acumulador.
Instruções Aritméticas
O conjunto de instruções 8051 pode acessar suas variáveis pelos diferentes modos de
endereçamento. Por exemplo, a instrução ADD A, <byte> pode ser escrita como:
• ADD A, 7FH (direto)
• ADD A,@R0 (indireto)
• ADD A,R7 (registrador)
• ADD A,#127 (imediato)
Tabela 1 – Instruções Aritméticas
Instruções aritméticas tomam 1µs para serem executadas exceto INC DPTR, que toma
2µs e instruções de multiplicação e divisão, que tomam 4µs, considerando uma
freqüência de clock de 12MHz.
Note que qualquer byte alocado em uma posição da Memória de Dados interna pode
ser incrementado ou decrementado sem precisar de ser carregado no Acumulador.
A instrução MUL AB multiplica o conteúdo do Acumulador pelo conteúdo do
registrador. O produto em 16bits é colocado nos registradores A e B concatenados. A
Microcomputadores
O Conjunto de Instruções
20
instrução DIV divide o conteúdo do acumulador pelo conteúdo do registrador B. O
quociente é colocado no Acumulador e o resto no registrador B.
A instrução DA A, ajusta o resultado de uma operação BCD. Note que essa instrução
não converterá um número binário em BCD mas sim, ajustará o resultado de uma
operação ADD ou ADDC envolvendo valores BCD.
Instruções Lógicas
Essas instruções realizam operações booleanas ( AND, OR, Exclusive OR e NOT) bit a
bit entre dois bytes. Elas podem endereçar seus operandos por diversos modos como,
por exemplo, a instrução ANL A, <byte>:
• ANL A,7FH (direto)
• ANL A,@R1 (indireto)
• ANL A,R6 (por registrador)
• ANL A,#53H (imediato)
Tabela 2 – Instruções Lógicas
Todas instruções desse tipo que utilizam o Acumulador como registrador específico
tomam 1µs para serem executadas, enquanto as demais tomam 2µs. Os modos de
endereçamento disponíveis tornam desnecessário carregar qualquer operando que
estiver na Memória de Dados interna para o Acumulador. Não utilizar o Acumulador,
Microcomputadores
O Conjunto de Instruções 21
economiza o tempo em empilhar seu conteúdo quando do atendimento a uma
interrupção.
Instruções de rotação deslocam de um bit para direita ou esquerda o conteúdo do
Acumulador. Se for para esquerda, o bit LSB recebe o bit MSB, enquanto, se for para
direita, o bit MSB recebe o bit LSB.
A instrução SWAP permuta os quatro bits menos significativos com os quatro bits mais
significativos do Acumulador.
Instruções de Transferência de Dados
Essas instruções são divididas em três subgrupos conforme a localização do dado: na
RAM interna, na RAM externa ou na Memória de Programas (Lookup Tables).
RAM Interna
Sob um clock de 12MHz, uma operação desse tipo é realizada em 1 s ou 2 s. Esse
conjunto de instruções mostrado na tabela 3, conta com a facilidade, por exemplo, de
MOV <dest>,<src> que transfere dados entre duas posições de RAM interna ou região
SFR dispensando qualquer carregamento do Acumulador (lembre que a região Upper
128 da RAM de dados pode ser acessada somente por endereçamento indireto e a
região SFR somente por endereçamento direto). PUSH e POP utilizam endereçamento
direto para identificar o byte a ser salvo ou restaurado, mas usa endereçamento
indireto para acessar a pilha através do registrador SP. Isso significa que a pilha (que
cresce no mesmo sentido dos endereços e localizada na região Lower 128) pode
avançar sobre a região Upper 128 mas não na região SFR.
Em dispositivos que não contam com a região Upper 128 ( 8051A, 80C51 e 80512 e
versões ROMless) se a pilha tenta avançar sobre ela, bytes de PUSH são perdidos e
de POP são indeterminados. Movimentação com 16bits é útil para inicializar DPTR
para acesso a Lookup Tables na Memória de Programas ou acessar Memória de
Dados externa.
Microcomputadores
O Conjunto de Instruções
22
Tabela 3 – Instruções de Transferência de Dados em Memória Interna
RAM Externa
A Tabela 4 mostra a lista de instruções de Transferências de Dados para acesso à
memória externa. Somente endereçamento indireto pode ser utilizado. Pode-se
escolher o uso de endereços de 8bits, @Ri, onde Ri pode ser o registrador R0 ou o
registrador R1, ou endereços de 16bits, @DPTR. A desvantagem em se usar
endereços de 16bits, quando poucos Kbytes de Memória de Dados externa estão
envolvidos, é o sacrifício de todos os 8bits da Porta2 (veja Figura 2). Note que o
Acumulador é sempre a fonte ou o destino da transferência.
Os sinais RD e WR só são gerados quando da execução de uma instrução do tipo
MOVX, assim, se uma RAM externa não é disponível, tais sinais podem ser utilizados
como linhas de E/S extras.
Tabela 4 – Instruções de movimentação em memória de dados externa
Lookup Tables
A tabela 5 mostra as duas instruções disponíveis para ler Lookup Tables da Memória
de Programas. Uma vez que reside nessa memória, tal tabela só poderá ser lida. Se
essa tabela se encontra na Memória de Programas externa, o sinal de leitura é PSEN.
A primeira instrução MOVC pode acomodar uma tabela de 256 entradas (0-255). O
número da entrada é armazenado no Acumulador e o registrador DPTR é ajustado
com o valor inicial da tabela.
A segunda instrução utiliza o PC como a base da tabela que é acessada através de
subrotina. O Acumulador é carregado com o valor da entrada da tabela e a subrotina é
chamada:
Microcomputadores
O Conjunto de Instruções 23
• MOV A, ENTRADA
• CALL LOOKUP_TABLE
Subrotina:
• LOOKUP_TABLE: MOVC A, @A + PC
• RET
A tabela em si segue imediatamente a instrução RET. Ela comporta 255 entradas (1-
255), pois, a entrada 0 endereça a instrução RET.
Tabela 5 – Instruções para leitura de Lookup Table em memória de programa
Instruções Booleanas
Os dispositivos da família 8051 contam com um completo conjunto de operações
booleanas sob bits únicos. A o espaço Lower 128 da RAM interna suporta 128 bits
endereçáveis e o espaço SFR pode suportar outros 128 bits endereçáveis. Todas as
linhas das portas são bit-endereçáveis e cada uma dessas linhas pode ser tratada
como uma porta de um único bit. As instruções que acessam esses bits não são
apenas branches condicionais mas uma completa lista de move, set, clear,
complement, OR e AND. Esse tipo de operações sobre bits não é facilmente obtido em
outras arquiteturas sem uma razoável quantidade de código.
Todos esses bits são endereçados diretamente. Bit-Endereços entre 00H e 7FH
acessam o espaço Lower 128 enquanto entre 80H e FFH acessam o espaço SFR.
Note como é fácil um flag interno ser movido para um pino de uma porta:
• MOV C, FLAG
• MOV P1.0, C
Onde FLAG é o nome de qualquer Bit-Endereçável em Lower 128 ou SFR. Nessa
seqüência, bit de FLAG é movido para o bit menos significativo da Porta1. O Carry bit
de PSW é utilizado como acumulador para operações Booleanas.
Microcomputadores
O Conjunto de Instruções
24
As operações de jump desse conjunto testam um único bit, que possa ser diretamente
endereçável, como condição. Uma vez que todos os bits de PSW são endereçados
diretamente, pois estão no espaço SFR, pode-se utilizá-los como alguma condição de
jump.
Para jumps relativos, o endereço contido no código é somado ao PC em complemento
de dois se o jump é tomado. Portanto, a distância de jump pode variar na faixa de -128
a +127 bytes a partir do endereço do byte de desvio.
Instruções de Jumps
O conjunto de instruções de jumps pode ser dividido em dois subgrupos: jumps
condicionais e jumps incondicionais.
Jumps incondicionais
O conjunto de jumps incondicionais (tabela 6) possuem seis instruções em seu
repertório. JMP é apenas um mnemônico genérico utilizado pelo programador que não
precisa saber como ela é realmente interpretada pelo assembler. Na realidade, JMP
corresponde a três instruções: SJMP, LJMP e AJMP. A instrução SJMP calcula o
endereço destino como descrito acima que pode varrer uma largura de -128 a +127
bytes na Memória de Programas. A instrução LJMP codifica o endereço destino como
uma constante de 16bits que pode ser qualquer localidade dos 64Kbytes da Memória
de Programas. A instrução AJMP codifica o endereço destino como uma constante de
11bits. A instrução consiste em 2 bytes: 3bits do endereço localizam-se no opcode
enquanto os outros 8bits localizam-se no próximo byte. Os 11bits assim formados
simplesmente substituem os 11bits menos significativos de PC.
Em todos os casos, o programador especifica o endereço destino de duas maneiras:
ou como um label ou como uma constante de 16bits. O assembler se encarrega de
colocar o endereço destino para o correto formato de instrução.
A instrução JMP @A + DPTR implementa a comando CASE. O endereço destino é
computado em tempo de execução como a soma do conteúdo do Acumulador e o
registrador DPTR. Tipicamente, DPTR é carregado com o endereço de uma tabela de
jumps e, ao Acumulador, é dado o valor de um índice dessa tabela.
Microcomputadores
O Conjunto de Instruções 25
Semelhantemente à instrução JMP, a instrução CALL, na realidade, são duas : LCALL
e ACALL que diferem na forma como que o endereço da subrotina é dado à CPU.
LCALL utiliza o endereço destino em 16bits que pode ser qualquer localidade dos
64Kbytes da Memória de Programas. ACALL utiliza formatos em 11bits o que significa
que o endereço destino deve estar no mesmo bloco de 2Kbytes seguintes a instrução.
A transparência para o programador em CALL é semelhante à de JMP.
As instruções RET e RETI são utilizadas em finais de subrotinas. A diferença entre
elas é que RETI informa ao sistema de controle de interrupções que a interrupção em
progresso terminou.
Tabela 6 - Instruções de Jumps Incondicionais
Jumps condicionais
O conjunto de jumps condicionais só permite endereçamento de destino relativo o que
limita a distância de salto entre -128 e +127 bytes de distância da instrução jump.
Importante notar que o programador especifica o endereço como um label ou uma
constante de 16bits.
Não há flag zero, portanto, JZ e JNZ testam o dado do Acumulador para tal condição.
A instrução DJNZ (Decrementa e Jump se Não Zero) é utilizada para controle de loops
assim como CJNE (Compara e Jump se Não Igual). Uma aplicação para esta instrução
está em comparações "maior que, menor que". Pelo valor do Carry bit distingue-se as
duas situações. Se o primeiro é menor que o segundo, Carry bit é setado. Se o
primeiro é maior ou igual ao segundo, Carry bit é zerado.
Tabela 7 – Instruções de Jumps Condicionais
07_-_Microcomputadores e microcontroladores
Microcomputadores
Ciclo de Máquina 27
Ciclo de Máquina
Um ciclo de máquina consiste de uma seqüência de 6 estados (S1 a S6). Cada estado
toma 2 períodos de clock e, portanto, um ciclo de máquina toma 12 períodos de clock
ou 1µs sob uma freqüência de 12MHz.
A Figura 7 mostra a seqüência de busca/execução para alguns tipos de instruções.
Normalmente dois ciclos de busca são executados em cada ciclo de máquina mesmo
que a instrução sendo executada não o requer, caso em que o byte buscado é
ignorado e o PC não é incrementado.
Figura 7 – Seqüência de Estados
Microcomputadores
Ciclo de Máquina
28
Instruções de um ciclo começam em S1, em S4 é gerado uma segunda busca e, no fim
de S6, a instrução está completa. O ciclo busca/execução é o mesmo se a Memória de
Programas é externa ou interna. A Figura 7 mostra os sinais e as temporizações
envolvidas quando a Memória de Programas é externa. Nesse caso, o sinal PSEN é
ativo duas vezes por ciclo de máquina. Se um acesso à Memória de Dados externa
ocorre, como mostrado na Figura 2, dois PSENs são pulados porque o bus de
endereços e o bus de dados estão sendo utilizados para acesso à Memória de Dados.
Note que um ciclo de Memória de Dados externa toma duas vezes mais tempo que um
ciclo de Memória de Programas.
A Figura 8 mostra a dinâmica dos endereços sendo enviados às Portas 0 e 2 e dos
sinais ALE e PSEN. O sinal ALE é ativado indiferentemente se a CPU está executando
a partir da Memória de Programas externa ou interna, podendo ser utilizado como uma
saída de clock.
Figura 8 – Ciclo de Execução em Memória de Programas Externo
Microcomputadores
Estrutura de Interrupção 29
Estrutura de Interrupção
Os microcontroladores 8051A, 80C51 e suas versões ROMless dispõem de 5 fontes de
interrupção: 2 interrupções externas, 2 interrupções de temporizadores e uma
interrupção por porta serial. O 8052B e o 80C52 possuem essas cinco interrupções e
mais uma associada ao terceiro temporizador. Outras interrupções são disponíveis em
membros mais avançados da família.
Interrupt Enable (IE)
Cada uma das fontes de interrupção pode ser habilitada ou desabilitada setando ou
limpando um bit do registrador IE localizado na região SFR. Este registrador também
contém um bit global que pode desabilitar todos as interrupções de uma só vez. A
Figura 9 mostra o registrador IE para o 80528 e 80C52.
Figura 9 – Interrup Enable
Microcomputadores
Estrutura de Interrupção
30
Prioridade de Interrupções
Cada fonte de interrupção pode ser programada para um de dois níveis de interrupção
(os microcontroladores 80515, 80C515, e 80C517 têm quatro níveis de interrupção)
setando ou limpando um bit do registrador IP (Interrupt Priority) localizado no espaço
SFR e mostrado na Figura 10.
Figura 10 – Interrupt Priority
Se requisições de interrupção de mesma prioridade são recebidas simultaneamente,
uma seqüência de pooling é ativada para determinar qual interrupção será atendida.
Todos os flags de interrupção são carregados no sistema de controle de interrupção
durante o Estado 5 de todo ciclo de máquina. A análise desses flags é feita no ciclo
seguinte. Se um flag para uma interrupção habilitada é encontrado setado, o sistema
de interrupção gera um LCALL para a correta localização na Memória de Programas a
menos que uma situação de bloqueio de verifique (ex. interrupção de igual ou maior
prioridade sendo atendida). Com LCALL sendo executado, o conteúdo de PC é salvo
na pilha e este registrador recebe o valor do endereço inicial da rotina de interrupção.
Microcomputadores
Estrutura de Interrupção 31
Somente PC é automaticamente salvo na pilha. Isso permite ao programador decidir
quanto tempo deve ser gasto salvando outros registradores. Como resultado, tem-se
uma melhoria no tempo de resposta a uma interrupção.
07_-_Microcomputadores e microcontroladores
Microcomputadores
Temporizadores 33
Temporizadores
O microcontrolador 8051 conta com 2 temporizadores/contadores de 16bits para uso
geral. A configuração dos temporizadores/contadores 0 e 1 é feita no registrador
TMOD localizado na região SFR no endereço 89H.
Se o bit C/T desse registrador é setado, o temporizador/registrador atua como contador
e, se zerado, atua como temporizador.
Quando na função temporizador, o registrador de tempo, localizado na região SFR é
incrementado a cada ciclo de máquina. Logo, podemos pensá-lo como um contador de
ciclos de máquina. Desde que um ciclo de máquina toma 12 ciclos de clock, a
resolução de contagem é 1/12 da freqüência de clock.
Quando na função contador, o registrador é incrementado a cada transição 1 para 0 do
correspondente sinal externo T0 ou T1 (pino 4 ou pino 5 respectivamente da porta 3).
É necessário um ciclo de máquina para detectar a transição e outro para incrementar o
registrador de contagem. Portanto, a resolução de contagem é 1/24 da freqüência do
sinal de entrada. É fortemente recomendado que o sinal seja aplicado no mínimo
durante um ciclo de máquina completo.
Cada temporizador/contador consiste em 2 registradores de 8bits que podem ser
configurados em um dos 4 possíveis modos.
Modo 0
O registrador é configurado como um registrador de 13bits. Os bits TF0 (8DH) e TF1
(8FH) são utilizados como flags de overflow associadas às interrupções INT0 e INT1
respectivamente aos temporizadores/contadores 0 e 1.
Modo 1
Semelhante ao modo 0 com a diferença de que o registrador atua em 16bits.
Microcomputadores
Temporizadores
34
Modo 2
O registrador é configurado em 8bits com recarregamento automático, isto é, quando
numa situação de overflow de TLO (8bits menos significativos), tal registrador é
recarregado com o conteúdo de TLH (8bits mais significativos) cujo conteúdo
permanece constante.
Modo 3
Temporizador/contador 1 é desligado enquanto o temporizador/contador 0 é utilizado
como dois registradores de 8bits. A interrupção associada a TL0 é INT0 enquanto a
interrupção associada a TH0 é INT1.
Microcomputadores
Interface Serial 35
Interface Serial
O 8051 possui uma porta serial full-duplex, o significa que ela pode enviar e transmitir
dados simultaneamente. Essa interface pode operar em 4 modos:
Modo 0
(modo síncrono) 8 bits do dado serial entram e saem por RxD0. TxD0 tem como saída
o sinal de clock deslocado em fase. A velocidade de transmissão é de 1/12 clock.
Modo 1
(modo assíncrono) 10 bits são transmitidos (TxD0) ou recebidos (RxD0): 8bits de
dados, 1 stop bit e 1 start bit. A velocidade de transmissão é variável.
Modo 2
(modo assíncrono) 11 bits são transmitidos (TxD0) ou recebidos (RxD0): 1 start bit,
8bits de dados, 1bit programável pelo usuário (por exemplo: bit de paridade) e um stop
bit. A velocidade de transmissão pode ser programável para 1/32 ou 1/64 clock
Modo 3
(modo síncrono) exatamente como no Modo 2, porém, a velocidade de transmissão é
variável.
Em cada um dos modos, a transmissão é iniciada quando da execução de uma
instrução cujo registrador destino é o registrador S0BUF (endereço 99H, região SFR).
A recepção é iniciada no modo 0 pela condição RI0 = 0 (endereço 98H) e REN0 = 1
(endereço 9CH), ambos localizados no registrador S0CON (endereço 98H, região
SFR). Em outros modos, a recepção é iniciada quando REN0 = 1.
07_-_Microcomputadores e microcontroladores
Microcomputadores
Principais Vantagens do Microprocessador 8051 37
Principais Vantagens do
Microprocessador 8051
Popular
Prontamente disponível e amplo suporte. Gama completa de produtos de suporte
estão disponíveis de graça e comercialmente.
Rápido e eficaz
A arquitetura se correlaciona de perto com o problema sendo solucionado (sistemas de
controle). Instruções especializadas significam que menos bytes precisam ser
buscados e menos jumps condicionais são processados.
Baixo custo
Alto nível de integração do sistema em um único componente. Poucos componentes
são necessários para se criar um sistema que funcione.
Ampla gama de produtos
Uma única família de microcontroladores cobre as opções que outros fornecedores só
conseguem cobrir com um número razoável de diferentes e incompatíveis famílias.
Desse modo, o 8051 proporciona economia real em termos de custo de ferramentas,
treinamento e suporte para software.
Microcomputadores
Principais Vantagens do Microprocessador 8051
38
Compatibilidade
Opcodes e código binário são os mesmos para todas as variações do 8051, diferente
de outras famílias de microcontroladores.
Multi-Sourced
Mis de 12 fabricantes, centenas de variedades.
Aperfeiçoamentos constantes
Melhorias na manufatura aumentam a velocidade e potência anualmente. Há ainda
versões de 16 bits vindo de diversos fabricantes.
Microcomputadores
Atuais Tendências 39
Atuais Tendências
Recentemente a PHILIPS Semiconductors lançou a versão 16bits do 8051: o 80C51XA
(eXtended Architecture). O conjunto de códigos mais denso não perde a
compatibilidade com códigos escritos para o 8051. O XA foi uma resposta às três
maiores tendências no desenvolvimento de sistemas microcontrolados: a necessidade
de se ter maior processamento por Dólar, o aumento do uso de linguagens de alto
nível e o crescente desenvolvimento de sofisticados sistemas operacionais multitarefas
e de tempo real.
Entre outras características, o XA conta com baixo consumo ( 3V com capacidade de
gerência de energia), endereçamento e conjunto de instruções expandidos. Com um
preço de U$ 7.00 e uma razão performance por dólar superior a qualquer outro
microcontrolador de 16bits, o XA resolve problemas de projeto por um inigualável
preço/performance.
Inspirada no sucesso do microcontrolador 8051, a indústria usou a mesma estratégia
lançando a completa família 80C51XA.
07_-_Microcomputadores e microcontroladores
Microcomputadores
Software do 8051 41
Software do 8051
Modos de endereçamento
Os modos de endereçamento do 8051 são os seguintes:
Modo Imediato
Neste modo de endereçamento, temos um endereço de 8 bits logo após a instrução,
endereço este no qual será efetuada a operação pela instrução. Como este endereço
possui apenas 8 bits, podemos acessar apenas os primeiras 256 posições de
memória, que compreendem a memória RAM interna e os registros de função especial
(SFR).
Exemplo: MOV A,25H
Esta instrução move para o acumulador, o dado presente na posição de memória RAM
interna de endereço 25H.
Modo Registrador
Neste caso, o nome do registrador a ser acessado está incluído no opcode, o que nos
permite economizar um byte de endereço. O registro afetado será o do banco de
registradores selecionados (*) no momento.
(*) Considerações sobre os bancos de registradores:
Temos quatro bancos de registradores chamados de RB0, RB1, RB2 e RB3, cada qual
com 8 registros de 8 bits, chamados indiferentemente de R0, R1, R2, R3, R4, R5, R6 e
R7. Quando nos referimos ao banco endereçado pelos bits RS1 e RS0 no registro
PSW, no instante da execução da instrução.
Microcomputadores
Software do 8051
42
Modo Indireto
Neste caso, o endereço sobre o qual a instrução trabalhará está indicado de forma
indireta pelos registros R0 ou R1, de qualquer um dos bancos de registradores. Por
este mo de endereçamento podemos acessar memória RAM externa ou interna. O
registro em questão contém o endereço sobre o qual a instrução agirá, e para
endereços de 8 bits pode ser, como já vimos, os registros R0 e R1 e o SP, e para
endereços de 16 bits deve ser o registro DPTR (data pointer).
Exemplo: Suponha que o registro R1 no banco selecionado contenha o valor 33H. A
instrução “MOV @R1,15H” moverá para o endereço indicado por R1, neste caso 33H,
o dado que está na posição 15H.
Modo Específico a Registro
Neste modo, o registro em questão já faz parte do código operacional (opcode). Temos
como exemplo, a instrução de ajuste decimal ao acumulador, DA A.
Modo constante imediata
Permite trabalhar com constante de forma direta. Um exemplo típico é a instrução de
preencher memória, MOV B,#252 que coloca a constante 252 decimal no registro B.
Modo indexado
Neste modo, o endereço efetivo é a soma do acumulador e de um registro de 16 bits,
que poderá ser o PC ou o DPTR. Com este modo de endereçamento podemos ler uma
tabela presente na memória ROM do sistema, e transferi-la para a memória RAM, ou
realizarmos funções com a mesma. Assim, vemos que as instruções por este modo
apenas lêem dados, e sempre da memória de programa. Aqui, o registro de 16 bits
contém o endereço inicial da tabela e o acumulador pode ir sendo incrementado para
viajar pela mesma.
Existem possibilidades de Jumps por este modo de endereçamento, e o endereço de
desvio é a soma do acumulador e do registro de 16 bits. Ainda para o caso dos Jumps
e chamadas de sub-rotinas, temos desvios curtos e longos. Os desvios longos
permitem-nos desviar a execução do programa para qualquer posição da memória de
programa, e os desvios curtos permitem-nos desvios para dentro de um mesmo bloco
de 2 Kbytes, onde está a instrução que chamou o desvio. Este modo é útil quando
quisermos dar desvios pequenos, pois permite-nos fazê-lo economizando um byte de
memória de programa com relação ao desvio longo.
Microcomputadores
Software do 8051 43
Modo Desvio Indexado
Usado nas instruções de desvio condicionais, estas instruções somam ao PC já
ajustado, o dado de 8 bits presente ao final da instrução.
Considerações sobre notação
Devemos agora esclarecer sobre como trabalhar com o software do 8051, visto
necessitamos diferenciar certas situações ambíguas. Temos, inicialmente, o caso dos
registradores. Em alguns compiladores, podemos escrever apenas R0 para o primeiro
banco de registradores, R0’, R0” e R0/ para o segundo, terceiro e quarto
respectivamente, que o mesmo se encarregará de diferenciá-los na hora de produzir o
código de máquina executável.
Temos também, que diferenciar os modos de endereçamento e o tratamento dado a
variáveis, constantes e endereços. Temos então:
• @ indica “indireto”, conforme vimos em um dos exemplos anteriores.
• # indica valor “constante”.
• H indica que o valor é hexadecimal.
• B indica que o valor é binário.
Estudo de algumas instruções em especial
Neste item, estudaremos algumas instruções que poderiam deixar dúvidas no
momento de sua utilização. No laboratório, veremos exemplos completos, embora
simples, de sistemas mínimos, tanto em termos de hardware e software, que nos
permitirão entender melhor o funcionamento global do sistema. Antes deste exemplos
de laboratório, devemos criar uma pequena tabela que nos permitirá entender certas
instruções, que possuem implícito um certo registrador Rn.
Existem instruções, como por exemplo DEC Rn, que decrementa o valor contido no
registro “n” de uma unidade. Estas instruções possuem apenas 1 byte, e trazem dentro
de si o registrador a ser afetado, da seguinte forma:
Em binário, temos o seguinte código: 0 0 1 1 a b c
Microcomputadores
Software do 8051
44
onde a, b, c fornecem o registrador, de acordo com a tabela da figura 11.
Rn; n = 0, 1, 2, ...7
Rn a b c
R0 0 0 0
R1 0 0 1
R2 0 1 0
R3 0 1 1
R4 1 0 0
R5 1 0 1
R6 1 1 0
R7 1 1 1
Figura 11 – Codificação dos registros
Na tabela geral, temos o opcode de cada instrução em hexadecimal sempre que
possível, assim como seu número de bytes e de ciclos de máquina. As instruções que
requerem dados implícitos estão em binário, para permitir sua utilização por aqueles
que não possuam um compilador e desejem desenvolver o seu próprio software. As
instruções de endereçamento indireto usam a codificação Ri, onde i pode ser 0 ou 1.
As instruções que possuem implícita esta característica também estão detalhadas em
binário na tabela geral, lembrando:
ADD A,@Ri, onde i = 0 ou i = 1
Esta instrução soma o conteúdo do acumulador e o da posição de memória indicada
indiretamente (@) pelo registro R0 ou R1 do banco selecionado. O resultado irá para o
acumulador.
ADDC A,#DADO, onde DADO é uma constante de 8 bits
Esta instrução soma o acumulador, o bit de Carry e o dado de 8 bits coloca o resultado
no acumulador.
Microcomputadores
Software do 8051 45
SUBB A,Rn
Esta instrução subtrai do acumulador, o valor presente no registrador Rn e o valor do
bit de Carry.
INC DPTR
Esta instrução incrementa o valor presente no registro de 16 bits chamado DPTR.
MUL AB
Multiplica os conteúdos de A e de B, colocando em B a parte mais significativa da
operação e em A a parte menos significativa. Dessa forma, temos como resultado BA.
Para clock de 12 MHz esta instrução leva apenas 4µs para ser executada,
comparativamente às instruções comuns levam apenas 1µs.
DIV AB
Divide o conteúdo do acumulador pelo conteúdo do registro B, colocando a parte
inteira do quociente do acumulador e o resto em B. Se B = 0, 0s resultados serão
indefinidos. Para clock de 12 MHz esta instrução leva apenas 4µs para ser executada,
comparativamente às instruções comuns que levam 1µs.
ANL DIRETO, #DADO
Efetua uma operação lógica AND entre o conteúdo da memória DIRETA e o DADO
presente na instrução. O resultado será colocado na posição de memória
DIRETAMENTE endereçada.
XRL A,@Ri
Efetua uma operação OU EXCRUSIVO entre o valor presente no acumulador e o valor
endereçado indiretamente pelo registro Ri, colocando o resultado no acumulador.
Geralmente, o primeiro argumento da instrução é o destino da operação.
RL A
Efetua um deslocamento global do acumulador para a esquerda. O conteúdo do bit 0
vai para o bit 1, o do bit 1 vai para o bit 2, e assim por diante. O conteúdo do bit 7 vai
para o bit 0. Nenhum bit de flag é afetado.
RRC A
Desloca o acumulador à direita, passando pelo flag de Carry. O bit 0 vai para o Carry,
o carry original vai para o bit 7, o bit 7 vai para o bit 6 e assim por diante.
Microcomputadores
Software do 8051
46
SWAP A
Esta instrução troca os quatro bits menos significativos do acumulador, pelos quatro
bits mais significativos. Por exemplo, se o acumulador contém o valor 01101001 (69H)
após esta instrução conterá 10010110 (96H).
MOV A,DIRETO
Move para o acumulador o dado presente no endereço DIRETO. Esta instrução
permite o movimento de variáveis apenas na memória RAM interna.
MOV A,#DADO
Move para o acumulador o valor da constante DADO, que para fins de escrita pode ser
decimal (sem sinalização), hexadecimal (H) ou binário (B).
MOV @Ri,#DADO
Move para a posição endereçado indiretamente por Ri (R1 ou R0) a constante DADO.
MOV DPTR,#DADO16
Move para o registro DPTR, a constante de 16 bits, presente na instrução.
MOVC A,@A+DPTR
Esta instrução soma o conteúdo do acumulador e do DPTR, gerando um endereço de
16 bits, e o CONTEÚDO deste endereço irá para o acumulador. Esta é a única
maneira de lermos uma constante gravada na memória de programa, como por
exemplo uma tabela de dados.
MOVX A,@Ri
Esta instrução move o conteúdo da memória de dados EXTERNA, indiretamente
endereçada pelo registro Ri, para o acumulador.
MOVX @DPTR,A
Move o dado presente no acumulador para a posição de memória endereçada pelo
DPTR, permitindo-nos escrever em qualquer posição da memória RAM externa.
XCH A,DIRETO
Troca o conteúdo do acumulador e o conteúdo do endereço direto entre si. O valor
presente no acumulador irá para a memória de dados, cujo endereço segue para o
opcode e o dado que estava originalmente naquele posição de memória, irá para o
acumulador.
Microcomputadores
Software do 8051 47
XCHD A,@Ri
Semelhante à anterior, porém neste caso, apenas os quatros bits “menos
significativos” são trocados entre si.
Por exemplo, se A = 0101 0001 e uma certa posição endereçada indiretamente por Ri
contém 00111101, após esta instrução, teremos A = 01011101 e @Ri = 00110001.
POP DIRETO
O conteúdo do Stack é lido e transferido para o endereço direto, e o SP é
decrementado de uma unidade.
PUSH DIRETO
O SP é incrementado de uma unidade e depois o conteúdo do endereço direto é
escrito no Stack.
CLR bit
Esta instrução zerará o bit cujo endereço está imediatamente após o opcode. Como foi
visto no estudo da memória RAM, além dos endereços dos bytes, temos endereços
para os bits, alguns inclusive com mnemônicos. Ao detectar que a instrução é uma
instrução para bit, a CPU sabe que o byte seguinte é o endereço de um único bit, e
não de um byte como nas operações normais.
Por exemplo, a instrução CLR EX1 ou CLR AAH desabilitará a interrupção externa 1,
visto ser o endereço deste bit nos registros de função especial AAH e seu mnemônico
EX1.
CPL A
Esta instrução inverte o estado de cada bit do acumulador. Se antes A = 01011101,
depois A = 10100010.
OLR C,/bit
Efetua uma operação OR entre o carry bit e o COMPLEMENTO (inverso) do bit
endereçado.
JNB bit,rel
Esta instrução testa o bit indicado e desvia se o mesmo for zero. Após o ajuste do PC,
a CPU somo o terceiro byte desta instrução ao PC para gerar o endereço final do
Microcomputadores
Software do 8051
48
desvio, se o teste resultar verdadeiro. Sempre que uma instrução for executada, o PC
contém o valor do endereço da “próxima” instrução que será executada.
Por exemplo. Se neste caso o PC contém o valor 200H, temos o seguinte trecho de
programa:
200H JNB P1.1,25H
203H --------------
-------
228H //////////
//////
Neste caso, ao executar a instrução JNB, o PC conterá imediatamente o endereço da
próxima instrução, que deverá estar em 203H. Se o teste não for verdadeiro, o
programa prossegue sua execução neste endereço. Mas se o teste for verdadeiro, o
PC será somado ao dado 25H, e resultará 228H, e prosseguirá a partir daí.
JBC bit,rel
Esta instrução testará o bit indicado e caso o mesmo esteja setado, realizará duas
operações. Primeiro zerará o bit, segundo efetuará um desvio relativo, de acordo com
o dado do terceiro byte. Se o bit estiver zerado, o teste resultará falso e não ocorrerá
desvio. O cálculo do endereço de desvio relativo funciona da mesma maneira que no
exemplo anterior.
ACALL endll Chamada de sub-rotina absoluta
Esta instrução faz com que o programa continue sua execução em outra posição da
memória de programa, após incrementar o PC duas vezes e salvá-lo no Stack,
incrementando o valor deste em duas vezes também. Este endereço que foi salvo no
Stack, é o endereço de retorno ao final da sub-rotina. O endereço (de 16 bits) de
destino é gerado da seguinte maneira:
• Bits 11 a 15 = mantêm-se os bits do PC original.
• Bits 8 a 10 = são os bits 5 a 7 “opcode” (a10 a9 a8). Os bits 0 a 4 são fixos.
• Bits 0 a 7 = são os do segundo byte da instrução.
Dessa forma, o programa pode continuar dentro do mesmo bloco de 2 kbytes ao qual
pertence a instrução de retorno da sub-rotina. Se o PC for XXXXX00000000000,
teremos a representação de desvio da figura 1.a abaixo, que efetua um avanço em
Microcomputadores
Software do 8051 49
relação à posição atual do PC. Se for XXXXX11111111111, teremos a representação
de desvio da figura 1.b abaixo, que efetua um retrocesso em relação à posição atual
do PC.
Se o PC contiver um valor intermediário entre esses, poderemos ter avanço ou
retrocesso, visto que os bits 11 a 15 “não se alteram”, conforme figura abaixo.
LJMP end 16
Causa um desvio incondicional para o endereço de 16 bits, indicado pelos 2 bytes
imediatamente após o opcode. Por ser um desvio e não uma chamada de sub-rotina,
nenhum endereço de retorno é salvo.
SJMP rel
Desvio curto relativo. O endereço de desvio é dado pela soma do byte após o opcode
com o valor do PC já ajustado, ou seja, incrementado duas vezes (esta é uma
instrução de 2 bytes). Podemos desviar para 128 posições antes da atual, ou para 127
após a atual.
RET
Efetua o retorno da sub-rotina. O endereço de retorno é recuperado do Stack e
armazenado no PC.
Microcomputadores
Software do 8051
50
RETI
Efetua um retorno de uma interrupção. A diferença desta para a anterior está em que
esta instrução habilita novas interrupções de mesma prioridade, ou menos prioritárias
já pendentes a serem executadas. Esta instrução não recupera o acumulador e o
PSW, assim como as interrupções não salvam os mesmos, ficando tal tarefa por conta
do software.
JMP @A+DPTR
Carrega o PC com a soma do acumulador e do DPTR, e continua a execução a partir
desse endereço.
CJNE A,direto,rel
Esta instrução compara o acumulador e o dado na posição de memória diretamente
endereçada. Se forem iguais, o programa prossegue normalmente na próxima
instrução. Se forem diferentes, já estando o PC endereçado a próxima instrução, é o
mesmo somado ao dado de 8 bits no terceiro byte da instrução. Mais, se o acumulador
for menor que o dado da memória, o flag C será setado. Caso contrário, se o
acumulador for maior, o flag C será zerado.
DJNZ Rn,rel
Decrementa o dado presente no registro Rn e desvia, se o resultado for diferente de
zero. O endereço de desvio relativo é obtido da mesma forma que na instrução
anterior. Se o resultado após o decremento for nulo, não desvia e prossegue na
próxima instrução.
DA A (Ajuste decimal do acumulador)
A instrução DA A deve ser utilizada apenas com somas, nas quais as quantias a serem
somadas sejam DECIMAIS (por nós ajustadas dessa forma) e, como para a CPU todos
os valores são hexadecimais, o resultado será escrito desta forma. Um exemplo desta
situação é o seguinte:
(1) 1010 + 1010 = 2010
(2) 10H + 10H = 20H
Para a CPU a primeira soma (1) não resultará em 2010, como para nós, mas sim em
20H (2). Se estamos interpretando os dados a serem somados como DECIMAIS,
devemos ter meios de ajustar o resultado obtido para tal. Este meio é a instrução DA
A.
Microcomputadores
Software do 8051 51
Exemplo:
Temos A = 4910 e B = 7510
A instrução ADD A,B resultará em A = BEH e C = 0
A instrução DA A em seguida ajustará o resultado para A = 24 e C = 1, pois:
Bem existe outras instruções mais sofisticadas que são utilizadas em programas mais
elaborados, assim é necessário termos o SET de INSTRUÇÕES do 8051 que pode ser
obtido diretamente de qualquer fabricante do mesmo através da Internet.
Este material é apenas para que o aluno se familiarize com o microcontrolador, para se
aprofundar mais é necessário livros para a complementar os assuntos não abordados
neste material. Porém esta apostila possibilita o aluno a dar os primeiros passos na
programação e depuração de instruções para o microcontrolador 8051.
Sugestão de literatura complementar:
Silva Jr, Eng. Vidal Pereira da – MICROCONTROLADOR 8051 Hardware e Software -
Ed. Érica
Nicoli, Denys E. C. – Microcontrolador 8051 DETALHADO – Ed. Érica
Microcomputadores
Software do 8051
52
Referência:
80C51 – Based 8 bits Microcontrollers. USA: Philips, 1998
Application Notes and Development Tools for 80C51 Microcontroller. USA: Philips,
1997
Microcomputadores
Atividades de Laboratório 53
Atividades de Laboratório
Introdução
A palavra-chave da indústria eletrônica (hoje em dia) é o microprocessador, presente
no processamento de dados (computadores, impressoras, vídeos, redes de
comunicação, etc), instrumentação e controle.
Há muitas famílias de microprocessadores. O Intel 8086 e o Motorola 68000 são os
principais processadores, usados, sobretudo no processamento de dados.
Este manual concentra-se no 8051, microprocessador empregado na indústria
essencialmente como microcontrolador.
Há muitas razões para a popularidade do 8051, entre elas:
• O fato de incluir mais funções que um processador comum: UCP, RAM, ROM,
portas, temporizadores, possibilidades de interrupção e comunicação serial;
• Grande conjunto de instruções, que dão ao usuário a capacidade de
programar em nível de bit como um processador booleano.
Estas e outras características permitem aos produtores economizar componentes
caros, espaço e energia.
Este manual e o sistema EB-153 têm o objetivo de treinar técnicos e mesmo pessoas
que só possuam um conhecimento superficial dos microprocessadores, para que se
familiarizem com a maioria dos aspectos do “chip” (pastilha).
Os dois primeiros capítulos voltam-se para o conhecimento do EB-153 e o treinamento
nessa máquina. Os quatro capítulos seguintes treinam o estudante nos Acessos I/O
(E/S) e em importantes características de software (programação do chip). Os
Microcomputadores
Atividades de Laboratório
54
capítulos 7, 8 e 9 familiarizam o aluno com temporizadores, interruptores e UARTs. O
capítulo 10 inclui o modo de localização de falhas (a ser usado apenas com o EB-
2000).
Nos apêndices estão explicações sobre rotinas monitoras e sobre como endereçar
(mapa de memória).
Desejamos agradecer especialmente à Intel Corporation pela gentil permissão de usar
informações técnicas para seu Manual de Usuário MCS-51. Os interessados em obter
informações mais detalhadas poderão comprar o manual MCS-51 diretamente da Intel.
Microcomputador
Introdução 55
Introdução
A palavra-chave da indústria eletrônica (hoje em dia) é o microprocessador, presente
no processamento de dados (computadores, impressoras, vídeos, redes de
comunicação, etc), instrumentação e controle.
Há muitas famílias de microprocessadores. O Intel 8086 e o Motorola 68000 são os
principais processadores, usados, sobretudo no processamento de dados.
Este manual concentra-se no 8051, microprocessador empregado na indústria
essencialmente como microcontrolador.
Há muitas razões para a popularidade do 8051, entre elas:
1. fato de incluir mais funções que um processador comum: UCP, RAM, ROM, portas,
temporizadores, possibilidades de interrupção e comunicação serial;
2. grande conjunto de instruções, que dão ao usuário a capacidade de programar em
nível de bit como um processador booleano.
Estas e outras características permitem aos produtores economizar componentes
caros, espaço e energia.
Este manual e o sistema EB-153 têm o objetivo de treinar técnicos e mesmo pessoas
que só possuam um conhecimento superficial dos microprocessadores, para que se
familiarizem com a maioria dos aspectos do “chip” (pastilha).
Os dois primeiros capítulos voltam-se para o conhecimento do EB-153 e o treinamento
nessa máquina. Os quatro capítulos seguintes treinam o estudante nos Acessos I/O
(E/S) e em importantes características de software (programação do chip). Os
capítulos 7, 8 e 9 familiarizam o aluno com temporizadores, interruptores e UARTs. O
capítulo 10 inclui o modo de localização de falhas (a ser usado apenas com o EB-
2000).
Nos apêndices estão explicações sobre rotinas monitoras e sobre como endereçar
(mapa de memória).
Desejamos agradecer especialmente à Intel Corporation pela gentil permissão de usar
informações técnicas para seu Manual de Usuário MCS-51. Os interessados em obter
informações mais detalhadas poderão comprar o manual MCS-51 diretamente da Intel.
07_-_Microcomputadores e microcontroladores
Microcomputadores
Laboratório 1 57
Laboratório 1
Travando Conhecimento com o EB-153
Objetivos
Após completar estas atividades de aprendizado em laboratório, você deverá ser
capaz de:
• Identificar as principais peças do microcontrolador EB-153 e descrever suas
funções.
• Identificar os sinais de entrada/saída (in/out) e descrever suas funções.
• Usar as funções monitoras para analisar a operação do microcomputador.
Equipamento Necessário
• 1 Computador central PU-2000 (Unidade central de processamento - Sistema
de Aprendizado Eletrônico Computadorizado)
• 1 Placa Mestra
• 1 Unidade EB-153 - Placa de Circuito Impresso
Como Iniciar o Laboratório
1. Coloque a placa de circuito impresso do EB-153 na unidade central.
2. Ligue a placa mestra.
Procedimento
3. As explicações sobre a Unidade de Microcomputador EB-153 serão úteis para
saber como este sistema deverá ser operado antes de efetuar as experiências.
A Figura 2 mostra o diagrama de bloco da Unidade EB-135:
Microcomputadores
Laboratório 1
58
Figura 2: Diagrama de Bloco do EB-135
A placa do EB-135 é um sistema de microcomputador completo. Esta unidade inclui as
seguintes partes:
• Microcontrolador
Microcontrolador 8031 de 8 bits que serve como a unidade central de
processamento, ou “cérebro”.
• Matriz Distribuidora
Matriz distribuidora de dados/endereço, usada para separar endereço do
barramento de dados. O barramento da matriz distribuidora consiste de 8 vias de
dados e 16 vias endereços. O ALE (Address Latch Enable), ou sinal Habilitador de
Memória de Endereço, ativa uma via octal para demultiplexar os dados dos
endereços.
• ROM
Read Only Memory, ou Memória de Apenas Leitura, ou Memória Fixa, que contém
o programa monitor usado para realizar as experiências.
• RAM
Random Access Memory, ou Memória de Acesso Direto, ou ainda,
especificamente, Memória de Leitura-Escritura, usada pelo microcontrolador para a
armazenar dados temporários e programas do usuário.
Microcomputadores
Laboratório 1 59
• PPI
Programmable Peripheral Interface, ou Interface Paralela Programável – 8255 – usado
para interfacear (interligar) o teclado ao microcontrolador e proporcionar linhas
adicionais de E/S de 8 bits.
• Vídeo LCD
Módulo matriz de pontos de LCD (Liquid Crystal Display) contendo controlador de LSI
(Large Scale Integration = Integração em Larga Escala) para exibição de caracteres.
Devido ao gerador de caracteres e a RAM de dados do vídeo no controlador, podem-
se exibir 96 tipos especiais. Este é um Módulo de 16 caracteres X 2 linhas.
• Circuito RS-232
Usado para interfacear o microcontrolador EB-153 com dispositivos seriais padrões,
tais como computadores pessoais IBM PC/XT/AT ou compatíveis, impressoras seriais,
etc.
• Barramento de Interface: provê expansão paralela para o microcontrolador
EB-153.
Estas linhas de dados de 8 bits, linhas de endereço de 4 bits, terra e linha de seleção
de um chip são úteis para expandir o microcontrolador básico EB-153 para várias
aplicações de hardware, como relês, sensores, unidades de controle, etc.
A Unidade EB-153 tem as duas teclas de comando seguintes:
• Reset
Restaura os circuitos do microcontrolador;
• Interrup
Interrompe o microcontrolador.
4. Localize o circuito integrado do microcontrolador 8031.
Esta é a Unidade Central de Processamento (UCP) do EB-153, e executa todo o
movimento de dados, aritmética, contagem de tempo e controle de dados para os
demais circuitos. O 8031 é uma UCP orientada para controle, sem memória ROM
interna.
Pode endereçar 64 Kbytes de Memória de Programas Externos, além de 64 Kbytes de
Memória de Dados Externos.
Microcomputadores
Laboratório 1
60
O 8051 é um 8031 com os 4 Kbytes inferiores de Memória de Programa preenchidos
em ROM programável da máscara no chip, enquanto o 8751 tem 4 Kbytes de EPROM
Apagável por UV/eletricamente programável.
O termo genérico “8051” é usado como referência coletiva para o 8031, o 8051 e o
8751.
5. Localize o cristal de quartzo no invólucro de metal.
Este é o dispositivo que ajusta precisamente a freqüência do relógio (clock) em 12MHz
para a UCP.
6. A memória reside em quatro circuitos integrados:
• O 8031 inclui 128 bytes de RAM Interna de Dados e 128 bytes de
registros de funções especial;
• Uma EPROM (Memória Fixa Apagável) 27256 (32K bytes) que contém o
programa monitor – é uma memória de programa;
• Uma RAM 6264 (8 K bytes) que constitui a memória do usuário ou
memória de dados externa. O usuário poderá armazenar seu programa
que será executado pelo microprocessador.
• Um soquete de expansão de memória permite ao usuário conectar uma
EPROM ou EEPROM (de 8K bytes a 32 K bytes) – esta memória de
programa pode ser usada para executar software de aplicações
especiais.
7. Observe os três barramentos que conectam a UCP aos outros circuitos.
O Barramento de Dados é uma conexão bidirecional de 8 vias para deslocar bytes
de código de programa entre a memória externa, a UCP e aos demais circuitos.
A direção do fluxo de dados é controlada pela UCP usando os sinais RD, WR e
PSEN o BARRAMENTO DE CONTROLE e do BARRAMENTO DE ENDEREÇO.
8. Barramento de Endereço é uma conexão de 16 vias (fios) da UCP aos
demais circuitos. O 8051 não tem quantidade de pinos disponíveis para 16 linhas
de endereço no seu pacote de 40 pinos. Divide os pinos do Barramento de Dados
com a metade inferior do Barramento de Endereço. Na primeira metade de cada
Microcomputadores
Laboratório 1 61
ciclo, os pinos contêm valores de endereço, e o sinal de controle ALE (Ativador de
memória de Endereço) vai para nível lógico “um” para indicar a presença de
endereço formado.
No EB-153 as informações de endereço são armazenadas num Latch (memória) de
Endereço, o 74LS373. Durante a Segunda metade do ciclo, só se usa o Barramento de
Dados para transferir dados. Localize este Latch.
9. Barramento de Controle inclui todos os sinais de controle unidirecionais e
unifuncionais usados para operar o sistema microprocessador.
10. Observe o módulo LCD (DISPLAY DE CRISTAL LIQUIDO) da matriz de
pontos.
Consiste de uma combinação de um painel matricial de cristal líquido com pontos de
5 X 7, 16 caracteres, 2 linhas, acionador e controlador de vídeo de cristal líquido
montados numa única PCI (placa de circuito impresso). Incorporando gerador de
caracteres sediado na ROM, e RAM de dados de vídeo no controlador LSI, a unidade é
capaz de exibir os caracteres desejados sob o controle do microprocessador.
11. Localize a Interface paralela programável (PPI) 8255.
Esse dispositivo faz a interface (interliga) entre o teclado e o microcontrolador.
12. Digite a tecla RESET.
13. Digite a tecla H para exibir o menus de ajuda. Use a tecla “down key” (seta
para baixo) para exibir todas as informações contidas no menu de ajuda. Use a
tecla “up key” (seta para cima) para ver a exibição anterior.
14. Digite a tecla “CLEAR ENTRY” para sair do menu de ajuda.
15. Use os comandos de ACESSO A MEMÓRIA para examinar e modificar a
memória no chip do microcontrolador e na memória externa na placa. Comece com
a memória de Código. A memória de código é externa ao microcontrolador 8031.
Esta memória é acessada durante a execução do programa pelo endereço no
contador de programa e pelo sinal PSEN (“programselect enable” ou habilitador de
Microcomputadores
Laboratório 1
62
seleção de programa) – do microcontrolador. Este comando permite que você
carregue, examine e modifique programas hexadecimais na memória.
Digite o seguinte: CBYTE 0000H (Memória de Código)
16. Lembre-se que o endereço é um número hexadecimal de quatro dígitos,
seguido por H. O endereço 0000H é o primeiro endereço do programa monitor.
Pressione a tecla ENTER após digitar sua entrada.
17. Use as setas para mudar o endereço. Os dados não são modificados até que
se digite a tecla ENTER. Mudar de endereços por meio de setas não modifica o
conteúdo da memória. Coloque o endereço em E000H e observe os dados
correspondentes. Como se trata de uma memória RAM, os dados podem ser
mudados.
18. Entre um valor de dados e digite a tecla ENTER. Volte ao endereço original e
observe como os dados foram colocados na memória.
19. Tente modificar dados pertencentes a uma localização da ROM (endereço
0000H a 7FFFH). Observe o resultado desta operação. Digite as teclas CLEAR,
ENTER (Limpe, Entrada) para abandonar este comando.
20. Use o comando Memória Externa. A memória externa de dados é acessada
com as instruções M0VX. A operação é controlada pelas linhas RD (“read – leitura)
e WR (“write”- gravação) do 8031. A palavra-chave de comando é XBYTE. Este
comando usa RD e WR para acessar memória externa de dados.
Digite o seguinte: XBYTE E000H
21. Pressione a tecla ENTER e modifique dados e endereço. Este comando
opera da mesma maneira que o comando CBYTE. A memória externa e a memória
de código ficam sobrepostas na RAM de 8 K bytes. Portanto, os valores de dados
são os mesmos se forem lidos pelo sinal RD seja pelo sinal PSEN.
22. “Uso do comando de Memória Interna”. A memória interna é a RAM de dados
no chip. Os endereços de dados no chip encontram-se na faixa de 00H a 7FH. Há
quatro bancos de registros de uso geral (endereços 00H até 1FH inclusive). A pilha
é uma parte da RAM de dados no chip. Os endereços 20H a 2FH contém bytes
Microcomputadores
Laboratório 1 63
endereçáveis por bit. Note que o valor do byte deve ser um endereço na RAM de
dados que deixe espaço para a pilha, de modo a que o ponteiro da pilha nunca
ultrapasse o máximo de 7FH.
Para exibir o conteúdo do endereço 70H da memória de dados do chip, digite o
seguinte: CBYTE 70H
23. “Uso do comando Memória de Registro”. Os endereços de registro de função
especial do 8031 estão na faixa 80H a FFH, mas os registros não preenchem o
espaço inteiro do endereço.
Para exibir o conteúdo do registro 90H, digite o seguinte: RBYTE 90H
Observe que o valor do byte deve ser um endereço na RAM de registro.
24. Pressione a tecla ENTER. Aparecerá no display o estado da porta 1,
correspondente ao endereço 90H. Mude seus dados e observe as alterações
correspondentes nos LEDs acoplados a esta porta. Note que apenas quatro bits
estão conectados aos LEDs, e os quatro bits restantes são conectados a chaves.
Use as setas para mudar o endereço e volte ao mesmo enquanto mudar as
posições de chave. Modifique o 1º digito e pressione ENTER.
25. Uso do comando Memória de Bit. Partes da memória de dados no chip e de
registro de função especial são endereçáveis por bit. Endereços de bits na faixa de
00H até 7FH estão na memória interna. Endereços em bit na faixa 80H até FFH
referem-se a bits individuais de registros na memória de registros.
Para exibir o conteúdo da porta 1, Bit 0, digite o seguinte: RBIT 90H
As setas executam a mesma função descrita para o comando CBYTE.
26. Pressione a tecla ENTER. Aparecerá no display (LCD) o estado da porta 1,
Bit 0. Mude a posição da chave acoplada a esta porta e use as setas para exibir os
dados do bit. Mude os dados da porta 1, Bit 7 e observe o Led acoplado aquela
porta.
** 8031 não possui ROM interna. A EPROM está ocupando os endereços de 0000H
até 7FFFH.
Microcomputadores
Laboratório 1
64
Só é possível a leitura das chaves P1.0 até P1.3, logo após o reset, mas escrever em
P1.4 até P1.7 é possível a qualquer instante.
Questões
27. Quantas linhas estão contidas no barramento de dados?
28. Qual a diferença entre RAM interna de dados e a RAM externa de dados?
29. Quantos endereços podem ser selecionados pelo barramento de endereço?
30. Como o microprocessador acessa a memória de código?
31. Que sinal grava dados na memória de código?
Microcomputadores
Laboratório 2 65
Laboratório 2
Sub-rotinas Monitoras
Objetivos
Após completar estas atividades de aprendizado em laboratório, você deverá ser
capaz de:
• Executar programas simples no EB-153.
• Executar programas passo a passo e de tempo real.
• Montar e demonstrar um programa.
Equipamento Necessário
• 1 Computador central PU-2000 (Unidade central de processamento - Sistema
de Aprendizado Eletrônico Computadorizado)
• 1 Placa Mestra
• 1 Unidade EB-153 - Placa de Circuito Impresso
Como Iniciar o Laboratório
1. Coloque a placa de circuito impresso do EB-153 na unidade central.
2. Ligue a placa mestra.
Procedimento
3. Os seguintes exercícios se fazem com os Comandos Assembler. Estes
comandos permitem ao usuário ler e gravar programas em linguagem assembly. O
comando assembler organiza uma instrução mnemônica simples na memória do
programa. O monitor mantém um indicador de montagem para indicar o endereço
onde a próxima instrução deve começar. O comando ASM começa no endereço
especificado pós a palavra chave ASM. Se não for especificado nenhum endereço,
usa-se o endereço inicial. Este indicador é o primeiro código de RAM disponível
(E000H). O display exibe o endereço inicial. O usuário digita cada instrução
Microcomputadores
Laboratório 2
66
mnemônica do 8051, pressionando a tecla ENTER para cada instrução. As setas
direita e esquerda são utilizadas para corrigir o texto. Se o usuário digitar uma
instrução errada, aparece no display uma mensagem de erro de sintaxe. O erro
não altera o PC (contador de programa).
Digite o comando ASM: ASM E000H, e pressione a tecla ENTER.
4. Digite as seguintes instruções e pressione a tecla clear após o último Enter.
CLR A
INC A
LJMP E001H
Este programa simples incrementa o conteúdo do acumulador.
5. O comando DASM permite ao usuário desassemblar valores da memória de
códigos do 8051. O programa monitor pressupõe que o endereço inicial do
comando aponta para o primeiro byte de uma instrução e, se necessário, toma o
segundo e terceiro bytes para usar como operandos. Pode-se usar a seta de baixo
a fim de incrementar o indicador de endereço e mostrar outras instruções
desmontadas no display.
Digite DASM E000H e pressione a tecla ENTER. Use a seta de baixo para mostrar o
programa armazenando e compare-o com instruções introduzidas com o comando
ASM. Pressione a tecla clear para abandonar este comando.
6. Use o comando CBYTE E000H para verificar se as instruções foram gravadas
adequadamente na memória em valores hexadecimais.
7. Os Comandos de Execução De Programa se usam para controlar a execução
de programas já gravados.
O comando GO inicia a execução de um programa em tempo real. Digite o que se
segue para executar seu programa, e pressione depois a tecla ENTER:
GO E000H
Microcomputadores
Laboratório 2 67
8. Durante a execução do programa, o display apresenta a mensagem:
“Running User’s Program” (Executando o Programa do Usuário). A execução do
programa continua até você pressionar a tecla INTR. Aí, a execução para e se
exibem o contador do programa e sua instrução correspondente. Pressionando a
seta de baixo aparecem os seguintes registros e seus conteúdos: SP (ponteiro da
pilha) A (acumulador) DPTR (indicador de endereço de dados externos) e PSW
(programa status word, ou palavra de estado do programa).
Pressione outra vez a seta de baixo para devolver o controle ao monitor.
9. Usando os comandos de descarga, podem-se exibir no display a memória
interna e todos os registros como foram gravados durante a interrupção do
programa. Tecle RDUMP E0H e pressione a tecla ENTER para descarregar o
conteúdo do acumulador.
Pressione a tecla clear para abandonar este comando.
10. O comando passo a passo executa uma parada de programa após cada
instrução.
Após executar cada instrução, o display exibe a instrução seguinte e seu endereço
(contador de programa), o acumulador, o indicador de dados, o ponteiro da pilha e a
palavra de estado do programa. Você pode deter o modo de passo automático
pressionando qualquer tecla. Esta operação lhe permite observar no display toda vez
que for necessário. Soltando a tecla pressionada, prossegue a execução do programa.
Digite STEP E000H e pressione a tecla ENTER para executar passo a passo o
programa previamente montado.
Observe os diferentes passos do programa e os incrementos do acumulador.
Pressione qualquer tecla para interromper a execução do programa em diferentes
etapas.
11. Pressione a tecla INTR para pôr fim à execução do programa. Pressione a
seta para baixo a fim de exibir os registros. Pressione de novo a mesma tecla para
abandonar o comando de passo.
Microcomputadores
Laboratório 2
68
12. Use os comandos de descarga para comparar os valores de registro com a
última exibição de registro.
13. O comando de ponto de parada posiciona ou restaura endereços de ponto de
interrupção. Verifica-se o endereço de ponto de interrupção com os comandos GO
ou STEP. Quando se executa um endereço de ponto de interrupção, o sistema
interrompe o microcomputador e detém o processamento. Exibem-se então o
endereço de parada e sua instrução correspondente. Pressionando a seta de
baixo, exibem-se os seguintes registros e seus conteúdos: SP (ponteiro da pilha) A
(acumulador), DPTR (indicador de dados) e PSW (palavra de estado de programa).
Note que esses valores correspondem ao estado do microcomputador “antes” de
Executar a instrução do endereço de parada. O endereço do ponto de interrupção deve
ser o endereço de um byte de código de operação e não um byte de operando.
Digite BR E002H para posicionar “um ponto de interrupção” no endereço E002H, e
execute outra vez o comando de passo (STEP). Observe como o programa pára no
endereço do ponto de interrupção.
14. Volte ao monitor e restaure o ponto de interrupção digitando BR e
pressionando a tecla ENTER. Execute outra vez o comando passo a passo.
15. Agora você vai usar várias funções incorporadas do monitor. Usa-se o
seguinte conjunto de programa para comunicar o microprocessador com o módulo
e vídeo. A rotina Clear Display (endereço FF80H) limpa a tela. Monte o seguinte
programa:
Endereço Instrução Comentários
E000H LCALL FF80H Chame a rotina clear display
E003H LJMPE003H Parada
Figura 1: Programa Clear Display
16. Digite GO E000H e pressione a tecla Enter. Observe como a tela é limpa.
Pressione a tecla de comando INTR para sair do programa.
17. Dados ASCII podem ser transferidos para o vídeo preenchendo uma memória
intermediária localizada no endereço FF90H a FFAFH e executando a rotina
Display-Buffer (endereço FF83H0. Use o comando XBYTE para encher a memória
intermediária (buffer) como se segue:
Microcomputadores
Laboratório 2 69
ENDEREÇO DADO COMENTÁRIOS
FF90H 30H 0
FF91H 31H 1
FF92H 32H 2
FF93H 33H 3
FF94H 34H 4
FF95H 35H 5
FF96H 36H 6
FF97H 37H 7
FF98H 38H 8
FF99H 39H 9
FF9AH 41H A
FF9BH 42H B
FF9CH 43H C
FF9DH 44H D
FF9EH 45H E
FF9FH 46H F
FFA0H 61H a
FFA1H 62H b
FFA2H 63H c
FFA3H 64H d
FFA4H 65H e
FFA5H 66H f
FFA6H 67H g
FFA7H 68H h
FFA8H 69H i
FFA9H 6AH j
FFAAH 6BH k
FFABH 6CH l
FFACH 6DH m
FFADH 6EH n
FFAEH 6FH o
FFAFH 70H p
Figura 2: Memória Intermediária e Símbolo ASCII
Microcomputadores
Laboratório 2
70
18. Digite ASM E000H (enter) e os comandos abaixo:
ENDEREÇO INSTRUÇÃO COMENTÁRIOS
E000H LCALL FF83H Chame rotina display-buffer
E003H LJMP E003H Parada
Figura 3: Memória Buffer e Símbolo ASCII
19. Digite GO E000H e pressione a tecla ENTER. Observe como a mensagem é
exibida.
Pressione a tecla de comando INTR para sair do programa. Execute este programa
para diferentes valores ASCII (00H a 7FH).
20. Pode-se transferir um único byte ASCII para o display especificando o
endereço de exibição (endereço FFB0H), os dados de exibição (endereço FFB1H)
e executando a rotina DISPLAY-CHARACTER (endereço FF86H). A faixa de
endereço do display é 00H a 1FH. Use o comando XBYTE para preencher a
memória externa de dados, da seguinte maneira:
Atividade Extra – Você agora deve apresentar um programa que coloque no centro da
primeira linha do display a palavra: MICROCONTROLADOR.
ENDEREÇO DADOS COMENTÁRIOS
FFB0H 05H Endereço do caractere 5
FFB1H 58H Símbolo ASCII: “X”
Figura 4: Endereço do Caracter e Dados ASCII
Após ultimo ENTER, digite CLEAR.
21. Digite ASM E000H (ENTER) e os comandos abaixo:
ENDEREÇO INSTRUÇÃO COMENTÁRIOS
E000H LCALL FF80H Chame rotina clear-display
E003H LCALL FF86H Chame rotina display caracter
E006H LJMP E006H Parada
Figura 5: Programa Display Character
Após o último ENTER, digite CLEAR.
Microcomputadores
Laboratório 2 71
22. Digite GO E000H e pressione a tecla Enter. Observe como o caracter X é
exibido na Sexta posição. Pressione a tecla de comando INTR para deixar o
programa. Execute este programa para diferentes caracteres ASCII e endereços.
Atividade Extra – Apresente um programa para que o caracter R seja colocado:
• Na decima posição da primeira linha;
• Na primeira posição da primeira linha;
• No centro da segunda linha.
Observações
23. Quantos símbolos ASCII podem ser exibidos?
24. Qual é a diferença entre a execução de um programa passo a passo e de
tempo real?
25. Como se pode posicionar o acumulador em 0?
07_-_Microcomputadores e microcontroladores
Microcomputadores
Laboratório 3 73
Laboratório 3
Portas de Entrada/Saída
Objetivos
Após completar estas atividades de aprendizado em laboratório, você deverá ser
capaz de:
• Manipular variáveis booleanas.
• Usar as capacidades de entrada/saída de um microcomputador.
• Montar programas que façam uso dos acessos de um microcomputador.
• Fazer programas que façam uso do Subconjunto de Instruções de
Processamento Booleano.
Equipamento Necessário
• 1 Computador central PU-2000 (Unidade central de processamento - Sistema
de Aprendizado Eletrônico Computadorizado)
• 1 Placa Mestra
• 1 Unidade EB-153 - Placa de Circuito Impresso
Como Iniciar o Laboratório
1. Coloque a placa de circuito impresso do EB-153 na unidade central.
2. Ligue a placa mestra.
Procedimento
3. O 8031 tem quatro bancos de 8 registros ocupando localizações de 0 a 31
(00H até 1FH) da RAM interna de dados. O Endereçamento de Registro permite
acesso aos oito registros (R0 – R7) do Banco de Registro selecionado (RB). Um
dos quatro Bancos de 8 registros é selecionado por um campo de dois bits no PSW
(registro de palavra de estado de programa), como indica na figura seguinte. Esses
dois bits são RS0 e RS1.
Microcomputadores
Laboratório 3
74
(MSB) (LSB)
CY AC FO RS1 RS0 OV P
Figura 1: Organização de Palavra de Estado (status) de Programa
O registro PSW (PROGRAM STATUS WORD) está localizado no endereço D0H. PSW
é um registrador de status da última operação realizada no acumulador.
CY ou C – carry
É um indicador de “vai um” em operações aritméticas.
FO – Flag 0
É um bit registrador de uso geral, não tem nenhuma função especial.
RS1 e RS0
São 2 bits que fazem mudar o banco de registradores a que se referem os nomes R0 a
R7.
OV – overflow flag
É um bit que vai para 1 quando, após uma adição ou subtração, acontece um “estouro”
da conta.
P – parity
Bit que é “setado” em “1” quando a paridade do conteúdo do acumulador é par.
O seguinte programa mostra como manipular os bancos de registro do 8051 (Figura 2).
ENDEREÇO INSTRUÇÕES COMENTÁRIOS
E000H MOV D0H,#18H Selecione banco de registro 3
RS1 = 1 – RS0 = 1
E003H MOV R0,#55H Coloca 55H em R0
E005H MOV R1,#66H Coloca 66 em R1
E007H MOV R2,#77H Coloca 77 em R2
E009H MOV D0H,#00H Restaure o banco de registro 0
RS1 = 0 – RS0 = 0
E00CH LJMP E00CH Parada
Microcomputadores
Laboratório 3 75
Figura 2 : Como Manipular os Bancos de Registro
O sinal # imediatamente antes da expressão indica que se trata de um operando
imediato de dados e não de um endereço.
4. Monte o programa dado na Figura 2.
5. Use o comando GO para executar esse programa. Digite a tecla de comando
INTR para parar o programa.
6. Use o comando DDUMP para descarregar os registros R0 a R2 do banco 3 e
note como os valores numéricos do programa foram armazenados nos endereços
correspondentes (endereço 18H a 1AH).
7. Endereçamento Direto proporciona o único meio de acessar os Registros de
Função Especial “byte-wide” de memória correlacionada e bits d memória
correlacionada dentro dos Registros de Função Especial. O Endereçamento Direto
de bytes também pode ser usado para acessar os 128 bytes inferiores da RAM
Interna de Dados (Figura 3).
ENDEREÇO INSTRUÇÕES COMENTÁRIOS
E000H MOV 20H,#11H Escreva 11H no endereço 20H
E003H MOV 21H,20H Grave o conteúdo do endereço 20H no endereço 21H
E006H MOV 22H,21H Grave o conteúdo do endereço 21H no endereço 22H
E009H LJMP E009H Parada
Figura 3: Como Transferir Dados Internos
8. Monte o programa dado na Figura 3.
9. Execute este programa e pressione a tecla de comando INTR para deter a
execução.
10. Use o comando DDUMP para descarregar a RAM Interna de Dados, e
observe como o valor numérico 11H foi armazenado nos endereços
correspondente (endereço 20H a 22H). Note as diferenças entre as instruções
MOV. O sinal de libra # indica o valor numérico 11H que é transferido para o
endereço 20H (instrução MOV 20H,#11H). Na ausência do sinal de libra, os dados
transferidos são o conteúdo do endereço. Para o programa dado na Figura 3, os
Microcomputadores
Laboratório 3
76
dados armazenados no endereço 20H são transferidos para o conteúdo do
endereço 21H (instrução MOV 21H, 20H) e endereço 22H (instrução MOV 22H,
21H).
11. O Endereçamento Direto de bits ganha acesso a um subconjunto de 128 bits
da RAM Interna de Dados e subconjunto de 128 bits dos Registros de Função
Especial. O subconjunto de 128 bits da RAM Interna de Dados é sobreposto ao
endereço 20H a 2FH da Memória Interna de Dados “Byte-wide”.( wide = largo,
amplo, estendido, largura ).Por exemplo: endereço de bit 00H corresponde a
endereço do bit 0 do byte 20H da RAM Interna de Dados. O programa seguinte
mostra vários exemplos de Endereçamento Direto dos bits da RAM Interna de
Dados (Figura 4).
ENDEREÇO INSTRUÇÃO COMENTÁRIOS
E000H CLR C Limpe sinalizador de carry (transporte)
E001H MOV 00H,C Desloque sinalizador de carry para bit
E003H CPL C Complemente sinalizador de carry
E004H MOV 01H,C Desloque sinalizador de carry para bit
E006H CPL C Complemente sinalizador de carry
E007H MOV 02H,C Desloque sinalizador de carry para bit
E009H CPL C Complemente sinalizador de carry
E00AH MOV 03H,C Desloque sinalizador de carry para bit
E00CH CPL C Complemente sinalizador de carry
E00DH MOV 04H,C Desloque sinalizador de carry para bit
E00FH CPL C Complemente sinalizador de carry
E010H MOV 05H,C Desloque sinalizador de carry para bit
E012H CPL C Complemente sinalizador de carry
E013H MOV 06H,C Desloque sinalizador de carry para bit
E015H CPL C Complemente sinalizador de carry
E016H MOV 07H,C Desloque sinalizador de carry para bit
E018H LJMP E018H Parada
Figura 4: Endereçamento Direto de Bits
12. Monte o programa dado na Figura 4.
13. Execute este programa (GO) e pressione a tecla de comando INTR para deter
a execução.
Microcomputadores
Laboratório 3 77
14. Use o comando DDUMP para descarregar a RAM Interna de Dados. Tecle
DDUMP 20H e pressione a tecla Enter. Este endereço deverá indicar o conteúdo
de endereço de bit 00H a 07H. Note que este programa grava bit por bit o valor
binário 10101010 (AAH) para o endereço de bit 00H através de 07H. Estes
endereços de bit são sobrepostos ao endereço de byte 20H.
Você tem que usar as funções de descarga para observar a RAM Interna de Dados,
porque o monitor usa estas localizações e altera o conteúdo quando recupera o
controle.
Atividade Extra – Você deve agora elaborar um programa para posicionar o conteúdo
BCH no endereço 20H.
15. O Endereçamento Indireto de Registro, usando o conteúdo de R0 ou R1 no
Banco de Registro selecionado, endereça a RAM Interna de Dados. O sinal @
(arrouba) seguido pelo símbolo especial de registro (R0 ou R1) indica
endereçamento indireto.
O programa seguinte mostra vários exemplos de Endereçamento Indireto da RAM
Interna de Dados (Figura 5).
ENDEREÇO INSTRUÇÕES COMENTÁRIOS
E000H MOV R0,#20H Posicione indicador de endereço em 20H
E002H MOV @R0,#55H Desloque 55H para o endereço dado por R0
E004H INC R0 Incremente indicador de endereço
E005H MOV @R0,#66H Desloque 66H para o endereço dado por R0
E007H INC R0 Incremento indicador de endereço
E008H MOV @R0,#77H Desloque 77H para o endereço dado por R0
E00AH MOV A,@R0 Desloque o indicador de endereço para ACC
E00BH LJMP E00BH Parada
Figura 5: Endereçamento Indireto
16. Monte o programa dado na Figura 5.
17. Execute este programa e pressione a tecla de comando INTR para deter a
execução.
Microcomputadores
Laboratório 3
78
18. Use o comando DDUMP para descarregar a RAM Interna de Dados. Tecle
DDUMP 20H e pressione a tecla Enter. Note que este programa escreve valores de
dados 55H, 66H e 77H para endereço 20H até 22H, respectivamente.
19. Use o comando RDUMP para descarregar o acumulador. Digite RDUMP E0H
e pressione a tecla Enter. Note que este programa escreve o último valor do
indicador de endereço no acumulador.
20. O Indicador de Dados de 16 bits (DPTR) pode ser usado para acessar
qualquer localização dentro do espaço total externo de endereço de 64K.
Instruções M0VX acessa a Memória Externa de Dados.
O Endereçamento Imediato permite a memória do programa ser acessado como dado
constante. Isto é feito pelas instruções M0VC.
O programa seguinte mostra um exemplo de acesso a Memória Externa de Dados e a
Memória do Programa. O programa da Figura 6 copia os primeiros bytes do programa
monitor para as localizações externas da RAM.
ENDEREÇO INSTRUÇÕES COMENTÁRIOS
E000H MOV DPTR,#0000H Posicione o indicador de endereço em 0000H
E003H CLR A Limpe o acumulador
E004H MOVC A,@A+DPTR Leia o primeiro byte de código
E005H MOV DPTR,#E100H Posicione o indicador de endereço em E100H
E008H MOVX @DPTR,A Escreva byte na RAM externa
E009H MOV DPTR,#0001H Posicione indicador de endereço em 0001H
E00CH CLR A Limpe o acumulador
E00DH MOVC A,@A+DPTR Leia o segundo byte de código
E00EH MOV DPTR,#E101H Posicione o indicador de endereço em E101H
E011H MOVX @DPTR,A Grave byte na RAM externa
E012H MOV DPTR,#0002H Posicione indicador de endereço em 0002H
E015H CLR A Limpe o acumulador
E016H MOVC A,@A+DPTR Leia o terceiro byte de código
E017H MOV DPTR,#E102H Posicione indicador de endereço em E102H
E01AH MOVX @DPTR,A Grave byte na RAM externa
E01BH LJMP E01BH Parada
Figura 6: Dados Externos e Acesso de Código
Microcomputadores
Laboratório 3 79
21. Monte o programa dado na Figura 6.
22. Execute este programa e pressione a tecla de comando INTR para deter a
execução.
23. Use o comando DASM para comparar endereço de ROM 0000H até 0002H e
endereço de RAM E100H até E102H, respectivamente.
Observações
24. Como se recupera o código da memória do programa?
25. Qual a diferença entre memória interna de dados e memória externa de
dados?
26. Como o microcomputador pode acessar os dados externos?
27. Que sinais são ativados durante a transferência de memória de programa?
28. Que sinais são ativados durante a transferência de dados externos?
07_-_Microcomputadores e microcontroladores
Microcomputadores
Laboratório 4 81
Laboratório 4
Portas de Entrada/Saída
Objetivos
Após completar estas atividades de aprendizado em laboratório, você deverá ser
capaz de:
• Manipular variáveis booleanas.
• Usar as capacidades de entrada/saída de um microcomputador.
• Montar programas que façam uso dos acessos de um microcomputador.
• Fazer programas que façam uso do Subconjunto de Instruções de
Processamento Booleano.
Equipamento Necessário
• 1 Computador central PU-2000 (Unidade central de processamento - Sistema
de Aprendizado Eletrônico Computadorizado)
• 1 Placa Mestra
• 1 Unidade EB-153 - Placa de Circuito Impresso
• 1 Osciloscópio
Como Iniciar o Laboratório
1. Coloque a placa de circuito impresso do EB-153 na unidade central.
2. Ligue a placa mestra.
Procedimento
3. Os exercícios que se seguem usam as capacidades de processamento
booleanas. Uma das características do 8051 é o suporte direto à manipulação de
bit. As instruções orientadas para os bits levam o programa de entrada e saída
inerentes aos problemas de controle digital.
Microcomputadores
Laboratório 4
82
A este acesso do 8051 estão acoplados quatro LED (Diodo Emissor de Luz; sigla
inglesa LED) e quatro chaves, como se segue:
Linhas conectadas aos LEDs : bit 7, bit 6, bit 5 e bit 4.
Linhas conectadas às chaves : bit 3, bit 2, bit 1 e bit 0.
O programa seguinte mostra como manipular os bits do P1. Este programa (Figura 1)
transfere os estados lógicos das chaves aos LEDs.
ENDEREÇO INSTRUÇÕES COMENTÁRIOS
E000H MOV C,93H Leia bit 3 e transfira ao bit 7
E002H MOV 97H,C
E004H MOV C,92H Leia bit2 e transfira ao bit 6
E006H MOV 96H,C
E008H MOV C,91H Leia bit 1 e transfira ao bit 5
E00AH MOV 95H,C
E00CH MOV C,90H Leia bit 0 e transfira ao bit 4
E00EH MOV 94H,C
E010H LJMP E000H Salte para o endereço inicial
Figura 1 : Como manipular os Bits da Porta 1
4. Monte o programa dado na Figura 1.
5. Pressione a tecla de comando Reset para inicializar a Porta 1. Execute este
programa passo a passo enquanto estiver mudando o posicionamento das chaves.
Pressione a tecla de comando INTR para deter o modo de passo automático.
Atividade Extra – Você deve agora elaborar programa que: (a) acione dois LED’s
utilizando apenas uma chave; (b) acione um LED após o acionamento da terceira
chave e (c) acionar os dois primeiros LED’s com as duas primeiras chaves e acionar os
dois outros LED’s com as outras duas chaves.
6. O programa seguinte (Figura 2) lê os estados lógicos das chaves, converte-os
em valores ASCII (“0” ou “1”) e exibe estes valores no display.
Microcomputadores
Laboratório 4 83
ENDEREÇO INSTRUÇÕES COMENTÁRIOS
E000H LCALL FF89H Chame rotina clear-display buffer.
E003H MOV DPTR,#FF90H Posicione indicador de dados no end. do buffer.
E006H MOV C,93H Leia bit 3 e transfira para carry (transporte).
E008H MOV A,#30H Posicione buffer em ASCII “0”.
E00AH MOVX @DPTR,A
E00BH JNC 02H Verifique o bit de acesso – salte +4.
E00DH MOV A,#31H Posicione buffer em ASCII “1”.
E00FH MOVX @DPTR,A
E010H INC DPTR Incremente indicador de buffer de vídeo
E011H MOV C,92H Leia bit 2 e transfira para carry.
E013H MOV A,#30H Posicione buffer em ASCII “0”.
E015H MOVX @DPTR,A
E016H JNC 02H Verifique o bit de acesso – salte +4.
E018H MOV A,#31H Posicione buffer em ASCII “1”.
E01AH MOVX @DPTR,A
E01BH INC DPTR Incremente indicador de buffer de vídeo.
E01CH MOV C,91H Leia bit 1 e a transfira para carry.
E01EH MOV A,#30H Posicione buffer em ASCII “0”.
E020H MOVX @DPTR,A
E021H JNC 02H Verifique o bit de acesso – salte +4.
E023H MOV A,#31H Posicione buffer em ASCII “1”.
E025H MOVX @DPTR,A
E026H INC DPTR Incremente indicador de buffer do vídeo.
E027H MOV C,90H Leia bit 0 e transfira para carry.
E029H MOV A,#30H Posicione buffer em ASCII “0”.
E02BH MOVX @DPTR,A
E02CH JNC 02H Verifique o bit de acesso – salte +4.
E02EH MOV A,#31H Posicione buffer em ASCII “1”.
E030H MOVX @DPTR,A
E031H LCALL FF83H Chame rotina de buffer de vídeo.
E00CH LJMP E003H Salte para laço.
Figura 2: Como Exibir Bits da Porta 1
A rotina CLEAR-DISPLAY-BUFFER (endereço FF89H) limpa o buffer do display
(endereço FF90H a FFAFH) escrevendo o caracter em branco de ASCII (20H) em
todas as localizações do buffer.
Microcomputadores
Laboratório 4
84
Note que as instruções JNC incrementam o contador do programa antes de somar a
defasagem relativa (02H, no nosso caso).
7. Monte o programa dado na Figura 2.
8. Use o comando GO para executar este programa. Mude o posicionamento
das chaves. Pressione a tecla de comando INTR para deter o programa.
9. O 8255 é uma interface periférica programável (sigla inglesa PPI) projetada
para uso em sistemas de microcomputador. Sua função é a de um componente de
E/S de uso geral para interfacear equipamento periférico ao barramento do sistema
do microcomputador.
A configuração funcional do 8255 é programada pelo software dos sistemas, de modo
que, normalmente, não é necessária lógica externa alguma para interfacear
dispositivos periféricos ou estruturas.
O 8255 tem 24 pinos de E/S que podem ser programados individualmente em dois
grupos de 12 e usados em 3 principais modos de operação.
No primeiro modo (MODO 0), cada grupo de 12 pinos de E/S pode ser programado em
conjunto de 4 para entrar ou sair. No MODO 1, o segundo, cada grupo pode ser
programado para Ter 8 linhas de entrada ou saída. Dos 4 pinos restantes, 3 são
usados para saudação inicial e sinais de controle de interrupção.
O terceiro modo de operação (MODO 2 ), é um modo de barramento bidirecional, que
usa 8 linhas para um barramento bidirecional e 5 linhas, tomando emprestada uma do
outro grupo, para saudação inicial.
A Figura 3 dá o Formato de Definição do Modo e a Figura 4 mostra o significado dos
endereços de PPI.
Microcomputadores
Laboratório 4 85
Figura 3. Mode Definition Format
ENDEREÇO DESCRIÇÃO
0000H Acesso A
0001H Acesso B
0002H Acesso C
0003H Registro de Modo (end. Programação da PPI)
Figura 4: Endereçamento de PPI
O programa seguinte (Figura 5) usa a Porta C do PPI (Interface Periférica
Programável) para saída de contador binário.
ENDEREÇO INSTRUÇÃO COMENTÁRIOS
E000H MOV DPTR,#0003H Posicione indicador de dados PPI-end. de Modo
E002H MOV A,#80H Define a Porta C como saída
E005H MOVX @DPTR,A Move 80 do A para o end. Indicado por DPTR
E006H CLR A Posicione contagem inicial em 0
E009H MOV DPTR,#0002H Posicione indicador de dados PPI – Porta C
E00AH INC A Incremente contagem
E00BH MOVX @DPTR,A Grave contagem na Porta C
E00CH LJMP E00AH Salte para laço (looping)
Figura 5: Contador Binário na Porta C (100kHz).
Microcomputadores
Laboratório 4
86
10. Monte o programa dado na Figura 5.
11. Use o comando GO para executar este programa. Conecte o osciloscópio às
saídas da Porta C e observe que o Bit 0 tem a maior freqüência e os outros bits
dividem por dois a freqüência dos bits contínuos menos significativos . Pressione a
tecla de comando INTR para deter o programa.
12. O programa seguinte (Figura 6) lê os estados lógicos das chaves acopladas
na Porta 1 do 8031 e transfere estes valores na Porta C da PPI.
ENDEREÇO INSTRUÇÕES COMENTÁRIOS
E000H MOV DPTR,#0003H Posicione indicador de dados PPI – end.de Modo
E003H MOV A,#80H Defina o Porta C como saída
E005H MOVX @DPTR,A Move 80 do A para o end. Indicado por DPTR
E006H MOV DPTR,#0002H Posicione indicador de dados PPI- Porta 1
E009H MOV A,90H Leia Porta 1
E00BH MOVX @DPTR,A Transfira para Porta C
E00CH LJMP E009H Salte para laço
Figura 6: Como Transferir da Porta 1 para a Porta C
13. Monte o programa dado na Figura 6.
14. Use o comando GO para executar este programa. Conecte o osciloscópio às
saídas do Acesso 1. Pressione a tecla de comando INTR para deter o programa
(não apague o programa – você vai precisar dele para o Modo de Prática).
15. O programa seguinte (Figura 7) desloca um “1” através dos bits da Porta 1
acoplados aos LED’s.
ENDEREÇO INSTRUÇÕES COMENTÁRIOS
E000H MOV A,#10H Posicione estado inicial
E002H CLR C Limpe sinalizador de carry
E003H MOV 90H,A Grave na Porta 1
E005H RLC A Gire o acumulador e o carry para a esquerda
E006H JC F8H Continue a fazer o deslocamento – salte p/E000
E018H JNC F9H Salte para o laço – JUNP para E003
Figura 7: Registro de Deslocamento no Porta 1
Microcomputadores
Laboratório 4 87
16. Monte o programa dado na Figura 7.
17. Use o comando STEP para executar este programa. Observe o deslocamento
do bit através dos LEDs. Pressione a tecla de comando INTR para deter o
programa.
Observações
18. Que é uma variável booleana?
19. Qual a diferença entre um processador booleano e os outros?
20. Como se calcula uma defasagem relativa positiva para a instrução JC?
21. Como se calcula uma defasagem relativa negativa para a instrução JC?
22. Qual a Palavra de Modo usada para estabelecer o Acesso C do PPI – 8255
no modo de entrada?
07_-_Microcomputadores e microcontroladores
Microcomputadores
Laboratório 5 89
Laboratório 5
Operações Aritméticas e Lógicas
Objetivos
Após completar estas atividades de aprendizado em laboratório, você deverá ser
capaz de:
• Fazer cálculos com o microcontrolador.
• Substituir circuitos lógicos por funções do microcontrolador.
• Fazer programas que façam uso de instruções aritméticas e lógicas.
• Fazer suas próprias sub-rotinas e programas principais.
Equipamento Necessário
• 1 Computador central PU-2000 (Unidade central de processamento - Sistema
de Aprendizado Eletrônico Computadorizado)
• 1 Placa Mestra
• 1 Unidade EB-153 - Placa de Circuito Impresso
• 1 Osciloscópio
Como Iniciar o Laboratório
1. Coloque a placa de circuito impresso do EB-153 na unidade central.
2. Ligue a placa mestra.
Procedimento
3. O 8051 permite executar as funções lógicas de E, OU e OU – exclusivo no
registro A por um segundo operando. O 8051 pode também executar um OU
lógico ou um E lógico entre o acumulador booleano (isto é, o sinalizador de carry)
e qualquer bit, ou seu complemento que possa ser acessado através de
endereçamento direto. As instruções de bit ANL e ORL entre o bit de carry e um bit
endereçável. Uma vez que o bit de carry desempenha o papel de Acumulador no
Microcomputadores
Laboratório 5
90
Processador Booleano 8051, todos os resultados das operações lógicas acima
residirão no bit de carry. A figura 1 mostra o diagrama de portas lógicas para uma
função lógica de diversas variáveis booleanas. Esta figura é uma solução da
seguinte equação:
X
W
V
U
Q +
+
= )
.(
Figura 1
O programa seguinte simula o circuito lógico mostrado na figura 1.
Emprega-se o acesso 1 para substituir as entradas e saídas lógicas do circuito. As
entradas são conectadas a chaves, e a saída a um LED, da seguinte maneira:
ENTRADA U = PORTA 1 – BIT 0 (conectada a uma chave)
ENTRADA V = PORTA 1 – BIT 1 (conectada a uma chave)
ENTRADA W = PORTA 1 – BIT 2 (conectada a uma chave)
ENTRADA X = PORTA 1 – BIT 3 (conectada a uma chave)
SAÍDA Q = PORTA 1 – BIT 7 (conectada a um LED)
ENDEREÇO INSTRUÇÕES COMENTÁRIOS
E000H MOV C,90H,#0FH Ativa Porta 1
E003H MOV C, 91H Leia bit 1 e transfira ao de carry.
E005H ORL C, 92H Bit 2 OU de carry.
E007H ANL C, 90H Bit 0 E de carry.
E009H ORL C, /93H Complemento do bit 3 OU de carry.
E00BH MOV 97H, C Saída de resultado.
E00DH LJMP E003H Salte para endereço inicial.
Figura 2: Simulação de uma função lógica.
Microcomputadores
Laboratório 5 91
4. Monte o programa da figura 2.
5. Use o comando GO para executar este programa. Mude a disposição das
chaves e complete a tabela da verdade dada na Figura 3. Pressione a tecla de
comando INTR para deter o programa.
ENTRADAS SAÍDA
Modo de Experiência Modo de Prática
X W V U Z Z
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1
Figura 3: Tabela da Verdade
6. O 8051 permite operações aritméticas de somar, incrementar, decrementar e
comparar a zero, ajudar soma decimal, subtrair com transporte negativo, comparar,
multiplicar e dividir.
7. A instrução DIV AB divide o número inteiro sem sinal de oito bits no
acumulador por um inteiro sem sinal de oito bits no registro B. A parte inteira do
quociente é devolvida ao acumulador; o resto ao registro B. Se o registro B contiver
originalmente 00H, então o sinalizador de estouro será posicionado para indicar um
erro na divisão, e os valores devolvidos serão indefinidos. Do contrário, OV é
liberado.
Microcomputadores
Laboratório 5
92
A instrução dividir também é útil para propósitos como conversão de base (radix) ou
separação de campos de bits do acumulador (entre 0 e 255) para uma representação
BCD de três dígitos (três bytes). Esta rotina aparece na Figura 4. O resultado da
conversão é guardado no registro R0, R1 e R2.
ENDEREÇO INSTRUÇÃO COMENTÁRIOS
E100H MOV F0H,#64H Posicione B (end.F0H) em 100 (decimal).
E103H DIV AB Divida por 100 para determinar o número de centenas
E104H MOV R2,A Guarde o resultado em R2
E105H MOV A,#0AH Posicione A em 10 (decimal)
E107H XCH A,F0H Troque A por B (endereço F0H)
E109H DIV AB Divida o resto por 10 para determinar o número de
dezenas que sobraram
E10AH MOV R1,A Guarde o resultado em R1; o resto é digito de um
E10BH MOV R0,F0H Guarde o resultado em P0
E10DH RET Volte ao programa principal
Figura 4: Uso da Instrução DIV para Conversão de Base.
8. Monte o programa dado na Figura 4. Note que este programa é uma sub-
rotina. O 8051 tem dois tipos de instruções que são primordiais para a
implementação de subrotinas. Estas instruções são CALL (ACALL ou LCALL) e
RETURN (RET). A última instrução de uma sub-rotina deve ser RET.
9. O programa seguinte (Figura 5) usa a sub-rotina de Conversão de Base para
converter o conteúdo do acumulador e para exibir os resultados da conversão no
mostrador alfanumérico. Estes resultados são convertidos a valores ASCII
adicionando 30H (correspondente a “0”).
ENDEREÇO INSTRUÇÃO COMENTÁRIOS
E000H LCALL FF89H Chame rotina clear-display-buffer
E003H MOV A,#FFH Posicione byte a ser convertido
E005H LCALL E100H Chame rotina de conversão de base
E008H MOV A,#30H Posicione acumulador em ASCII “0”
E00AH MOV DPTR,#FF90H Posicione indicador de dados no end. de buffer
E00DH ADD A,02H Converta primeiro byte para ASCII
E00FH MOVX @DPTR,A Posicione memória intermediária em ASCII R2
E010H INC DPTR Incremente indicador de buffer de vídeo
E011H MOV A,#30H Posicione acumulador em ASCII “0”
Microcomputadores
Laboratório 5 93
E013H ADD A,01H Converta segundo byte para ASCII
E015H MOVX @DPTR,A Posicione memória intermediária em ASCII R1
E016H INC DPTR Incremente indicador de buffer de vídeo
E017H MOV A,#30H Posicione acumulador em ASCII “0”
E019H ADD A,00H Converta terceiro byte para ASCII
E01BH MOVX @DPTR,A Posicione memória intermediária em ASCII R0
E01CH LCALL FF83H Chame rotina de buffer de vídeo
E01FH LJMP E01FH Fim
Figura 5: Como Exibir Conversões de Base
10. Monte o programa dado na Figura 5.
11. Use o comando GO para executar este programa. Pressione a tecla de
comando INT para deter o programa. Mude o valor a ser convertido do original FFH
(endereço E004H) para outros e execute novamente o programa.
12. O programa seguinte (Figura 6) usa a instrução INC para incrementar um
contador binário que é exibido nos LED’s acoplados ao Acesso 1.
ENDEREÇO INSTRUÇÕES COMENTÁRIOS
E000H MOV DPTR,#FFC0H Posicione indicador de dados para retardo – MSB
E003H MOV A,#01H Defina constante de retardo – MSB
E005H MOVX @DPTR,A
E006H INC DPTR Posicione ponteiro de dados – LSB
E007H MOV A,#00H Defina constante de retardo – LSB
E009H MOVX @DPTR,A
E00AH CLR A Posicione estado inicial em zero
E00BH SWAP A Permute mini bytes
E00CH MOV 90H,A Grave no Acesso 1
E00EH SWAP A Restaure mini bytes
E00FH PUSH E0H Guarde acumulador (endereço E0H)
E011H LCALL FF8CH Chame rotina de retardo
E014H POP E0H Restaure Acumulador
E016H INC A Incremente contagem
E017H JB E4H,F0H Reinicie se contagem 15. (Acc. – bit 4 = 1) – byte
E00AH
E01AH LJMP E00BH Salte para Laço
Figura 6: Contador Binário no Acesso 1.
Microcomputadores
Laboratório 5
94
A rotina RETARDO (DELAY; endereço FF8CH) soma o retardo especificado no
endereço FFC0H (MSB) e FFC1H (LSB). A base de tempo é 1ms. Portanto, para um
fator de 0100H como o dado no programa, o retardo é de 0,256 Seg. O acumulador
retém a contagem. Assim, quando se chama a rotina de retardo deve-se guardar o
acumulador. A maneira mais simples de guardar o acumulador é usar a instrução
PUSH, que armazena o conteúdo do acumulador na pilha. A instrução POP restaura o
valor do acumulador. SWAP A permuta o conteúdo do mini byte de ordem interior do
acumulador (0-3) com o conteúdo de mi byte de ordem superior (4-7) Esta operação
transfere o contador aos LED’s acoplados ao mini byte de ordem superior.
13. Monte o programa dado na Figura 6.
14. Use o comando GO para executar este programa. Observe a contagem
binária nos LED’s. Pressione a tecla de comando INT para deter o programa.
Execute o programa outra vez para diferenciar retardos.
Observações
15. Que é uma sub-rotina ?
16. Qual é o acumulador booleano ?
17. Onde está armazenado o contador do programa quando se executa uma
instrução CALL?
18. Cite as instruções lógicas.
19. Cite as instruções aritméticas.
Microcomputadores
Laboratório 6 95
Laboratório 6
Operações de Transferência de Controle
Objetivos
Após completar estas atividades de aprendizado em laboratório, você deverá ser
capaz de:
• Instruções de transferência de controle.
• Controlar o som da cigarra por meio de software.
Equipamento Necessário
• 1 Computador central PU-2000 (Unidade central de processamento - Sistema
de Aprendizado Eletrônico Computadorizado)
• 1 Gabinete
• 1 Unidade EB-153 - Placa de Circuito Impresso
• 1 Osciloscópio
Como Iniciar o Laboratório
1. Coloque a placa de circuito impresso do EB-153 na unidade central.
2. Ligue o gabinete.
Procedimento
3. Há 3 classes de operações de controle:
• Chamadas, retornos e saltos incondicionais
• Saltos condicionais
• Interrupções
Todas as operações de transferência de controle, algumas por força de uma condição
específica, fazem com que a execução do programa continue numa localização não
seqüencial na memória do programa.
Microcomputadores
Laboratório 6
96
As chamadas, retornos e saltos incondicionais transferem para o endereço alvo o
controle do valor corrente do contador de programa.
ACALL e LCALL armazenam o endereço da próxima instrução para a pilha (PCL para
o endereço de ordem inferior e PCH para o endereço de ordem superior) e depois
transfere o controle ao endereço-alvo.
RET transfere o controle ao endereço de retorno guardado na pilha mediante uma
operação de chamada anterior, e decrementa de dois o SP (Stack Pointer = ponteiro
de pilha), para ajustar o SP ao endereço acrescentado à pilha.
A pilha pode ser localizada em qualquer ponto dentro da RAM interna de dados. O SP
de 8 bits contém o endereço no qual o último byte foi armazenado na pilha. Este é
também o endereço do próximo byte a ser restaurado. O ponteiro pode ser lido ou
gravado sob controle de software.
Você não terá problemas com o uso da pilha se seguir as diretrizes abaixo:
• carregue o ponteiro da pilha como parte da rotina de inicialização;
• equilibre sempre as operações da pilha. Cada CHAMADA (CALL) deverá ser
equilibrada por um RETURN e cada PUSH ou um POP;
O programa seguinte mostra o uso da pilha e exemplos de chamadas, retornos e
saltos incondicionais.
ENDEREÇO INSTRUÇÃO COMENTÁRIOS
E000H MOV 81H,#30H Defina o ponteiro da pilha (81H) em 30H
E003H MOV A,#55H Posicione o acumulador em 55H
E005H PUSH E0H Guarde o acumulador (E0)
E007H LCALL E100H Chame a sub-rotina
E00AH POP E0H Restaure o acumulador (E0)
E00CH SJMP F2H Salte para endereço inicial (E000)
Subrotina
E100H CLR A Modifique o acumulador
E101H RET Retorne ao programa principal
Figura 1: Uso da Pilha
Microcomputadores
Laboratório 6 97
4. Monte o programa dado na Figura 1.
A instrução SJMP transfere o controle para o endereço do código especificado.
Incrementa-se o contador do programa para a próxima instrução, depois acrescenta-se
o deslocamento relativo (F2H) ao contador incrementado do programa, a executa-se a
instrução naquele endereço (E000).
O endereço de código num salto relativo deve estar próximo à própria instrução de
salto relativo. A faixa é de – 128 a + 127 bytes a partir do primeiro byte da instrução
que segue o salto relativo.
Os endereços de código são codificados como números complementares de dois de
oito bits. Assim, para um endereço negativo, o complemento relativo mais um.
Use o comando STEP para executar este programa. Observe que a sub-rotina
(endereço E100H) muda apenas o conteúdo do acumulador. Note as mudanças do
ponteiro da pilha durante operações da pilha (PUSH, POP, CALL e RET). Pressione a
tecla de comando INTR para deter o programa.
5. O programa seguinte (Figura 2) faz soar a cigarra piezelétrica conectada aos
bits 0 e 1 do Acesso 1. Todos os registros usados pelo programa principal devem
ser guardados na pilha ao ser chamada a sub-rotina de retardo. A cigarra é ativada
por freqüência de áudio; ativa-se também quando as linhas de acesso a ela
conectadas estão em estado lógico oposto.
O programa da Figura 2 usa a instrução de salto condicional DJNZ.
Esta instrução decrementa o conteúdo do Registro R0 em:
Se o resultado do decremento for 0, o controle passa à próxima instrução seqüencial;
caso contrário, o controle passa ao endereço de código especificado. O contador do
programa é incrementado para a instrução seguinte. Se o decremento não resultar em
0, o deslocamento relativo é adicionado ao contador incrementado do programa, e
executa-se a instrução naquele endereço. A sub-rotina E100H proporciona um retardo
simples, de acordo com o valor armazenado em R0.
Microcomputadores
Laboratório 6
98
ENDEREÇO INSTRUÇÃO COMENTÁRIOS
E000H MOV R0,#80H Posicione constante de retardo
E002H MOV 96H,C Posicione fio da cigarra
E004H CPL C Complemente bit de carry
E005H MOV 97H,C Posicione o outro fio da cigarra
E007H PUSH D0H Guarde bit de carry
E009H LCALL E100H Chame rotina de retardo
E00CH POP D0H Restaure bit de carry
E00EH LJMP E000H Retorne ao laço
Sub-rotina
E100H DJNZ R0,01H Retardo
E102H RET Retorne se fim de contagem
E103H LJMP E100H Continue
Figura 2: Como usar a Cigarra Piezelétrica
6. Monte o programa dado na Figura 2.
7. Use o comando GO para executar este programa. Pressione a tecla de
comando INTR para deter o programa. Mude a constante de retardo (endereço
E001H) para gerar freqüências diferentes e executar novamente o programa.
8. O programa seguinte (Figura 3) liga todos os LED’s acoplados ao Acesso 1
se a chave conectada ao bit 0 do Acesso 1 for colocada em “on” (ligado) . Do
contrário, os LED’s são desligados.
A instrução JNB testa o endereço de bit especificado (90H). Se for 0, o controle passa
ao endereço de código especificado. Se não for, o controle passa à instrução
seqüencial seguinte.
O contador do programa é incrementado para a próxima instrução. Se o teste for bem
sucedido, o deslocamento relativo é adicionado ao contador incrementado do
programa, e a instrução naquele endereço é executada.
ENDEREÇO INSTRUÇÃO COMENTÁRIOS
E000H CLR C Limpe bit de carry
E001H JNB 90H,01H Teste chave
E004H SETB C Posicione bit de carry
E005 MOV 94H,C Posicione ou restaure LED
Microcomputadores
Laboratório 6 99
E007 MOV 95H,C Posicione ou restaure LED
E009 MOV 96H,C Posicione ou restaure LED
E00B MOV 97H,C Posicione ou restaure LED
E00D LJMP E000H Retorne ao laço
Figura 3: Programa de Salto Condicional.
9. Monte o programa dado na figura 3.
10. Use o comando PASSO para executar este programa. Mude a disposição da
chave acoplada ao bit 0 do Acesso 1 e observe os LED’s. Pressione a tecla de
comando INTR para deter o programa.
Observações
11. Qual a diferença entre PUSH e POP?
12. Onde está localizada a pilha?
13. Que é um ponteiro de pilha?
14. Qual a diferença entre JB e JNB?
07_-_Microcomputadores e microcontroladores
Microcomputadores
Laboratório 7 101
Laboratório 7
Interrupções Externas
Objetivos
Após completar estas atividades de aprendizado em laboratório, você deverá ser
capaz de:
• Entender a operação de interrupção externa.
• Fazer rotinas de serviço de interrupção.
• Controlar eventos de tempo real.
Equipamento Necessário
• 1 Computador central PU-2000 (Unidade central de processamento - Sistema
de Aprendizado Eletrônico Computadorizado)
• 1 Unidade EB-153 - Placa de Circuito Impresso
• 1 Osciloscópio
• 1 Gerador de Sinal
Como Iniciar o Laboratório
1. Coloque a placa de circuito impresso do EB-153 na unidade central.
2. Ligue a Placa Mestra.
Procedimento
3. A interrupção é uma operação de transferência de controle. O controle de
execução do programa pode ser transferido por meio de interrupções internas e
externas. Todas as interrupções realizam uma transferência empurrando o
Contador do Programa na pilha e depois saltando para programas localizados na
memória do programa. Para evitar corrupção, o programador deve empurrar para a
pilha todos os registros a ser alterados por seu programa de serviço de interrupção.
Microcomputadores
Laboratório 7
102
A última instrução da rotina de serviço de interrupção deve ser RETI. Essa instrução
transfere o controle de maneira idêntica ao RET. Além disso, RETI reativa interrupções
para o nível corrente de prioridade.
O 8051 reconhece pedidos de interrupção de cinco fontes: duas de fontes externas via
pinos INTO e INTI, uma de cada um dos dois contadores internos e uma do acesso
serial de E/S.
Cada interrupção vetoriza uma localização separada na memória do programa para
seu programa de serviço. As localizações de memória do programa de programas de
serviço de interrupção aparecem na Figura 1:
FONTE DE
INTERRUPÇÃO
DESCRIÇÃO ENDEREÇO
INICIAL
ENDEREÇO DO SALTO
DO MONITOR
INTO Requisição externa 0 0003H FF00H
RxD or TxD Acesso serial interno 0023H FF10H
T1 Temporizador/contador interno 1 001BH FF20H
T0 Tempor./contad.interno 0 0011H Reservado
INT1 Requisição externa 1 0019H Reservado
Figura 1: Localizações de Memória de Programa de Serviço de Interrupção
Use o comando DASM para exibir os endereços de salto do monitor. Digite DASM
0003H e pressione a tecla Enter. Observe a instrução LJMP. Use a seta de baixo para
exibir os outros endereços de salto. Pressione a tecla de comando Reset para
abandonar o comando DASM.
4. Cada uma das cinco fontes de interrupção indicadas na Figura 1 pode ser
designada para um dos dois níveis de prioridade e ativada ou desativada
independentemente.
Além disso, todas as fontes ativadas podem ser globalmente ativadas ou desativadas.
Cada interrupção externa é programada como ativada a nível estável ou em transição,
e é pouco ativa.
Um recurso requer uma interrupção colocando seu sinalizador (flag) de pedido de
interrupção no registro TCON ou SCON.
Microcomputadores
Laboratório 7 103
A Figura 2 mostra o formato de registro TCON (Timer/Couter Control/Status = Estado
de Controle de Temporizador/Contador).
Figura 2: Registro TCON
A Figura 3 dá o formato de registro IE (Ïnterrupt Enable”, ou Ativador de Interrupção).
Figura 3: Registro IE
O formato de registro IP (“Interrupt Priority”, ou Prioridade de Interrupção) é mostrado
na Figura 4.
Figura 4: Registro IP
O programa abaixo converte o microcomputador num contador de eventos.
Microcomputadores
Laboratório 7
104
ENDEREÇO INSTRUÇÃO COMENTÁRIOS
Programa principal
E000H MOV DPTR,#FF00H Posicione ponteiro no endereço de salto INTO
E003H MOV A,#02H LJMP Código óptico LJMP
E005H MOVX @DPTR,A Armazene LJMP E100H em FF0CH
E006H INC DPTR Aponte para o primeiro operando
E007H MOV A,#E1H Byte mais Significativo de endereço
E009H MOVX @DPTR,A Armazene primeiro operando
E00AH INC DPTR Aponte para segundo operando
E00BH MOV A,#00H Byte menos significativo de endereço
E00DH MOVX @DPTR,A Armazene segundo operando
E00EH LCALL FF80H Limpe vídeo
E011H MOV B8H,#01H Posicione registro IP – ender. B8H – prioridade
máxima do INTO
E014H MOV 88H,#01H Posicione registro TCON – endereço 88H, borda
decrescente do INTO
E017H MOV A8H,#81H Posicione registro IE – endereço A8H, ativar INTO
E01AH LJMP E01AH Espere pela interrupção
E01DH LJMP E000H Interrompa a rotina de serviço
E100H MOV DPTR,#E200H Posicione ponteiro no endereço de contador
E103H MOVX A,@DPTR Leia a contagem
E104H INC A Incremente a contagem
E105H CJNE A,#0AH,01H Verifique se a contagem + 0
E108H CLR A Byte mais significativo de endereço
E109H MOVX @DPTR,A Guarde contagem
E10AH ADD A,#30H Conversão de ASCII
E10CH MOV
DPTR,#FFB1H
Posicione o endereço dos dados do caracter
E10FH MOVX @DPTR,A Armazene dados de caracter
E110H CLR A Defina endereço de caracter = 0
E111H MOV
DPTR,#FFB0H
Posicione endereço de exibição
E114H MOVX @DPTR,A Armazene endereço de exibição
E115H LCALL FF86H Exiba caracter
E118H RETI Retorne da interrupção
Figura 5: Como contar os Pulsos no INTO
Microcomputadores
Laboratório 7 105
5. Monte o programa dado na Figura 5.
6. Posicione o gerador de sinal em onda quadrada, saída de TTL, e 1Hz.
7. Conecte o gerador de sinal ao INTO
8. Use o comando GO para executar este programa. Observe que o programa
exibe a contagem dos pulsos de entrada no vídeo alfanumérico. Aumente a
freqüência do gerador de sinal e observe a contagem da nova freqüência.
Pressione a tecla controle RESET para deter o programa.
9. O programa a seguir faz soar a cigarra piezelétrica ligada aos bits 6 e 7 do
Acesso 1. O programa da Figura 6 espera uma interrupção para mudar os acessos
conectados à cigarra.
ENDEREÇO INSTRUÇÃO COMENTÁRIOS
Programa principal
E000H MOV DPTR,#FF00H Posicione ponteiro no endereço de salto do INS
E003H MOV A,#02H Código óptico LJMP
E005H MOVX @DPTR,A Armazene LJMP E100H em FF00H
E006H INC DPTR Aponte para o primeiro operando
E007H MOV A,#E1H Byte mais significativo de endereço
E009H MOVX @DPTR,A Armazene primeiro operando
E00AH INC DPTR Aponte para o segundo operando
E00BH MOV A,#00H Byte menos significativo de endereço
E00DH MOVX @DPTR,A Armazene segundo operando
E00FH SETB 96H Posicione cigarra – Acesso 1 – bit 6
E011H CLR 97H Posicione cigarra – Acesso 1 – bit 7
E013H MOV B8H,#01H Posicione registro IP
E016H MOV 88H,#01H Posicione registro TCON
E019H MOV A8H,#81H Posicione registro IE
E01CH LJMP E01CH Espere interrupção
E01EH LJMP E000H Rotina de serviço de interrupção
E100H CPL 96H Faça soar a cigarra
E102H CPL 97H Faça soar a cigarra
E104H RETI Retorne da interrupção
Figura 6: Como Ativar a Cigarra após Interrupção
Microcomputadores
Laboratório 7
106
10. Monte o programa dado na Figura 6.
11. Coloque o gerador de sinal em onda quadrada, saída de TTL, e 10Hz.
12. Conecte o gerador de sinal ao INTO.
13. Use o comando GO para executar este programa. Observe que o programa
faz soar a cigarra na freqüência do gerador de sinal. Aumente a freqüência do
gerador de sinal e observe o som da nova freqüência. Pressione a tecla de
comando RESET para deter o programa.
Observações
14. Que é interrupção ?
15. Quantas fontes de interrupção tem o 80512 ?
16. Que é uma interrupção externa ?
Microcomputadores
Laboratório 8 107
Laboratório 8
Temporizadores e Contadores de Eventos
Objetivos
Após completar estas atividades de aprendizado em laboratório, você deverá ser
capaz de:
• Entender o funcionamento dos temporizadores/contadores de eventos 8051.
• Configurar a entrada do temporizador/contador.
• Gerar diferentes tipos de sinais de temporização.
Equipamento Necessário
• 1 Computador central PU-2000 (Unidade central de processamento - Sistema
de Aprendizado Eletrônico Computadorizado)
• Placa Mestra
• 1 Unidade EB-153 - Placa de Circuito Impresso
• 1 Osciloscópio
• 1 Gerador de Sinal
Como Iniciar o Laboratório
1. Coloque a placa de circuito impresso do EB-153 na unidade central.
2. Ligue a Placa Mestra.
Procedimento
3. O 8051 contém dois contadores de 16 bits para medir intervalos de tempo,
duração de pulso, contar eventos e gerar solicitações periódicas precisas de
interrupção. Cada um pode ser programado independentemente para operar como
temporizador de 8 bits com pré-contador com divisão por 32 ou como contador de 8
bits com pré-contador com divisão por 32 (Modo 0), como contador de 16 bits de
intervalo de tempo ou de evento (Modo 1), ou ainda como contador de 8 bits de
Microcomputadores
Laboratório 8
108
intervalo de tempo ou de evento com recarregamento automático após estouro
(Modo 2).
Se a freqüência do relógio (clock) for suprida por uma fonte externa através das
entradas de TO ou TI, o temporizador/contador de evento se chamará contador. Se a
entrada para o circuito do contador for do oscilador no chip, chamar-se-á temporizador.
O uso do temporizador/contador é determinado por dois registros de 8 bits, TMOD
(“Timer Mode” – modo de temporização) e TCON (Timer Control – controle de
temporização).
A entrada ao circuito do contador provém de uma referência externa (para uso como
contador), ou do oscilador no chip (para uso como temporizador), dependendo do fato
do bit C/T (contador/temporizador) do TMOD estar posicionado ou limpo,
respectivamente.
Quando usada como tempo base, a freqüência do oscilador no chip é dividida por doze
(12) antes de dar entrada no circuito do contador.
Quando o bit da Porta do TMOD estiver posicionado, (1), a entrada de referência
externa (T1, T0) ou a entrada do oscilador será dirigida ao contador, sob a condição de
ser alta uma Segunda entrada externa (INTO, INT1).
Quando o bit da Porta for zero (0), a referência externa ou a entrada do oscilador será
incondicionalmente ativada. Em qualquer dos casos, a função de interrupção normal
do INTO e INT1 não será afetada pela operação do contador.
Os contadores são ativados para incrementação quando os bits do TCON, TR1 e TR0
estiverem posicionados. Quando os contadores excederem bits TF1 e TF0, os bits em
TCON se posicionam e geram-se solicitações de interrupção.
As funções dos bits em TMOD são indicadas na Figura 1. O programa a seguir (Figura
2) configura T1 (contador número 1) como um contador de recarregamento automático
de 8 bits (C/T = 1). T1 é posicionado no Modo 2. O byte mais significativo de T1, TH1,
mantém o valor de recarga F6H. O byte menos significativo, TL1, é incrementado por
cada pulso do relógio. O valor no TH1 é recarregado no TL1 quando o TL1 estoura
todos os uns. Isto ocorre após 10 relógios. A cada 10 pulsos o temporizador estoura e
a contagem é exibida no vídeo alfanumérico.
Microcomputadores
Laboratório 8 109
Figura 1: Registro de Modo. Temporizador/Contador
ENDEREÇO INSTRUÇÃO COMENTÁRIOS
Programa Inicial
E000H MOV DPTR,#FF20H Posicione ponteiro no endereço de salto do T1
E003H MOV A,#02H Código de operação LJMP
E005H MOVX @DPTR,A Armazene LJMP E100H em FF20H
E006H INC DPTR Aponte para o primeiro operando
E007H MOV A,#E1H Byte mais significativo de endereço
E009H MOVX @DPTR,A Armazene primeiro operando
E00AH INC DPTR Aponte para segundo operando
E00BH MOV A,#00H Byte menos significativo de endereço
E00DH MOVX @DPTR,A Armazene segundo operando
E00EH LCALL FF80H Limpe vídeo
E011H MOV B8H,#08H Posicione registro IP – endereço B8H;
Prioridade máxima, T1
E014H MOV 89H,#60H Posicione registro TMOD – endereço 89H;
Modo 2 – recarregando automático de 8 bits
E017H MOV A8H,#88H Posicione registro IE – endereço A8H;
Ative interrupção de Temporizador 1.
E01AH MOV 8DH,#F6H Posicione registro TH1 – endereço 8DH;
Recarregue valor F6H = FFH – 10D + 1.
E01DH MOV 88H,#40H Posicione registro TCON – endereço 88H;
Inicie Temporizador 1.
Microcomputadores
Laboratório 8
110
E020H LJMP E020H Espere pela interrupção;
Rotina de serviço de interrupção
E100H MOV DPTR,#E200H Posicione ponteiro no endereço do contador
E103H MOVX A,@DPTR Leia contagem
E104H INC A Incremente contagem
E105H CJNE A,#0AH,01H Verifique se contagem = 10
E108H CLR A Byte mais significativo de endereço
E109H MOVX @DPTR,A Guarde contagem
E10AH ADD A,#30H Conversão de ASCII
E10CH MOV
DPTR,#FFB1H
Posicione endereço de dados de caracter
E10FH MOVX @DPTR,A Armazene dados de caracter
E110H CLR A Defina endereço de caracter = 0
E111H MOV
DPTR,#FFB0H
Posicione endereço de exibição
E114H MOVX @DPTR,A Armazene endereço de exibição
E115H LCALL FF86H Exiba caracter
E118H RETI Retorne da interrupção
Figura 2: Dividindo a Freqüência de Entrada.
4. Monte o programa dado na Figura 2.
5. Posicione o gerador de sinal em onda quadrada, saída TTL e 10Hz.
6. Conecte o gerador de sinal a T1.
7. Use o comando GO para executar este programa. Observe que o programa
exibe a contagem de cada 10 pulsos de entrada no vídeo alfanumérico. Aumente a
freqüência do gerador de sinal e observe a contagem da nova freqüência.
Pressione a tecla de controle RESET par deter o programa.
8. O programa seguinte (Figura 3) configura T1 como um temporizador de 16
bits (Modo 1). O valor da contagem é 10.000 para T1 e 100 para a rotina de
interrupção de software.
Portanto, a contagem é 1.000.000. A base do tempo é 1 microssegundo, que é a
freqüência de cristal dividida por 12.
Microcomputadores
Laboratório 8 111
A cada segundo o temporizador estoura e a contagem de segundos é exibida no vídeo
alfanumérico.
O valor da carga é FFFFH – 2710H + 1 = D8E1H, sendo 2710H = 10000D.
ENDEREÇO INSTRUÇÃO COMENTÁRIOS
Programa principal
E000H MOV DPTR,#FF20H Posicione ponteiro no endereço de salto T1
E003H MOV A,#02H Código de operação LJMP
E005H MOVX @DPTR,A Armazene LJMP E100H em FF20H
E006H INC DPTR Aponte para o primeiro operando
E007H MOV A,#E1H Byte mais significativo de endereço
E009H MOVX @DPTR,A Armazene primeiro operando
E00AH INC DPTR Aponte para o segundo operando
E00BH MOV A,#00H Byte menos significativo de endereço
E00DH MOVX @DPTR,A Armazene segundo operando
E00EH LCALL FF80H Limpe vídeo
E011H MOV B8H,#08H Posicione registro IP – endereço B8H;
Prioridade máxima de T1.
E014H MOV 89H,#10H Posicione registro TMOD – endereço 89H;
Modo 1 – temporizador de 16 bits.
E017H MOV A8H,#88H Posicione registro IE – endereço A8H;
Ative interrupção de Temporizador 1.
E01AH MOV 8DH,#D8H Posicione registro TH1 – endereço 8DH;
Recarregue valor D8H.
E01DH MOV 8BH,#E1H Posicione registro TL1 – endereço 8BH;
Recarregue valor E1H.
E020H MOV 88H,#40H Posicione registro TCON – endereço 88H;
Inicie Temporizador 1.
E023H CLR A Limpe contador de software (100).
E024H MOV DPTR,#E300H Posicione ponteiro no endereço do
contador.
E027H MOVX A,@DPTR Posicione valor inicial.
E028H LJMP E028H Espere interrupção;
Rotina de serviço de interrupção.
E100H MOV DPTR,#E300H Posicione ponteiro no endereço do contador
de software
Microcomputadores
Laboratório 8
112
E103H MOVX A,@DPTR Leia contagem
E104H INC A Incremente contagem
E105H CJNE A,#64H,00H Verifique se contagem = 100 – salte;
Atualize vídeo.
E108H MOV DPTR,#E200H Posicione ponteiro no endereço do
contador.
E10BH MOVX A,@DPTR Leia contagem.
E10CH INC A Incremente contagem.
E10DH CJNE A,#0AH,01H Verifique se contagem = 10.
E110H CLR A Byte mais significativo de endereço.
E111H MOVX @DPTR,A Guarde contagem.
E112H ADD A,#30H Conversão de ASCII
E114H MOV DPTR,#
FFB1H
Posicione endereço de dados de caracter
E117H MOVX @DPTR,A Armazene dados de caracter
E118H CLR A Defina endereço de caracter = 0
E119H MOV
DPTR,#FFB0H
Posicione endereço de exibição
E11CH MOVX @DPTR,A Armazene endereço de exibição
E11DH LCALL FF86H Exiba caracter
E120H MOV DPTR,#E300H Posicione ponteiro no endereço do
contador.
E123H CLR A Limpe contagem.
Atualize contador de software.
E124H MOVX @DPTR,A Limpe contador de software.
E125H MOV 8DH,#D8H Posicione registro TH1 – endereço 8DH;
Recarregue valor D8H.
E128H MOV 8BH,#E1H Posicione registro TL1 – endereço 8BH;
Recarregue valor E1H.
E12BH MOV 88H,#40H Posicione registro TCON – endereço 88H;
Reinicie Temporizador 1.
E12EH RETI Retorne da interrupção.
Figura 3 : Como Contar Segundos
9. Monte o programa dado na Figura 3.
Microcomputadores
Laboratório 8 113
10. Use o comando GO para executar este programa. Observe que o programa
exibe uma contagem de segundos. Pressione a tecla de controle RESET para deter
o programa.
11. O programa a seguir (Figura 4) configura T1 (Timer número 1) como um
temporizador de recarregamento automático de 8 bits (C/T = 0). T1 é posicionado
no Modo 2. Quando o temporizador estoura, gera-se um contorno de onda
quadrada no bit 7 do Acesso1.
12. Monte o programa dado na Figura 4.
13. Conecte o osciloscópio ao Bit 7 do Acesso 1.
ENDEREÇO INSTRUÇÃO COMENTÁRIOS
Programa inicial.
E000H MOV DPTR,#FF20H Posicione ponteiro no endereço de salto
do T1.
E003H MOV A,#02H Código de operação LJMP.
E005H MOVX @DPTR,A Armazene LJMP E100H em FF20H.
E006H INC DPTR Aponte para o primeiro operando.
E007H MOV A,#E1H Byte mais significativo de endereço.
E009H MOVX @DPTR,A Armazene primeiro operando.
E00AH INC DPTR Aponte para o segundo operando.
E00BH MOV A,#00H Byte menos significativo de endereço.
E00DH MOVX @DPTR,A Armazene segundo operando.
E00EH LCALL FF80H Limpe vídeo.
E011H MOV B8H,#08H Coloque registro IP – endereço B8H;
Prioridade máxima de T1.
E014H MOV 89H,#20H Posicione registro TMOD – endereço 89H;
Modo 2 – recarregamento automático de 8
bits.
E017H MOV A8H,#88H Posicione registro IE – endereço A8H;
Ative interrupção do Temporizador 1.
E01AH MOV 8DH,#01H Posicione registro TH1 – endereço 8DH;
Recarregue valor 01H.
E01DH MOV 88H,#40H Posicione registro TCON – endereço 88H;
Inicie Temporizador 1.
E020H LJMP E020H Aguarde interrupção;
Microcomputadores
Laboratório 8
114
Rotina de serviço de interrupção.
E100H CPL 97H Complemente bit 7 do Acesso 1.
E102H RETI Retorne da interrupção.
Figura 4: Como Gerar um Contorno de Onda Quadrada.
14. Use o comando GO para executar este programa. Observe o contorno de
onda quadrada no osciloscópio. Modifique o programa para obter diferentes
freqüências (mude o valor do endereço E01CH). Pressione a tecla de controle
RESET para deter o programa.
Observações
15. Qual a diferença entre um temporizador e um contador para o 8051?
16. Quantos modos têm os temporizadores/contadores do 8051?
Microcomputadores
Laboratório 9 115
Laboratório 9
Comunicações Seriais
Objetivos
Após completar estas atividades de aprendizado em laboratório, você deverá ser
capaz de:
• Entender o funcionamento de acesso de comunicação do 8051.
• Transmitir caracteres de ASCII em formato assíncrono.
• Comunicar seu microcomputador EB-153 com um computador pessoal.
Equipamento Necessário
• 1 Computador central PU-2000 (Unidade central de processamento - Sistema
de Aprendizado Eletrônico Computadorizado)
• Placa Mestra
• 1 Unidade EB-153 - Placa de Circuito Impresso
• 1 Osciloscópio
• 1 Gerador de Sinal
Como Iniciar o Laboratório
1. Coloque a placa de circuito impresso do EB-153 na unidade central.
2. Ligue a Placa Mestra.
Procedimento
3. O 8051 tem um acesso serial de E/S que é de utilidade para ligar serialmente
dispositivos periféricos por meio de interfaces assíncronas padrões com operações
bidirecionais simultâneas. O acesso serial tem também um modo síncrono.
Microcomputadores
Laboratório 9
116
O acesso serial de E/S bidirecional simultâneo provê modos síncronos para facilitar
comunicações com dispositivos padrões UART, como computadores pessoais,
impressoras, etc.
Ao interfacear-se com dispositivos padrões UART (Controlador de Comunicações
Assíncrono) o canal serial pode ser programado para um modo (Modo 1) que
transmite/recebe uma configuração de 10 bits, ou programa para outros modos (Modo
2 ou 3) que transmite/recebe uma configuração de 11 bits.
A configuração consiste de um bit de partida, oito ou nove bits de dados e um bit de
parada.
Nos Modos 1 e 3, o circuito de sincronização de taxa de transmissão recebe um pulso
do contador 1 cada vez que o contador estoura.
A entrada para o contador 1 pode ser uma fonte externa ou uma divisão por 12 de
freqüência do oscilador.
O modo de recarregamento automático do contador T1 proporciona comunicação de
122 a 31.250 bits por segundo (inclusive bits de partida e de parada) para um cristal de
12 MHz.
O controle do acesso serial e a monitorização de se estado são feitos pelo registro de
controle de acesso serial (SCON).
O conteúdo do registro do SCON de 8 bits está indicado na Figura 1.
Os bits de controle de modo SMO e SM1 programa o acesso serial em um dos quatro
modos de operação.
O Modo 1 coloca a interface do UART na configuração de 10 bits e taxa de
transmissão variável.
Os dados para transmissão e de recepção estão no registro de Buffer de acesso serial
(SBUF).
Microcomputadores
Laboratório 9 117
Figura 1. SCON – Controle de Acesso Serial/Registro de Estado
Uma gravação no SBUF atualiza o registro transmissor, enquanto uma leitura do SBUF
lê um buffer que é atualizado pelo registro receptor se/quando o sinalizador R1 for
restaurado. O receptor tem buffer duplo para eliminar a perda de informações que
ocorreria se a UCP deixasse de responder ao interruptor do receptor antes do início da
próxima configuração.
O bit de ativação do receptor (REN) restaura a lógica de partida/parada do receptor.
Quando o software coloca REN em um (1), o gerador de taxa de transmissão do
receptor é inicializado e a recepção ativada.
O REN deve ser posicionado como parte do programa de inicialização do canal serial.
Quando o REN é apagado, a recepção fica desativada.
A UCP é informada quando a porção transmissora do SBUF está vazia ou a porção
receptora está preenchida, respectivamente pelo T1 e R1.
T1 e R1 devem ser apagados como parte do programa de serviço de interrupção, de
modo a não interromperem continuamente a UCP. Uma vez que T1 e R1 são
passados juntos para o estado OU a fim de gerar pedido de interrupção do acesso
serial, precisam ser sondados para determinar a fonte de interrupção.
Microcomputadores
Laboratório 9
118
O programa a seguir configura o temporizador número 1 como um gerador de taxa
baud de 2.400 bauds e o acesso de comunicação serial. Este programa transmite o
valor ASCII da letra “A” (41H) pela linha TxD.
ENDEREÇO INSTRUÇÃO COMENTÁRIOS
Programa inicial
E000H MOV DPTR,#FF20H Posicione ponteiro no acesso serial.
Interrompa endereço de salto.
E003H MOV A,#02H Código de operações LJMP
E005H MOVX @DPTR,A Armazene LJMP E100H em FF20H.
E006H INC DPTR Aponte para o primeiro operando
E007H MOV A,#E1H Byte mais significativo de endereço.
E009H MOVX @DPTR,A Armazene primeiro operando.
E00AH INC DPTR Aponte para o segundo operando.
E00BH MOV A,#00H Byte menos significativo de endereço.
E00DH MOVX @DPTR,A Armazene segundo operando.
E00EH MOV B8H,#10H Posicione registro IP – endereço B8H;
Prioridade máxima de acesso serial.
E011H MOV 89h,#20H Posicione registro TMOD – endereço 89H;
Modo 2 – temporizador de 8 bits-
recarreg.automát.
E014H MOV 8DH,#F3H Posicione registro TH1 – endereço 8DH;
Recarregue valor F3H = 13D para taxa de
baud = 2.400.
E017H MOV 98H,#42 Posicione registro SCON – endereço 98H;
Modo 1 – desative receptor – T1 = 1.
E01AH MOV 88H,#40H Posicione registro TCON – endereço 88H;
Inicie Temporizador 1.
E01DH MOV A8H,#90H Posicione registro IE – endereço A8H;
Ative interrupção de acesso serial.
E020H MOV 99H,#41H Posicione SBUF (99H) em “A”.
E023H LJMP E023H Aguarde Interrupção
Rotina de serviço de interrupção
E100H MOV 99H,#41H Posicione SBUF (99H) em “A”.
E103H CLR 99H
E105H RETI Retorne da interrupção
Figura 2: Como Transmitir um Caracter ASCII
Microcomputadores
Laboratório 9 119
4. Monte o programa dado na Figura 2.
5. Conecte o osciloscópio a TxD.
6. Use o comando GO para executar este programa. Observe no osciloscópio o
formato assíncrono (8bits de dados, 1 pulso de Partida e 1 pulso de Parada). Note
que os sinais têm níveis lógicos RS-232 e não níveis TTL.
7. Desenhe na Figura 3 os contornos de onda observadas no osciloscópio.
Figura 3: Comunicações Assíncronas.
8. Pressione a tecla de comando RESET para deter o programa.
9. Execute novamente o programa da Figura 2 para diferentes caracteres ASCII.
Observações
10. Qual a diferença entre uma comunicação síncrona e assíncrona?
11. Quais são os níveis lógicos dos sinais RS-232?
12. Que é uma taxa de baud?
07_-_Microcomputadores e microcontroladores
Microcomputadores
Apêndice A 121
Apêndice A
Rotinas Monitoras
Você pode usar várias rotinas monitoras do EB-153 para simplificar sua tarefa de
programação. A Figura 1 dá descrições e endereços de chamada para estas rotinas.
ENDEREÇO
DE
CHAMADA
MNEMÔNICA DESCRIÇÃO
FF40H SWITCH-TO-LED Esta rotina lê as quatro chaves acopladas ao acesso 1
(bits 0 a 3) e transfere os estados lógicos aos LED’s
acoplados ao acesso 1 (bits 4 a 7).
FF50H P1-COUNTER A rotina P1-COUNTER gera um contador binário no
Acesso 1.
FF60H CLEAR-RAM Esta rotina limpa 7 Kbytes da RAM externa do usuário
escrevendo 00H para todos os bytes.
FF80H CLEAR-DISPLAY Esta rotina deixa em branco o vídeo alfanumérico e os
32 bytes do buffer do vídeo (endereços FF90H a
FFAFH).
FF83H DISPLAY-
BUFFER
A rotina DISPLAY-BUFFER exibe o conteúdo do buffer
do vídeo (endereço FFAFH) no vídeo alfanumérico.
FF86H DISPLAY-CHAR Esta rotina exibe um caracter ASCII no vídeo
alfanumérico. O endereço do caracter é tirado do
endereço FFB0H e deve estar na faixa de 00H a 1FH
(32 caracteres). O símbolo do caracter deve ser
armazenado no endereço FFB1H e deve ser qualquer
valor ASCII.
FF89H CLEAR-DISPLAY Esta rotina limpa o buffer do vídeo (endereço FF90H a
FFAFH) escrevendo 20H para todas as localizações de
buffer. Este valor corresponde a um símbolo.
Microcomputadores
Apêndice A
122
FF8CH DELAY A rotina DELAY (retardo) produz um retardo nos
tempos especificados pelo endereço FFC0H (byte mais
significativo). A unidade é ms (0,001 segundo).
Figura 1: Rotinas Monitoras
Microcomputadores
Apêndice B 123
Apêndice B
Como Endereçar Memórias
A Figura 1 mostra o mapa de memória da EB-153.
FAIXA DE ENDEREÇO TIPO DE MEMÓRIA DESCRIÇÃO
0000H-7FFFH ROM Memória de programa monitor. Esta memória
contém o código monitor e dados constantes.
80000H-DFFFH ROM ROM de expansão (até 24 Kbytes) para
programas de aplicação especial.
E000H-FBFFH RAM 7 Kbytes de memória do programa do usuário.
FC00H-FFFFH RAM 1 Kbytes reservados para o programa monitor.
Figura 1: Mapa de Memória de Código
FAIXA DE ENDEREÇO TIPO DE MEMÓRIA DESCRIÇÃO
0000H-0003H PPI 8255 Interface Periférica Programável. Usada
para interfacear o teclado ao microcomputador
e para proporcionar um acesso de E/S dde 8
bits para fins gerais.
0100H-0101H LCD-DISPLAY Vídeo alfanumérico de 32 caracteres.
0700H-07FH BUS-INTERFACE Esta é a faixa de endereço de interface do
barramento paralelo.
E000H-FBFFH RAM 7 Kbytes de memória de dados do usuário
sobreposto na memória de programa do
usuário.
FC00H-FFFF RAM 1 Kbytes de dados reservados pelo programa
monitor.
Figura 2: Mapa de Memória Externa
Microcomputadores
Apêndice B
124
A Figura 3 mostra os endereços especiais da RAM externa, úteis ao programador.
ENDEREÇO DESCRIÇÃO
FF00H Endereço de desvio de interrupção de INTO externo.
FF10H Endereço de alto de interrupção de Comunicações seriais.
FF20H Endereço de alto de interrupção do Temporizador 1.
FF40H Endereço de chamada SWITCH-TO-LED (CHAVE-PARA-DEL)
FF50H Endereço de chamada CONTADOR DE P1
FF60H Endereço de chamada LIMPAR RAM
FF80H Endereço de chamada LIMPAR VÍDEO
FF83H Endereço de chamada BUFFER-VÍDEO
FF86H Endereço de chamada CARACTER-VÍDEO
FF89H Endereço de chamada LIMPAR-BUFFER-VÍDEO
FF8CH Endereço de chamada RETARDO
FF90H-FFAFH Buffer de 32 bytes usado pelas rotinas monitoras para exibir um texto.
FFB0H Contém o endereço de caracter (00H a 1FH) usado pela rotina
CARACTER-VÍDEO para exibir um símbolo ASCII no vídeo alfanumérico.
FFC0-FFC1H O valor de dois bytes é usado pela rotina RETARDO (DELAY) para
multiplicar a base de tempo de 1ms.
Figura 3: Mapa de RAM Externa
A Figura 4 mostra o significado dos endereços de PPI.
ENDEREÇO DESCRIÇÃO
0000H Acesso A
0001H Acesso B
0002H Acesso C
0003H Registro de Modo
Figura 4: Endereços de PPI
A Figura 5 dá o endereçamento do Módulo LCD da Matriz de Pontos.
ENDEREÇO DESCRIÇÃO
1000H RS = 0 – Escreva função de controle
1002H RS = 0 Leia função de controle
1001H RS = 1 – Escreva dados
1003H RS = 1 – Leia dados
Figura 5: Mapa de LCD
Microcomputadores
Apêndice B 125
A Figura 6 mostra o Quadro de Fonte de Caracter LCD.
Figura 6: Caracteres de LCD
Microcomputadores
Apêndice B
126
A Figura 7 mostra o Conjunto de Instruções usado para operar o vídeo de LCD.
Figura 7: Instruções de LCD.
Microcomputador
Apêndice C 127
Microcontrolador
Introdução
Com o avanço da tecnologia e a utilização da eletrônica digital por grande parte das
empresas, o emprego de microcontroladores vêm sendo muito requisitado para um melhor
desenvolvimento da produção, diminuindo os custos e trazendo benefícios para as
empresas que utilizam esse sistema. É importante salientar que, considerando a relação
custo/benefício, os microcontroladores podem não só ser usados em empresas de
médio/grande porte, como podem também ser utilizados em vários projetos de eletrônica,
na substituição de vários componentes digitais, obtendo-se assim no final do projeto um
melhor acabamento – pois um microcontrolador ocuparia um menor espaço físico - e uma
maior eficiência e praticidade, uma vez que todos os comandos seriam executados via
software.
Antes de um aprofundamento no assunto microcontroladores, é importante conhecermos
um pouco da história desses componentes desde as suas origens.
Na década de 70 começaram a ser utilizados microprocessadores em computadores para
uma maior eficiência no processamento de dados. O microprocessador Intel foi um dos
precursores e, a partir daí, houve uma preocupação em melhorar cada vez mais o sistema
de processamento de dados através desses componentes. Baseado na arquitetura de um
microprocessador e seus periféricos, foi criado um componente que (fisicamente em uma
unidade) comportasse todo um sistema que equivalesse a um microprocessador e seus
periféricos; assim surgiu o microcontrolador. Todas as informações e explicações citadas
neste trabalho baseiam-se nos microcontroladores 8051 e 8031 da Intel.
Unidade Central de
Processamento (CPU)
A unidade central de processamento controla todas as funções realizadas pelo sistema.
Microcomputador
Apêndice C
128
A CPU de qualquer sistema de computador contém os seguintes grupos de unidades
funcionais:
- Registradores e contadores
Os registradores e contadores são unidades funcionais usadas para o armazenamento
temporário de bits dentro da CPU.
- Unidade Lógica e Aritmética (ULA)
A unidade lógica e aritmética é a unidade funcional da CPU que executa operações
lógicas e aritméticas entre palavras binárias, gerando uma outra palavra na saída .
- Unidade de controle e sincronização
A unidade de controle e sincronização coordena e controla todas as unidades funcionais
em uma seqüência lógica e sincronizada.
Processamento
O processador ou unidade central de processamento (CPU) é a parte do sistema que faz
o processamento das informações para que as instruções sejam executadas; as
instruções devem estar armazenadas na memória de programa em seqüência, formando
assim o programa .
A CPU possui um registrador chamado de contador de programa (PC) que contém o
endereço da próxima instrução que deve ser executada.
Toda vez que uma instrução é retirada da memória pela unidade central de
processamento, automaticamente o contador de programa é incrementado para que, após
o processamento desta instrução, quando a CPU for buscar a próxima instrução, baste
usar o endereço contido no contador de programa.
Toda vez que a CPU é ligada ou resetada, automaticamente o seu contador de programa
é zerado, desta forma, a primeira tarefa que a CPU irá realizar é a execução da instrução
contida na posição de memória de endereço “0000”. Cada instrução possui duas fases
distintas: o ciclo de busca e o ciclo de execução. Durante o ciclo de uma instrução a CPU
faz com que o conteúdo do contador de programa seja colocado no barramento de
endereços, endereçando, desta maneira, a posição de memória que contém a instrução
que deve ser executada.
Unidades de Entrada/Saída (I/O)
Microcomputador
Apêndice C 129
As unidades de entrada/saída são os meios pelos quais o usuário se comunica com o
sistema. Essas unidades possuem interfaces que permitem a conexão com dispositivos
chamados de periféricos, tais como teclado, monitores, LCD´s, etc.
Arquitetura
A performance do microcontrolador depende da sua arquitetura interna, ou seja, do modo
em que o microcontrolador foi projetado tanto para o hardware como para software. No
hardware apresentaremos a arquitetura Von-Neumann, na qual se refere o software CISC.
- Arquitetura Von-Neumann
Na arquitetura Von-Neumann, os barramentos de dados e endereços são compartilhados
entre memórias de programas e memórias de dados na comunicação com a CPU
(figura1). Nesse tipo de arquitetura, quando a CPU está acessando a memória de
programa não pode acessar a memória de dados, porque usa os mesmos barramentos
para as duas memórias.
CISC (Complex Instruction Set
Computer)
CISC: Computador com Set de Instrução mais Complexo, quanto maior a complexidade
da instrução que deve ser executada, mais espaço ela ocupa no chip. Desse modo,
chegará um momento que passaremos a ter um set de instruções tão grande que
começará a afetar o desempenho, dificultando a possibilidade de implementar outras
funções importantes. Ter um complexo (grande) set de instruções “CISC” nem sempre é
interessante para um bom desempenho do processador.
Figura 1
Microcomputador
Apêndice C
130
Numa análise feita pelo laboratório da IBM sobre como estavam sendo usado os diversos
tipos de instruções, concluiram que num microprocessador que usava um set de
instruções de, por exemplo, 200 instruções, a maior parte do processamento era feita
apenas com umas 10 instruções. Uma grande parte das instruções era pouco usada, às
vezes até uma única vez em um longo programa, de modo que elas poderiam ser
implementadas pelas instruções básicas mais usadas. Daí o aparecimento da nova
arquitetura com o set de instruções reduzido “RISC”.
Memórias
Memórias são os dispositivos que armazenam informações e são usadas em todos os
sistemas microcontrolados. Existem vários tipos de memórias que podem ser classificadas
por vários itens diferentes. Vamos analisar os principais:
- Acesso
As memórias armazenam informações em lugares que se denominam “localidades de
memória”. Cada localidade de memória guarda um conjunto de bits e tem um endereço.
No acesso desses
endereços podemos analisar :
O tempo de acesso: é o tempo que a memória necessita para que sejam escritos ou lidos
os dados em suas localidades;
Acesso seqüencial: nas memórias que têm acesso seqüencial, para acessar um
endereço de uma certa localidade, precisa-se passar por endereços intermediários (as
memórias mais comuns desse tipo são as que utilizam fita magnética);
Acesso aleatório: as memórias que utilizam esse tipo de acesso são as que permitem
que seja acessado qualquer dado em qualquer endereço sem a necessidade de ter que
passar por outros endereços intermediários.
- Volatilidade
Memórias voláteis: são aquelas que perdem as informações quando é cortada sua
alimentação. São memórias que geralmente usam como elemento de memória o flip-flop.
Memórias não voláteis: são memórias que mesmo desligando-se sua alimentação, não
perdem as informações armazenadas. Dentre essas se destacam as magnéticas e as
eletrônicas ROM, PROM, EPROM, EEPROM , e outras.
Microcomputador
Apêndice C 131
- Memórias de escrita/leitura ou somente leitura
Escrita/leitura: são memórias que podem ser acessadas pela CPU tanto para leitura
quanto para escrita; elas são usadas para armazenar dados que serão
utilizados durante a execução do programa (memórias RAM´s, EEPROM´s).
Somente leitura: são as memórias que armazenam o programa, ou seja são as memórias
que só serão lidas pela CPU e que já vêm gravadas para o sistema (memórias ROM´s
,PROM´s , etc).
- Tipo de armazenamento
Estáticas: memórias estáticas são aquelas nas quais as informações permanecem
armazenadas enquanto não houver escrita ou não faltar energia.
Dinâmicas: memórias dinâmicas são memórias que perdem informações armazenadas
mesmo com alimentação. Na RAM dinâmica (ou DRAM) isso acontece porque cada célula
tem um transistor MOSFET e um capacitor que armazena um dado (1bit).
- Tipos de memórias
Veremos a seguir alguns tipos de memórias existentes no mercado e que são muito
utilizadas:
Memórias RAM (Random Acces Memory)
Essas memórias são de acesso aleatório, que podem ser acessadas a qualquer momento
e em qualquer endereço. Elas podem ser estáticas ou dinâmicas e também podem ser
gravadas pelo sistema com a tensão de 5V. São memórias consideradas voláteis.
Memórias ROM (Ready Only Memory)
Essas memórias são utilizadas no sistema somente para a leitura.
Memórias PROM (Programmable Ready Only Memory)
Essas memórias são utilizadas no sistema somente para a leitura; geralmente usadas
como memórias de programa, só podem ser gravadas com gravadores gravadores
específicos e só uma vez. São as memórias não voláteis;
Memórias EPROM (Erasable Programmable Ready Only Memory) Essas memórias são
utilizadas no sistema somente para a leitura , também empregadas como memórias de
programa e só podem ser gravadas com gravadores específicos. Podem ser apagadas
por raios ultravioleta e regravadas por muitas vezes. São chamadas memórias não
voláteis.
Memórias EEPROM ou E²PROM (Electrically Erasable Programmable Ready Only
Memory)
Essas memórias podem ser usadas no sistema tanto para leitura como para escrita,
podem ser gravadas com gravadores específicos ou pelo sistema; são apagadas
eletricamente e regravadas por muitas vezes; são consideradas memórias não voláteis.
Microcomputador
Apêndice C
132
Memórias PEROM (Programmable Erasable Ready Only Memory) Uma linha de
memórias programáveis e apagáveis apenas para leitura, de 3V e 5V, apenas dentro do
sistema. Fabricadas com a avançada tecnologia CMOS, não voláteis, suas características
incluem:
· Operação de leitura e programação em apenas 3V e 5V
· Proteção de dados de software e hardware
· Operação de programação por setor
· 1000 ciclos de programa
· Retenção de dados de 10 anos
· Baixa dissipação de potência
· Tempo de ciclo de programa rápido
· Detecção de fim de programa
Memórias FLASH
A memória FLASH é um dispositivo de armazenamento confiável, não volátil, de boa
relação custo/ benefício e que possui características de leitura da EPROM, EEPROM e
SRAM , porém quando aplica-se 12V sobre o dispositivo, este pode ser gravado com base
em bytes. No caso da memória FLASH - 5V estes dispositivos foram projetados para
serem programados dentro do sistema com o fornecimento padrão de 5V. Em
programadores de EPROM convencionais não há necessidade de 12Vpp, nem para
programação, nem para apagamento. É composta de uma arquitetura de apagamento de
setor (qualquer combinaço pode ser pagada simultaneamente) e 100.000 ciclos de
apagamento / programação.
Memória FLASHFILE
A memória FLASHFILE, simetricamente bloqueada, da Intel, oferece uma solução não
volátil com leitura e programação de mais alta densidade para armazenamento em massa.
O armazenamento de aplicações de software e a operação com código de sistema em
RFAs (Residential Flash Arrays ) proporcionam execução instantânea, rápida e no local (in
place). RFAs são protegidos também contra o envelhecimento do software, já que este
pode ser atualizado no sistema. O software RFA prolonga a vida da bateria e aumenta a
confiabilidade do sistema através da redução do número de acessos ao diskdrive. 100.000
ciclos de apagamento / programação.
Memórias FIELD
Microcomputador
Apêndice C 133
Estes dispositivos são para utilização em filmes digitais e sistemas multimídia. Eles
fornecem dados através de acesso serial de alta velocidade. Sua capacidade de memória
preenche um arquivo de uma tela de TV NTSC. Cada um dos bits possui porta de leitura e
gravação assíncronas, de controle independente a diferentes velocidades de clock,
proporcionando uma operação FIFO , renovando a células de armazenamento RAM
automaticamente.
Memórias FIFO
Os dispositivos FIFO proporcionam armazenamento temporário de dados em sequência
de tal forma que a primeira palavra na porta de entrada será a primeira na porta de saída.
As portas operam de forma independente e os dados podem ser lidos e gravados em
velocidades diferentes.
Os dispositivos FIFO possuem posições de memória que inibem a entrada de dados
adicionais caso estejam ocupadas, podendo apenas enviar dados armazenados para fora.
O tempo utilizado para completar uma operação chama-se tempo de acesso, esse valor
pode determinar a velocidade do sistema no qual o dispositivo está operando.
Memórias Seriais
Estes dispositivos são de tamanho reduzido podendo ser ligados a um barramento serial
I²C (Inter-Integrated Circuit Bus) ou SPI (Serial Peripheral Interface) junto com outros
dispositivos seriais, com muitas vantagens em relação às memórias paralelas.
Microcontroladores
Existem no mercado muitos tipos de microcontroladores, sendo o 8051 o mais popular. O
microcontrolador também é conhecido com microcomputador de um só chip reunindo num
único componente vários elementos de um sistema, antes baseado em microprocessador
e que eram desempenhados por vários componentes independentes tais como RAM,
ROM, comunicação serial, etc. A memória de programa pode ser ROM, FLASH ou outro
tipo. No caso do microcontrolador 8051 ele pode funcionar como um microcontrolador ou
como um microprocessador. Na figura 2 mostrado o diagrama de blocos do 8051. A
ATMEL possui uma enorme família de componentes com as mesmas características do
805, alguns até com as mesmas
pinagens dos registradores; outros com pinagens diferentes, mas com o mesmo set de
instruções, com clock de 12 MHz até aproximadamente 35 MHz.Falaremos um pouco
mais dessa família mais adiante. A DALLAS Semiconductor tem um microcontrolador de
alta performance, de até 90MHz, compatível com 8051.
Microcomputador
Apêndice C
134
Figura 2 - Arquitetura Interna em Bloco do 8051BH.
Descrição da pinagem do 8051
Do pino 1ao pino 8 temos:
O port P1, que vai de P1.0 a P1.7. Estes pinos são bidirecionais, podendo ser
endereçáveis individualmente ou como porta de 8 bits; possuem resistores de pull-up
internos, forçando assim nível lógico alto. Cada pino pode acionar até 4 portas TTL-LS.
Pino 9
RST/VPD. Estes pinos resetam o sistema com a aplicação de um nível lógico alto por,
pelo menos, dois ciclos de máquina, tendo um resistor de pull-down interno permitindo que
se use apenas um capacitor externo para obter o reset por power-on.
Do pino 10 ao pino 17 temos:
Microcomputador
Apêndice C 135
O port P3, que vai de P3.0 a P3.7 tem as mesmas características de funcionamento do
port P1, tendo também outras funções especiais que estão descritas abaixo.
Figura 3 – Descrição da Pinagem Do 8051.
pino 10 = P3.0 RXD/ Data : entrada de dados serial.
pino 11 = P3.1 TXD/Clock: saída de dados serial.
pino 12 = P3.2 INT0: interrupção externa de número 0, ativo em nível lógico baixo.
pino 13 = P3.3 INT1: interrupção externa de número 1, ativo em nível lógico baixo.
pino 14 = P3.4 T/C0 : entrada externa para o temporizador/contador de eventos.
pino 15 = P3.5 T/C1: entrada externa para o temporizador/ contador de eventos.
pino 16 = P3.6 WR: strobe (sinalizador) de escrita de dados externo
pino 17 = P3.7 RD : strobe (sinalizador) de leitura de dados externo
Obs: estas funções serão mais detalhadas
na continuação da apostila
Os pinos 18 e 19 são:
XTAL 1 (18)
XTAL 2 (19)
Pino 20:
VSS conectado ao terra do circuito
Do pino 21 ao pino 28 temos:
Microcomputador
Apêndice C
136
O port P2, que vai de P2.0 a P2.7. Tem as mesmas características de funcionamento do
port P1, sendo estes pinos usados como pinos de endereçamento externo endereçando a
parte mais significativa dos 16 bits (A8 a A15).
Pino 29:
PSEN (Program Store Enable), saída para habilitação do programa externo, sinalizador de
leitura da memória
de programa externa; quando o microcontrolador busca instruções este pino vai ao nível
zero.
Pino 30:
ALE (Address Latch Enable), saída habilitadora do latch de endereços, separando o
barramento de dados da
parte menos significativa do barramento de endereços que são multiplexados pelo port P0.
Pino 31:
EA (External Enable) , entrada de seleção de memórias. Quando colocado em nível lógico
baixo, a CPU executa somente as instruções da memória de programa externa; quando
em nível lógico alto, a CPU executa as instruções da memória de programa interna (se
existir).
Pino 32 ao pino 39 temos:
Port P0: que vai de P0.0 a P0.7. Este é um port de 8 bits bidirecional com dreno aberto.
Sem resistores de pull-up internos, funciona como um barramento de dados, e a parte
menos significativa do barramento de endereços.
Pino 40, temos
VCC (Alimentação positiva) Basicamente, os pinos do microcontrolador são construídos
como mostra a figura 4 abaixo com algumas diferenças uns dos outros, mas para
explicação de um modo geral pode ser considerado um flip-flop tipo D com dois buffers tri-
state, um transistor e um resistor.
Figura 4
Microcomputador
Apêndice C 137
Quando o microcontrolador vai escrever no pino, o dado é enviado para a via de dados
interna e também é dado um clock no flip-flop, que terá o mesmo sinal na saída “Q” (e o
complemento destesinal na saída Q/), que por sua vez está ligada ao gate de um
transistor, o qual entra em saturação quando for aplicado nível “1”.
Se o sinal que estiver na via de dados for “1” e o flip-flop receber um clock, a saída Q terá
um sinal de nível alto, e Q/ terá um sinal de nível baixo que entrará no gate do transistor
deixando-o em corte e, então, o sinal no pino será o do resistor, ou seja , nível “1”. Agora,
se o sinal que estiver na via de dados interna for nível baixo e novamente o flip-flop
receber um clock, na saída Q teremos um sinal de nível baixo, e na saída
Q/ um sinal de nível alto que levará o transistor à saturação e com isso o pino terá um
nível baixo. Quando se quer ler um pino, o microcontrolador deve enviar enviar um sinal
para o buffer “lê pino”, que pega o sinal que estiver nele e envia para via de dados interna;
quando se quer ler o flip-flop, o sinal é enviado para o buffer “lê latch” que libera o sinal da
saída Q para a via de dados interna. No microcontrolador existem algumas instruções
responsáveis pela leitura do flip-flop, e outras do pino. Para que se possa ler um sinal
externo no pino, deve se primeiro escrever nele um nível alto evitando assim que o
transistor conduza e mande um sinal baixo no pino, pois se for entrar um sinal de nível alto
no pino, o transistor não poderá estar saturado, senão entrará em conflito prejudicando a
leitura. Isso acontece em todos os PORT’s do microcontrolador.
Quando estão sendo usado os pinos de I/O como PORT’s (empregando somente as
memórias internas, é necessário o uso de resistores de pull-up no port P0 .
CLOCK E CICLO DE MÁQUINA
O microcontrolador é um circuito dinâmico, e para o seu funcionamento necessita de um
sinal de clock (relógio) para sincronização de suas operações. Este sinal de clock é
gerado por um oscilador que fornece um seqüência ininterrupta de pulsos com períodos
constantes. O chamado ciclo de máquina é uma quantidade de pulsos de clock que o
processador requer para fazer suas funções; e o ciclo de instrução é a quantidade de
ciclos de máquina que são necessários para a execução de uma instrução.
Um exemplo genérico de uma instrução: suponhamos que um processador qualquer leve
para a execução de uma instrução 5 (cinco) ciclos de máquina,e que cada ciclo de
máquina desse processador seja igual a 2 (dois) clocks. Para executar essa instrução o
processador levará 10 (dez) clocks; supondo também que desses 5 (cinco) ciclos de
máquina, 2(dois) seriam para a busca da instrução na memória de programa
e os outros 3 (três) para a execução dessa instrução como mostra a figura 5.
Microcomputador
Apêndice C
138
figura 5

Mais conteúdo relacionado

PPTX
ApresPP.pptx
PPTX
Pentium pro trabalho
PPTX
Microarquitetura Intel Core Duo
PDF
10 apostila microcontroladores
PDF
Microprocessadores
PDF
Apostila cpic
PPT
Aula01a_Introducao_Microcontroladores
DOC
Pcs2031 projeto01 introducao_pic_v4
ApresPP.pptx
Pentium pro trabalho
Microarquitetura Intel Core Duo
10 apostila microcontroladores
Microprocessadores
Apostila cpic
Aula01a_Introducao_Microcontroladores
Pcs2031 projeto01 introducao_pic_v4

Semelhante a 07_-_Microcomputadores e microcontroladores (20)

PPT
Microcontroladores x microprocessadores
PDF
Apostila de montagem e manutenção de computadores emi mario gurgel
PDF
Aula 1 conhecimentos básicos - hardware
PPTX
Arquitetura de Microcontroladores Microchip PIC
PDF
Programando microcontroladores pic março
PDF
Apostila Redes Industriais - Prof. Camilo A. Anauate
PDF
1 história e características dos microcontroladores pic
DOCX
MICROCONTROLADORES E PLATAFORMAS DE PROTOTIPAGEM
PDF
Microcontroladores e Microprocessadores Nova
PDF
Curso microcontroladores pic no mp lab 8
PDF
Aula slides arquitetura microprocessadores .pdf
PDF
parte2 fundamentos de arquitetura 1 e 2 pdf
DOCX
Controle de protótipo movimentado por liga de memória de forma (sma) pelo pc,...
DOCX
PDF
Questões Comentadas - Informática para Concurso
PDF
Corpo relatorio
PDF
Sistemas Operacionais - Aula 03 (Conceitos de hardware e software)
PDF
Basico sobre clp
PDF
Introducao clp
PDF
Introducao clp
Microcontroladores x microprocessadores
Apostila de montagem e manutenção de computadores emi mario gurgel
Aula 1 conhecimentos básicos - hardware
Arquitetura de Microcontroladores Microchip PIC
Programando microcontroladores pic março
Apostila Redes Industriais - Prof. Camilo A. Anauate
1 história e características dos microcontroladores pic
MICROCONTROLADORES E PLATAFORMAS DE PROTOTIPAGEM
Microcontroladores e Microprocessadores Nova
Curso microcontroladores pic no mp lab 8
Aula slides arquitetura microprocessadores .pdf
parte2 fundamentos de arquitetura 1 e 2 pdf
Controle de protótipo movimentado por liga de memória de forma (sma) pelo pc,...
Questões Comentadas - Informática para Concurso
Corpo relatorio
Sistemas Operacionais - Aula 03 (Conceitos de hardware e software)
Basico sobre clp
Introducao clp
Introducao clp
Anúncio

Último (20)

PPTX
Introdução à Agronomia - 5 fatos sobre a agronomia
PDF
Ideal para decisões que exigem dados recentes e confiáveis.
PDF
Normas, higiene e segurança na soldadura eléctrica
PDF
Aula 12-13 e 14 - UC2 NR 23 Combate a Incêndios.pdf
PDF
Análise do concreto permeável com adição de resíduos
PPTX
'Conservação de massa equação da continuidade.pptx
PPTX
Integração SMS introdutorio 111111111111
PPT
O gênero resumo O gênero resumo O gênero
PDF
ANTENA DIPOLO DOBRADO NOTA AULA 164 PROFESSOR ANGELO ANTONIO LEITHOLD.pdf
PPTX
Aula_Teorica_Estados limites de serviço no concreto armado.pptx
PPT
DIFERENTES SINTOMAS E SINAIS DE PLANTAS.
PPTX
Aula 04 - Fisica teorica e experimental.pptx
PDF
Beige Dark Grey Vintage Victorian Project History Presentation_20250221_19084...
PPTX
Fund-proc-moagem-carvaoerde_PPT_v007.pptx
PPT
Diagrama de fases de los aceros como material
PPTX
Trabalho sobre Distancia de Visibilidade do Curso de Engenharia
PPTX
Apresentação PF MACAVE no curso de mestrado em Ciencias florestais
PPTX
Aula 6_Delineamento em Blocos Casualizados_28.09.2020_Mestrado.pptx
PPTX
erro balela so para baixar naã perca tempo.pptx
PPTX
11 Métodos de prevenção individual e coletiva.pptx
Introdução à Agronomia - 5 fatos sobre a agronomia
Ideal para decisões que exigem dados recentes e confiáveis.
Normas, higiene e segurança na soldadura eléctrica
Aula 12-13 e 14 - UC2 NR 23 Combate a Incêndios.pdf
Análise do concreto permeável com adição de resíduos
'Conservação de massa equação da continuidade.pptx
Integração SMS introdutorio 111111111111
O gênero resumo O gênero resumo O gênero
ANTENA DIPOLO DOBRADO NOTA AULA 164 PROFESSOR ANGELO ANTONIO LEITHOLD.pdf
Aula_Teorica_Estados limites de serviço no concreto armado.pptx
DIFERENTES SINTOMAS E SINAIS DE PLANTAS.
Aula 04 - Fisica teorica e experimental.pptx
Beige Dark Grey Vintage Victorian Project History Presentation_20250221_19084...
Fund-proc-moagem-carvaoerde_PPT_v007.pptx
Diagrama de fases de los aceros como material
Trabalho sobre Distancia de Visibilidade do Curso de Engenharia
Apresentação PF MACAVE no curso de mestrado em Ciencias florestais
Aula 6_Delineamento em Blocos Casualizados_28.09.2020_Mestrado.pptx
erro balela so para baixar naã perca tempo.pptx
11 Métodos de prevenção individual e coletiva.pptx
Anúncio

07_-_Microcomputadores e microcontroladores

  • 1. Escola SENAI “Prof. Dr. Euryclides de Jesus Zerbini” Campinas/SP 2002 Microcomputadores
  • 2. Microcomputador  SENAI-SP, 2002 Trabalho elaborado pela Escola SENAI “Prof. Dr. Euryclides de Jesus Zerbini” Coordenação Geral Magno Diaz Gomes Equipe responsável Coordenação Geraldo Machado Barbosa Elaboração Romeu Corradi Júnior Equipe responsável pela formatação Coordenação Luciano Marcelo Lucena da Silva Formatação David Tadeu Cassini Manzoti Edmar Fernando Camargo Edney Messias Soares Eudenir Scheffer Junior Fabrício Monteiro G. Dias Versão 1.0 SENAI - Serviço Nacional de Aprendizagem Industrial Escola SENAI “Prof. Dr. Euryclides de Jesus Zerbini” Avenida da Saudade, 125, Bairro Ponte Preta CEP 13041-670 - Campinas, SP senaizerbini@sp.senai.br
  • 3. Microcomputadores Sumário 3 Sumário Introdução 05 SAB 8051 - Diagrama em Blocos 07 Características Gerais 09 Organização de Memória em Dispositivos SAB-51 11 O Conjunto de Instruções 17 Ciclo de Máquina 27 Estrutura de Interrupção 29 Temporizadores 33 Interface Serial 35 Principais Vantagens do Microcontrolador 8051 37 Atuais Tendências 39 Software do 8051 41 Atividades de Laboratório 53 Introdução 55 LABORATÓRIO 1: Travando conhecimento com o EB-153. 57 LABORATÓRIO 2: Sub-rotinas monitoras. 65 LABORATÓRIO 3: Instruções sobre transferência de dados. 73 LABORATÓRIO 4: Portas de entrada e saída. 81 LABORATÓRIO 5: Operações aritméticas e lógicas. 89 LABORATÓRIO 6: Operações de transferência de controle. 95 LABORATÓRIO 7: Interrupções externas. 101 LABORATÓRIO 8: Temporizadores e contadores de eventos. 107 LABORATÓRIO 9 : Comunicações seriais. 115 APÊNDICE A: Rotinas monitoras. 121 APÊNDICE B: Como endereçar memórias. 123 APÊNDICE C: Microcontrolador. 127
  • 5. Microcomputadores Introdução 5 Introdução O que é um Microcontrolador? Microcontrolador é um dispositivo utilizado para controlar e monitorar funções durante um processo. A partir do advento dos circuitos integrados TTL, pode-se delinear três gerações no que diz respeito à implementação de controladores. Na primeira geração estão os projetos envolvendo circuitos integrados TTL, na sua maioria. O alto consumo de energia, a grande quantidade de chips envolvidos e a dificuldade em se realizar reengenharia tornou a segunda geração atraente aos projetistas. O advento dos microprocessadores tornou versátil o projeto de circuitos destinado ao controle: era a segunda geração dos controladores. Boa parte das funções antes implementadas por hardware passaram a ser implementadas por software. A terceira geração veio para integrar em um único chip boa parte dessa estrutura. Microcontroladores integram as funções de um microprocessador, memória de dados e de instruções e ainda, dependendo da complexidade, portas seriais e paralelas bidirecionais, conversores A/D, timers, watchdog e outros. Fabricantes de Microcontroladores • Motorola • Mitsubishi • Siemens • NEC • Hitachi • Microchip • Matsushita • Toshiba • National Semiconductor • Zilog
  • 6. Microcomputadores Introdução 6 • Philips • Intel • Texas Instruments • Sharp Mercado de Microcontroladores WorldWide Microcontroller Shipments (in millions of dollars) 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 4 bit 1393 1597 1596 1698 1761 1826 1849 1881 1856 1816 1757 8 bit 2077 2615 2862 3703 4689 5634 6553 7529 8423 9219 9715 16 bit 192 303 340 484 810 1170 1628 2191 2969 3678 4405 Fonte: WSTS & ICE – 1994 WorldWide Microcontroller Shipments (in Millions) 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 4 bit 778 906 979 1036 1063 1110 1100 1096 1064 1025 970 8 bit 588 753 843 1073 1490 1803 2123 2374 2556 2681 2700 16 bit 22 38 45 59 106 157 227 313 419 501 585 Fonte: WSTS & ICE – 1994 Na tabela acima, podemos notar que o mercado de microcontroladores tende a aumentar, principalmente os de 8 e 16 bits. Pode-se notar também que mais da metade dos negócios são efetuados com microcontroladores de 8 bits.
  • 7. Microcomputadores SAB 8051 – Diagrama em Blocos 7 SAB 8051 – Diagrama em Blocos
  • 9. Microcomputadores Características Gerais 9 Características Gerais Esse trabalho focaliza o microcontrolador da Siemens Components, Inc. mas o componente é totalmente compatível com o de outros fabricantes. O SAB 8051 é o membro original da família SAB-51. Entre as características do SAB- 8051, estão: • CPU de 8bits otimizada para aplicações em controle. • Alta capacidade de processamento booleano (manipulação de variáveis de um bit). • 32 linhas de E/S bidirecionais e individualmente endereçáveis. • 128 bytes de RAM interna destinada a dados • RAM de baixo consumo de energia. • 2 temporizadores/contadores de 16bits • UART full duplex • 5 estruturas de interrupção com 2 níveis de prioridade • Clock interno • 4 Kbytes de memória de programa interna • 64 Kbytes de memória de programa endereçáveis • 64 Kbytes de memória de dados endereçáveis • Freqüência de clock entre 1.2 MHz e 12 MHz O SAB 8051 é um microcontrolador de alta-performance que opera em +5V, construído sob a alta tecnologia Siemens MYMOS (III). O SAB 8031 difere do SAB 8051 por não ter memória ROM interna. Dessa forma, todas as instruções são buscadas na memória externa.
  • 11. Microcomputadores Organização de Memória em Dispositivos SAB-51 11 Organização de Memória em Dispositivos SAB-51 Separação Lógica de Memória de Programa e de Dados Toda a família SAB-51 tem espaços de endereços separados para memória de programas e de dados (configuração Harvard). Essa separação permite que a memória de dados seja acessada por endereços de 8bits, podendo ser mais rapidamente manipulada pela CPU de também 8bits. Não obstante, endereços de 16bits para essa memória possam ser gerados através do registrador DPTR. O microcontrolador pode acessar 4Kbytes de memória de programas internamente e mais 64Kbytes externamente. O dispositivo emite o sinal PSEN ( Program Store Enable) para ler a memória de programa externa. Os 64Kbytes de Memória de Dados Externa são acessados pelo dispositivo através dos sinais RD e WR. Os sinais PSEN e RD podem ser injetados na entrada de um porta AND e a saída dessa porta utilizada como sinal de requisição de leitura a uma memória externa de dados e programas convencional. Memória de Programas Na Memória de Programas estão alocadas as posições alvos de interrupções. Em cada uma dessas posições, deve iniciar a rotina que serve à respectiva interrupção. O espaçamento entre essas posições fixas é de 8bytes. Na maioria das aplicações de controle, essas rotinas cabem inteiramente nesse intervalo, de outra forma, um jump nessas posições se faz necessário. Os primeiros 4Kbytes da Memória de Programas podem ser endereçados interna ou externamente. Se o pino EA (External Acces) estiver em nível alto, esses bytes são
  • 12. Microcomputadores Organização de Memória em Dispositivos SAB-51 12 acessados on-chip. Levando o pino EA a nível baixo, o acesso a tais bytes é feito na memória externa. A configuração do hardware para execução de programas externos é mostrado na Figura1. As 16 linhas de E/S ( Portas 0 e 2) são dedicadas para desempenhar função de bus durante buscas na Memória de Programas. A Porta 0 emite o byte menos significativo do Contador de Programas (PCL). Nesse momento o sinal ALE funciona como clock para o Latch armazenando o PCL. As linhas da Porta 0 entram em estado de alta impedância. Enquanto isso, a Porta 2 emite o byte mais significativo do Contador de Programas (PCH). O Latch e a Porta 2 formam portanto o endereço necessário ao acesso da ROM externa. O sinal PSEN, em nível baixo, habilita a ROM à leitura. A Porta 0 entra no modo entrada e a instrução da ROM do correspondente endereço é enviado à essa porta. Figura 1 – Execução a partir de memória externa. Memória de Dados A figura 2 mostra a configuração do hardware para o acesso de 2Kbytes de RAM externa. Neste caso a CPU está executando a partir da ROM interna. O endereço pode ter largura 1 ou 2bytes. Quando utilizando 1byte, uma ou mais outras linhas de E/S
  • 13. Microcomputadores Organização de Memória em Dispositivos SAB-51 13 podem ser utilizadas, como mostrado na figura. Quando utilizando 2bytes de largura, o byte mais significativo é enviado pela Porta2. Figura 2 – Acesso à memória de dados externa O mapeamento da memória interna é mostrada Figura 3. Ela é dividida em três blocos que são referidos como Lower 128, Upper 128 e SFR. Os registradores, mapeados em memória, ocupam os primeiros 32bytes do bloco Lower, agrupados em bancos de 8 (R0 a R7). Dois bits na Palavra de Status de Programa (PSW-Program Status Word) seleciona um dos bancos. Isto permite maior eficiência no espaço do código, uma vez que, instruções que referem a registradores são menores que as instruções de endereçamento direto. Figura 3 - Memória de dados interna
  • 14. Microcomputadores Organização de Memória em Dispositivos SAB-51 14 Os 16bytes acima do banco de registradores, formam o espaço de bits endereçáveis. O conjunto de instruções do SAB-51 inclui uma grande quantidade de instruções de um único bit, e os 128 bits dessa área podem ser acessados por essas instruções. O bloco Lower ocupa o intervalo de endereços de 00H até 7FH e seu mapeamento é visto na Figura 4. Figura 4 – Região Lower 128 Todos os bytes do bloco Lower podem ser acessados direta ou indiretamente (veja seção 5.2). O bloco Upper 128, não disponível no 8051 mas sim, no 8053B, no 80515 e no 80C517, é acessado unicamente por endereçamento indireto. O bloco SFR (Special Function Register), mostrado na Figura 5, inclui latches, timers, controle de periféricos, etc. e ocupa o espaço de endereçamento 80H a FFH. Tais registradores podem ser acessados exclusivamente por acesso direto.
  • 15. Microcomputadores Organização de Memória em Dispositivos SAB-51 15 Figura 5 – Região SFR ( Special Function Registers )
  • 17. Microcomputadores O Conjunto de Instruções 17 O Conjunto de Instruções Todos os membros da família 8051 executam o mesmo conjunto de instruções classificadas como: aritméticas, lógicas, transferência de controle, transferência de dados e booleanas. Dispõem de uma variedade de rápidos modos de endereçamento à RAM interna, para facilitar operações com bytes em pequenas estruturas de dados. Suporte à variáveis de um bit também é disponível, permitindo manipulação direta em sistemas de controle e lógica que requerem processamento booleano. Program Status Word (PSW) Este byte, localizado no espaço SFR, contém alguns bits de status que refletem o estado da CPU. Mostrado na figura 6, contém flags Carry, Auxiliay Carry, Overflow, Paridade, dois bits (RS0 e RS1) de seleção de banco de registradores e dois bits de status definidos pelo usuário. Figura 6 – Registrador PSW ( Program Status Word )
  • 18. Microcomputadores O Conjunto de Instruções 18 Modos de Endereçamento Para acessar um dado, as instruções do microcontrolador 8051 contam com seis tipos de endereçamentos: Direto, Indireto, por Registradores, por Registrador Específico, Imediato e Indexado. Endereçamento Direto Nesse modo, o endereço do operando é especificado por um campo de 8bits na instrução. Somente RAM de dados interna e a região SFR pode ser diretamente endereçadas. Endereçamento Indireto A instrução especifica um registrador que contém o endereço do operando. Ambas externa e interna RAM’s podem ser indiretamente acessadas. Se tal endereço possui 8bits, seu valor é armazenado em R0 ou R1, do respectivo banco selecionado, ou no Stack Pointer. Por outro lado, se tal endereço possui 16bits, seu valor é armazenado no registrador DPTR. Endereçamento por Registradores Instruções que suportam um espaço de três bits em seu opcode podem acessar registradores de R0 a R7 dos bancos de registradores. Tais instruções são eficientes por eliminarem um byte de endereço. Quando uma instrução desse tipo é executada, um dos quatro bancos de registradores é selecionado pelos bits RS0 e RS1 de PSW em tempo de execução. Endereçamento por Registrador Específico Algumas instruções são específicas a certos registradores. Por exemplo, algumas instruções sempre operam no Acumulador e, para elas, não é necessário um ponteiro. O próprio opcode é capaz de realizar tal tarefa. Endereçamento Imediato Quando uma constante segue o opcode. Endereçamento Indexado Somente a Memória de Programas, cuja única operação é leitura, pode ser acessada por esse modo. É usado para fazer leituras em tabelas na Memória de Programas. Um registrador de 16bits (DPTR ou PC) aponta para o início da tabela enquanto o Acumulador é ajustado para a n-ésima posição da mesma. O endereço de uma
  • 19. Microcomputadores O Conjunto de Instruções 19 entrada para a tabela é formado pela soma entre o Acumulador e o registrador de 16bits. Uma outra aplicação desse tipo de endereçamento é na formação do endereço destino de jumps pela soma do índice e do valor do Acumulador. Instruções Aritméticas O conjunto de instruções 8051 pode acessar suas variáveis pelos diferentes modos de endereçamento. Por exemplo, a instrução ADD A, <byte> pode ser escrita como: • ADD A, 7FH (direto) • ADD A,@R0 (indireto) • ADD A,R7 (registrador) • ADD A,#127 (imediato) Tabela 1 – Instruções Aritméticas Instruções aritméticas tomam 1µs para serem executadas exceto INC DPTR, que toma 2µs e instruções de multiplicação e divisão, que tomam 4µs, considerando uma freqüência de clock de 12MHz. Note que qualquer byte alocado em uma posição da Memória de Dados interna pode ser incrementado ou decrementado sem precisar de ser carregado no Acumulador. A instrução MUL AB multiplica o conteúdo do Acumulador pelo conteúdo do registrador. O produto em 16bits é colocado nos registradores A e B concatenados. A
  • 20. Microcomputadores O Conjunto de Instruções 20 instrução DIV divide o conteúdo do acumulador pelo conteúdo do registrador B. O quociente é colocado no Acumulador e o resto no registrador B. A instrução DA A, ajusta o resultado de uma operação BCD. Note que essa instrução não converterá um número binário em BCD mas sim, ajustará o resultado de uma operação ADD ou ADDC envolvendo valores BCD. Instruções Lógicas Essas instruções realizam operações booleanas ( AND, OR, Exclusive OR e NOT) bit a bit entre dois bytes. Elas podem endereçar seus operandos por diversos modos como, por exemplo, a instrução ANL A, <byte>: • ANL A,7FH (direto) • ANL A,@R1 (indireto) • ANL A,R6 (por registrador) • ANL A,#53H (imediato) Tabela 2 – Instruções Lógicas Todas instruções desse tipo que utilizam o Acumulador como registrador específico tomam 1µs para serem executadas, enquanto as demais tomam 2µs. Os modos de endereçamento disponíveis tornam desnecessário carregar qualquer operando que estiver na Memória de Dados interna para o Acumulador. Não utilizar o Acumulador,
  • 21. Microcomputadores O Conjunto de Instruções 21 economiza o tempo em empilhar seu conteúdo quando do atendimento a uma interrupção. Instruções de rotação deslocam de um bit para direita ou esquerda o conteúdo do Acumulador. Se for para esquerda, o bit LSB recebe o bit MSB, enquanto, se for para direita, o bit MSB recebe o bit LSB. A instrução SWAP permuta os quatro bits menos significativos com os quatro bits mais significativos do Acumulador. Instruções de Transferência de Dados Essas instruções são divididas em três subgrupos conforme a localização do dado: na RAM interna, na RAM externa ou na Memória de Programas (Lookup Tables). RAM Interna Sob um clock de 12MHz, uma operação desse tipo é realizada em 1 s ou 2 s. Esse conjunto de instruções mostrado na tabela 3, conta com a facilidade, por exemplo, de MOV <dest>,<src> que transfere dados entre duas posições de RAM interna ou região SFR dispensando qualquer carregamento do Acumulador (lembre que a região Upper 128 da RAM de dados pode ser acessada somente por endereçamento indireto e a região SFR somente por endereçamento direto). PUSH e POP utilizam endereçamento direto para identificar o byte a ser salvo ou restaurado, mas usa endereçamento indireto para acessar a pilha através do registrador SP. Isso significa que a pilha (que cresce no mesmo sentido dos endereços e localizada na região Lower 128) pode avançar sobre a região Upper 128 mas não na região SFR. Em dispositivos que não contam com a região Upper 128 ( 8051A, 80C51 e 80512 e versões ROMless) se a pilha tenta avançar sobre ela, bytes de PUSH são perdidos e de POP são indeterminados. Movimentação com 16bits é útil para inicializar DPTR para acesso a Lookup Tables na Memória de Programas ou acessar Memória de Dados externa.
  • 22. Microcomputadores O Conjunto de Instruções 22 Tabela 3 – Instruções de Transferência de Dados em Memória Interna RAM Externa A Tabela 4 mostra a lista de instruções de Transferências de Dados para acesso à memória externa. Somente endereçamento indireto pode ser utilizado. Pode-se escolher o uso de endereços de 8bits, @Ri, onde Ri pode ser o registrador R0 ou o registrador R1, ou endereços de 16bits, @DPTR. A desvantagem em se usar endereços de 16bits, quando poucos Kbytes de Memória de Dados externa estão envolvidos, é o sacrifício de todos os 8bits da Porta2 (veja Figura 2). Note que o Acumulador é sempre a fonte ou o destino da transferência. Os sinais RD e WR só são gerados quando da execução de uma instrução do tipo MOVX, assim, se uma RAM externa não é disponível, tais sinais podem ser utilizados como linhas de E/S extras. Tabela 4 – Instruções de movimentação em memória de dados externa Lookup Tables A tabela 5 mostra as duas instruções disponíveis para ler Lookup Tables da Memória de Programas. Uma vez que reside nessa memória, tal tabela só poderá ser lida. Se essa tabela se encontra na Memória de Programas externa, o sinal de leitura é PSEN. A primeira instrução MOVC pode acomodar uma tabela de 256 entradas (0-255). O número da entrada é armazenado no Acumulador e o registrador DPTR é ajustado com o valor inicial da tabela. A segunda instrução utiliza o PC como a base da tabela que é acessada através de subrotina. O Acumulador é carregado com o valor da entrada da tabela e a subrotina é chamada:
  • 23. Microcomputadores O Conjunto de Instruções 23 • MOV A, ENTRADA • CALL LOOKUP_TABLE Subrotina: • LOOKUP_TABLE: MOVC A, @A + PC • RET A tabela em si segue imediatamente a instrução RET. Ela comporta 255 entradas (1- 255), pois, a entrada 0 endereça a instrução RET. Tabela 5 – Instruções para leitura de Lookup Table em memória de programa Instruções Booleanas Os dispositivos da família 8051 contam com um completo conjunto de operações booleanas sob bits únicos. A o espaço Lower 128 da RAM interna suporta 128 bits endereçáveis e o espaço SFR pode suportar outros 128 bits endereçáveis. Todas as linhas das portas são bit-endereçáveis e cada uma dessas linhas pode ser tratada como uma porta de um único bit. As instruções que acessam esses bits não são apenas branches condicionais mas uma completa lista de move, set, clear, complement, OR e AND. Esse tipo de operações sobre bits não é facilmente obtido em outras arquiteturas sem uma razoável quantidade de código. Todos esses bits são endereçados diretamente. Bit-Endereços entre 00H e 7FH acessam o espaço Lower 128 enquanto entre 80H e FFH acessam o espaço SFR. Note como é fácil um flag interno ser movido para um pino de uma porta: • MOV C, FLAG • MOV P1.0, C Onde FLAG é o nome de qualquer Bit-Endereçável em Lower 128 ou SFR. Nessa seqüência, bit de FLAG é movido para o bit menos significativo da Porta1. O Carry bit de PSW é utilizado como acumulador para operações Booleanas.
  • 24. Microcomputadores O Conjunto de Instruções 24 As operações de jump desse conjunto testam um único bit, que possa ser diretamente endereçável, como condição. Uma vez que todos os bits de PSW são endereçados diretamente, pois estão no espaço SFR, pode-se utilizá-los como alguma condição de jump. Para jumps relativos, o endereço contido no código é somado ao PC em complemento de dois se o jump é tomado. Portanto, a distância de jump pode variar na faixa de -128 a +127 bytes a partir do endereço do byte de desvio. Instruções de Jumps O conjunto de instruções de jumps pode ser dividido em dois subgrupos: jumps condicionais e jumps incondicionais. Jumps incondicionais O conjunto de jumps incondicionais (tabela 6) possuem seis instruções em seu repertório. JMP é apenas um mnemônico genérico utilizado pelo programador que não precisa saber como ela é realmente interpretada pelo assembler. Na realidade, JMP corresponde a três instruções: SJMP, LJMP e AJMP. A instrução SJMP calcula o endereço destino como descrito acima que pode varrer uma largura de -128 a +127 bytes na Memória de Programas. A instrução LJMP codifica o endereço destino como uma constante de 16bits que pode ser qualquer localidade dos 64Kbytes da Memória de Programas. A instrução AJMP codifica o endereço destino como uma constante de 11bits. A instrução consiste em 2 bytes: 3bits do endereço localizam-se no opcode enquanto os outros 8bits localizam-se no próximo byte. Os 11bits assim formados simplesmente substituem os 11bits menos significativos de PC. Em todos os casos, o programador especifica o endereço destino de duas maneiras: ou como um label ou como uma constante de 16bits. O assembler se encarrega de colocar o endereço destino para o correto formato de instrução. A instrução JMP @A + DPTR implementa a comando CASE. O endereço destino é computado em tempo de execução como a soma do conteúdo do Acumulador e o registrador DPTR. Tipicamente, DPTR é carregado com o endereço de uma tabela de jumps e, ao Acumulador, é dado o valor de um índice dessa tabela.
  • 25. Microcomputadores O Conjunto de Instruções 25 Semelhantemente à instrução JMP, a instrução CALL, na realidade, são duas : LCALL e ACALL que diferem na forma como que o endereço da subrotina é dado à CPU. LCALL utiliza o endereço destino em 16bits que pode ser qualquer localidade dos 64Kbytes da Memória de Programas. ACALL utiliza formatos em 11bits o que significa que o endereço destino deve estar no mesmo bloco de 2Kbytes seguintes a instrução. A transparência para o programador em CALL é semelhante à de JMP. As instruções RET e RETI são utilizadas em finais de subrotinas. A diferença entre elas é que RETI informa ao sistema de controle de interrupções que a interrupção em progresso terminou. Tabela 6 - Instruções de Jumps Incondicionais Jumps condicionais O conjunto de jumps condicionais só permite endereçamento de destino relativo o que limita a distância de salto entre -128 e +127 bytes de distância da instrução jump. Importante notar que o programador especifica o endereço como um label ou uma constante de 16bits. Não há flag zero, portanto, JZ e JNZ testam o dado do Acumulador para tal condição. A instrução DJNZ (Decrementa e Jump se Não Zero) é utilizada para controle de loops assim como CJNE (Compara e Jump se Não Igual). Uma aplicação para esta instrução está em comparações "maior que, menor que". Pelo valor do Carry bit distingue-se as duas situações. Se o primeiro é menor que o segundo, Carry bit é setado. Se o primeiro é maior ou igual ao segundo, Carry bit é zerado. Tabela 7 – Instruções de Jumps Condicionais
  • 27. Microcomputadores Ciclo de Máquina 27 Ciclo de Máquina Um ciclo de máquina consiste de uma seqüência de 6 estados (S1 a S6). Cada estado toma 2 períodos de clock e, portanto, um ciclo de máquina toma 12 períodos de clock ou 1µs sob uma freqüência de 12MHz. A Figura 7 mostra a seqüência de busca/execução para alguns tipos de instruções. Normalmente dois ciclos de busca são executados em cada ciclo de máquina mesmo que a instrução sendo executada não o requer, caso em que o byte buscado é ignorado e o PC não é incrementado. Figura 7 – Seqüência de Estados
  • 28. Microcomputadores Ciclo de Máquina 28 Instruções de um ciclo começam em S1, em S4 é gerado uma segunda busca e, no fim de S6, a instrução está completa. O ciclo busca/execução é o mesmo se a Memória de Programas é externa ou interna. A Figura 7 mostra os sinais e as temporizações envolvidas quando a Memória de Programas é externa. Nesse caso, o sinal PSEN é ativo duas vezes por ciclo de máquina. Se um acesso à Memória de Dados externa ocorre, como mostrado na Figura 2, dois PSENs são pulados porque o bus de endereços e o bus de dados estão sendo utilizados para acesso à Memória de Dados. Note que um ciclo de Memória de Dados externa toma duas vezes mais tempo que um ciclo de Memória de Programas. A Figura 8 mostra a dinâmica dos endereços sendo enviados às Portas 0 e 2 e dos sinais ALE e PSEN. O sinal ALE é ativado indiferentemente se a CPU está executando a partir da Memória de Programas externa ou interna, podendo ser utilizado como uma saída de clock. Figura 8 – Ciclo de Execução em Memória de Programas Externo
  • 29. Microcomputadores Estrutura de Interrupção 29 Estrutura de Interrupção Os microcontroladores 8051A, 80C51 e suas versões ROMless dispõem de 5 fontes de interrupção: 2 interrupções externas, 2 interrupções de temporizadores e uma interrupção por porta serial. O 8052B e o 80C52 possuem essas cinco interrupções e mais uma associada ao terceiro temporizador. Outras interrupções são disponíveis em membros mais avançados da família. Interrupt Enable (IE) Cada uma das fontes de interrupção pode ser habilitada ou desabilitada setando ou limpando um bit do registrador IE localizado na região SFR. Este registrador também contém um bit global que pode desabilitar todos as interrupções de uma só vez. A Figura 9 mostra o registrador IE para o 80528 e 80C52. Figura 9 – Interrup Enable
  • 30. Microcomputadores Estrutura de Interrupção 30 Prioridade de Interrupções Cada fonte de interrupção pode ser programada para um de dois níveis de interrupção (os microcontroladores 80515, 80C515, e 80C517 têm quatro níveis de interrupção) setando ou limpando um bit do registrador IP (Interrupt Priority) localizado no espaço SFR e mostrado na Figura 10. Figura 10 – Interrupt Priority Se requisições de interrupção de mesma prioridade são recebidas simultaneamente, uma seqüência de pooling é ativada para determinar qual interrupção será atendida. Todos os flags de interrupção são carregados no sistema de controle de interrupção durante o Estado 5 de todo ciclo de máquina. A análise desses flags é feita no ciclo seguinte. Se um flag para uma interrupção habilitada é encontrado setado, o sistema de interrupção gera um LCALL para a correta localização na Memória de Programas a menos que uma situação de bloqueio de verifique (ex. interrupção de igual ou maior prioridade sendo atendida). Com LCALL sendo executado, o conteúdo de PC é salvo na pilha e este registrador recebe o valor do endereço inicial da rotina de interrupção.
  • 31. Microcomputadores Estrutura de Interrupção 31 Somente PC é automaticamente salvo na pilha. Isso permite ao programador decidir quanto tempo deve ser gasto salvando outros registradores. Como resultado, tem-se uma melhoria no tempo de resposta a uma interrupção.
  • 33. Microcomputadores Temporizadores 33 Temporizadores O microcontrolador 8051 conta com 2 temporizadores/contadores de 16bits para uso geral. A configuração dos temporizadores/contadores 0 e 1 é feita no registrador TMOD localizado na região SFR no endereço 89H. Se o bit C/T desse registrador é setado, o temporizador/registrador atua como contador e, se zerado, atua como temporizador. Quando na função temporizador, o registrador de tempo, localizado na região SFR é incrementado a cada ciclo de máquina. Logo, podemos pensá-lo como um contador de ciclos de máquina. Desde que um ciclo de máquina toma 12 ciclos de clock, a resolução de contagem é 1/12 da freqüência de clock. Quando na função contador, o registrador é incrementado a cada transição 1 para 0 do correspondente sinal externo T0 ou T1 (pino 4 ou pino 5 respectivamente da porta 3). É necessário um ciclo de máquina para detectar a transição e outro para incrementar o registrador de contagem. Portanto, a resolução de contagem é 1/24 da freqüência do sinal de entrada. É fortemente recomendado que o sinal seja aplicado no mínimo durante um ciclo de máquina completo. Cada temporizador/contador consiste em 2 registradores de 8bits que podem ser configurados em um dos 4 possíveis modos. Modo 0 O registrador é configurado como um registrador de 13bits. Os bits TF0 (8DH) e TF1 (8FH) são utilizados como flags de overflow associadas às interrupções INT0 e INT1 respectivamente aos temporizadores/contadores 0 e 1. Modo 1 Semelhante ao modo 0 com a diferença de que o registrador atua em 16bits.
  • 34. Microcomputadores Temporizadores 34 Modo 2 O registrador é configurado em 8bits com recarregamento automático, isto é, quando numa situação de overflow de TLO (8bits menos significativos), tal registrador é recarregado com o conteúdo de TLH (8bits mais significativos) cujo conteúdo permanece constante. Modo 3 Temporizador/contador 1 é desligado enquanto o temporizador/contador 0 é utilizado como dois registradores de 8bits. A interrupção associada a TL0 é INT0 enquanto a interrupção associada a TH0 é INT1.
  • 35. Microcomputadores Interface Serial 35 Interface Serial O 8051 possui uma porta serial full-duplex, o significa que ela pode enviar e transmitir dados simultaneamente. Essa interface pode operar em 4 modos: Modo 0 (modo síncrono) 8 bits do dado serial entram e saem por RxD0. TxD0 tem como saída o sinal de clock deslocado em fase. A velocidade de transmissão é de 1/12 clock. Modo 1 (modo assíncrono) 10 bits são transmitidos (TxD0) ou recebidos (RxD0): 8bits de dados, 1 stop bit e 1 start bit. A velocidade de transmissão é variável. Modo 2 (modo assíncrono) 11 bits são transmitidos (TxD0) ou recebidos (RxD0): 1 start bit, 8bits de dados, 1bit programável pelo usuário (por exemplo: bit de paridade) e um stop bit. A velocidade de transmissão pode ser programável para 1/32 ou 1/64 clock Modo 3 (modo síncrono) exatamente como no Modo 2, porém, a velocidade de transmissão é variável. Em cada um dos modos, a transmissão é iniciada quando da execução de uma instrução cujo registrador destino é o registrador S0BUF (endereço 99H, região SFR). A recepção é iniciada no modo 0 pela condição RI0 = 0 (endereço 98H) e REN0 = 1 (endereço 9CH), ambos localizados no registrador S0CON (endereço 98H, região SFR). Em outros modos, a recepção é iniciada quando REN0 = 1.
  • 37. Microcomputadores Principais Vantagens do Microprocessador 8051 37 Principais Vantagens do Microprocessador 8051 Popular Prontamente disponível e amplo suporte. Gama completa de produtos de suporte estão disponíveis de graça e comercialmente. Rápido e eficaz A arquitetura se correlaciona de perto com o problema sendo solucionado (sistemas de controle). Instruções especializadas significam que menos bytes precisam ser buscados e menos jumps condicionais são processados. Baixo custo Alto nível de integração do sistema em um único componente. Poucos componentes são necessários para se criar um sistema que funcione. Ampla gama de produtos Uma única família de microcontroladores cobre as opções que outros fornecedores só conseguem cobrir com um número razoável de diferentes e incompatíveis famílias. Desse modo, o 8051 proporciona economia real em termos de custo de ferramentas, treinamento e suporte para software.
  • 38. Microcomputadores Principais Vantagens do Microprocessador 8051 38 Compatibilidade Opcodes e código binário são os mesmos para todas as variações do 8051, diferente de outras famílias de microcontroladores. Multi-Sourced Mis de 12 fabricantes, centenas de variedades. Aperfeiçoamentos constantes Melhorias na manufatura aumentam a velocidade e potência anualmente. Há ainda versões de 16 bits vindo de diversos fabricantes.
  • 39. Microcomputadores Atuais Tendências 39 Atuais Tendências Recentemente a PHILIPS Semiconductors lançou a versão 16bits do 8051: o 80C51XA (eXtended Architecture). O conjunto de códigos mais denso não perde a compatibilidade com códigos escritos para o 8051. O XA foi uma resposta às três maiores tendências no desenvolvimento de sistemas microcontrolados: a necessidade de se ter maior processamento por Dólar, o aumento do uso de linguagens de alto nível e o crescente desenvolvimento de sofisticados sistemas operacionais multitarefas e de tempo real. Entre outras características, o XA conta com baixo consumo ( 3V com capacidade de gerência de energia), endereçamento e conjunto de instruções expandidos. Com um preço de U$ 7.00 e uma razão performance por dólar superior a qualquer outro microcontrolador de 16bits, o XA resolve problemas de projeto por um inigualável preço/performance. Inspirada no sucesso do microcontrolador 8051, a indústria usou a mesma estratégia lançando a completa família 80C51XA.
  • 41. Microcomputadores Software do 8051 41 Software do 8051 Modos de endereçamento Os modos de endereçamento do 8051 são os seguintes: Modo Imediato Neste modo de endereçamento, temos um endereço de 8 bits logo após a instrução, endereço este no qual será efetuada a operação pela instrução. Como este endereço possui apenas 8 bits, podemos acessar apenas os primeiras 256 posições de memória, que compreendem a memória RAM interna e os registros de função especial (SFR). Exemplo: MOV A,25H Esta instrução move para o acumulador, o dado presente na posição de memória RAM interna de endereço 25H. Modo Registrador Neste caso, o nome do registrador a ser acessado está incluído no opcode, o que nos permite economizar um byte de endereço. O registro afetado será o do banco de registradores selecionados (*) no momento. (*) Considerações sobre os bancos de registradores: Temos quatro bancos de registradores chamados de RB0, RB1, RB2 e RB3, cada qual com 8 registros de 8 bits, chamados indiferentemente de R0, R1, R2, R3, R4, R5, R6 e R7. Quando nos referimos ao banco endereçado pelos bits RS1 e RS0 no registro PSW, no instante da execução da instrução.
  • 42. Microcomputadores Software do 8051 42 Modo Indireto Neste caso, o endereço sobre o qual a instrução trabalhará está indicado de forma indireta pelos registros R0 ou R1, de qualquer um dos bancos de registradores. Por este mo de endereçamento podemos acessar memória RAM externa ou interna. O registro em questão contém o endereço sobre o qual a instrução agirá, e para endereços de 8 bits pode ser, como já vimos, os registros R0 e R1 e o SP, e para endereços de 16 bits deve ser o registro DPTR (data pointer). Exemplo: Suponha que o registro R1 no banco selecionado contenha o valor 33H. A instrução “MOV @R1,15H” moverá para o endereço indicado por R1, neste caso 33H, o dado que está na posição 15H. Modo Específico a Registro Neste modo, o registro em questão já faz parte do código operacional (opcode). Temos como exemplo, a instrução de ajuste decimal ao acumulador, DA A. Modo constante imediata Permite trabalhar com constante de forma direta. Um exemplo típico é a instrução de preencher memória, MOV B,#252 que coloca a constante 252 decimal no registro B. Modo indexado Neste modo, o endereço efetivo é a soma do acumulador e de um registro de 16 bits, que poderá ser o PC ou o DPTR. Com este modo de endereçamento podemos ler uma tabela presente na memória ROM do sistema, e transferi-la para a memória RAM, ou realizarmos funções com a mesma. Assim, vemos que as instruções por este modo apenas lêem dados, e sempre da memória de programa. Aqui, o registro de 16 bits contém o endereço inicial da tabela e o acumulador pode ir sendo incrementado para viajar pela mesma. Existem possibilidades de Jumps por este modo de endereçamento, e o endereço de desvio é a soma do acumulador e do registro de 16 bits. Ainda para o caso dos Jumps e chamadas de sub-rotinas, temos desvios curtos e longos. Os desvios longos permitem-nos desviar a execução do programa para qualquer posição da memória de programa, e os desvios curtos permitem-nos desvios para dentro de um mesmo bloco de 2 Kbytes, onde está a instrução que chamou o desvio. Este modo é útil quando quisermos dar desvios pequenos, pois permite-nos fazê-lo economizando um byte de memória de programa com relação ao desvio longo.
  • 43. Microcomputadores Software do 8051 43 Modo Desvio Indexado Usado nas instruções de desvio condicionais, estas instruções somam ao PC já ajustado, o dado de 8 bits presente ao final da instrução. Considerações sobre notação Devemos agora esclarecer sobre como trabalhar com o software do 8051, visto necessitamos diferenciar certas situações ambíguas. Temos, inicialmente, o caso dos registradores. Em alguns compiladores, podemos escrever apenas R0 para o primeiro banco de registradores, R0’, R0” e R0/ para o segundo, terceiro e quarto respectivamente, que o mesmo se encarregará de diferenciá-los na hora de produzir o código de máquina executável. Temos também, que diferenciar os modos de endereçamento e o tratamento dado a variáveis, constantes e endereços. Temos então: • @ indica “indireto”, conforme vimos em um dos exemplos anteriores. • # indica valor “constante”. • H indica que o valor é hexadecimal. • B indica que o valor é binário. Estudo de algumas instruções em especial Neste item, estudaremos algumas instruções que poderiam deixar dúvidas no momento de sua utilização. No laboratório, veremos exemplos completos, embora simples, de sistemas mínimos, tanto em termos de hardware e software, que nos permitirão entender melhor o funcionamento global do sistema. Antes deste exemplos de laboratório, devemos criar uma pequena tabela que nos permitirá entender certas instruções, que possuem implícito um certo registrador Rn. Existem instruções, como por exemplo DEC Rn, que decrementa o valor contido no registro “n” de uma unidade. Estas instruções possuem apenas 1 byte, e trazem dentro de si o registrador a ser afetado, da seguinte forma: Em binário, temos o seguinte código: 0 0 1 1 a b c
  • 44. Microcomputadores Software do 8051 44 onde a, b, c fornecem o registrador, de acordo com a tabela da figura 11. Rn; n = 0, 1, 2, ...7 Rn a b c R0 0 0 0 R1 0 0 1 R2 0 1 0 R3 0 1 1 R4 1 0 0 R5 1 0 1 R6 1 1 0 R7 1 1 1 Figura 11 – Codificação dos registros Na tabela geral, temos o opcode de cada instrução em hexadecimal sempre que possível, assim como seu número de bytes e de ciclos de máquina. As instruções que requerem dados implícitos estão em binário, para permitir sua utilização por aqueles que não possuam um compilador e desejem desenvolver o seu próprio software. As instruções de endereçamento indireto usam a codificação Ri, onde i pode ser 0 ou 1. As instruções que possuem implícita esta característica também estão detalhadas em binário na tabela geral, lembrando: ADD A,@Ri, onde i = 0 ou i = 1 Esta instrução soma o conteúdo do acumulador e o da posição de memória indicada indiretamente (@) pelo registro R0 ou R1 do banco selecionado. O resultado irá para o acumulador. ADDC A,#DADO, onde DADO é uma constante de 8 bits Esta instrução soma o acumulador, o bit de Carry e o dado de 8 bits coloca o resultado no acumulador.
  • 45. Microcomputadores Software do 8051 45 SUBB A,Rn Esta instrução subtrai do acumulador, o valor presente no registrador Rn e o valor do bit de Carry. INC DPTR Esta instrução incrementa o valor presente no registro de 16 bits chamado DPTR. MUL AB Multiplica os conteúdos de A e de B, colocando em B a parte mais significativa da operação e em A a parte menos significativa. Dessa forma, temos como resultado BA. Para clock de 12 MHz esta instrução leva apenas 4µs para ser executada, comparativamente às instruções comuns levam apenas 1µs. DIV AB Divide o conteúdo do acumulador pelo conteúdo do registro B, colocando a parte inteira do quociente do acumulador e o resto em B. Se B = 0, 0s resultados serão indefinidos. Para clock de 12 MHz esta instrução leva apenas 4µs para ser executada, comparativamente às instruções comuns que levam 1µs. ANL DIRETO, #DADO Efetua uma operação lógica AND entre o conteúdo da memória DIRETA e o DADO presente na instrução. O resultado será colocado na posição de memória DIRETAMENTE endereçada. XRL A,@Ri Efetua uma operação OU EXCRUSIVO entre o valor presente no acumulador e o valor endereçado indiretamente pelo registro Ri, colocando o resultado no acumulador. Geralmente, o primeiro argumento da instrução é o destino da operação. RL A Efetua um deslocamento global do acumulador para a esquerda. O conteúdo do bit 0 vai para o bit 1, o do bit 1 vai para o bit 2, e assim por diante. O conteúdo do bit 7 vai para o bit 0. Nenhum bit de flag é afetado. RRC A Desloca o acumulador à direita, passando pelo flag de Carry. O bit 0 vai para o Carry, o carry original vai para o bit 7, o bit 7 vai para o bit 6 e assim por diante.
  • 46. Microcomputadores Software do 8051 46 SWAP A Esta instrução troca os quatro bits menos significativos do acumulador, pelos quatro bits mais significativos. Por exemplo, se o acumulador contém o valor 01101001 (69H) após esta instrução conterá 10010110 (96H). MOV A,DIRETO Move para o acumulador o dado presente no endereço DIRETO. Esta instrução permite o movimento de variáveis apenas na memória RAM interna. MOV A,#DADO Move para o acumulador o valor da constante DADO, que para fins de escrita pode ser decimal (sem sinalização), hexadecimal (H) ou binário (B). MOV @Ri,#DADO Move para a posição endereçado indiretamente por Ri (R1 ou R0) a constante DADO. MOV DPTR,#DADO16 Move para o registro DPTR, a constante de 16 bits, presente na instrução. MOVC A,@A+DPTR Esta instrução soma o conteúdo do acumulador e do DPTR, gerando um endereço de 16 bits, e o CONTEÚDO deste endereço irá para o acumulador. Esta é a única maneira de lermos uma constante gravada na memória de programa, como por exemplo uma tabela de dados. MOVX A,@Ri Esta instrução move o conteúdo da memória de dados EXTERNA, indiretamente endereçada pelo registro Ri, para o acumulador. MOVX @DPTR,A Move o dado presente no acumulador para a posição de memória endereçada pelo DPTR, permitindo-nos escrever em qualquer posição da memória RAM externa. XCH A,DIRETO Troca o conteúdo do acumulador e o conteúdo do endereço direto entre si. O valor presente no acumulador irá para a memória de dados, cujo endereço segue para o opcode e o dado que estava originalmente naquele posição de memória, irá para o acumulador.
  • 47. Microcomputadores Software do 8051 47 XCHD A,@Ri Semelhante à anterior, porém neste caso, apenas os quatros bits “menos significativos” são trocados entre si. Por exemplo, se A = 0101 0001 e uma certa posição endereçada indiretamente por Ri contém 00111101, após esta instrução, teremos A = 01011101 e @Ri = 00110001. POP DIRETO O conteúdo do Stack é lido e transferido para o endereço direto, e o SP é decrementado de uma unidade. PUSH DIRETO O SP é incrementado de uma unidade e depois o conteúdo do endereço direto é escrito no Stack. CLR bit Esta instrução zerará o bit cujo endereço está imediatamente após o opcode. Como foi visto no estudo da memória RAM, além dos endereços dos bytes, temos endereços para os bits, alguns inclusive com mnemônicos. Ao detectar que a instrução é uma instrução para bit, a CPU sabe que o byte seguinte é o endereço de um único bit, e não de um byte como nas operações normais. Por exemplo, a instrução CLR EX1 ou CLR AAH desabilitará a interrupção externa 1, visto ser o endereço deste bit nos registros de função especial AAH e seu mnemônico EX1. CPL A Esta instrução inverte o estado de cada bit do acumulador. Se antes A = 01011101, depois A = 10100010. OLR C,/bit Efetua uma operação OR entre o carry bit e o COMPLEMENTO (inverso) do bit endereçado. JNB bit,rel Esta instrução testa o bit indicado e desvia se o mesmo for zero. Após o ajuste do PC, a CPU somo o terceiro byte desta instrução ao PC para gerar o endereço final do
  • 48. Microcomputadores Software do 8051 48 desvio, se o teste resultar verdadeiro. Sempre que uma instrução for executada, o PC contém o valor do endereço da “próxima” instrução que será executada. Por exemplo. Se neste caso o PC contém o valor 200H, temos o seguinte trecho de programa: 200H JNB P1.1,25H 203H -------------- ------- 228H ////////// ////// Neste caso, ao executar a instrução JNB, o PC conterá imediatamente o endereço da próxima instrução, que deverá estar em 203H. Se o teste não for verdadeiro, o programa prossegue sua execução neste endereço. Mas se o teste for verdadeiro, o PC será somado ao dado 25H, e resultará 228H, e prosseguirá a partir daí. JBC bit,rel Esta instrução testará o bit indicado e caso o mesmo esteja setado, realizará duas operações. Primeiro zerará o bit, segundo efetuará um desvio relativo, de acordo com o dado do terceiro byte. Se o bit estiver zerado, o teste resultará falso e não ocorrerá desvio. O cálculo do endereço de desvio relativo funciona da mesma maneira que no exemplo anterior. ACALL endll Chamada de sub-rotina absoluta Esta instrução faz com que o programa continue sua execução em outra posição da memória de programa, após incrementar o PC duas vezes e salvá-lo no Stack, incrementando o valor deste em duas vezes também. Este endereço que foi salvo no Stack, é o endereço de retorno ao final da sub-rotina. O endereço (de 16 bits) de destino é gerado da seguinte maneira: • Bits 11 a 15 = mantêm-se os bits do PC original. • Bits 8 a 10 = são os bits 5 a 7 “opcode” (a10 a9 a8). Os bits 0 a 4 são fixos. • Bits 0 a 7 = são os do segundo byte da instrução. Dessa forma, o programa pode continuar dentro do mesmo bloco de 2 kbytes ao qual pertence a instrução de retorno da sub-rotina. Se o PC for XXXXX00000000000, teremos a representação de desvio da figura 1.a abaixo, que efetua um avanço em
  • 49. Microcomputadores Software do 8051 49 relação à posição atual do PC. Se for XXXXX11111111111, teremos a representação de desvio da figura 1.b abaixo, que efetua um retrocesso em relação à posição atual do PC. Se o PC contiver um valor intermediário entre esses, poderemos ter avanço ou retrocesso, visto que os bits 11 a 15 “não se alteram”, conforme figura abaixo. LJMP end 16 Causa um desvio incondicional para o endereço de 16 bits, indicado pelos 2 bytes imediatamente após o opcode. Por ser um desvio e não uma chamada de sub-rotina, nenhum endereço de retorno é salvo. SJMP rel Desvio curto relativo. O endereço de desvio é dado pela soma do byte após o opcode com o valor do PC já ajustado, ou seja, incrementado duas vezes (esta é uma instrução de 2 bytes). Podemos desviar para 128 posições antes da atual, ou para 127 após a atual. RET Efetua o retorno da sub-rotina. O endereço de retorno é recuperado do Stack e armazenado no PC.
  • 50. Microcomputadores Software do 8051 50 RETI Efetua um retorno de uma interrupção. A diferença desta para a anterior está em que esta instrução habilita novas interrupções de mesma prioridade, ou menos prioritárias já pendentes a serem executadas. Esta instrução não recupera o acumulador e o PSW, assim como as interrupções não salvam os mesmos, ficando tal tarefa por conta do software. JMP @A+DPTR Carrega o PC com a soma do acumulador e do DPTR, e continua a execução a partir desse endereço. CJNE A,direto,rel Esta instrução compara o acumulador e o dado na posição de memória diretamente endereçada. Se forem iguais, o programa prossegue normalmente na próxima instrução. Se forem diferentes, já estando o PC endereçado a próxima instrução, é o mesmo somado ao dado de 8 bits no terceiro byte da instrução. Mais, se o acumulador for menor que o dado da memória, o flag C será setado. Caso contrário, se o acumulador for maior, o flag C será zerado. DJNZ Rn,rel Decrementa o dado presente no registro Rn e desvia, se o resultado for diferente de zero. O endereço de desvio relativo é obtido da mesma forma que na instrução anterior. Se o resultado após o decremento for nulo, não desvia e prossegue na próxima instrução. DA A (Ajuste decimal do acumulador) A instrução DA A deve ser utilizada apenas com somas, nas quais as quantias a serem somadas sejam DECIMAIS (por nós ajustadas dessa forma) e, como para a CPU todos os valores são hexadecimais, o resultado será escrito desta forma. Um exemplo desta situação é o seguinte: (1) 1010 + 1010 = 2010 (2) 10H + 10H = 20H Para a CPU a primeira soma (1) não resultará em 2010, como para nós, mas sim em 20H (2). Se estamos interpretando os dados a serem somados como DECIMAIS, devemos ter meios de ajustar o resultado obtido para tal. Este meio é a instrução DA A.
  • 51. Microcomputadores Software do 8051 51 Exemplo: Temos A = 4910 e B = 7510 A instrução ADD A,B resultará em A = BEH e C = 0 A instrução DA A em seguida ajustará o resultado para A = 24 e C = 1, pois: Bem existe outras instruções mais sofisticadas que são utilizadas em programas mais elaborados, assim é necessário termos o SET de INSTRUÇÕES do 8051 que pode ser obtido diretamente de qualquer fabricante do mesmo através da Internet. Este material é apenas para que o aluno se familiarize com o microcontrolador, para se aprofundar mais é necessário livros para a complementar os assuntos não abordados neste material. Porém esta apostila possibilita o aluno a dar os primeiros passos na programação e depuração de instruções para o microcontrolador 8051. Sugestão de literatura complementar: Silva Jr, Eng. Vidal Pereira da – MICROCONTROLADOR 8051 Hardware e Software - Ed. Érica Nicoli, Denys E. C. – Microcontrolador 8051 DETALHADO – Ed. Érica
  • 52. Microcomputadores Software do 8051 52 Referência: 80C51 – Based 8 bits Microcontrollers. USA: Philips, 1998 Application Notes and Development Tools for 80C51 Microcontroller. USA: Philips, 1997
  • 53. Microcomputadores Atividades de Laboratório 53 Atividades de Laboratório Introdução A palavra-chave da indústria eletrônica (hoje em dia) é o microprocessador, presente no processamento de dados (computadores, impressoras, vídeos, redes de comunicação, etc), instrumentação e controle. Há muitas famílias de microprocessadores. O Intel 8086 e o Motorola 68000 são os principais processadores, usados, sobretudo no processamento de dados. Este manual concentra-se no 8051, microprocessador empregado na indústria essencialmente como microcontrolador. Há muitas razões para a popularidade do 8051, entre elas: • O fato de incluir mais funções que um processador comum: UCP, RAM, ROM, portas, temporizadores, possibilidades de interrupção e comunicação serial; • Grande conjunto de instruções, que dão ao usuário a capacidade de programar em nível de bit como um processador booleano. Estas e outras características permitem aos produtores economizar componentes caros, espaço e energia. Este manual e o sistema EB-153 têm o objetivo de treinar técnicos e mesmo pessoas que só possuam um conhecimento superficial dos microprocessadores, para que se familiarizem com a maioria dos aspectos do “chip” (pastilha). Os dois primeiros capítulos voltam-se para o conhecimento do EB-153 e o treinamento nessa máquina. Os quatro capítulos seguintes treinam o estudante nos Acessos I/O (E/S) e em importantes características de software (programação do chip). Os
  • 54. Microcomputadores Atividades de Laboratório 54 capítulos 7, 8 e 9 familiarizam o aluno com temporizadores, interruptores e UARTs. O capítulo 10 inclui o modo de localização de falhas (a ser usado apenas com o EB- 2000). Nos apêndices estão explicações sobre rotinas monitoras e sobre como endereçar (mapa de memória). Desejamos agradecer especialmente à Intel Corporation pela gentil permissão de usar informações técnicas para seu Manual de Usuário MCS-51. Os interessados em obter informações mais detalhadas poderão comprar o manual MCS-51 diretamente da Intel.
  • 55. Microcomputador Introdução 55 Introdução A palavra-chave da indústria eletrônica (hoje em dia) é o microprocessador, presente no processamento de dados (computadores, impressoras, vídeos, redes de comunicação, etc), instrumentação e controle. Há muitas famílias de microprocessadores. O Intel 8086 e o Motorola 68000 são os principais processadores, usados, sobretudo no processamento de dados. Este manual concentra-se no 8051, microprocessador empregado na indústria essencialmente como microcontrolador. Há muitas razões para a popularidade do 8051, entre elas: 1. fato de incluir mais funções que um processador comum: UCP, RAM, ROM, portas, temporizadores, possibilidades de interrupção e comunicação serial; 2. grande conjunto de instruções, que dão ao usuário a capacidade de programar em nível de bit como um processador booleano. Estas e outras características permitem aos produtores economizar componentes caros, espaço e energia. Este manual e o sistema EB-153 têm o objetivo de treinar técnicos e mesmo pessoas que só possuam um conhecimento superficial dos microprocessadores, para que se familiarizem com a maioria dos aspectos do “chip” (pastilha). Os dois primeiros capítulos voltam-se para o conhecimento do EB-153 e o treinamento nessa máquina. Os quatro capítulos seguintes treinam o estudante nos Acessos I/O (E/S) e em importantes características de software (programação do chip). Os capítulos 7, 8 e 9 familiarizam o aluno com temporizadores, interruptores e UARTs. O capítulo 10 inclui o modo de localização de falhas (a ser usado apenas com o EB- 2000). Nos apêndices estão explicações sobre rotinas monitoras e sobre como endereçar (mapa de memória). Desejamos agradecer especialmente à Intel Corporation pela gentil permissão de usar informações técnicas para seu Manual de Usuário MCS-51. Os interessados em obter informações mais detalhadas poderão comprar o manual MCS-51 diretamente da Intel.
  • 57. Microcomputadores Laboratório 1 57 Laboratório 1 Travando Conhecimento com o EB-153 Objetivos Após completar estas atividades de aprendizado em laboratório, você deverá ser capaz de: • Identificar as principais peças do microcontrolador EB-153 e descrever suas funções. • Identificar os sinais de entrada/saída (in/out) e descrever suas funções. • Usar as funções monitoras para analisar a operação do microcomputador. Equipamento Necessário • 1 Computador central PU-2000 (Unidade central de processamento - Sistema de Aprendizado Eletrônico Computadorizado) • 1 Placa Mestra • 1 Unidade EB-153 - Placa de Circuito Impresso Como Iniciar o Laboratório 1. Coloque a placa de circuito impresso do EB-153 na unidade central. 2. Ligue a placa mestra. Procedimento 3. As explicações sobre a Unidade de Microcomputador EB-153 serão úteis para saber como este sistema deverá ser operado antes de efetuar as experiências. A Figura 2 mostra o diagrama de bloco da Unidade EB-135:
  • 58. Microcomputadores Laboratório 1 58 Figura 2: Diagrama de Bloco do EB-135 A placa do EB-135 é um sistema de microcomputador completo. Esta unidade inclui as seguintes partes: • Microcontrolador Microcontrolador 8031 de 8 bits que serve como a unidade central de processamento, ou “cérebro”. • Matriz Distribuidora Matriz distribuidora de dados/endereço, usada para separar endereço do barramento de dados. O barramento da matriz distribuidora consiste de 8 vias de dados e 16 vias endereços. O ALE (Address Latch Enable), ou sinal Habilitador de Memória de Endereço, ativa uma via octal para demultiplexar os dados dos endereços. • ROM Read Only Memory, ou Memória de Apenas Leitura, ou Memória Fixa, que contém o programa monitor usado para realizar as experiências. • RAM Random Access Memory, ou Memória de Acesso Direto, ou ainda, especificamente, Memória de Leitura-Escritura, usada pelo microcontrolador para a armazenar dados temporários e programas do usuário.
  • 59. Microcomputadores Laboratório 1 59 • PPI Programmable Peripheral Interface, ou Interface Paralela Programável – 8255 – usado para interfacear (interligar) o teclado ao microcontrolador e proporcionar linhas adicionais de E/S de 8 bits. • Vídeo LCD Módulo matriz de pontos de LCD (Liquid Crystal Display) contendo controlador de LSI (Large Scale Integration = Integração em Larga Escala) para exibição de caracteres. Devido ao gerador de caracteres e a RAM de dados do vídeo no controlador, podem- se exibir 96 tipos especiais. Este é um Módulo de 16 caracteres X 2 linhas. • Circuito RS-232 Usado para interfacear o microcontrolador EB-153 com dispositivos seriais padrões, tais como computadores pessoais IBM PC/XT/AT ou compatíveis, impressoras seriais, etc. • Barramento de Interface: provê expansão paralela para o microcontrolador EB-153. Estas linhas de dados de 8 bits, linhas de endereço de 4 bits, terra e linha de seleção de um chip são úteis para expandir o microcontrolador básico EB-153 para várias aplicações de hardware, como relês, sensores, unidades de controle, etc. A Unidade EB-153 tem as duas teclas de comando seguintes: • Reset Restaura os circuitos do microcontrolador; • Interrup Interrompe o microcontrolador. 4. Localize o circuito integrado do microcontrolador 8031. Esta é a Unidade Central de Processamento (UCP) do EB-153, e executa todo o movimento de dados, aritmética, contagem de tempo e controle de dados para os demais circuitos. O 8031 é uma UCP orientada para controle, sem memória ROM interna. Pode endereçar 64 Kbytes de Memória de Programas Externos, além de 64 Kbytes de Memória de Dados Externos.
  • 60. Microcomputadores Laboratório 1 60 O 8051 é um 8031 com os 4 Kbytes inferiores de Memória de Programa preenchidos em ROM programável da máscara no chip, enquanto o 8751 tem 4 Kbytes de EPROM Apagável por UV/eletricamente programável. O termo genérico “8051” é usado como referência coletiva para o 8031, o 8051 e o 8751. 5. Localize o cristal de quartzo no invólucro de metal. Este é o dispositivo que ajusta precisamente a freqüência do relógio (clock) em 12MHz para a UCP. 6. A memória reside em quatro circuitos integrados: • O 8031 inclui 128 bytes de RAM Interna de Dados e 128 bytes de registros de funções especial; • Uma EPROM (Memória Fixa Apagável) 27256 (32K bytes) que contém o programa monitor – é uma memória de programa; • Uma RAM 6264 (8 K bytes) que constitui a memória do usuário ou memória de dados externa. O usuário poderá armazenar seu programa que será executado pelo microprocessador. • Um soquete de expansão de memória permite ao usuário conectar uma EPROM ou EEPROM (de 8K bytes a 32 K bytes) – esta memória de programa pode ser usada para executar software de aplicações especiais. 7. Observe os três barramentos que conectam a UCP aos outros circuitos. O Barramento de Dados é uma conexão bidirecional de 8 vias para deslocar bytes de código de programa entre a memória externa, a UCP e aos demais circuitos. A direção do fluxo de dados é controlada pela UCP usando os sinais RD, WR e PSEN o BARRAMENTO DE CONTROLE e do BARRAMENTO DE ENDEREÇO. 8. Barramento de Endereço é uma conexão de 16 vias (fios) da UCP aos demais circuitos. O 8051 não tem quantidade de pinos disponíveis para 16 linhas de endereço no seu pacote de 40 pinos. Divide os pinos do Barramento de Dados com a metade inferior do Barramento de Endereço. Na primeira metade de cada
  • 61. Microcomputadores Laboratório 1 61 ciclo, os pinos contêm valores de endereço, e o sinal de controle ALE (Ativador de memória de Endereço) vai para nível lógico “um” para indicar a presença de endereço formado. No EB-153 as informações de endereço são armazenadas num Latch (memória) de Endereço, o 74LS373. Durante a Segunda metade do ciclo, só se usa o Barramento de Dados para transferir dados. Localize este Latch. 9. Barramento de Controle inclui todos os sinais de controle unidirecionais e unifuncionais usados para operar o sistema microprocessador. 10. Observe o módulo LCD (DISPLAY DE CRISTAL LIQUIDO) da matriz de pontos. Consiste de uma combinação de um painel matricial de cristal líquido com pontos de 5 X 7, 16 caracteres, 2 linhas, acionador e controlador de vídeo de cristal líquido montados numa única PCI (placa de circuito impresso). Incorporando gerador de caracteres sediado na ROM, e RAM de dados de vídeo no controlador LSI, a unidade é capaz de exibir os caracteres desejados sob o controle do microprocessador. 11. Localize a Interface paralela programável (PPI) 8255. Esse dispositivo faz a interface (interliga) entre o teclado e o microcontrolador. 12. Digite a tecla RESET. 13. Digite a tecla H para exibir o menus de ajuda. Use a tecla “down key” (seta para baixo) para exibir todas as informações contidas no menu de ajuda. Use a tecla “up key” (seta para cima) para ver a exibição anterior. 14. Digite a tecla “CLEAR ENTRY” para sair do menu de ajuda. 15. Use os comandos de ACESSO A MEMÓRIA para examinar e modificar a memória no chip do microcontrolador e na memória externa na placa. Comece com a memória de Código. A memória de código é externa ao microcontrolador 8031. Esta memória é acessada durante a execução do programa pelo endereço no contador de programa e pelo sinal PSEN (“programselect enable” ou habilitador de
  • 62. Microcomputadores Laboratório 1 62 seleção de programa) – do microcontrolador. Este comando permite que você carregue, examine e modifique programas hexadecimais na memória. Digite o seguinte: CBYTE 0000H (Memória de Código) 16. Lembre-se que o endereço é um número hexadecimal de quatro dígitos, seguido por H. O endereço 0000H é o primeiro endereço do programa monitor. Pressione a tecla ENTER após digitar sua entrada. 17. Use as setas para mudar o endereço. Os dados não são modificados até que se digite a tecla ENTER. Mudar de endereços por meio de setas não modifica o conteúdo da memória. Coloque o endereço em E000H e observe os dados correspondentes. Como se trata de uma memória RAM, os dados podem ser mudados. 18. Entre um valor de dados e digite a tecla ENTER. Volte ao endereço original e observe como os dados foram colocados na memória. 19. Tente modificar dados pertencentes a uma localização da ROM (endereço 0000H a 7FFFH). Observe o resultado desta operação. Digite as teclas CLEAR, ENTER (Limpe, Entrada) para abandonar este comando. 20. Use o comando Memória Externa. A memória externa de dados é acessada com as instruções M0VX. A operação é controlada pelas linhas RD (“read – leitura) e WR (“write”- gravação) do 8031. A palavra-chave de comando é XBYTE. Este comando usa RD e WR para acessar memória externa de dados. Digite o seguinte: XBYTE E000H 21. Pressione a tecla ENTER e modifique dados e endereço. Este comando opera da mesma maneira que o comando CBYTE. A memória externa e a memória de código ficam sobrepostas na RAM de 8 K bytes. Portanto, os valores de dados são os mesmos se forem lidos pelo sinal RD seja pelo sinal PSEN. 22. “Uso do comando de Memória Interna”. A memória interna é a RAM de dados no chip. Os endereços de dados no chip encontram-se na faixa de 00H a 7FH. Há quatro bancos de registros de uso geral (endereços 00H até 1FH inclusive). A pilha é uma parte da RAM de dados no chip. Os endereços 20H a 2FH contém bytes
  • 63. Microcomputadores Laboratório 1 63 endereçáveis por bit. Note que o valor do byte deve ser um endereço na RAM de dados que deixe espaço para a pilha, de modo a que o ponteiro da pilha nunca ultrapasse o máximo de 7FH. Para exibir o conteúdo do endereço 70H da memória de dados do chip, digite o seguinte: CBYTE 70H 23. “Uso do comando Memória de Registro”. Os endereços de registro de função especial do 8031 estão na faixa 80H a FFH, mas os registros não preenchem o espaço inteiro do endereço. Para exibir o conteúdo do registro 90H, digite o seguinte: RBYTE 90H Observe que o valor do byte deve ser um endereço na RAM de registro. 24. Pressione a tecla ENTER. Aparecerá no display o estado da porta 1, correspondente ao endereço 90H. Mude seus dados e observe as alterações correspondentes nos LEDs acoplados a esta porta. Note que apenas quatro bits estão conectados aos LEDs, e os quatro bits restantes são conectados a chaves. Use as setas para mudar o endereço e volte ao mesmo enquanto mudar as posições de chave. Modifique o 1º digito e pressione ENTER. 25. Uso do comando Memória de Bit. Partes da memória de dados no chip e de registro de função especial são endereçáveis por bit. Endereços de bits na faixa de 00H até 7FH estão na memória interna. Endereços em bit na faixa 80H até FFH referem-se a bits individuais de registros na memória de registros. Para exibir o conteúdo da porta 1, Bit 0, digite o seguinte: RBIT 90H As setas executam a mesma função descrita para o comando CBYTE. 26. Pressione a tecla ENTER. Aparecerá no display (LCD) o estado da porta 1, Bit 0. Mude a posição da chave acoplada a esta porta e use as setas para exibir os dados do bit. Mude os dados da porta 1, Bit 7 e observe o Led acoplado aquela porta. ** 8031 não possui ROM interna. A EPROM está ocupando os endereços de 0000H até 7FFFH.
  • 64. Microcomputadores Laboratório 1 64 Só é possível a leitura das chaves P1.0 até P1.3, logo após o reset, mas escrever em P1.4 até P1.7 é possível a qualquer instante. Questões 27. Quantas linhas estão contidas no barramento de dados? 28. Qual a diferença entre RAM interna de dados e a RAM externa de dados? 29. Quantos endereços podem ser selecionados pelo barramento de endereço? 30. Como o microprocessador acessa a memória de código? 31. Que sinal grava dados na memória de código?
  • 65. Microcomputadores Laboratório 2 65 Laboratório 2 Sub-rotinas Monitoras Objetivos Após completar estas atividades de aprendizado em laboratório, você deverá ser capaz de: • Executar programas simples no EB-153. • Executar programas passo a passo e de tempo real. • Montar e demonstrar um programa. Equipamento Necessário • 1 Computador central PU-2000 (Unidade central de processamento - Sistema de Aprendizado Eletrônico Computadorizado) • 1 Placa Mestra • 1 Unidade EB-153 - Placa de Circuito Impresso Como Iniciar o Laboratório 1. Coloque a placa de circuito impresso do EB-153 na unidade central. 2. Ligue a placa mestra. Procedimento 3. Os seguintes exercícios se fazem com os Comandos Assembler. Estes comandos permitem ao usuário ler e gravar programas em linguagem assembly. O comando assembler organiza uma instrução mnemônica simples na memória do programa. O monitor mantém um indicador de montagem para indicar o endereço onde a próxima instrução deve começar. O comando ASM começa no endereço especificado pós a palavra chave ASM. Se não for especificado nenhum endereço, usa-se o endereço inicial. Este indicador é o primeiro código de RAM disponível (E000H). O display exibe o endereço inicial. O usuário digita cada instrução
  • 66. Microcomputadores Laboratório 2 66 mnemônica do 8051, pressionando a tecla ENTER para cada instrução. As setas direita e esquerda são utilizadas para corrigir o texto. Se o usuário digitar uma instrução errada, aparece no display uma mensagem de erro de sintaxe. O erro não altera o PC (contador de programa). Digite o comando ASM: ASM E000H, e pressione a tecla ENTER. 4. Digite as seguintes instruções e pressione a tecla clear após o último Enter. CLR A INC A LJMP E001H Este programa simples incrementa o conteúdo do acumulador. 5. O comando DASM permite ao usuário desassemblar valores da memória de códigos do 8051. O programa monitor pressupõe que o endereço inicial do comando aponta para o primeiro byte de uma instrução e, se necessário, toma o segundo e terceiro bytes para usar como operandos. Pode-se usar a seta de baixo a fim de incrementar o indicador de endereço e mostrar outras instruções desmontadas no display. Digite DASM E000H e pressione a tecla ENTER. Use a seta de baixo para mostrar o programa armazenando e compare-o com instruções introduzidas com o comando ASM. Pressione a tecla clear para abandonar este comando. 6. Use o comando CBYTE E000H para verificar se as instruções foram gravadas adequadamente na memória em valores hexadecimais. 7. Os Comandos de Execução De Programa se usam para controlar a execução de programas já gravados. O comando GO inicia a execução de um programa em tempo real. Digite o que se segue para executar seu programa, e pressione depois a tecla ENTER: GO E000H
  • 67. Microcomputadores Laboratório 2 67 8. Durante a execução do programa, o display apresenta a mensagem: “Running User’s Program” (Executando o Programa do Usuário). A execução do programa continua até você pressionar a tecla INTR. Aí, a execução para e se exibem o contador do programa e sua instrução correspondente. Pressionando a seta de baixo aparecem os seguintes registros e seus conteúdos: SP (ponteiro da pilha) A (acumulador) DPTR (indicador de endereço de dados externos) e PSW (programa status word, ou palavra de estado do programa). Pressione outra vez a seta de baixo para devolver o controle ao monitor. 9. Usando os comandos de descarga, podem-se exibir no display a memória interna e todos os registros como foram gravados durante a interrupção do programa. Tecle RDUMP E0H e pressione a tecla ENTER para descarregar o conteúdo do acumulador. Pressione a tecla clear para abandonar este comando. 10. O comando passo a passo executa uma parada de programa após cada instrução. Após executar cada instrução, o display exibe a instrução seguinte e seu endereço (contador de programa), o acumulador, o indicador de dados, o ponteiro da pilha e a palavra de estado do programa. Você pode deter o modo de passo automático pressionando qualquer tecla. Esta operação lhe permite observar no display toda vez que for necessário. Soltando a tecla pressionada, prossegue a execução do programa. Digite STEP E000H e pressione a tecla ENTER para executar passo a passo o programa previamente montado. Observe os diferentes passos do programa e os incrementos do acumulador. Pressione qualquer tecla para interromper a execução do programa em diferentes etapas. 11. Pressione a tecla INTR para pôr fim à execução do programa. Pressione a seta para baixo a fim de exibir os registros. Pressione de novo a mesma tecla para abandonar o comando de passo.
  • 68. Microcomputadores Laboratório 2 68 12. Use os comandos de descarga para comparar os valores de registro com a última exibição de registro. 13. O comando de ponto de parada posiciona ou restaura endereços de ponto de interrupção. Verifica-se o endereço de ponto de interrupção com os comandos GO ou STEP. Quando se executa um endereço de ponto de interrupção, o sistema interrompe o microcomputador e detém o processamento. Exibem-se então o endereço de parada e sua instrução correspondente. Pressionando a seta de baixo, exibem-se os seguintes registros e seus conteúdos: SP (ponteiro da pilha) A (acumulador), DPTR (indicador de dados) e PSW (palavra de estado de programa). Note que esses valores correspondem ao estado do microcomputador “antes” de Executar a instrução do endereço de parada. O endereço do ponto de interrupção deve ser o endereço de um byte de código de operação e não um byte de operando. Digite BR E002H para posicionar “um ponto de interrupção” no endereço E002H, e execute outra vez o comando de passo (STEP). Observe como o programa pára no endereço do ponto de interrupção. 14. Volte ao monitor e restaure o ponto de interrupção digitando BR e pressionando a tecla ENTER. Execute outra vez o comando passo a passo. 15. Agora você vai usar várias funções incorporadas do monitor. Usa-se o seguinte conjunto de programa para comunicar o microprocessador com o módulo e vídeo. A rotina Clear Display (endereço FF80H) limpa a tela. Monte o seguinte programa: Endereço Instrução Comentários E000H LCALL FF80H Chame a rotina clear display E003H LJMPE003H Parada Figura 1: Programa Clear Display 16. Digite GO E000H e pressione a tecla Enter. Observe como a tela é limpa. Pressione a tecla de comando INTR para sair do programa. 17. Dados ASCII podem ser transferidos para o vídeo preenchendo uma memória intermediária localizada no endereço FF90H a FFAFH e executando a rotina Display-Buffer (endereço FF83H0. Use o comando XBYTE para encher a memória intermediária (buffer) como se segue:
  • 69. Microcomputadores Laboratório 2 69 ENDEREÇO DADO COMENTÁRIOS FF90H 30H 0 FF91H 31H 1 FF92H 32H 2 FF93H 33H 3 FF94H 34H 4 FF95H 35H 5 FF96H 36H 6 FF97H 37H 7 FF98H 38H 8 FF99H 39H 9 FF9AH 41H A FF9BH 42H B FF9CH 43H C FF9DH 44H D FF9EH 45H E FF9FH 46H F FFA0H 61H a FFA1H 62H b FFA2H 63H c FFA3H 64H d FFA4H 65H e FFA5H 66H f FFA6H 67H g FFA7H 68H h FFA8H 69H i FFA9H 6AH j FFAAH 6BH k FFABH 6CH l FFACH 6DH m FFADH 6EH n FFAEH 6FH o FFAFH 70H p Figura 2: Memória Intermediária e Símbolo ASCII
  • 70. Microcomputadores Laboratório 2 70 18. Digite ASM E000H (enter) e os comandos abaixo: ENDEREÇO INSTRUÇÃO COMENTÁRIOS E000H LCALL FF83H Chame rotina display-buffer E003H LJMP E003H Parada Figura 3: Memória Buffer e Símbolo ASCII 19. Digite GO E000H e pressione a tecla ENTER. Observe como a mensagem é exibida. Pressione a tecla de comando INTR para sair do programa. Execute este programa para diferentes valores ASCII (00H a 7FH). 20. Pode-se transferir um único byte ASCII para o display especificando o endereço de exibição (endereço FFB0H), os dados de exibição (endereço FFB1H) e executando a rotina DISPLAY-CHARACTER (endereço FF86H). A faixa de endereço do display é 00H a 1FH. Use o comando XBYTE para preencher a memória externa de dados, da seguinte maneira: Atividade Extra – Você agora deve apresentar um programa que coloque no centro da primeira linha do display a palavra: MICROCONTROLADOR. ENDEREÇO DADOS COMENTÁRIOS FFB0H 05H Endereço do caractere 5 FFB1H 58H Símbolo ASCII: “X” Figura 4: Endereço do Caracter e Dados ASCII Após ultimo ENTER, digite CLEAR. 21. Digite ASM E000H (ENTER) e os comandos abaixo: ENDEREÇO INSTRUÇÃO COMENTÁRIOS E000H LCALL FF80H Chame rotina clear-display E003H LCALL FF86H Chame rotina display caracter E006H LJMP E006H Parada Figura 5: Programa Display Character Após o último ENTER, digite CLEAR.
  • 71. Microcomputadores Laboratório 2 71 22. Digite GO E000H e pressione a tecla Enter. Observe como o caracter X é exibido na Sexta posição. Pressione a tecla de comando INTR para deixar o programa. Execute este programa para diferentes caracteres ASCII e endereços. Atividade Extra – Apresente um programa para que o caracter R seja colocado: • Na decima posição da primeira linha; • Na primeira posição da primeira linha; • No centro da segunda linha. Observações 23. Quantos símbolos ASCII podem ser exibidos? 24. Qual é a diferença entre a execução de um programa passo a passo e de tempo real? 25. Como se pode posicionar o acumulador em 0?
  • 73. Microcomputadores Laboratório 3 73 Laboratório 3 Portas de Entrada/Saída Objetivos Após completar estas atividades de aprendizado em laboratório, você deverá ser capaz de: • Manipular variáveis booleanas. • Usar as capacidades de entrada/saída de um microcomputador. • Montar programas que façam uso dos acessos de um microcomputador. • Fazer programas que façam uso do Subconjunto de Instruções de Processamento Booleano. Equipamento Necessário • 1 Computador central PU-2000 (Unidade central de processamento - Sistema de Aprendizado Eletrônico Computadorizado) • 1 Placa Mestra • 1 Unidade EB-153 - Placa de Circuito Impresso Como Iniciar o Laboratório 1. Coloque a placa de circuito impresso do EB-153 na unidade central. 2. Ligue a placa mestra. Procedimento 3. O 8031 tem quatro bancos de 8 registros ocupando localizações de 0 a 31 (00H até 1FH) da RAM interna de dados. O Endereçamento de Registro permite acesso aos oito registros (R0 – R7) do Banco de Registro selecionado (RB). Um dos quatro Bancos de 8 registros é selecionado por um campo de dois bits no PSW (registro de palavra de estado de programa), como indica na figura seguinte. Esses dois bits são RS0 e RS1.
  • 74. Microcomputadores Laboratório 3 74 (MSB) (LSB) CY AC FO RS1 RS0 OV P Figura 1: Organização de Palavra de Estado (status) de Programa O registro PSW (PROGRAM STATUS WORD) está localizado no endereço D0H. PSW é um registrador de status da última operação realizada no acumulador. CY ou C – carry É um indicador de “vai um” em operações aritméticas. FO – Flag 0 É um bit registrador de uso geral, não tem nenhuma função especial. RS1 e RS0 São 2 bits que fazem mudar o banco de registradores a que se referem os nomes R0 a R7. OV – overflow flag É um bit que vai para 1 quando, após uma adição ou subtração, acontece um “estouro” da conta. P – parity Bit que é “setado” em “1” quando a paridade do conteúdo do acumulador é par. O seguinte programa mostra como manipular os bancos de registro do 8051 (Figura 2). ENDEREÇO INSTRUÇÕES COMENTÁRIOS E000H MOV D0H,#18H Selecione banco de registro 3 RS1 = 1 – RS0 = 1 E003H MOV R0,#55H Coloca 55H em R0 E005H MOV R1,#66H Coloca 66 em R1 E007H MOV R2,#77H Coloca 77 em R2 E009H MOV D0H,#00H Restaure o banco de registro 0 RS1 = 0 – RS0 = 0 E00CH LJMP E00CH Parada
  • 75. Microcomputadores Laboratório 3 75 Figura 2 : Como Manipular os Bancos de Registro O sinal # imediatamente antes da expressão indica que se trata de um operando imediato de dados e não de um endereço. 4. Monte o programa dado na Figura 2. 5. Use o comando GO para executar esse programa. Digite a tecla de comando INTR para parar o programa. 6. Use o comando DDUMP para descarregar os registros R0 a R2 do banco 3 e note como os valores numéricos do programa foram armazenados nos endereços correspondentes (endereço 18H a 1AH). 7. Endereçamento Direto proporciona o único meio de acessar os Registros de Função Especial “byte-wide” de memória correlacionada e bits d memória correlacionada dentro dos Registros de Função Especial. O Endereçamento Direto de bytes também pode ser usado para acessar os 128 bytes inferiores da RAM Interna de Dados (Figura 3). ENDEREÇO INSTRUÇÕES COMENTÁRIOS E000H MOV 20H,#11H Escreva 11H no endereço 20H E003H MOV 21H,20H Grave o conteúdo do endereço 20H no endereço 21H E006H MOV 22H,21H Grave o conteúdo do endereço 21H no endereço 22H E009H LJMP E009H Parada Figura 3: Como Transferir Dados Internos 8. Monte o programa dado na Figura 3. 9. Execute este programa e pressione a tecla de comando INTR para deter a execução. 10. Use o comando DDUMP para descarregar a RAM Interna de Dados, e observe como o valor numérico 11H foi armazenado nos endereços correspondente (endereço 20H a 22H). Note as diferenças entre as instruções MOV. O sinal de libra # indica o valor numérico 11H que é transferido para o endereço 20H (instrução MOV 20H,#11H). Na ausência do sinal de libra, os dados transferidos são o conteúdo do endereço. Para o programa dado na Figura 3, os
  • 76. Microcomputadores Laboratório 3 76 dados armazenados no endereço 20H são transferidos para o conteúdo do endereço 21H (instrução MOV 21H, 20H) e endereço 22H (instrução MOV 22H, 21H). 11. O Endereçamento Direto de bits ganha acesso a um subconjunto de 128 bits da RAM Interna de Dados e subconjunto de 128 bits dos Registros de Função Especial. O subconjunto de 128 bits da RAM Interna de Dados é sobreposto ao endereço 20H a 2FH da Memória Interna de Dados “Byte-wide”.( wide = largo, amplo, estendido, largura ).Por exemplo: endereço de bit 00H corresponde a endereço do bit 0 do byte 20H da RAM Interna de Dados. O programa seguinte mostra vários exemplos de Endereçamento Direto dos bits da RAM Interna de Dados (Figura 4). ENDEREÇO INSTRUÇÃO COMENTÁRIOS E000H CLR C Limpe sinalizador de carry (transporte) E001H MOV 00H,C Desloque sinalizador de carry para bit E003H CPL C Complemente sinalizador de carry E004H MOV 01H,C Desloque sinalizador de carry para bit E006H CPL C Complemente sinalizador de carry E007H MOV 02H,C Desloque sinalizador de carry para bit E009H CPL C Complemente sinalizador de carry E00AH MOV 03H,C Desloque sinalizador de carry para bit E00CH CPL C Complemente sinalizador de carry E00DH MOV 04H,C Desloque sinalizador de carry para bit E00FH CPL C Complemente sinalizador de carry E010H MOV 05H,C Desloque sinalizador de carry para bit E012H CPL C Complemente sinalizador de carry E013H MOV 06H,C Desloque sinalizador de carry para bit E015H CPL C Complemente sinalizador de carry E016H MOV 07H,C Desloque sinalizador de carry para bit E018H LJMP E018H Parada Figura 4: Endereçamento Direto de Bits 12. Monte o programa dado na Figura 4. 13. Execute este programa (GO) e pressione a tecla de comando INTR para deter a execução.
  • 77. Microcomputadores Laboratório 3 77 14. Use o comando DDUMP para descarregar a RAM Interna de Dados. Tecle DDUMP 20H e pressione a tecla Enter. Este endereço deverá indicar o conteúdo de endereço de bit 00H a 07H. Note que este programa grava bit por bit o valor binário 10101010 (AAH) para o endereço de bit 00H através de 07H. Estes endereços de bit são sobrepostos ao endereço de byte 20H. Você tem que usar as funções de descarga para observar a RAM Interna de Dados, porque o monitor usa estas localizações e altera o conteúdo quando recupera o controle. Atividade Extra – Você deve agora elaborar um programa para posicionar o conteúdo BCH no endereço 20H. 15. O Endereçamento Indireto de Registro, usando o conteúdo de R0 ou R1 no Banco de Registro selecionado, endereça a RAM Interna de Dados. O sinal @ (arrouba) seguido pelo símbolo especial de registro (R0 ou R1) indica endereçamento indireto. O programa seguinte mostra vários exemplos de Endereçamento Indireto da RAM Interna de Dados (Figura 5). ENDEREÇO INSTRUÇÕES COMENTÁRIOS E000H MOV R0,#20H Posicione indicador de endereço em 20H E002H MOV @R0,#55H Desloque 55H para o endereço dado por R0 E004H INC R0 Incremente indicador de endereço E005H MOV @R0,#66H Desloque 66H para o endereço dado por R0 E007H INC R0 Incremento indicador de endereço E008H MOV @R0,#77H Desloque 77H para o endereço dado por R0 E00AH MOV A,@R0 Desloque o indicador de endereço para ACC E00BH LJMP E00BH Parada Figura 5: Endereçamento Indireto 16. Monte o programa dado na Figura 5. 17. Execute este programa e pressione a tecla de comando INTR para deter a execução.
  • 78. Microcomputadores Laboratório 3 78 18. Use o comando DDUMP para descarregar a RAM Interna de Dados. Tecle DDUMP 20H e pressione a tecla Enter. Note que este programa escreve valores de dados 55H, 66H e 77H para endereço 20H até 22H, respectivamente. 19. Use o comando RDUMP para descarregar o acumulador. Digite RDUMP E0H e pressione a tecla Enter. Note que este programa escreve o último valor do indicador de endereço no acumulador. 20. O Indicador de Dados de 16 bits (DPTR) pode ser usado para acessar qualquer localização dentro do espaço total externo de endereço de 64K. Instruções M0VX acessa a Memória Externa de Dados. O Endereçamento Imediato permite a memória do programa ser acessado como dado constante. Isto é feito pelas instruções M0VC. O programa seguinte mostra um exemplo de acesso a Memória Externa de Dados e a Memória do Programa. O programa da Figura 6 copia os primeiros bytes do programa monitor para as localizações externas da RAM. ENDEREÇO INSTRUÇÕES COMENTÁRIOS E000H MOV DPTR,#0000H Posicione o indicador de endereço em 0000H E003H CLR A Limpe o acumulador E004H MOVC A,@A+DPTR Leia o primeiro byte de código E005H MOV DPTR,#E100H Posicione o indicador de endereço em E100H E008H MOVX @DPTR,A Escreva byte na RAM externa E009H MOV DPTR,#0001H Posicione indicador de endereço em 0001H E00CH CLR A Limpe o acumulador E00DH MOVC A,@A+DPTR Leia o segundo byte de código E00EH MOV DPTR,#E101H Posicione o indicador de endereço em E101H E011H MOVX @DPTR,A Grave byte na RAM externa E012H MOV DPTR,#0002H Posicione indicador de endereço em 0002H E015H CLR A Limpe o acumulador E016H MOVC A,@A+DPTR Leia o terceiro byte de código E017H MOV DPTR,#E102H Posicione indicador de endereço em E102H E01AH MOVX @DPTR,A Grave byte na RAM externa E01BH LJMP E01BH Parada Figura 6: Dados Externos e Acesso de Código
  • 79. Microcomputadores Laboratório 3 79 21. Monte o programa dado na Figura 6. 22. Execute este programa e pressione a tecla de comando INTR para deter a execução. 23. Use o comando DASM para comparar endereço de ROM 0000H até 0002H e endereço de RAM E100H até E102H, respectivamente. Observações 24. Como se recupera o código da memória do programa? 25. Qual a diferença entre memória interna de dados e memória externa de dados? 26. Como o microcomputador pode acessar os dados externos? 27. Que sinais são ativados durante a transferência de memória de programa? 28. Que sinais são ativados durante a transferência de dados externos?
  • 81. Microcomputadores Laboratório 4 81 Laboratório 4 Portas de Entrada/Saída Objetivos Após completar estas atividades de aprendizado em laboratório, você deverá ser capaz de: • Manipular variáveis booleanas. • Usar as capacidades de entrada/saída de um microcomputador. • Montar programas que façam uso dos acessos de um microcomputador. • Fazer programas que façam uso do Subconjunto de Instruções de Processamento Booleano. Equipamento Necessário • 1 Computador central PU-2000 (Unidade central de processamento - Sistema de Aprendizado Eletrônico Computadorizado) • 1 Placa Mestra • 1 Unidade EB-153 - Placa de Circuito Impresso • 1 Osciloscópio Como Iniciar o Laboratório 1. Coloque a placa de circuito impresso do EB-153 na unidade central. 2. Ligue a placa mestra. Procedimento 3. Os exercícios que se seguem usam as capacidades de processamento booleanas. Uma das características do 8051 é o suporte direto à manipulação de bit. As instruções orientadas para os bits levam o programa de entrada e saída inerentes aos problemas de controle digital.
  • 82. Microcomputadores Laboratório 4 82 A este acesso do 8051 estão acoplados quatro LED (Diodo Emissor de Luz; sigla inglesa LED) e quatro chaves, como se segue: Linhas conectadas aos LEDs : bit 7, bit 6, bit 5 e bit 4. Linhas conectadas às chaves : bit 3, bit 2, bit 1 e bit 0. O programa seguinte mostra como manipular os bits do P1. Este programa (Figura 1) transfere os estados lógicos das chaves aos LEDs. ENDEREÇO INSTRUÇÕES COMENTÁRIOS E000H MOV C,93H Leia bit 3 e transfira ao bit 7 E002H MOV 97H,C E004H MOV C,92H Leia bit2 e transfira ao bit 6 E006H MOV 96H,C E008H MOV C,91H Leia bit 1 e transfira ao bit 5 E00AH MOV 95H,C E00CH MOV C,90H Leia bit 0 e transfira ao bit 4 E00EH MOV 94H,C E010H LJMP E000H Salte para o endereço inicial Figura 1 : Como manipular os Bits da Porta 1 4. Monte o programa dado na Figura 1. 5. Pressione a tecla de comando Reset para inicializar a Porta 1. Execute este programa passo a passo enquanto estiver mudando o posicionamento das chaves. Pressione a tecla de comando INTR para deter o modo de passo automático. Atividade Extra – Você deve agora elaborar programa que: (a) acione dois LED’s utilizando apenas uma chave; (b) acione um LED após o acionamento da terceira chave e (c) acionar os dois primeiros LED’s com as duas primeiras chaves e acionar os dois outros LED’s com as outras duas chaves. 6. O programa seguinte (Figura 2) lê os estados lógicos das chaves, converte-os em valores ASCII (“0” ou “1”) e exibe estes valores no display.
  • 83. Microcomputadores Laboratório 4 83 ENDEREÇO INSTRUÇÕES COMENTÁRIOS E000H LCALL FF89H Chame rotina clear-display buffer. E003H MOV DPTR,#FF90H Posicione indicador de dados no end. do buffer. E006H MOV C,93H Leia bit 3 e transfira para carry (transporte). E008H MOV A,#30H Posicione buffer em ASCII “0”. E00AH MOVX @DPTR,A E00BH JNC 02H Verifique o bit de acesso – salte +4. E00DH MOV A,#31H Posicione buffer em ASCII “1”. E00FH MOVX @DPTR,A E010H INC DPTR Incremente indicador de buffer de vídeo E011H MOV C,92H Leia bit 2 e transfira para carry. E013H MOV A,#30H Posicione buffer em ASCII “0”. E015H MOVX @DPTR,A E016H JNC 02H Verifique o bit de acesso – salte +4. E018H MOV A,#31H Posicione buffer em ASCII “1”. E01AH MOVX @DPTR,A E01BH INC DPTR Incremente indicador de buffer de vídeo. E01CH MOV C,91H Leia bit 1 e a transfira para carry. E01EH MOV A,#30H Posicione buffer em ASCII “0”. E020H MOVX @DPTR,A E021H JNC 02H Verifique o bit de acesso – salte +4. E023H MOV A,#31H Posicione buffer em ASCII “1”. E025H MOVX @DPTR,A E026H INC DPTR Incremente indicador de buffer do vídeo. E027H MOV C,90H Leia bit 0 e transfira para carry. E029H MOV A,#30H Posicione buffer em ASCII “0”. E02BH MOVX @DPTR,A E02CH JNC 02H Verifique o bit de acesso – salte +4. E02EH MOV A,#31H Posicione buffer em ASCII “1”. E030H MOVX @DPTR,A E031H LCALL FF83H Chame rotina de buffer de vídeo. E00CH LJMP E003H Salte para laço. Figura 2: Como Exibir Bits da Porta 1 A rotina CLEAR-DISPLAY-BUFFER (endereço FF89H) limpa o buffer do display (endereço FF90H a FFAFH) escrevendo o caracter em branco de ASCII (20H) em todas as localizações do buffer.
  • 84. Microcomputadores Laboratório 4 84 Note que as instruções JNC incrementam o contador do programa antes de somar a defasagem relativa (02H, no nosso caso). 7. Monte o programa dado na Figura 2. 8. Use o comando GO para executar este programa. Mude o posicionamento das chaves. Pressione a tecla de comando INTR para deter o programa. 9. O 8255 é uma interface periférica programável (sigla inglesa PPI) projetada para uso em sistemas de microcomputador. Sua função é a de um componente de E/S de uso geral para interfacear equipamento periférico ao barramento do sistema do microcomputador. A configuração funcional do 8255 é programada pelo software dos sistemas, de modo que, normalmente, não é necessária lógica externa alguma para interfacear dispositivos periféricos ou estruturas. O 8255 tem 24 pinos de E/S que podem ser programados individualmente em dois grupos de 12 e usados em 3 principais modos de operação. No primeiro modo (MODO 0), cada grupo de 12 pinos de E/S pode ser programado em conjunto de 4 para entrar ou sair. No MODO 1, o segundo, cada grupo pode ser programado para Ter 8 linhas de entrada ou saída. Dos 4 pinos restantes, 3 são usados para saudação inicial e sinais de controle de interrupção. O terceiro modo de operação (MODO 2 ), é um modo de barramento bidirecional, que usa 8 linhas para um barramento bidirecional e 5 linhas, tomando emprestada uma do outro grupo, para saudação inicial. A Figura 3 dá o Formato de Definição do Modo e a Figura 4 mostra o significado dos endereços de PPI.
  • 85. Microcomputadores Laboratório 4 85 Figura 3. Mode Definition Format ENDEREÇO DESCRIÇÃO 0000H Acesso A 0001H Acesso B 0002H Acesso C 0003H Registro de Modo (end. Programação da PPI) Figura 4: Endereçamento de PPI O programa seguinte (Figura 5) usa a Porta C do PPI (Interface Periférica Programável) para saída de contador binário. ENDEREÇO INSTRUÇÃO COMENTÁRIOS E000H MOV DPTR,#0003H Posicione indicador de dados PPI-end. de Modo E002H MOV A,#80H Define a Porta C como saída E005H MOVX @DPTR,A Move 80 do A para o end. Indicado por DPTR E006H CLR A Posicione contagem inicial em 0 E009H MOV DPTR,#0002H Posicione indicador de dados PPI – Porta C E00AH INC A Incremente contagem E00BH MOVX @DPTR,A Grave contagem na Porta C E00CH LJMP E00AH Salte para laço (looping) Figura 5: Contador Binário na Porta C (100kHz).
  • 86. Microcomputadores Laboratório 4 86 10. Monte o programa dado na Figura 5. 11. Use o comando GO para executar este programa. Conecte o osciloscópio às saídas da Porta C e observe que o Bit 0 tem a maior freqüência e os outros bits dividem por dois a freqüência dos bits contínuos menos significativos . Pressione a tecla de comando INTR para deter o programa. 12. O programa seguinte (Figura 6) lê os estados lógicos das chaves acopladas na Porta 1 do 8031 e transfere estes valores na Porta C da PPI. ENDEREÇO INSTRUÇÕES COMENTÁRIOS E000H MOV DPTR,#0003H Posicione indicador de dados PPI – end.de Modo E003H MOV A,#80H Defina o Porta C como saída E005H MOVX @DPTR,A Move 80 do A para o end. Indicado por DPTR E006H MOV DPTR,#0002H Posicione indicador de dados PPI- Porta 1 E009H MOV A,90H Leia Porta 1 E00BH MOVX @DPTR,A Transfira para Porta C E00CH LJMP E009H Salte para laço Figura 6: Como Transferir da Porta 1 para a Porta C 13. Monte o programa dado na Figura 6. 14. Use o comando GO para executar este programa. Conecte o osciloscópio às saídas do Acesso 1. Pressione a tecla de comando INTR para deter o programa (não apague o programa – você vai precisar dele para o Modo de Prática). 15. O programa seguinte (Figura 7) desloca um “1” através dos bits da Porta 1 acoplados aos LED’s. ENDEREÇO INSTRUÇÕES COMENTÁRIOS E000H MOV A,#10H Posicione estado inicial E002H CLR C Limpe sinalizador de carry E003H MOV 90H,A Grave na Porta 1 E005H RLC A Gire o acumulador e o carry para a esquerda E006H JC F8H Continue a fazer o deslocamento – salte p/E000 E018H JNC F9H Salte para o laço – JUNP para E003 Figura 7: Registro de Deslocamento no Porta 1
  • 87. Microcomputadores Laboratório 4 87 16. Monte o programa dado na Figura 7. 17. Use o comando STEP para executar este programa. Observe o deslocamento do bit através dos LEDs. Pressione a tecla de comando INTR para deter o programa. Observações 18. Que é uma variável booleana? 19. Qual a diferença entre um processador booleano e os outros? 20. Como se calcula uma defasagem relativa positiva para a instrução JC? 21. Como se calcula uma defasagem relativa negativa para a instrução JC? 22. Qual a Palavra de Modo usada para estabelecer o Acesso C do PPI – 8255 no modo de entrada?
  • 89. Microcomputadores Laboratório 5 89 Laboratório 5 Operações Aritméticas e Lógicas Objetivos Após completar estas atividades de aprendizado em laboratório, você deverá ser capaz de: • Fazer cálculos com o microcontrolador. • Substituir circuitos lógicos por funções do microcontrolador. • Fazer programas que façam uso de instruções aritméticas e lógicas. • Fazer suas próprias sub-rotinas e programas principais. Equipamento Necessário • 1 Computador central PU-2000 (Unidade central de processamento - Sistema de Aprendizado Eletrônico Computadorizado) • 1 Placa Mestra • 1 Unidade EB-153 - Placa de Circuito Impresso • 1 Osciloscópio Como Iniciar o Laboratório 1. Coloque a placa de circuito impresso do EB-153 na unidade central. 2. Ligue a placa mestra. Procedimento 3. O 8051 permite executar as funções lógicas de E, OU e OU – exclusivo no registro A por um segundo operando. O 8051 pode também executar um OU lógico ou um E lógico entre o acumulador booleano (isto é, o sinalizador de carry) e qualquer bit, ou seu complemento que possa ser acessado através de endereçamento direto. As instruções de bit ANL e ORL entre o bit de carry e um bit endereçável. Uma vez que o bit de carry desempenha o papel de Acumulador no
  • 90. Microcomputadores Laboratório 5 90 Processador Booleano 8051, todos os resultados das operações lógicas acima residirão no bit de carry. A figura 1 mostra o diagrama de portas lógicas para uma função lógica de diversas variáveis booleanas. Esta figura é uma solução da seguinte equação: X W V U Q + + = ) .( Figura 1 O programa seguinte simula o circuito lógico mostrado na figura 1. Emprega-se o acesso 1 para substituir as entradas e saídas lógicas do circuito. As entradas são conectadas a chaves, e a saída a um LED, da seguinte maneira: ENTRADA U = PORTA 1 – BIT 0 (conectada a uma chave) ENTRADA V = PORTA 1 – BIT 1 (conectada a uma chave) ENTRADA W = PORTA 1 – BIT 2 (conectada a uma chave) ENTRADA X = PORTA 1 – BIT 3 (conectada a uma chave) SAÍDA Q = PORTA 1 – BIT 7 (conectada a um LED) ENDEREÇO INSTRUÇÕES COMENTÁRIOS E000H MOV C,90H,#0FH Ativa Porta 1 E003H MOV C, 91H Leia bit 1 e transfira ao de carry. E005H ORL C, 92H Bit 2 OU de carry. E007H ANL C, 90H Bit 0 E de carry. E009H ORL C, /93H Complemento do bit 3 OU de carry. E00BH MOV 97H, C Saída de resultado. E00DH LJMP E003H Salte para endereço inicial. Figura 2: Simulação de uma função lógica.
  • 91. Microcomputadores Laboratório 5 91 4. Monte o programa da figura 2. 5. Use o comando GO para executar este programa. Mude a disposição das chaves e complete a tabela da verdade dada na Figura 3. Pressione a tecla de comando INTR para deter o programa. ENTRADAS SAÍDA Modo de Experiência Modo de Prática X W V U Z Z 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 Figura 3: Tabela da Verdade 6. O 8051 permite operações aritméticas de somar, incrementar, decrementar e comparar a zero, ajudar soma decimal, subtrair com transporte negativo, comparar, multiplicar e dividir. 7. A instrução DIV AB divide o número inteiro sem sinal de oito bits no acumulador por um inteiro sem sinal de oito bits no registro B. A parte inteira do quociente é devolvida ao acumulador; o resto ao registro B. Se o registro B contiver originalmente 00H, então o sinalizador de estouro será posicionado para indicar um erro na divisão, e os valores devolvidos serão indefinidos. Do contrário, OV é liberado.
  • 92. Microcomputadores Laboratório 5 92 A instrução dividir também é útil para propósitos como conversão de base (radix) ou separação de campos de bits do acumulador (entre 0 e 255) para uma representação BCD de três dígitos (três bytes). Esta rotina aparece na Figura 4. O resultado da conversão é guardado no registro R0, R1 e R2. ENDEREÇO INSTRUÇÃO COMENTÁRIOS E100H MOV F0H,#64H Posicione B (end.F0H) em 100 (decimal). E103H DIV AB Divida por 100 para determinar o número de centenas E104H MOV R2,A Guarde o resultado em R2 E105H MOV A,#0AH Posicione A em 10 (decimal) E107H XCH A,F0H Troque A por B (endereço F0H) E109H DIV AB Divida o resto por 10 para determinar o número de dezenas que sobraram E10AH MOV R1,A Guarde o resultado em R1; o resto é digito de um E10BH MOV R0,F0H Guarde o resultado em P0 E10DH RET Volte ao programa principal Figura 4: Uso da Instrução DIV para Conversão de Base. 8. Monte o programa dado na Figura 4. Note que este programa é uma sub- rotina. O 8051 tem dois tipos de instruções que são primordiais para a implementação de subrotinas. Estas instruções são CALL (ACALL ou LCALL) e RETURN (RET). A última instrução de uma sub-rotina deve ser RET. 9. O programa seguinte (Figura 5) usa a sub-rotina de Conversão de Base para converter o conteúdo do acumulador e para exibir os resultados da conversão no mostrador alfanumérico. Estes resultados são convertidos a valores ASCII adicionando 30H (correspondente a “0”). ENDEREÇO INSTRUÇÃO COMENTÁRIOS E000H LCALL FF89H Chame rotina clear-display-buffer E003H MOV A,#FFH Posicione byte a ser convertido E005H LCALL E100H Chame rotina de conversão de base E008H MOV A,#30H Posicione acumulador em ASCII “0” E00AH MOV DPTR,#FF90H Posicione indicador de dados no end. de buffer E00DH ADD A,02H Converta primeiro byte para ASCII E00FH MOVX @DPTR,A Posicione memória intermediária em ASCII R2 E010H INC DPTR Incremente indicador de buffer de vídeo E011H MOV A,#30H Posicione acumulador em ASCII “0”
  • 93. Microcomputadores Laboratório 5 93 E013H ADD A,01H Converta segundo byte para ASCII E015H MOVX @DPTR,A Posicione memória intermediária em ASCII R1 E016H INC DPTR Incremente indicador de buffer de vídeo E017H MOV A,#30H Posicione acumulador em ASCII “0” E019H ADD A,00H Converta terceiro byte para ASCII E01BH MOVX @DPTR,A Posicione memória intermediária em ASCII R0 E01CH LCALL FF83H Chame rotina de buffer de vídeo E01FH LJMP E01FH Fim Figura 5: Como Exibir Conversões de Base 10. Monte o programa dado na Figura 5. 11. Use o comando GO para executar este programa. Pressione a tecla de comando INT para deter o programa. Mude o valor a ser convertido do original FFH (endereço E004H) para outros e execute novamente o programa. 12. O programa seguinte (Figura 6) usa a instrução INC para incrementar um contador binário que é exibido nos LED’s acoplados ao Acesso 1. ENDEREÇO INSTRUÇÕES COMENTÁRIOS E000H MOV DPTR,#FFC0H Posicione indicador de dados para retardo – MSB E003H MOV A,#01H Defina constante de retardo – MSB E005H MOVX @DPTR,A E006H INC DPTR Posicione ponteiro de dados – LSB E007H MOV A,#00H Defina constante de retardo – LSB E009H MOVX @DPTR,A E00AH CLR A Posicione estado inicial em zero E00BH SWAP A Permute mini bytes E00CH MOV 90H,A Grave no Acesso 1 E00EH SWAP A Restaure mini bytes E00FH PUSH E0H Guarde acumulador (endereço E0H) E011H LCALL FF8CH Chame rotina de retardo E014H POP E0H Restaure Acumulador E016H INC A Incremente contagem E017H JB E4H,F0H Reinicie se contagem 15. (Acc. – bit 4 = 1) – byte E00AH E01AH LJMP E00BH Salte para Laço Figura 6: Contador Binário no Acesso 1.
  • 94. Microcomputadores Laboratório 5 94 A rotina RETARDO (DELAY; endereço FF8CH) soma o retardo especificado no endereço FFC0H (MSB) e FFC1H (LSB). A base de tempo é 1ms. Portanto, para um fator de 0100H como o dado no programa, o retardo é de 0,256 Seg. O acumulador retém a contagem. Assim, quando se chama a rotina de retardo deve-se guardar o acumulador. A maneira mais simples de guardar o acumulador é usar a instrução PUSH, que armazena o conteúdo do acumulador na pilha. A instrução POP restaura o valor do acumulador. SWAP A permuta o conteúdo do mini byte de ordem interior do acumulador (0-3) com o conteúdo de mi byte de ordem superior (4-7) Esta operação transfere o contador aos LED’s acoplados ao mini byte de ordem superior. 13. Monte o programa dado na Figura 6. 14. Use o comando GO para executar este programa. Observe a contagem binária nos LED’s. Pressione a tecla de comando INT para deter o programa. Execute o programa outra vez para diferenciar retardos. Observações 15. Que é uma sub-rotina ? 16. Qual é o acumulador booleano ? 17. Onde está armazenado o contador do programa quando se executa uma instrução CALL? 18. Cite as instruções lógicas. 19. Cite as instruções aritméticas.
  • 95. Microcomputadores Laboratório 6 95 Laboratório 6 Operações de Transferência de Controle Objetivos Após completar estas atividades de aprendizado em laboratório, você deverá ser capaz de: • Instruções de transferência de controle. • Controlar o som da cigarra por meio de software. Equipamento Necessário • 1 Computador central PU-2000 (Unidade central de processamento - Sistema de Aprendizado Eletrônico Computadorizado) • 1 Gabinete • 1 Unidade EB-153 - Placa de Circuito Impresso • 1 Osciloscópio Como Iniciar o Laboratório 1. Coloque a placa de circuito impresso do EB-153 na unidade central. 2. Ligue o gabinete. Procedimento 3. Há 3 classes de operações de controle: • Chamadas, retornos e saltos incondicionais • Saltos condicionais • Interrupções Todas as operações de transferência de controle, algumas por força de uma condição específica, fazem com que a execução do programa continue numa localização não seqüencial na memória do programa.
  • 96. Microcomputadores Laboratório 6 96 As chamadas, retornos e saltos incondicionais transferem para o endereço alvo o controle do valor corrente do contador de programa. ACALL e LCALL armazenam o endereço da próxima instrução para a pilha (PCL para o endereço de ordem inferior e PCH para o endereço de ordem superior) e depois transfere o controle ao endereço-alvo. RET transfere o controle ao endereço de retorno guardado na pilha mediante uma operação de chamada anterior, e decrementa de dois o SP (Stack Pointer = ponteiro de pilha), para ajustar o SP ao endereço acrescentado à pilha. A pilha pode ser localizada em qualquer ponto dentro da RAM interna de dados. O SP de 8 bits contém o endereço no qual o último byte foi armazenado na pilha. Este é também o endereço do próximo byte a ser restaurado. O ponteiro pode ser lido ou gravado sob controle de software. Você não terá problemas com o uso da pilha se seguir as diretrizes abaixo: • carregue o ponteiro da pilha como parte da rotina de inicialização; • equilibre sempre as operações da pilha. Cada CHAMADA (CALL) deverá ser equilibrada por um RETURN e cada PUSH ou um POP; O programa seguinte mostra o uso da pilha e exemplos de chamadas, retornos e saltos incondicionais. ENDEREÇO INSTRUÇÃO COMENTÁRIOS E000H MOV 81H,#30H Defina o ponteiro da pilha (81H) em 30H E003H MOV A,#55H Posicione o acumulador em 55H E005H PUSH E0H Guarde o acumulador (E0) E007H LCALL E100H Chame a sub-rotina E00AH POP E0H Restaure o acumulador (E0) E00CH SJMP F2H Salte para endereço inicial (E000) Subrotina E100H CLR A Modifique o acumulador E101H RET Retorne ao programa principal Figura 1: Uso da Pilha
  • 97. Microcomputadores Laboratório 6 97 4. Monte o programa dado na Figura 1. A instrução SJMP transfere o controle para o endereço do código especificado. Incrementa-se o contador do programa para a próxima instrução, depois acrescenta-se o deslocamento relativo (F2H) ao contador incrementado do programa, a executa-se a instrução naquele endereço (E000). O endereço de código num salto relativo deve estar próximo à própria instrução de salto relativo. A faixa é de – 128 a + 127 bytes a partir do primeiro byte da instrução que segue o salto relativo. Os endereços de código são codificados como números complementares de dois de oito bits. Assim, para um endereço negativo, o complemento relativo mais um. Use o comando STEP para executar este programa. Observe que a sub-rotina (endereço E100H) muda apenas o conteúdo do acumulador. Note as mudanças do ponteiro da pilha durante operações da pilha (PUSH, POP, CALL e RET). Pressione a tecla de comando INTR para deter o programa. 5. O programa seguinte (Figura 2) faz soar a cigarra piezelétrica conectada aos bits 0 e 1 do Acesso 1. Todos os registros usados pelo programa principal devem ser guardados na pilha ao ser chamada a sub-rotina de retardo. A cigarra é ativada por freqüência de áudio; ativa-se também quando as linhas de acesso a ela conectadas estão em estado lógico oposto. O programa da Figura 2 usa a instrução de salto condicional DJNZ. Esta instrução decrementa o conteúdo do Registro R0 em: Se o resultado do decremento for 0, o controle passa à próxima instrução seqüencial; caso contrário, o controle passa ao endereço de código especificado. O contador do programa é incrementado para a instrução seguinte. Se o decremento não resultar em 0, o deslocamento relativo é adicionado ao contador incrementado do programa, e executa-se a instrução naquele endereço. A sub-rotina E100H proporciona um retardo simples, de acordo com o valor armazenado em R0.
  • 98. Microcomputadores Laboratório 6 98 ENDEREÇO INSTRUÇÃO COMENTÁRIOS E000H MOV R0,#80H Posicione constante de retardo E002H MOV 96H,C Posicione fio da cigarra E004H CPL C Complemente bit de carry E005H MOV 97H,C Posicione o outro fio da cigarra E007H PUSH D0H Guarde bit de carry E009H LCALL E100H Chame rotina de retardo E00CH POP D0H Restaure bit de carry E00EH LJMP E000H Retorne ao laço Sub-rotina E100H DJNZ R0,01H Retardo E102H RET Retorne se fim de contagem E103H LJMP E100H Continue Figura 2: Como usar a Cigarra Piezelétrica 6. Monte o programa dado na Figura 2. 7. Use o comando GO para executar este programa. Pressione a tecla de comando INTR para deter o programa. Mude a constante de retardo (endereço E001H) para gerar freqüências diferentes e executar novamente o programa. 8. O programa seguinte (Figura 3) liga todos os LED’s acoplados ao Acesso 1 se a chave conectada ao bit 0 do Acesso 1 for colocada em “on” (ligado) . Do contrário, os LED’s são desligados. A instrução JNB testa o endereço de bit especificado (90H). Se for 0, o controle passa ao endereço de código especificado. Se não for, o controle passa à instrução seqüencial seguinte. O contador do programa é incrementado para a próxima instrução. Se o teste for bem sucedido, o deslocamento relativo é adicionado ao contador incrementado do programa, e a instrução naquele endereço é executada. ENDEREÇO INSTRUÇÃO COMENTÁRIOS E000H CLR C Limpe bit de carry E001H JNB 90H,01H Teste chave E004H SETB C Posicione bit de carry E005 MOV 94H,C Posicione ou restaure LED
  • 99. Microcomputadores Laboratório 6 99 E007 MOV 95H,C Posicione ou restaure LED E009 MOV 96H,C Posicione ou restaure LED E00B MOV 97H,C Posicione ou restaure LED E00D LJMP E000H Retorne ao laço Figura 3: Programa de Salto Condicional. 9. Monte o programa dado na figura 3. 10. Use o comando PASSO para executar este programa. Mude a disposição da chave acoplada ao bit 0 do Acesso 1 e observe os LED’s. Pressione a tecla de comando INTR para deter o programa. Observações 11. Qual a diferença entre PUSH e POP? 12. Onde está localizada a pilha? 13. Que é um ponteiro de pilha? 14. Qual a diferença entre JB e JNB?
  • 101. Microcomputadores Laboratório 7 101 Laboratório 7 Interrupções Externas Objetivos Após completar estas atividades de aprendizado em laboratório, você deverá ser capaz de: • Entender a operação de interrupção externa. • Fazer rotinas de serviço de interrupção. • Controlar eventos de tempo real. Equipamento Necessário • 1 Computador central PU-2000 (Unidade central de processamento - Sistema de Aprendizado Eletrônico Computadorizado) • 1 Unidade EB-153 - Placa de Circuito Impresso • 1 Osciloscópio • 1 Gerador de Sinal Como Iniciar o Laboratório 1. Coloque a placa de circuito impresso do EB-153 na unidade central. 2. Ligue a Placa Mestra. Procedimento 3. A interrupção é uma operação de transferência de controle. O controle de execução do programa pode ser transferido por meio de interrupções internas e externas. Todas as interrupções realizam uma transferência empurrando o Contador do Programa na pilha e depois saltando para programas localizados na memória do programa. Para evitar corrupção, o programador deve empurrar para a pilha todos os registros a ser alterados por seu programa de serviço de interrupção.
  • 102. Microcomputadores Laboratório 7 102 A última instrução da rotina de serviço de interrupção deve ser RETI. Essa instrução transfere o controle de maneira idêntica ao RET. Além disso, RETI reativa interrupções para o nível corrente de prioridade. O 8051 reconhece pedidos de interrupção de cinco fontes: duas de fontes externas via pinos INTO e INTI, uma de cada um dos dois contadores internos e uma do acesso serial de E/S. Cada interrupção vetoriza uma localização separada na memória do programa para seu programa de serviço. As localizações de memória do programa de programas de serviço de interrupção aparecem na Figura 1: FONTE DE INTERRUPÇÃO DESCRIÇÃO ENDEREÇO INICIAL ENDEREÇO DO SALTO DO MONITOR INTO Requisição externa 0 0003H FF00H RxD or TxD Acesso serial interno 0023H FF10H T1 Temporizador/contador interno 1 001BH FF20H T0 Tempor./contad.interno 0 0011H Reservado INT1 Requisição externa 1 0019H Reservado Figura 1: Localizações de Memória de Programa de Serviço de Interrupção Use o comando DASM para exibir os endereços de salto do monitor. Digite DASM 0003H e pressione a tecla Enter. Observe a instrução LJMP. Use a seta de baixo para exibir os outros endereços de salto. Pressione a tecla de comando Reset para abandonar o comando DASM. 4. Cada uma das cinco fontes de interrupção indicadas na Figura 1 pode ser designada para um dos dois níveis de prioridade e ativada ou desativada independentemente. Além disso, todas as fontes ativadas podem ser globalmente ativadas ou desativadas. Cada interrupção externa é programada como ativada a nível estável ou em transição, e é pouco ativa. Um recurso requer uma interrupção colocando seu sinalizador (flag) de pedido de interrupção no registro TCON ou SCON.
  • 103. Microcomputadores Laboratório 7 103 A Figura 2 mostra o formato de registro TCON (Timer/Couter Control/Status = Estado de Controle de Temporizador/Contador). Figura 2: Registro TCON A Figura 3 dá o formato de registro IE (Ïnterrupt Enable”, ou Ativador de Interrupção). Figura 3: Registro IE O formato de registro IP (“Interrupt Priority”, ou Prioridade de Interrupção) é mostrado na Figura 4. Figura 4: Registro IP O programa abaixo converte o microcomputador num contador de eventos.
  • 104. Microcomputadores Laboratório 7 104 ENDEREÇO INSTRUÇÃO COMENTÁRIOS Programa principal E000H MOV DPTR,#FF00H Posicione ponteiro no endereço de salto INTO E003H MOV A,#02H LJMP Código óptico LJMP E005H MOVX @DPTR,A Armazene LJMP E100H em FF0CH E006H INC DPTR Aponte para o primeiro operando E007H MOV A,#E1H Byte mais Significativo de endereço E009H MOVX @DPTR,A Armazene primeiro operando E00AH INC DPTR Aponte para segundo operando E00BH MOV A,#00H Byte menos significativo de endereço E00DH MOVX @DPTR,A Armazene segundo operando E00EH LCALL FF80H Limpe vídeo E011H MOV B8H,#01H Posicione registro IP – ender. B8H – prioridade máxima do INTO E014H MOV 88H,#01H Posicione registro TCON – endereço 88H, borda decrescente do INTO E017H MOV A8H,#81H Posicione registro IE – endereço A8H, ativar INTO E01AH LJMP E01AH Espere pela interrupção E01DH LJMP E000H Interrompa a rotina de serviço E100H MOV DPTR,#E200H Posicione ponteiro no endereço de contador E103H MOVX A,@DPTR Leia a contagem E104H INC A Incremente a contagem E105H CJNE A,#0AH,01H Verifique se a contagem + 0 E108H CLR A Byte mais significativo de endereço E109H MOVX @DPTR,A Guarde contagem E10AH ADD A,#30H Conversão de ASCII E10CH MOV DPTR,#FFB1H Posicione o endereço dos dados do caracter E10FH MOVX @DPTR,A Armazene dados de caracter E110H CLR A Defina endereço de caracter = 0 E111H MOV DPTR,#FFB0H Posicione endereço de exibição E114H MOVX @DPTR,A Armazene endereço de exibição E115H LCALL FF86H Exiba caracter E118H RETI Retorne da interrupção Figura 5: Como contar os Pulsos no INTO
  • 105. Microcomputadores Laboratório 7 105 5. Monte o programa dado na Figura 5. 6. Posicione o gerador de sinal em onda quadrada, saída de TTL, e 1Hz. 7. Conecte o gerador de sinal ao INTO 8. Use o comando GO para executar este programa. Observe que o programa exibe a contagem dos pulsos de entrada no vídeo alfanumérico. Aumente a freqüência do gerador de sinal e observe a contagem da nova freqüência. Pressione a tecla controle RESET para deter o programa. 9. O programa a seguir faz soar a cigarra piezelétrica ligada aos bits 6 e 7 do Acesso 1. O programa da Figura 6 espera uma interrupção para mudar os acessos conectados à cigarra. ENDEREÇO INSTRUÇÃO COMENTÁRIOS Programa principal E000H MOV DPTR,#FF00H Posicione ponteiro no endereço de salto do INS E003H MOV A,#02H Código óptico LJMP E005H MOVX @DPTR,A Armazene LJMP E100H em FF00H E006H INC DPTR Aponte para o primeiro operando E007H MOV A,#E1H Byte mais significativo de endereço E009H MOVX @DPTR,A Armazene primeiro operando E00AH INC DPTR Aponte para o segundo operando E00BH MOV A,#00H Byte menos significativo de endereço E00DH MOVX @DPTR,A Armazene segundo operando E00FH SETB 96H Posicione cigarra – Acesso 1 – bit 6 E011H CLR 97H Posicione cigarra – Acesso 1 – bit 7 E013H MOV B8H,#01H Posicione registro IP E016H MOV 88H,#01H Posicione registro TCON E019H MOV A8H,#81H Posicione registro IE E01CH LJMP E01CH Espere interrupção E01EH LJMP E000H Rotina de serviço de interrupção E100H CPL 96H Faça soar a cigarra E102H CPL 97H Faça soar a cigarra E104H RETI Retorne da interrupção Figura 6: Como Ativar a Cigarra após Interrupção
  • 106. Microcomputadores Laboratório 7 106 10. Monte o programa dado na Figura 6. 11. Coloque o gerador de sinal em onda quadrada, saída de TTL, e 10Hz. 12. Conecte o gerador de sinal ao INTO. 13. Use o comando GO para executar este programa. Observe que o programa faz soar a cigarra na freqüência do gerador de sinal. Aumente a freqüência do gerador de sinal e observe o som da nova freqüência. Pressione a tecla de comando RESET para deter o programa. Observações 14. Que é interrupção ? 15. Quantas fontes de interrupção tem o 80512 ? 16. Que é uma interrupção externa ?
  • 107. Microcomputadores Laboratório 8 107 Laboratório 8 Temporizadores e Contadores de Eventos Objetivos Após completar estas atividades de aprendizado em laboratório, você deverá ser capaz de: • Entender o funcionamento dos temporizadores/contadores de eventos 8051. • Configurar a entrada do temporizador/contador. • Gerar diferentes tipos de sinais de temporização. Equipamento Necessário • 1 Computador central PU-2000 (Unidade central de processamento - Sistema de Aprendizado Eletrônico Computadorizado) • Placa Mestra • 1 Unidade EB-153 - Placa de Circuito Impresso • 1 Osciloscópio • 1 Gerador de Sinal Como Iniciar o Laboratório 1. Coloque a placa de circuito impresso do EB-153 na unidade central. 2. Ligue a Placa Mestra. Procedimento 3. O 8051 contém dois contadores de 16 bits para medir intervalos de tempo, duração de pulso, contar eventos e gerar solicitações periódicas precisas de interrupção. Cada um pode ser programado independentemente para operar como temporizador de 8 bits com pré-contador com divisão por 32 ou como contador de 8 bits com pré-contador com divisão por 32 (Modo 0), como contador de 16 bits de intervalo de tempo ou de evento (Modo 1), ou ainda como contador de 8 bits de
  • 108. Microcomputadores Laboratório 8 108 intervalo de tempo ou de evento com recarregamento automático após estouro (Modo 2). Se a freqüência do relógio (clock) for suprida por uma fonte externa através das entradas de TO ou TI, o temporizador/contador de evento se chamará contador. Se a entrada para o circuito do contador for do oscilador no chip, chamar-se-á temporizador. O uso do temporizador/contador é determinado por dois registros de 8 bits, TMOD (“Timer Mode” – modo de temporização) e TCON (Timer Control – controle de temporização). A entrada ao circuito do contador provém de uma referência externa (para uso como contador), ou do oscilador no chip (para uso como temporizador), dependendo do fato do bit C/T (contador/temporizador) do TMOD estar posicionado ou limpo, respectivamente. Quando usada como tempo base, a freqüência do oscilador no chip é dividida por doze (12) antes de dar entrada no circuito do contador. Quando o bit da Porta do TMOD estiver posicionado, (1), a entrada de referência externa (T1, T0) ou a entrada do oscilador será dirigida ao contador, sob a condição de ser alta uma Segunda entrada externa (INTO, INT1). Quando o bit da Porta for zero (0), a referência externa ou a entrada do oscilador será incondicionalmente ativada. Em qualquer dos casos, a função de interrupção normal do INTO e INT1 não será afetada pela operação do contador. Os contadores são ativados para incrementação quando os bits do TCON, TR1 e TR0 estiverem posicionados. Quando os contadores excederem bits TF1 e TF0, os bits em TCON se posicionam e geram-se solicitações de interrupção. As funções dos bits em TMOD são indicadas na Figura 1. O programa a seguir (Figura 2) configura T1 (contador número 1) como um contador de recarregamento automático de 8 bits (C/T = 1). T1 é posicionado no Modo 2. O byte mais significativo de T1, TH1, mantém o valor de recarga F6H. O byte menos significativo, TL1, é incrementado por cada pulso do relógio. O valor no TH1 é recarregado no TL1 quando o TL1 estoura todos os uns. Isto ocorre após 10 relógios. A cada 10 pulsos o temporizador estoura e a contagem é exibida no vídeo alfanumérico.
  • 109. Microcomputadores Laboratório 8 109 Figura 1: Registro de Modo. Temporizador/Contador ENDEREÇO INSTRUÇÃO COMENTÁRIOS Programa Inicial E000H MOV DPTR,#FF20H Posicione ponteiro no endereço de salto do T1 E003H MOV A,#02H Código de operação LJMP E005H MOVX @DPTR,A Armazene LJMP E100H em FF20H E006H INC DPTR Aponte para o primeiro operando E007H MOV A,#E1H Byte mais significativo de endereço E009H MOVX @DPTR,A Armazene primeiro operando E00AH INC DPTR Aponte para segundo operando E00BH MOV A,#00H Byte menos significativo de endereço E00DH MOVX @DPTR,A Armazene segundo operando E00EH LCALL FF80H Limpe vídeo E011H MOV B8H,#08H Posicione registro IP – endereço B8H; Prioridade máxima, T1 E014H MOV 89H,#60H Posicione registro TMOD – endereço 89H; Modo 2 – recarregando automático de 8 bits E017H MOV A8H,#88H Posicione registro IE – endereço A8H; Ative interrupção de Temporizador 1. E01AH MOV 8DH,#F6H Posicione registro TH1 – endereço 8DH; Recarregue valor F6H = FFH – 10D + 1. E01DH MOV 88H,#40H Posicione registro TCON – endereço 88H; Inicie Temporizador 1.
  • 110. Microcomputadores Laboratório 8 110 E020H LJMP E020H Espere pela interrupção; Rotina de serviço de interrupção E100H MOV DPTR,#E200H Posicione ponteiro no endereço do contador E103H MOVX A,@DPTR Leia contagem E104H INC A Incremente contagem E105H CJNE A,#0AH,01H Verifique se contagem = 10 E108H CLR A Byte mais significativo de endereço E109H MOVX @DPTR,A Guarde contagem E10AH ADD A,#30H Conversão de ASCII E10CH MOV DPTR,#FFB1H Posicione endereço de dados de caracter E10FH MOVX @DPTR,A Armazene dados de caracter E110H CLR A Defina endereço de caracter = 0 E111H MOV DPTR,#FFB0H Posicione endereço de exibição E114H MOVX @DPTR,A Armazene endereço de exibição E115H LCALL FF86H Exiba caracter E118H RETI Retorne da interrupção Figura 2: Dividindo a Freqüência de Entrada. 4. Monte o programa dado na Figura 2. 5. Posicione o gerador de sinal em onda quadrada, saída TTL e 10Hz. 6. Conecte o gerador de sinal a T1. 7. Use o comando GO para executar este programa. Observe que o programa exibe a contagem de cada 10 pulsos de entrada no vídeo alfanumérico. Aumente a freqüência do gerador de sinal e observe a contagem da nova freqüência. Pressione a tecla de controle RESET par deter o programa. 8. O programa seguinte (Figura 3) configura T1 como um temporizador de 16 bits (Modo 1). O valor da contagem é 10.000 para T1 e 100 para a rotina de interrupção de software. Portanto, a contagem é 1.000.000. A base do tempo é 1 microssegundo, que é a freqüência de cristal dividida por 12.
  • 111. Microcomputadores Laboratório 8 111 A cada segundo o temporizador estoura e a contagem de segundos é exibida no vídeo alfanumérico. O valor da carga é FFFFH – 2710H + 1 = D8E1H, sendo 2710H = 10000D. ENDEREÇO INSTRUÇÃO COMENTÁRIOS Programa principal E000H MOV DPTR,#FF20H Posicione ponteiro no endereço de salto T1 E003H MOV A,#02H Código de operação LJMP E005H MOVX @DPTR,A Armazene LJMP E100H em FF20H E006H INC DPTR Aponte para o primeiro operando E007H MOV A,#E1H Byte mais significativo de endereço E009H MOVX @DPTR,A Armazene primeiro operando E00AH INC DPTR Aponte para o segundo operando E00BH MOV A,#00H Byte menos significativo de endereço E00DH MOVX @DPTR,A Armazene segundo operando E00EH LCALL FF80H Limpe vídeo E011H MOV B8H,#08H Posicione registro IP – endereço B8H; Prioridade máxima de T1. E014H MOV 89H,#10H Posicione registro TMOD – endereço 89H; Modo 1 – temporizador de 16 bits. E017H MOV A8H,#88H Posicione registro IE – endereço A8H; Ative interrupção de Temporizador 1. E01AH MOV 8DH,#D8H Posicione registro TH1 – endereço 8DH; Recarregue valor D8H. E01DH MOV 8BH,#E1H Posicione registro TL1 – endereço 8BH; Recarregue valor E1H. E020H MOV 88H,#40H Posicione registro TCON – endereço 88H; Inicie Temporizador 1. E023H CLR A Limpe contador de software (100). E024H MOV DPTR,#E300H Posicione ponteiro no endereço do contador. E027H MOVX A,@DPTR Posicione valor inicial. E028H LJMP E028H Espere interrupção; Rotina de serviço de interrupção. E100H MOV DPTR,#E300H Posicione ponteiro no endereço do contador de software
  • 112. Microcomputadores Laboratório 8 112 E103H MOVX A,@DPTR Leia contagem E104H INC A Incremente contagem E105H CJNE A,#64H,00H Verifique se contagem = 100 – salte; Atualize vídeo. E108H MOV DPTR,#E200H Posicione ponteiro no endereço do contador. E10BH MOVX A,@DPTR Leia contagem. E10CH INC A Incremente contagem. E10DH CJNE A,#0AH,01H Verifique se contagem = 10. E110H CLR A Byte mais significativo de endereço. E111H MOVX @DPTR,A Guarde contagem. E112H ADD A,#30H Conversão de ASCII E114H MOV DPTR,# FFB1H Posicione endereço de dados de caracter E117H MOVX @DPTR,A Armazene dados de caracter E118H CLR A Defina endereço de caracter = 0 E119H MOV DPTR,#FFB0H Posicione endereço de exibição E11CH MOVX @DPTR,A Armazene endereço de exibição E11DH LCALL FF86H Exiba caracter E120H MOV DPTR,#E300H Posicione ponteiro no endereço do contador. E123H CLR A Limpe contagem. Atualize contador de software. E124H MOVX @DPTR,A Limpe contador de software. E125H MOV 8DH,#D8H Posicione registro TH1 – endereço 8DH; Recarregue valor D8H. E128H MOV 8BH,#E1H Posicione registro TL1 – endereço 8BH; Recarregue valor E1H. E12BH MOV 88H,#40H Posicione registro TCON – endereço 88H; Reinicie Temporizador 1. E12EH RETI Retorne da interrupção. Figura 3 : Como Contar Segundos 9. Monte o programa dado na Figura 3.
  • 113. Microcomputadores Laboratório 8 113 10. Use o comando GO para executar este programa. Observe que o programa exibe uma contagem de segundos. Pressione a tecla de controle RESET para deter o programa. 11. O programa a seguir (Figura 4) configura T1 (Timer número 1) como um temporizador de recarregamento automático de 8 bits (C/T = 0). T1 é posicionado no Modo 2. Quando o temporizador estoura, gera-se um contorno de onda quadrada no bit 7 do Acesso1. 12. Monte o programa dado na Figura 4. 13. Conecte o osciloscópio ao Bit 7 do Acesso 1. ENDEREÇO INSTRUÇÃO COMENTÁRIOS Programa inicial. E000H MOV DPTR,#FF20H Posicione ponteiro no endereço de salto do T1. E003H MOV A,#02H Código de operação LJMP. E005H MOVX @DPTR,A Armazene LJMP E100H em FF20H. E006H INC DPTR Aponte para o primeiro operando. E007H MOV A,#E1H Byte mais significativo de endereço. E009H MOVX @DPTR,A Armazene primeiro operando. E00AH INC DPTR Aponte para o segundo operando. E00BH MOV A,#00H Byte menos significativo de endereço. E00DH MOVX @DPTR,A Armazene segundo operando. E00EH LCALL FF80H Limpe vídeo. E011H MOV B8H,#08H Coloque registro IP – endereço B8H; Prioridade máxima de T1. E014H MOV 89H,#20H Posicione registro TMOD – endereço 89H; Modo 2 – recarregamento automático de 8 bits. E017H MOV A8H,#88H Posicione registro IE – endereço A8H; Ative interrupção do Temporizador 1. E01AH MOV 8DH,#01H Posicione registro TH1 – endereço 8DH; Recarregue valor 01H. E01DH MOV 88H,#40H Posicione registro TCON – endereço 88H; Inicie Temporizador 1. E020H LJMP E020H Aguarde interrupção;
  • 114. Microcomputadores Laboratório 8 114 Rotina de serviço de interrupção. E100H CPL 97H Complemente bit 7 do Acesso 1. E102H RETI Retorne da interrupção. Figura 4: Como Gerar um Contorno de Onda Quadrada. 14. Use o comando GO para executar este programa. Observe o contorno de onda quadrada no osciloscópio. Modifique o programa para obter diferentes freqüências (mude o valor do endereço E01CH). Pressione a tecla de controle RESET para deter o programa. Observações 15. Qual a diferença entre um temporizador e um contador para o 8051? 16. Quantos modos têm os temporizadores/contadores do 8051?
  • 115. Microcomputadores Laboratório 9 115 Laboratório 9 Comunicações Seriais Objetivos Após completar estas atividades de aprendizado em laboratório, você deverá ser capaz de: • Entender o funcionamento de acesso de comunicação do 8051. • Transmitir caracteres de ASCII em formato assíncrono. • Comunicar seu microcomputador EB-153 com um computador pessoal. Equipamento Necessário • 1 Computador central PU-2000 (Unidade central de processamento - Sistema de Aprendizado Eletrônico Computadorizado) • Placa Mestra • 1 Unidade EB-153 - Placa de Circuito Impresso • 1 Osciloscópio • 1 Gerador de Sinal Como Iniciar o Laboratório 1. Coloque a placa de circuito impresso do EB-153 na unidade central. 2. Ligue a Placa Mestra. Procedimento 3. O 8051 tem um acesso serial de E/S que é de utilidade para ligar serialmente dispositivos periféricos por meio de interfaces assíncronas padrões com operações bidirecionais simultâneas. O acesso serial tem também um modo síncrono.
  • 116. Microcomputadores Laboratório 9 116 O acesso serial de E/S bidirecional simultâneo provê modos síncronos para facilitar comunicações com dispositivos padrões UART, como computadores pessoais, impressoras, etc. Ao interfacear-se com dispositivos padrões UART (Controlador de Comunicações Assíncrono) o canal serial pode ser programado para um modo (Modo 1) que transmite/recebe uma configuração de 10 bits, ou programa para outros modos (Modo 2 ou 3) que transmite/recebe uma configuração de 11 bits. A configuração consiste de um bit de partida, oito ou nove bits de dados e um bit de parada. Nos Modos 1 e 3, o circuito de sincronização de taxa de transmissão recebe um pulso do contador 1 cada vez que o contador estoura. A entrada para o contador 1 pode ser uma fonte externa ou uma divisão por 12 de freqüência do oscilador. O modo de recarregamento automático do contador T1 proporciona comunicação de 122 a 31.250 bits por segundo (inclusive bits de partida e de parada) para um cristal de 12 MHz. O controle do acesso serial e a monitorização de se estado são feitos pelo registro de controle de acesso serial (SCON). O conteúdo do registro do SCON de 8 bits está indicado na Figura 1. Os bits de controle de modo SMO e SM1 programa o acesso serial em um dos quatro modos de operação. O Modo 1 coloca a interface do UART na configuração de 10 bits e taxa de transmissão variável. Os dados para transmissão e de recepção estão no registro de Buffer de acesso serial (SBUF).
  • 117. Microcomputadores Laboratório 9 117 Figura 1. SCON – Controle de Acesso Serial/Registro de Estado Uma gravação no SBUF atualiza o registro transmissor, enquanto uma leitura do SBUF lê um buffer que é atualizado pelo registro receptor se/quando o sinalizador R1 for restaurado. O receptor tem buffer duplo para eliminar a perda de informações que ocorreria se a UCP deixasse de responder ao interruptor do receptor antes do início da próxima configuração. O bit de ativação do receptor (REN) restaura a lógica de partida/parada do receptor. Quando o software coloca REN em um (1), o gerador de taxa de transmissão do receptor é inicializado e a recepção ativada. O REN deve ser posicionado como parte do programa de inicialização do canal serial. Quando o REN é apagado, a recepção fica desativada. A UCP é informada quando a porção transmissora do SBUF está vazia ou a porção receptora está preenchida, respectivamente pelo T1 e R1. T1 e R1 devem ser apagados como parte do programa de serviço de interrupção, de modo a não interromperem continuamente a UCP. Uma vez que T1 e R1 são passados juntos para o estado OU a fim de gerar pedido de interrupção do acesso serial, precisam ser sondados para determinar a fonte de interrupção.
  • 118. Microcomputadores Laboratório 9 118 O programa a seguir configura o temporizador número 1 como um gerador de taxa baud de 2.400 bauds e o acesso de comunicação serial. Este programa transmite o valor ASCII da letra “A” (41H) pela linha TxD. ENDEREÇO INSTRUÇÃO COMENTÁRIOS Programa inicial E000H MOV DPTR,#FF20H Posicione ponteiro no acesso serial. Interrompa endereço de salto. E003H MOV A,#02H Código de operações LJMP E005H MOVX @DPTR,A Armazene LJMP E100H em FF20H. E006H INC DPTR Aponte para o primeiro operando E007H MOV A,#E1H Byte mais significativo de endereço. E009H MOVX @DPTR,A Armazene primeiro operando. E00AH INC DPTR Aponte para o segundo operando. E00BH MOV A,#00H Byte menos significativo de endereço. E00DH MOVX @DPTR,A Armazene segundo operando. E00EH MOV B8H,#10H Posicione registro IP – endereço B8H; Prioridade máxima de acesso serial. E011H MOV 89h,#20H Posicione registro TMOD – endereço 89H; Modo 2 – temporizador de 8 bits- recarreg.automát. E014H MOV 8DH,#F3H Posicione registro TH1 – endereço 8DH; Recarregue valor F3H = 13D para taxa de baud = 2.400. E017H MOV 98H,#42 Posicione registro SCON – endereço 98H; Modo 1 – desative receptor – T1 = 1. E01AH MOV 88H,#40H Posicione registro TCON – endereço 88H; Inicie Temporizador 1. E01DH MOV A8H,#90H Posicione registro IE – endereço A8H; Ative interrupção de acesso serial. E020H MOV 99H,#41H Posicione SBUF (99H) em “A”. E023H LJMP E023H Aguarde Interrupção Rotina de serviço de interrupção E100H MOV 99H,#41H Posicione SBUF (99H) em “A”. E103H CLR 99H E105H RETI Retorne da interrupção Figura 2: Como Transmitir um Caracter ASCII
  • 119. Microcomputadores Laboratório 9 119 4. Monte o programa dado na Figura 2. 5. Conecte o osciloscópio a TxD. 6. Use o comando GO para executar este programa. Observe no osciloscópio o formato assíncrono (8bits de dados, 1 pulso de Partida e 1 pulso de Parada). Note que os sinais têm níveis lógicos RS-232 e não níveis TTL. 7. Desenhe na Figura 3 os contornos de onda observadas no osciloscópio. Figura 3: Comunicações Assíncronas. 8. Pressione a tecla de comando RESET para deter o programa. 9. Execute novamente o programa da Figura 2 para diferentes caracteres ASCII. Observações 10. Qual a diferença entre uma comunicação síncrona e assíncrona? 11. Quais são os níveis lógicos dos sinais RS-232? 12. Que é uma taxa de baud?
  • 121. Microcomputadores Apêndice A 121 Apêndice A Rotinas Monitoras Você pode usar várias rotinas monitoras do EB-153 para simplificar sua tarefa de programação. A Figura 1 dá descrições e endereços de chamada para estas rotinas. ENDEREÇO DE CHAMADA MNEMÔNICA DESCRIÇÃO FF40H SWITCH-TO-LED Esta rotina lê as quatro chaves acopladas ao acesso 1 (bits 0 a 3) e transfere os estados lógicos aos LED’s acoplados ao acesso 1 (bits 4 a 7). FF50H P1-COUNTER A rotina P1-COUNTER gera um contador binário no Acesso 1. FF60H CLEAR-RAM Esta rotina limpa 7 Kbytes da RAM externa do usuário escrevendo 00H para todos os bytes. FF80H CLEAR-DISPLAY Esta rotina deixa em branco o vídeo alfanumérico e os 32 bytes do buffer do vídeo (endereços FF90H a FFAFH). FF83H DISPLAY- BUFFER A rotina DISPLAY-BUFFER exibe o conteúdo do buffer do vídeo (endereço FFAFH) no vídeo alfanumérico. FF86H DISPLAY-CHAR Esta rotina exibe um caracter ASCII no vídeo alfanumérico. O endereço do caracter é tirado do endereço FFB0H e deve estar na faixa de 00H a 1FH (32 caracteres). O símbolo do caracter deve ser armazenado no endereço FFB1H e deve ser qualquer valor ASCII. FF89H CLEAR-DISPLAY Esta rotina limpa o buffer do vídeo (endereço FF90H a FFAFH) escrevendo 20H para todas as localizações de buffer. Este valor corresponde a um símbolo.
  • 122. Microcomputadores Apêndice A 122 FF8CH DELAY A rotina DELAY (retardo) produz um retardo nos tempos especificados pelo endereço FFC0H (byte mais significativo). A unidade é ms (0,001 segundo). Figura 1: Rotinas Monitoras
  • 123. Microcomputadores Apêndice B 123 Apêndice B Como Endereçar Memórias A Figura 1 mostra o mapa de memória da EB-153. FAIXA DE ENDEREÇO TIPO DE MEMÓRIA DESCRIÇÃO 0000H-7FFFH ROM Memória de programa monitor. Esta memória contém o código monitor e dados constantes. 80000H-DFFFH ROM ROM de expansão (até 24 Kbytes) para programas de aplicação especial. E000H-FBFFH RAM 7 Kbytes de memória do programa do usuário. FC00H-FFFFH RAM 1 Kbytes reservados para o programa monitor. Figura 1: Mapa de Memória de Código FAIXA DE ENDEREÇO TIPO DE MEMÓRIA DESCRIÇÃO 0000H-0003H PPI 8255 Interface Periférica Programável. Usada para interfacear o teclado ao microcomputador e para proporcionar um acesso de E/S dde 8 bits para fins gerais. 0100H-0101H LCD-DISPLAY Vídeo alfanumérico de 32 caracteres. 0700H-07FH BUS-INTERFACE Esta é a faixa de endereço de interface do barramento paralelo. E000H-FBFFH RAM 7 Kbytes de memória de dados do usuário sobreposto na memória de programa do usuário. FC00H-FFFF RAM 1 Kbytes de dados reservados pelo programa monitor. Figura 2: Mapa de Memória Externa
  • 124. Microcomputadores Apêndice B 124 A Figura 3 mostra os endereços especiais da RAM externa, úteis ao programador. ENDEREÇO DESCRIÇÃO FF00H Endereço de desvio de interrupção de INTO externo. FF10H Endereço de alto de interrupção de Comunicações seriais. FF20H Endereço de alto de interrupção do Temporizador 1. FF40H Endereço de chamada SWITCH-TO-LED (CHAVE-PARA-DEL) FF50H Endereço de chamada CONTADOR DE P1 FF60H Endereço de chamada LIMPAR RAM FF80H Endereço de chamada LIMPAR VÍDEO FF83H Endereço de chamada BUFFER-VÍDEO FF86H Endereço de chamada CARACTER-VÍDEO FF89H Endereço de chamada LIMPAR-BUFFER-VÍDEO FF8CH Endereço de chamada RETARDO FF90H-FFAFH Buffer de 32 bytes usado pelas rotinas monitoras para exibir um texto. FFB0H Contém o endereço de caracter (00H a 1FH) usado pela rotina CARACTER-VÍDEO para exibir um símbolo ASCII no vídeo alfanumérico. FFC0-FFC1H O valor de dois bytes é usado pela rotina RETARDO (DELAY) para multiplicar a base de tempo de 1ms. Figura 3: Mapa de RAM Externa A Figura 4 mostra o significado dos endereços de PPI. ENDEREÇO DESCRIÇÃO 0000H Acesso A 0001H Acesso B 0002H Acesso C 0003H Registro de Modo Figura 4: Endereços de PPI A Figura 5 dá o endereçamento do Módulo LCD da Matriz de Pontos. ENDEREÇO DESCRIÇÃO 1000H RS = 0 – Escreva função de controle 1002H RS = 0 Leia função de controle 1001H RS = 1 – Escreva dados 1003H RS = 1 – Leia dados Figura 5: Mapa de LCD
  • 125. Microcomputadores Apêndice B 125 A Figura 6 mostra o Quadro de Fonte de Caracter LCD. Figura 6: Caracteres de LCD
  • 126. Microcomputadores Apêndice B 126 A Figura 7 mostra o Conjunto de Instruções usado para operar o vídeo de LCD. Figura 7: Instruções de LCD.
  • 127. Microcomputador Apêndice C 127 Microcontrolador Introdução Com o avanço da tecnologia e a utilização da eletrônica digital por grande parte das empresas, o emprego de microcontroladores vêm sendo muito requisitado para um melhor desenvolvimento da produção, diminuindo os custos e trazendo benefícios para as empresas que utilizam esse sistema. É importante salientar que, considerando a relação custo/benefício, os microcontroladores podem não só ser usados em empresas de médio/grande porte, como podem também ser utilizados em vários projetos de eletrônica, na substituição de vários componentes digitais, obtendo-se assim no final do projeto um melhor acabamento – pois um microcontrolador ocuparia um menor espaço físico - e uma maior eficiência e praticidade, uma vez que todos os comandos seriam executados via software. Antes de um aprofundamento no assunto microcontroladores, é importante conhecermos um pouco da história desses componentes desde as suas origens. Na década de 70 começaram a ser utilizados microprocessadores em computadores para uma maior eficiência no processamento de dados. O microprocessador Intel foi um dos precursores e, a partir daí, houve uma preocupação em melhorar cada vez mais o sistema de processamento de dados através desses componentes. Baseado na arquitetura de um microprocessador e seus periféricos, foi criado um componente que (fisicamente em uma unidade) comportasse todo um sistema que equivalesse a um microprocessador e seus periféricos; assim surgiu o microcontrolador. Todas as informações e explicações citadas neste trabalho baseiam-se nos microcontroladores 8051 e 8031 da Intel. Unidade Central de Processamento (CPU) A unidade central de processamento controla todas as funções realizadas pelo sistema.
  • 128. Microcomputador Apêndice C 128 A CPU de qualquer sistema de computador contém os seguintes grupos de unidades funcionais: - Registradores e contadores Os registradores e contadores são unidades funcionais usadas para o armazenamento temporário de bits dentro da CPU. - Unidade Lógica e Aritmética (ULA) A unidade lógica e aritmética é a unidade funcional da CPU que executa operações lógicas e aritméticas entre palavras binárias, gerando uma outra palavra na saída . - Unidade de controle e sincronização A unidade de controle e sincronização coordena e controla todas as unidades funcionais em uma seqüência lógica e sincronizada. Processamento O processador ou unidade central de processamento (CPU) é a parte do sistema que faz o processamento das informações para que as instruções sejam executadas; as instruções devem estar armazenadas na memória de programa em seqüência, formando assim o programa . A CPU possui um registrador chamado de contador de programa (PC) que contém o endereço da próxima instrução que deve ser executada. Toda vez que uma instrução é retirada da memória pela unidade central de processamento, automaticamente o contador de programa é incrementado para que, após o processamento desta instrução, quando a CPU for buscar a próxima instrução, baste usar o endereço contido no contador de programa. Toda vez que a CPU é ligada ou resetada, automaticamente o seu contador de programa é zerado, desta forma, a primeira tarefa que a CPU irá realizar é a execução da instrução contida na posição de memória de endereço “0000”. Cada instrução possui duas fases distintas: o ciclo de busca e o ciclo de execução. Durante o ciclo de uma instrução a CPU faz com que o conteúdo do contador de programa seja colocado no barramento de endereços, endereçando, desta maneira, a posição de memória que contém a instrução que deve ser executada. Unidades de Entrada/Saída (I/O)
  • 129. Microcomputador Apêndice C 129 As unidades de entrada/saída são os meios pelos quais o usuário se comunica com o sistema. Essas unidades possuem interfaces que permitem a conexão com dispositivos chamados de periféricos, tais como teclado, monitores, LCD´s, etc. Arquitetura A performance do microcontrolador depende da sua arquitetura interna, ou seja, do modo em que o microcontrolador foi projetado tanto para o hardware como para software. No hardware apresentaremos a arquitetura Von-Neumann, na qual se refere o software CISC. - Arquitetura Von-Neumann Na arquitetura Von-Neumann, os barramentos de dados e endereços são compartilhados entre memórias de programas e memórias de dados na comunicação com a CPU (figura1). Nesse tipo de arquitetura, quando a CPU está acessando a memória de programa não pode acessar a memória de dados, porque usa os mesmos barramentos para as duas memórias. CISC (Complex Instruction Set Computer) CISC: Computador com Set de Instrução mais Complexo, quanto maior a complexidade da instrução que deve ser executada, mais espaço ela ocupa no chip. Desse modo, chegará um momento que passaremos a ter um set de instruções tão grande que começará a afetar o desempenho, dificultando a possibilidade de implementar outras funções importantes. Ter um complexo (grande) set de instruções “CISC” nem sempre é interessante para um bom desempenho do processador. Figura 1
  • 130. Microcomputador Apêndice C 130 Numa análise feita pelo laboratório da IBM sobre como estavam sendo usado os diversos tipos de instruções, concluiram que num microprocessador que usava um set de instruções de, por exemplo, 200 instruções, a maior parte do processamento era feita apenas com umas 10 instruções. Uma grande parte das instruções era pouco usada, às vezes até uma única vez em um longo programa, de modo que elas poderiam ser implementadas pelas instruções básicas mais usadas. Daí o aparecimento da nova arquitetura com o set de instruções reduzido “RISC”. Memórias Memórias são os dispositivos que armazenam informações e são usadas em todos os sistemas microcontrolados. Existem vários tipos de memórias que podem ser classificadas por vários itens diferentes. Vamos analisar os principais: - Acesso As memórias armazenam informações em lugares que se denominam “localidades de memória”. Cada localidade de memória guarda um conjunto de bits e tem um endereço. No acesso desses endereços podemos analisar : O tempo de acesso: é o tempo que a memória necessita para que sejam escritos ou lidos os dados em suas localidades; Acesso seqüencial: nas memórias que têm acesso seqüencial, para acessar um endereço de uma certa localidade, precisa-se passar por endereços intermediários (as memórias mais comuns desse tipo são as que utilizam fita magnética); Acesso aleatório: as memórias que utilizam esse tipo de acesso são as que permitem que seja acessado qualquer dado em qualquer endereço sem a necessidade de ter que passar por outros endereços intermediários. - Volatilidade Memórias voláteis: são aquelas que perdem as informações quando é cortada sua alimentação. São memórias que geralmente usam como elemento de memória o flip-flop. Memórias não voláteis: são memórias que mesmo desligando-se sua alimentação, não perdem as informações armazenadas. Dentre essas se destacam as magnéticas e as eletrônicas ROM, PROM, EPROM, EEPROM , e outras.
  • 131. Microcomputador Apêndice C 131 - Memórias de escrita/leitura ou somente leitura Escrita/leitura: são memórias que podem ser acessadas pela CPU tanto para leitura quanto para escrita; elas são usadas para armazenar dados que serão utilizados durante a execução do programa (memórias RAM´s, EEPROM´s). Somente leitura: são as memórias que armazenam o programa, ou seja são as memórias que só serão lidas pela CPU e que já vêm gravadas para o sistema (memórias ROM´s ,PROM´s , etc). - Tipo de armazenamento Estáticas: memórias estáticas são aquelas nas quais as informações permanecem armazenadas enquanto não houver escrita ou não faltar energia. Dinâmicas: memórias dinâmicas são memórias que perdem informações armazenadas mesmo com alimentação. Na RAM dinâmica (ou DRAM) isso acontece porque cada célula tem um transistor MOSFET e um capacitor que armazena um dado (1bit). - Tipos de memórias Veremos a seguir alguns tipos de memórias existentes no mercado e que são muito utilizadas: Memórias RAM (Random Acces Memory) Essas memórias são de acesso aleatório, que podem ser acessadas a qualquer momento e em qualquer endereço. Elas podem ser estáticas ou dinâmicas e também podem ser gravadas pelo sistema com a tensão de 5V. São memórias consideradas voláteis. Memórias ROM (Ready Only Memory) Essas memórias são utilizadas no sistema somente para a leitura. Memórias PROM (Programmable Ready Only Memory) Essas memórias são utilizadas no sistema somente para a leitura; geralmente usadas como memórias de programa, só podem ser gravadas com gravadores gravadores específicos e só uma vez. São as memórias não voláteis; Memórias EPROM (Erasable Programmable Ready Only Memory) Essas memórias são utilizadas no sistema somente para a leitura , também empregadas como memórias de programa e só podem ser gravadas com gravadores específicos. Podem ser apagadas por raios ultravioleta e regravadas por muitas vezes. São chamadas memórias não voláteis. Memórias EEPROM ou E²PROM (Electrically Erasable Programmable Ready Only Memory) Essas memórias podem ser usadas no sistema tanto para leitura como para escrita, podem ser gravadas com gravadores específicos ou pelo sistema; são apagadas eletricamente e regravadas por muitas vezes; são consideradas memórias não voláteis.
  • 132. Microcomputador Apêndice C 132 Memórias PEROM (Programmable Erasable Ready Only Memory) Uma linha de memórias programáveis e apagáveis apenas para leitura, de 3V e 5V, apenas dentro do sistema. Fabricadas com a avançada tecnologia CMOS, não voláteis, suas características incluem: · Operação de leitura e programação em apenas 3V e 5V · Proteção de dados de software e hardware · Operação de programação por setor · 1000 ciclos de programa · Retenção de dados de 10 anos · Baixa dissipação de potência · Tempo de ciclo de programa rápido · Detecção de fim de programa Memórias FLASH A memória FLASH é um dispositivo de armazenamento confiável, não volátil, de boa relação custo/ benefício e que possui características de leitura da EPROM, EEPROM e SRAM , porém quando aplica-se 12V sobre o dispositivo, este pode ser gravado com base em bytes. No caso da memória FLASH - 5V estes dispositivos foram projetados para serem programados dentro do sistema com o fornecimento padrão de 5V. Em programadores de EPROM convencionais não há necessidade de 12Vpp, nem para programação, nem para apagamento. É composta de uma arquitetura de apagamento de setor (qualquer combinaço pode ser pagada simultaneamente) e 100.000 ciclos de apagamento / programação. Memória FLASHFILE A memória FLASHFILE, simetricamente bloqueada, da Intel, oferece uma solução não volátil com leitura e programação de mais alta densidade para armazenamento em massa. O armazenamento de aplicações de software e a operação com código de sistema em RFAs (Residential Flash Arrays ) proporcionam execução instantânea, rápida e no local (in place). RFAs são protegidos também contra o envelhecimento do software, já que este pode ser atualizado no sistema. O software RFA prolonga a vida da bateria e aumenta a confiabilidade do sistema através da redução do número de acessos ao diskdrive. 100.000 ciclos de apagamento / programação. Memórias FIELD
  • 133. Microcomputador Apêndice C 133 Estes dispositivos são para utilização em filmes digitais e sistemas multimídia. Eles fornecem dados através de acesso serial de alta velocidade. Sua capacidade de memória preenche um arquivo de uma tela de TV NTSC. Cada um dos bits possui porta de leitura e gravação assíncronas, de controle independente a diferentes velocidades de clock, proporcionando uma operação FIFO , renovando a células de armazenamento RAM automaticamente. Memórias FIFO Os dispositivos FIFO proporcionam armazenamento temporário de dados em sequência de tal forma que a primeira palavra na porta de entrada será a primeira na porta de saída. As portas operam de forma independente e os dados podem ser lidos e gravados em velocidades diferentes. Os dispositivos FIFO possuem posições de memória que inibem a entrada de dados adicionais caso estejam ocupadas, podendo apenas enviar dados armazenados para fora. O tempo utilizado para completar uma operação chama-se tempo de acesso, esse valor pode determinar a velocidade do sistema no qual o dispositivo está operando. Memórias Seriais Estes dispositivos são de tamanho reduzido podendo ser ligados a um barramento serial I²C (Inter-Integrated Circuit Bus) ou SPI (Serial Peripheral Interface) junto com outros dispositivos seriais, com muitas vantagens em relação às memórias paralelas. Microcontroladores Existem no mercado muitos tipos de microcontroladores, sendo o 8051 o mais popular. O microcontrolador também é conhecido com microcomputador de um só chip reunindo num único componente vários elementos de um sistema, antes baseado em microprocessador e que eram desempenhados por vários componentes independentes tais como RAM, ROM, comunicação serial, etc. A memória de programa pode ser ROM, FLASH ou outro tipo. No caso do microcontrolador 8051 ele pode funcionar como um microcontrolador ou como um microprocessador. Na figura 2 mostrado o diagrama de blocos do 8051. A ATMEL possui uma enorme família de componentes com as mesmas características do 805, alguns até com as mesmas pinagens dos registradores; outros com pinagens diferentes, mas com o mesmo set de instruções, com clock de 12 MHz até aproximadamente 35 MHz.Falaremos um pouco mais dessa família mais adiante. A DALLAS Semiconductor tem um microcontrolador de alta performance, de até 90MHz, compatível com 8051.
  • 134. Microcomputador Apêndice C 134 Figura 2 - Arquitetura Interna em Bloco do 8051BH. Descrição da pinagem do 8051 Do pino 1ao pino 8 temos: O port P1, que vai de P1.0 a P1.7. Estes pinos são bidirecionais, podendo ser endereçáveis individualmente ou como porta de 8 bits; possuem resistores de pull-up internos, forçando assim nível lógico alto. Cada pino pode acionar até 4 portas TTL-LS. Pino 9 RST/VPD. Estes pinos resetam o sistema com a aplicação de um nível lógico alto por, pelo menos, dois ciclos de máquina, tendo um resistor de pull-down interno permitindo que se use apenas um capacitor externo para obter o reset por power-on. Do pino 10 ao pino 17 temos:
  • 135. Microcomputador Apêndice C 135 O port P3, que vai de P3.0 a P3.7 tem as mesmas características de funcionamento do port P1, tendo também outras funções especiais que estão descritas abaixo. Figura 3 – Descrição da Pinagem Do 8051. pino 10 = P3.0 RXD/ Data : entrada de dados serial. pino 11 = P3.1 TXD/Clock: saída de dados serial. pino 12 = P3.2 INT0: interrupção externa de número 0, ativo em nível lógico baixo. pino 13 = P3.3 INT1: interrupção externa de número 1, ativo em nível lógico baixo. pino 14 = P3.4 T/C0 : entrada externa para o temporizador/contador de eventos. pino 15 = P3.5 T/C1: entrada externa para o temporizador/ contador de eventos. pino 16 = P3.6 WR: strobe (sinalizador) de escrita de dados externo pino 17 = P3.7 RD : strobe (sinalizador) de leitura de dados externo Obs: estas funções serão mais detalhadas na continuação da apostila Os pinos 18 e 19 são: XTAL 1 (18) XTAL 2 (19) Pino 20: VSS conectado ao terra do circuito Do pino 21 ao pino 28 temos:
  • 136. Microcomputador Apêndice C 136 O port P2, que vai de P2.0 a P2.7. Tem as mesmas características de funcionamento do port P1, sendo estes pinos usados como pinos de endereçamento externo endereçando a parte mais significativa dos 16 bits (A8 a A15). Pino 29: PSEN (Program Store Enable), saída para habilitação do programa externo, sinalizador de leitura da memória de programa externa; quando o microcontrolador busca instruções este pino vai ao nível zero. Pino 30: ALE (Address Latch Enable), saída habilitadora do latch de endereços, separando o barramento de dados da parte menos significativa do barramento de endereços que são multiplexados pelo port P0. Pino 31: EA (External Enable) , entrada de seleção de memórias. Quando colocado em nível lógico baixo, a CPU executa somente as instruções da memória de programa externa; quando em nível lógico alto, a CPU executa as instruções da memória de programa interna (se existir). Pino 32 ao pino 39 temos: Port P0: que vai de P0.0 a P0.7. Este é um port de 8 bits bidirecional com dreno aberto. Sem resistores de pull-up internos, funciona como um barramento de dados, e a parte menos significativa do barramento de endereços. Pino 40, temos VCC (Alimentação positiva) Basicamente, os pinos do microcontrolador são construídos como mostra a figura 4 abaixo com algumas diferenças uns dos outros, mas para explicação de um modo geral pode ser considerado um flip-flop tipo D com dois buffers tri- state, um transistor e um resistor. Figura 4
  • 137. Microcomputador Apêndice C 137 Quando o microcontrolador vai escrever no pino, o dado é enviado para a via de dados interna e também é dado um clock no flip-flop, que terá o mesmo sinal na saída “Q” (e o complemento destesinal na saída Q/), que por sua vez está ligada ao gate de um transistor, o qual entra em saturação quando for aplicado nível “1”. Se o sinal que estiver na via de dados for “1” e o flip-flop receber um clock, a saída Q terá um sinal de nível alto, e Q/ terá um sinal de nível baixo que entrará no gate do transistor deixando-o em corte e, então, o sinal no pino será o do resistor, ou seja , nível “1”. Agora, se o sinal que estiver na via de dados interna for nível baixo e novamente o flip-flop receber um clock, na saída Q teremos um sinal de nível baixo, e na saída Q/ um sinal de nível alto que levará o transistor à saturação e com isso o pino terá um nível baixo. Quando se quer ler um pino, o microcontrolador deve enviar enviar um sinal para o buffer “lê pino”, que pega o sinal que estiver nele e envia para via de dados interna; quando se quer ler o flip-flop, o sinal é enviado para o buffer “lê latch” que libera o sinal da saída Q para a via de dados interna. No microcontrolador existem algumas instruções responsáveis pela leitura do flip-flop, e outras do pino. Para que se possa ler um sinal externo no pino, deve se primeiro escrever nele um nível alto evitando assim que o transistor conduza e mande um sinal baixo no pino, pois se for entrar um sinal de nível alto no pino, o transistor não poderá estar saturado, senão entrará em conflito prejudicando a leitura. Isso acontece em todos os PORT’s do microcontrolador. Quando estão sendo usado os pinos de I/O como PORT’s (empregando somente as memórias internas, é necessário o uso de resistores de pull-up no port P0 . CLOCK E CICLO DE MÁQUINA O microcontrolador é um circuito dinâmico, e para o seu funcionamento necessita de um sinal de clock (relógio) para sincronização de suas operações. Este sinal de clock é gerado por um oscilador que fornece um seqüência ininterrupta de pulsos com períodos constantes. O chamado ciclo de máquina é uma quantidade de pulsos de clock que o processador requer para fazer suas funções; e o ciclo de instrução é a quantidade de ciclos de máquina que são necessários para a execução de uma instrução. Um exemplo genérico de uma instrução: suponhamos que um processador qualquer leve para a execução de uma instrução 5 (cinco) ciclos de máquina,e que cada ciclo de máquina desse processador seja igual a 2 (dois) clocks. Para executar essa instrução o processador levará 10 (dez) clocks; supondo também que desses 5 (cinco) ciclos de máquina, 2(dois) seriam para a busca da instrução na memória de programa e os outros 3 (três) para a execução dessa instrução como mostra a figura 5.