Buscar

Introdução aos Microcontroladores MCS51

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 58 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 58 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 58 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
 
Microcontroladores 
Família MCS51 
 
 
 
 
 
Colégio Técnico de Campinas – COTUCA 
Disciplina – TDM II- Departamento Eletroeletrônica 
 
 
 
 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
1- Conceitos Básicos 
 
Um sistema computador é constituído por três blocos de base ligados através de 
três barramentos como se pode ver na figura 1. 
 
 
 
Figura 1 – Diagrama de blocos de um computador. 
 
Os três blocos de base são: a unidade central de processamento (CPU), as 
memórias de programa e de dados e o sistema de comunicação com o exterior 
(sistema E/S). A ligação entre os blocos de base é feita através de três 
barramentos: barramento de dados, barramento de endereços e barramento de 
controle. A unidade central de processamento divide-se funcionalmente em duas 
unidades: a unidade de processamento de dados (CPU) e a unidade de controle e é 
responsável pela execução do programa. A unidade de controle decodifica e 
controla a execução das instruções gerando os comandos que permitem o 
processamento da informação de acordo com o programa que está sendo executado. O 
registrador program counter (PC) e o registrador de status fazem também parte da 
unidade de controle. A unidade de processamento de dados faz o processamento da 
informação e é constituída por uma unidade aritmética e lógica e por um conjunto 
variável de registradores com funções genéricas. A estrutura descrita designa-se 
estrutura de Von Neumann. 
 
1.1 – Conceitos de microprocessador 
 
Designa-se por microprocessador um circuito integrado que implemente as funções 
de uma unidade central de processamento. O primeiro microprocessador, designado 
4004, surgiu em 1971 tendo sido produzido pela empresa Intel. Antes dessa data 
as unidades centrais de processamento eram implementadas recorrendo a diversos 
componentes. 
 
1.2 – Conceitos de microcontrolador 
 
Designa-se por microcontrolador um circuito integrado que implementa um sistema 
computador. Um microcontrolador é constituído por um microprocessador e um ou 
mais dos seguintes dispositivos: memória, temporizador/contador, conversor A/D, 
conversor D/A, controlador DMA, porta paralela, porta série, circuitos para 
interface com memória externa, nomeando apenas os blocos mais comuns. A 
principal aplicação dos microcontroladores são os sistemas embarcados, em que o 
microcontrolador é programado para cumprir determinada função sendo colocado 
junto do sistema com que vai interagir. Estes componentes são utilizados para 
estas funções porque são pequenos, versáteis e (quase) auto-suficientes. 
 
Como exemplos típicos de microcontroladores de 8 bits podem referir-se os 
microcontroladores das famílias seguintes: família MCS-51 da Intel, família 
M68HC11 da Motorola e família PIC da Microchip. 
 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
2 - Família MCS-51 
 
A arquitetura básica da família MCS-51 é constituída por uma unidade central de 
processamento de 8 bits otimizada para aplicações de controle, 64 Kbytes de 
espaço de endereçamento para a memória de programa, 64 Kbytes de espaço de 
endereçamento para a memória de dados, 4 Kbytes de memória de programa interna, 
128 bytes de memória de dados interna, 32 linhas entrada/saída bidirecionais 
endereçáveis individualmente. Dois temporizadores/contadores de 16 bits, uma 
UART (universal asynchronous receiver transmiter) full duplex, uma estrutura de 
interrupções com 5 fontes de interrupção correspondentes a 5 vetores de 
interrupção com dois níveis de prioridades cada e um circuito oscilador para 
gerar o sinal de relógio. O diagrama de blocos da arquitetura de base da família 
MCS-51 pode ser visto na figura 2. 
 
 
 
Figura 2- Arquitetura do microcontrolador 80C51. 
 
As diferenças deste microcontrolador para outros membros da família MCS-51 
relacionam-se fundamentalmente com a quantidade de memória interna (memória de 
programa e memória de dados) e com as capacidades de E/S de cada um. Na tabela 1 
apresentam-se algumas das características de alguns dos microcontroladores da 
família MCS-51. 
 
 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
 
 
Tabela 1- Tabela comparativa das características de alguns microcontroladores da 
família MCS- 51. 
 
3 - Organização da memória 
 
A memória de dados e a memória de programa têm espaços de endereçamento 
diferentes cada um com 64 Kbytes, organizados segundo os mapas de memória da 
figura 3. 
 
 
 
Figura 3- Mapas de memória do microcontrolador 80C51. 
 
3.1 - Memória de programa 
 
A memória de programa é uma memória do tipo ROM, por isso sobre ela só se 
efetuam operações de leitura. Este memória pode ser interna e/ou externa e ocupa 
no máximo 64 Kbytes. O acesso à memória de programa externa faz-se recorrendo ao 
sinal /PSEN (Program Strobe Enable) que deverá ser ligado ao pino de output 
enable da memória. O sinal aplicado ao pino /EA do microcontrolador determina 
qual o tipo de acesso a ser feito para os 4 Kbytes inferiores da memória de 
 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
programa. Se /EA = 0, para endereços a partir de 0000H o acesso é feito à 
memória de programa externa, se /EA = 1, o acesso é feito è memória de programa 
interna para endereços de 0000H até 0FFFH, sendo feito o acesso à memória de 
programa externa para endereços mais elevados. 
 
3.2 - Memória de dados 
 
A memória de dados é do tipo RAM podendo ser lida ou escrita pelo 
microcontrolador. Esta memória pode ser interna e/ou externa. O espaço de 
endereçamento associado à memória de dados é de 64 Kbytes. 
 
3.2.1 – Memória de programa externa 
 
O acesso à memória de programa externa faz-se recorrendo aos sinais /RD (Read) e 
/WR (Write) fornecidos pelo microcontrolador para controle da operação da 
memória. O endereçamento pode fazer-se recorrendo a um mínimo de um e máximo de 
dois bytes. Para acesso à memória de programa externa utiliza-se a porta P0 como 
barramento multiplexado de endereços/dados (byte menos significativo). A porta 
P2, caso seja necessária a sua utilização, funciona como barramento de endereços 
(byte mais significativo). 
 
3.2.2 - Memória de dados interna 
 
A memória de dados interna encontra-se dividida em 3 blocos distintos, de acordo 
com o mapa da figura 4. O acesso à memória de dados interna faz-se utilizando 
endereços de 8 bits. 
 
 
 
Figura 4- Memória de dados interna. 
 
A área de memória superior contém os registrradores com funções especiais, SFRs 
(Special Function Registers). O acesso a esta área de memória faz-se utilizando 
endereçamento direto. A função de cada um destes registradores será analisada em 
detalhe no item 5. A área de memória superior representada na figura 4 a 
tracejado não está implementada no microcontrolador 80C51 existindo apenas nos 
dispositivos com 256 bytes de RAM interna. O acesso a esta área de memória é 
feito utilizando endereçamento indireto sendo uma região de uso genérico. 
A parte inferior da memória de dados interna encontra-se dividida em três 
regiões distintas como se pode ver no mapa da figura 5. O acesso pode ser feito 
utilizando endereçamento direto ou indireto. 
 
 
 
Figura 5- Espaço inferior da memória de dados interna. 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
Os 32 bytes inferiores destinam-se aos quatro bancos de oito registradores 
designados R0 a R7. A seleção do banco de registrradores é feita recorrendo aos 
bits RS1 (Register Select) e RS0 do registradorPSW (Program Status Word). 
Segue-se uma área de 16 bytes (128 bits) endereçáveis bit a bit sendo a restante 
área de uso genérico. 
 
3.3 - Esquemas de montagem para acesso à memória externa 
 
As ligações à memória externa fazem-se utilizando os sinais de controle 
disponibilizados pelo microcontrolador. 
 
3.3.1 - Memória de programa externa 
 
No exemplo apresentado na figura 6 considera-se que toda a memória de programa é 
externa e por isso o pino /EA do microcontrolador é ligada a terra. O 
endereçamento é feito utilizando 16 bits o que implica a utilização para 
endereçamento da porta P2 (além da porta P0). O sinal ALE (Address Latch Enable) 
utiliza-se para fazer a desmultiplexagem do barramento P0 permitindo que o byte 
menos significativo do endereço fique disponível através da latch durante a fase 
de acesso à memória. O sinal /PSEN controla a operação da memória sendo a 
leitura dos dados feita através de P0. 
 
 
 
Figura 6- Acesso à memória de programa externa. 
 
3.3.2 - Memória de dados externa 
 
A figura 7 apresenta um esquema de montagem para acesso à memória de dados 
externa. Neste exemplo considerou-se que toda a memória de programa é interna 
(/EA = VCC). Utiliza-se o esquema de demultiplexagem referido anteriormente. Os 
sinais /RD e /WR são utilizados para fazer o controle da memória. Caso não seja 
necessário acessar a todo o espaço de endereçamento pode recorrer-se só à 
utilização de alguns dos bits da porta P2 (além da porta P0) para fazer o 
endereçamento da memória. A troca de dados faz-se através da porta P0. 
 
 
 
 
Figura 7- Acesso à memória de dados externa. 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
4 - Registradores com funções especiais (SFRs) 
 
Os registradores com funções especiais encontram-se mapeados na parte superior 
da memória de dados interna e são acessados utilizando endereçamento direto. A 
tabela 2 apresenta o símbolo, o nome, o endereço e o tipo de endereçamento para 
cada SFR do microcontrolador 80C51. 
 
Símbolo Nome End. [Hexadecimal] Endereçamento 
ACC Acumulador E0 Bit 
B Registrador B F0 Bit 
PSW Program Status Word D0 Bit 
SP Stack Pointer 81 Registrador 
DPTR Data Pointer [2 bytes] 
DPL Byte menos significativo 82 Registrador 
DPH Byte mais significativo 83 Registrador 
P0 Porta 0 80 Bit 
P1 Porta 1 90 Bit 
P2 Porta 2 A0 Bit 
P3 Porta 3 B0 Bit 
IP Interrupty Priority Control B8 Bit 
IE Interrupty Enable Control A8 Bit 
TMOD Timer/Counter mode Control 89 Registrador 
TCON Timer/Counter Control 88 Bit 
TH0 Timer/Counter 0 high byte 8C Registrador 
TL0 Timer/Counter 0 low byte 8A Registrador 
TH1 Timer/Counter 1 high byte 8B Registrador 
TL1 Timer/Counter 1 low byte 8D Registrador 
SCON Serial control 98 Bit 
SBUF Serial Data Buffer 99 Registrador 
PCON Power Control 87 Registrador 
 
Tabela 2 – Registradores com funções especiais. 
 
4.1 - Registrador acumulador 
 
O registrador acumulador serve de interface com a unidade aritmética e lógica da 
CPU. Nos programas deve ser referido por [A]. Este registrador pode ser 
endereçado bit a bit. 
 
4.2 - Registrador B 
 
Este registrador é utilizado durante as operações de divisão e multiplicação em 
conjunto com o registrador acumulador. Para outras operações pode ser tratado 
como um registrador comum. É endereçável bit a bit. 
 
4.3 - Registrador Program Status Word 
 
O registrador PSW corresponde ao registrador de status da arquitetura de Von 
Newman e contém informação sobre a execução dos programas. O registrador é 
apresentado em detalhe na figura 8. 
 
 
Figura 8- Registrador PSW. 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
 
O bit mais significativo do registrador (PSW.7) designa-se CY (carry flag) e 
reflete a condição de carry no oitavo bit do acumulador. O bit seguinte (PSW.6), 
designado AC (Auxiliary Carry flag), reflete a condição de carry no quarto bit 
do registrador acumulador. O bit PSW.5 designa-se F0 e utiliza-se como flag de 
uso genérico. Os bits PSW.4 e PSW.3 são os bits de seleção do banco de 
registradores, designados RS1 e RS0 respectivamente. A seleção é feita de acordo 
com a tabela 3. 
 
 
 
Tabela 3- Seleção do banco de registradores. 
 
O bit PSW.2 designa-se OV e reflete a condição de overflow. O bit PSW.1 não tem 
nome atribuído e representa uma flag a ser definida pelo utilizador. Finalmente 
o bit PSW.0, designado P, reflete a paridade do registrador acumulador. O bit P 
é colocado no nível lógico 1 se o número de 1s no acumulador for impar e nos 
outros casos o bit P é colocado no nível lógico 0. 
 
4.4 - Registrador Stack Pointer 
 
Contém o endereço do topo da stack. A stack é uma estrutura de dados do tipo 
LIFO (last-in-first-out) utilizada para guardar informação de modo temporário. 
 
4.5 - Registrador Data Pointer 
 
Conjunto de dois registradores de 8 bits, DPL e DPH, que contêm um endereço de 
16 bits. Este registrador tem três aplicações principais: 
 
• fazer procura em tabelas no espaço de memória de programa utilizando a 
instrução MOVC A, @A+DPTR. 
• Implementar saltos multi-direcionais utilizando a instrução JMP @A+DPTR. 
• acesso à memória de dados externa, utilizando a instrução MOVX A,@DPTR ou a 
nstrução MOVX @DPTR,A. i
 
4.6 - Registradores associados às Portas 
 
P0 a P3 são os registradores associados aos latches das portas de E/S P0, P1, P2 
e P3, respectivamente. 
 
4.7 - Registradores para controle de interrupçõ s e
 
IP e IE são os registradores que permitem fazer a seleção de prioridades e a 
ativação das interrupções, respectivamente. 
 
4.8 - Registradores dos temporizadores/contadores 
 
TH0, TL0 e TH1, TL1 são os registradores que contém as contagens dos 
temporizadores/contadores 0 e 1 respectivamente. TMOD e TCON são os 
registradores de controle e status dos temporizadores/contadores. O primeiro 
permite fazer a programação do modo de operação e no segundo encontram-se bits 
relacionados com o controle do funcionamento dos temporizadores/contadores. 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
4.9 - Registradores da porta série 
 
SBUF representa dois registradores distintos um de recepção e outro de 
transmissão. A utilização de um ou de outro é selecionada automaticamente pelo 
hardware da porta série dependendo do contexto em que SBUF está a ser referido 
na instrução do programa (leitura ou escrita). SCON é o registrador de controle 
e status da porta série. 
 
4.10 - Registrador Power Control 
 
O registrador power control permite efetuar a programação do modo de operação do 
microcontrolador. 
 
4.11 - Registrador Program Counter 
 
O registrador program counter (PC) embora não seja referido na tabela, pois não 
pode ser diretamente acessado pelo programador, é um registrador de 16 bits que 
contém o endereço da próxima instrução a executar. Depois de efetuado o reset do 
microcontrolador o conteúdo deste registrador é zero. 
 
5 - Modos de endereçamento 
 
A codificação das instruções da família MCS-51 é feita utilizando um byte para o 
código de operação (opcode) e 0 a 2 bytes para informação sobre os operandos. Os 
modos de endereçamento utilizam-se para especificar os operandos necessários 
para cada instrução. A família MCS-51 dispõe de 10 modos de endereçamento 
divididos por três classes: modos de endereçamento de dados, modos de 
endereçamento relativos a saltos e modos de endereçamento relativos a bits. 
 
5.1 - Modos de endereçamento de dados 
 
Existem cinco modos de endereçamento de dados: registrador inerente, direto, 
mediato, indireto e indexado. i
 
5.1.1 - Registrador inerente 
 
O modo de endereçamento registrador inerente utiliza-se para os registradores em 
que não é necessário especificar nenhum byte adicional para designar o operando. 
O registrador a operar é codificadono código de operação da instrução. 
Os registradores para os quais este método de codificação é feito são os 
seguintes: R0 a R7, A, PSW, SP e PC. Este modo de endereçamento caracteriza-se 
pelo tipo de codificação explícita que fornece para todas as instruções que 
utilizem os registradores referidos. Este modo de endereçamento pode coexistir 
na mesma instrução com os outros modos de endereçamento de dados referidos nos 
pontos seguintes. 
 
Exemplos: 
MOV R1,#25 ; coloca o valor 25 no registrador R1 
INC R0 ; adiciona 1 ao conteúdo do registrador R0 
 
5.1.2 - Direto 
 
Este modo de endereçamento utiliza-se para acessar a memória de dados interna. A 
codificação da instrução é feita com um byte para o código de operação da 
instrução e um byte adicional para especificar o endereço a acessar. Como a 
especificação do endereço se faz num único byte a gama de endereços possível é 
de 0 a 255. A gama de endereçamento referida permite acessar a toda a área de 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
memória de dados interna podendo especificar-se o acesso a um registrador ou a 
uma variável. 
 
Exemplos de operação sobre variáveis em RAM interna: 
 
MOV 23H,A ; copia o conteúdo do acumulador para a posição de 
; memória cujo endereço é 23H. 
ADD A,40H ; soma o conteúdo da posição de memória 40H ao 
; acumulador. 
 
Exemplos de operação sobre SFRs: 
 
MOV B0H,A ; coloca o conteúdo do acumulador à saída da porta P3. 
 
Este estilo de programação, embora correto, não é muito claro e facilita a 
ocorrência de erros. Sempre que sejam referidos SFRs deve optar-se pela 
utilização do seu nome simbólico, o que torna o código mais perceptível evitando 
a ocorrência de erros. O assembler do MCS-51 permite a utilização de nomes 
simbólicos para os SFRs. 
 
MOV P3,A ; coloca o conteúdo do acumulador à saída da porta P3 
; recorrendo ao nome simbólico do registrador associado 
; a porta 3. 
 
O assembler procede à tradução do nome simbólico para o endereço correspondente. 
 
5.1.3 - Imediato 
 
O modo de endereçamento imediato permite especificar um valor numérico 
constante. As constantes a especificar podem ter 8 bits ou 16 bits. Os valores 
de 16 bits só podem ser usados em conjunto com o registrador DPTR. Em assembly 
os valores numéricos imediatos são precedidos do caractere ‘#’. 
 
Exemplos: 
 
MOV A,#22 ; carrega o acumulador com o valor 22. 
ADD A,#30 ; soma 30 ao acumulador 
MOV DPTR,#20F0H ; carrega o valor hexadecimal 20F0 
; no registrador DPTR. 
 
5.1.4 - Indireto 
 
No modo de endereçamento indireto a instrução especifica um registrador que 
contém o endereço do operando. Tanto a memória de dados interna como a externa 
podem ser endereçadas deste modo. Este modo de endereçamento é útil no acesso a 
arrays. Só os registradores R0, R1 e DPTR podem ser utilizados como ponteiros de 
dados. R0 e R1 são ponteiros de 8 bits e DPTR é um ponteiro de 16 bits. O 
registrador a utilizar é precedido do caractere ‘@’. 
 
Exemplos: 
 
ADD A,@R1 ; adiciona o conteúdo da posição de memória 
; pontada por R1 ao acumulador. 
MOV @R0, A ; guarda o conteúdo do acumulador na posição de 
; memória apontada por R0. 
MOVX A,@DPTR ; copia o conteúdo da posição de memória externa 
; apontada por DPTR para o acumulador. 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
5.1.5 - Indexado 
 
Este modo de endereçamento só é permitido para acesso à memória de programa, por 
isso só é utilizado para leitura. Destina-se ao acesso a tabelas e a instruções 
de salto. No acesso a tabelas um registrador de 16 bits (DPTR ou PC) contém o 
endereço base da tabela e o acumulador é carregado com o número de entrada na 
tabela. O endereço da entrada na tabela é calculado somando ao valor do 
registrador o valor do acumulador. Na instrução JMP o endereço do destino é 
calculado como a soma do ponteiro base (DPTR ou PC) e do valor do acumulador. 
 
Exemplos: 
 
JMP @A+DPTR ; coloca no registrador PC o valor igual à soma do 
; conteúdo dos registradores DPTR e acumulador e 
; continua a execução do programa a partir desse 
; endereço. 
MOVC A,@A+DPTR ; carrega o conteúdo da posição de memória 
; apontada pela soma dos registradores acumulador 
; e DPTR no acumulador. 
MOVC A,@A+PC ; carrega o acumulador com o conteúdo da posição 
; de memória cujo endereço é a soma dos 
; registradores acumulador e PC. 
 
5.2 - Modos de endereçamento relativos a saltos 
 
São três os modos de endereçamento relativos a saltos: relativo, absoluto e 
ongo. l
 
5.2.1 - Relativo 
 
Este modo de endereçamento é utilizado com instruções de salto condicional. O 
deslocamento (offset) do salto é de 8 bits, tendo uma gama de –128 a 127 bytes, 
e calcula-se tendo por referência o primeiro byte depois da instrução de salto. 
Quando o salto é executado o deslocamento é somado ao conteúdo do registrador PC 
para formar o endereço de destino. O destino do salto é normalmente especificado 
utilizando um rótulo (label) sendo o assembler que calcula o valor do 
deslocamento efetivo de acordo com as regras descritas. 
 
Exemplos: 
 
JZ et1 ; salta para a instrução com o rótulo ‘et1’ se o 
; valor no acumulador for nulo. 
JNC et2 ; salta para a instrução com o rótulo ‘et2’ se a 
; flag de carry do registrador PSW for igual a 0. 
 
5.2.1 - Absoluto 
 
Este modo de endereçamento é utilizado com as instruções ACALL e AJMP. São 
especificados os 11 bits menos significativos da instrução de destino. Os 5 bits 
mais significativos são iguais aos 5 bits mais significativos do registrador PC. 
Devido ao fato de só ser possível especificar 11 bits do endereço de destino só 
são permitidos saltos dentro da página corrente de 2 Kbytes da memória de 
programa. O endereço absoluto é normalmente especificado recorrendo a um rótulo 
que o assembler traduz. 
 
Exemplos: 
ACALL et3 ; chama a sub-rotina que tem início na posição 
 ; dada por et3 
AJMP ciclo1 ; faz com que a instrução com o rótulo ‘ciclo1’ 
 ; seja executada a seguir à instrução corrente. 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
5.2.3 - Longo 
 
Este modo de endereçamento utiliza-se com as instruções LCALL e LJMP. É 
especificado um endereço de 16 bits para destino do salto. O endereço longo é 
normalmente referido no programa recorrendo a um rótulo. 
 
Exemplos: 
LCALL et5 ; chama a sub-rotina cujo início corresponde à 
 ; posição de memória ao rótulo et5. 
LJMP ciclo2 ; faz com que a instrução como rótulo ‘ciclo2’ 
 ; seja executada a seguir a esta instrução. 
 
5.3 - Modos de endereçamento relativos a bits 
 
Os modos de endereçamento relativos a bits são dois: bit inerente e bit direto. 
 
5.3.1 - Bit inerente 
 
O modo de endereçamento bit inerente utiliza-se com instruções booleanas que 
operam com o bit carry flag do registrador PSW. O bit carry flag é codificado no 
código de operação não sendo necessário nenhum byte adicional para codificar o 
operando. 
 
 
Exemplos: 
 
SETB C ; coloca CY = 1. 
CLR C ; coloca CY = 0. 
CPL C ; complementa CY. 
 
 
5.3.2 - Bit direto 
 
Este modo de endereçamento utiliza-se com instruções booleanas que necessitam 
que o bit a operar seja identificado através de um byte adicional quando é feita 
a codificação da operação, para além do byte utilizado para o código de 
operação. São endereçáveis bits no espaço de RAM interna entre 20H e 2FH e bits 
da maioria dos SFRs. Endereços de bit entre 0 e 127 definem bits na área de 
memória de dados interna que pode ser endereçada bit a bit. Endereços de bit 
entre 128 e 255 correspondem a bits dos SFRs que são endereçáveis 
individualmente. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas– Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
 
 
 
Figura 9 - Mapa de endereços de bit em memória interna. 
 
A linguagem assembly do MCS-51 especifica que o endereçamento a bit pode ser 
feito de três modos: pelo número ou expressão correspondente ao endereço direto 
do bit (0-255), pelo nome ou endereço do registrador que contém o bit seguido de 
um ponto e da posição do bit no registrador (0-7) ou pelo símbolo predefinido do 
bit em assembly. 
 
Posição do BIT Nome do 
Registrador 7 6 5 4 3 2 1 0 
PSW CY AC FO RS1 RS0 OV P 
P3 RD WR T1 T0 INT1 INT0 TXD RXD 
TCON TF1 TR1 TF0 TR0 IE1 IT1 TE0 IT0 
SCON SM0 SM1 SM2 REN TB8 RB8 TI RI 
IE EA ES ET1 EX1 ET0 EX0 
IP PS PT1 PX1 PT0 PX0 
 
Tabela 4 - Símbolos dos bits dos registradores de controle e status. 
 
Exemplos: 
 
CLR PSW.6 ; coloca a 0 o bit 6 (auxiliary carry) do registrador 
; PSW. 
SETB TR1 ; coloca a 1 o bit 6 do registrador TCON. 
SETB 08H ; coloca a 1 o bit 0 da posição de memória de dados 
; interna 21H, correspondente ao endereço de bit 08H. 
 
 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
5.4 - Espaço de memória de dados / modos de endereçamento 
 
A área de memória de dados a acessar relaciona-se diretamente com o modo de 
endereçamento a utilizar. Assim para a área de memória de dados externa utiliza-
se endereçamento indireto através dos registradores DPTR, R0 ou R1. Para a parte 
inferior (128 bytes menos significativos) da área de memória de dados interna, 
utilizam-se os modos de endereçamento direto ou indireto e para a parte superior 
da área de memória de dados interna (128 bytes mais significativos 
correspondentes aos SFRs) utiliza-se o modo de endereçamento direto. Finalmente 
para as áreas de memória interna acessíveis bit a bit utiliza-se o modo de 
endereçamento bit direto, a menos que a instrução atue sobre o bit de carry, 
sendo nesse caso utilizado o modo de endereçamento bit inerente. 
 
6 - Conjunt de Instruções o
 
O conjunto de instruções de qualquer microcontrolador pode dividir-se em cinco 
grupos fundamentais de operações: operações de transferência, operações 
aritméticas, operações lógicas (por vezes estes dois grupos são considerados em 
conjunto), operações sobre variáveis booleanas e operações de salto. 
A família MCS-51 não constitui exceção, podendo o seu conjunto de instruções ser 
dividido nos cinco grupos referidos. As operações pertencentes a cada grupo são 
apresentadas em seguida. As notações utilizadas pela família MCS-51 na 
apresentação do seu conjunto de instruções são as seguintes: 
 
• Rn – Registradores R0-R7 do banco de registradores selecionado. 
• direto – endereço de uma posição de memória (8 bits) do espaço de 
endereçamento direto (RAM de dados interna ou SFRs). 
• @Ri – posição de memória de dados interna (8 bits) endereçada indiretamente 
através dos registradores R0 ou R1. 
• #dados – constante de 8 bits incluída na instrução. 
• #dados16 – constante de 16 bits incluída na instrução. 
• end16 – endereço de destino de 16 bits. 
• end11 – endereço de destino de 11 bits. 
• Rel – byte de deslocamento com sinal (complemento para 2). 
 
6.1 - Operações de Transferência 
 
O grupo de operações de transferência é constituído pelas operações que permitem 
a transferência ou troca de informação entre duas posições de memória. Existem 
operações para transferência de código (MOVC), para manipulação da stack (PUSH e 
POP) e para troca de dados entre o acumulador e um registrador ou byte direto 
(XCH). As operações pertencentes a este grupo de instruções são apresentadas na 
tabela de SET de Instruções no final da apostila. Na tabela são apresentados os 
mnemônicos da operação, utilizadas para a escrita do programa, a descrição 
sumária da operação, o número de bytes que a operação ocupa depois de codificada 
e o número de períodos do oscilador necessários para a execução da operação. 
 
6.2 - Operações Aritméticas 
 
O grupo de operações aritméticas inclui operações para adição (ADD e ADDC), 
subtração (SUBB), incremento (INC), decremento (DEC), multiplicação (MUL), 
divisão (DIV) e ajuste decimal (DA). De acordo com a arquitetura da unidade 
aritmética e lógica, um dos operandos das operações aritméticas tem que estar 
colocado no registrador acumulador, sendo o resultado apresentado no mesmo 
registrador (adição e subtração). No caso das operações de multiplicação e de 
divisão o segundo operando tem que estar colocado no registrador B. O resultado 
da operação de multiplicação é de 16 bits sendo o byte menos significativo 
apresentado no acumulador e o byte mais significativo no registrador B. 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
Na operação de divisão o quociente é colocado no acumulador e o resto no 
registrador B. A operação de ajuste decimal utiliza-se o ajuste para BCD do 
valor contido no acumulador. Verificar este conjunto de instruções no final da 
apostila 
 
6.3 - Operações Lógicas 
 
As operações lógicas do conjunto de instruções são as operações AND, OR, XOR, 
clear (CLR), complemento (CPL), rotação simples para a direita ou para a 
esquerda (RL, RR), rotação com carry, para a esquerda ou para a direita (RLC, 
RC) e troca de nibbles (conjunto de 4 bits) no acumulador. R
 
6.4 - Operações sobre variáveis booleanas 
 
Este grupo de operações dispõe de instruções para colocar um bit a zero (CLR) ou 
a um (SETB), para complementar (CPL), para efetuar a operação AND ou OR entre um 
bit e a flag de carry, para transferência de um bit para a flag de carry ou da 
flag de carry para um bit e operações de salto condicional baseadas no teste da 
flag de carry (JC, JNC) ou no teste de um bit (JB, JNB). 
 
6.5 - Operações de salto 
 
As instruções do grupo de operações de salto permitem alterar o fluxo de 
execução do programa. Existem instruções para chamada de rotinas (ACALL, LCALL), 
retorno de rotinas (RET) e de rotinas de serviço a interrupções (RETI), salto 
incondicional (AJMP, LJMP) e salto condicional (JZ, JNZ, CJNE, DJNZ). Existe 
ainda uma instrução que não produz nenhum resultado (NOP). A instrução de salto 
condicional JZ e JNZ permite o salto com base no teste do valor da flag de zero. 
A instrução CJNE compara o valor contido no acumulador, num registrador ou numa 
posição de memória acessível indiretamente, com o valor imediato ou com o byte 
direto referido na instrução e salta se os valores forem iguais. A instrução 
DJNZ decrementa o registrador ou byte direto e salta se o resultado da operação 
de decremento for zero. 
 
6.6- Exercícios Resolvidos 
 
1- Considere uma tabela com 50 elementos de 8 bits. A tabela está armazenada 
na memória de programa com início no endereço 1000H. Escreva uma seqüência 
de instruções que carregue o nono elemento da tabela no acumulador. 
 
MOV DPTR,#1000H ; colocar endereço base no DPTR. 
MOV A,#8 ; colocar 8 no acumulador. 
MOVC A,@A+DPTR ; utilizar endereçamento indexado para transferir 
; o nono elemento da tabela para o acumulador. 
 
2- Escrever uma seqüência de instruções para trocar o conteúdo das posições 
de memória 40H e 30H. 
 
MOV A,40H ; colocar conteúdo do endereço 40H (end. direto) em A. 
MOV B,30H ; colocar conteúdo do endereço 30H em B. 
MOV 30H,A ; guardar conteúdo de A na posição 30H. 
MOV 40H,B ; guardar conteúdo de B na posição 40H. 
 
3- Adicione o conteúdo das posições de memória 40H e 30H e deixe o conteúdo 
no acumulador. 
 
MOV A,30H ; colocar o conteúdo do endereço 30H em A. 
ADD A,40H ; somar o conteúdo do endereço 40H a A. 
 
4- Subtrair o conteúdo da posição de memória 40H e o carry ao conteúdo da 
posição de memória 30H. 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.brMOV A,30H ; colocar o conteúdo do endereço 30H em A. 
SUBB A,40H ; subtrair o conteúdo do endereço 40H e o carry a A. 
 
7- Temporização da unidade central de processamento 
 
A temporização da CPU faz-se recorrendo ao circuito oscilador do 
microcontrolador ou através de um sinal de relógio externo. Quando se utiliza o 
circuito oscilador à montagem recomendada segue o esquema da figura 10. Torna-se 
necessária a utilização de dois capacitores e um cristal oscilador como 
componentes externos. O cristal deve respeitar a especificação de freqüência 
máxima permitida e o valor dos capacitores depende do tipo de cristal utilizado 
e pode ser determinado consultando o datasheet do microcontrolador a utilizar. 
 
 
 
Figura 10- Esquema de montagem do circuito temporizador utilizando o oscilador 
interno do microcontrolador. 
 
Se o sinal de relógio for fornecido a partir do exterior pode utilizar-se o 
esquema da figura 11. 
 
 
 
Figura 11- Esquema de montagem do circuito temporizador para dispositivos HMOS 
ou CHMOS, utilizando um sinal de relógio externo. 
 
 
7.1- Ciclos máquina e ex cução de instruções e
 
A execução de uma instrução implica a realização de uma série de operações base 
sobre o hardware que não podem ser executadas num único período de oscilação. Um 
ciclo máquina corresponde ao número mínimo de períodos do oscilador de que o 
microcontrolador necessita para executar uma instrução. Na família MCS-51 um 
ciclo máquina encontra-se dividido em 6 estados S1 a S6, cada um com duração de 
dois períodos do oscilador. Assim um ciclo máquina corresponde a um total de 
doze períodos do oscilador. O sinal ALE é ativado durante os estados S1 e S4 de 
cada ciclo máquina apresentado por isso uma freqüência igual a 1/6 da freqüência 
do oscilador. 
 
 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
 
8- O assembly da família MCS-51 
 
Um programa em linguagem assembly MCS-51 é constituído por linhas de que podem 
ser: 
 
• instruções da linguagem assembly. 
• comentários. 
• diretivas para o assembler. 
 
Cada linha contendo instruções em assembly está dividida em 4 campos alguns dos 
quais podem estar vazios. Esses campos são: 
 
• campo da etiqueta ou rótulo. 
• campo da operação. 
• campo dos operandos (0 a 3 operandos). 
• campo de comentário. 
 
O campo da etiqueta [ou rótulo]; é facultativo e consiste num identificador que 
constitui a etiqueta seguida de [:]. Os campos da operação e dos operandos estão 
diretamente relacionados, pois o número de operandos a utilizar depende da 
operação. Estes campos são constituídos pelas operações descritas no conjunto de 
instruções seguindo o formato apresentado nas tabelas 5 a 9 (onde são 
apresentados os tipos de operandos permitidos para cada operação). O campo de 
comentário é facultativo e inicia-se com [;]. Podem existir linhas que contenham 
apenas comentários que deverão iniciar-se por [;]. Designa-se por programa 
assembler ou simplesmente assembler o programa que traduz o código em linguagem 
assembly para código máquina, que corresponde ao código que a CPU consegue 
processar. Cada assembler tem as suas particularidades próprias e as suas 
limitações sendo sempre necessária a consulta do manual a ele associado quando 
durante a fase de programação do código. As linhas de diretivas para o assembler 
correspondem a ordens para o assembler sobre o modo como ele vai efetuar a 
tradução do código escrito em assembly para código máquina. Em seguida são 
apresentadas as diretivas utilizadas pelos assemblers da família MCS-51, devendo 
notar que nem todos os assemblers utilizam todas as diretivas descritas, por 
isso a consulta da documentação relacionada com o assembler é indispensável. 
 
8.1- Diretivas do assembler 
 
Existem oito tipos de diretivas: 
 
• para controle de segmentos. 
• para definição de símbolos. 
• para inicialização de memória. 
• para reserva de memória. 
• para ligação do programa. 
• para controle de endereços. 
• para definição de macros. 
• outras diretivas. 
 
Em seguida serão apresentadas as diretivas correspondentes a cada tipo. 
 
8.1.1- Diretivas para controlo de segmentos 
 
Designa-se por segmento um bloco de memória de código ou de dados criado pelo 
assembler. As diretivas para controle de segmentos servem para criar e 
selecionar segmentos. Estão definidas cinco classes de memória que podem ser 
utilizadas na definição ou criação do segmento: 
 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
• BIT – bit em memória interna. Endereços até de 0 a 255. 
• CODE – memória de código. Endereços de 0000H a 0FFFFH. 
• DATA – memória de dados acessíveis através de endereçamento direto. 
 
Endereços de 0 a 255 (posições genéricas de 0 a 127 e SFRs de 128 a 255). 
 
• IDATA – memória de dados interna. Endereços de 0 a 255. 
• XDATA – memória de dados externa. Endereços de 0000H a 0FFFFH. 
 
As diretivas deste tipo são apresentadas na tabela 5. 
 
 
 
Tabela 5- Diretivas para controle de segmentos. 
 
Exemplos: 
 
mprogr SEGMENT CODE ; define o segmento de código mprogr . 
RSEG mprogr ; ativa o segmento mprogr. 
dd1 SEGMENT DATA ; define o segmento de dados dd1. 
mprog1 SEGMENT CODE AT 1000H ;define o segmento de código mprogr1 com 
 ; início no endereço 1000H. 
xdd SEGMENT XDATA PAGE ; define o segmento de dados externos xdd 
; alinhado com uma página de 256 bytes. 
BSEG AT 20H ; define um segmento absoluto de bit com 
; início no endereço 20H. 
 
8.1.2- Diretivas para definição de símbolos 
 
As diretivas para atribuição de símbolos atribuem determinado valor a um 
símbolo. As diferenças entre as várias diretivas deste tipo relacionam-se com o 
tipo de valor a atribuir ao símbolo. A lista das diretivas deste tipo é 
apresentada na tabela 6. 
 
 
 
Tabela 6- Diretivas para definição de símbolos. 
Exemplos: 
 
pt_leitura SET R1 ; utilizar R1 como pt_leitura. 
falso EQU 0 ; utilizar falso para representar 0. 
flag1 BIT 50H ; utilizar o bit cujo endereço é 50H como flag1. 
restart CODE 00H ; faz restart igual à memória de código 00H. 
PORT1 DATA 90H ; atribui a PORT1 o valor 90H correspondente 
; ao endereço do registrador associado ao porto P1. 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
 
8.1.3- Diretivas para inicialização de memória 
 
As diretivas para inicialização de memória permitem inicializar em memória de 
código posições de 8 ou 16 bits. A tabela 7 apresenta as diretivas disponíveis 
com esta função. 
 
 
 
Tabela 7- Diretivas para inicialização de memória. 
 
Exemplos: 
 
segmento1: DB 7EH,60H,6DH,79H ; inicializa 4 posições de 8 bits, com início 
 ; na posição cujo endereço corresponde à 
; etiqueta segmento1, com os valores 
; indicados. 
prompt: DB ‘Ola, como esta!’ ; neste caso a inicialização é feita com 
; os códigos ASCII 
; correspondentes aos caracteres entre ‘’. 
tab_salto: DW end1, end2, end3 ; inicializa o segmento de 
 ; código com os endereços 
 ; correspondentes às etiquetas 
 ; end1, end2 e end3. 
 
 
8.1.4- Diretivas para reserva de memória 
 
Este tipo de diretivas serve para reservar espaços de memória de 1 ou de 8 bits. 
As diretivas deste tipo são apresentadas na tabela 8. 
 
 
 
Tabela 8- Diretivas para reserva de memória. 
 
Exemplos: 
 
DBIT 9 ; reserva nove bits. 
D
 
S 25 ; reserva 25 bytes no segmento ativo. 
8.1.5- Diretivas para ligação do programa 
 
As diretivas para ligação do programa utilizam-se quando o programa a 
desenvolver se encontra distribuído por vários módulos. Como os módulos 
necessitam de partilhar informação torna-se necessário identificar a origem da 
informação (quando externa) ou qual a informação que vai ser partilhada. As 
diretivas deste tipo utilizam-se para essas funçõese encontram-se na tabela 9. 
 
 
 
Tabela 9- Diretivas para ligação do programa. 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
Exemplos: 
 
PUBLIC s1, s2, s3 ; torna públicos os símbolos s1, s2 e s3. 
EXTRN CODE(s1, s2) ; declara que os símbolos s1 e s2 estão definidos noutro 
 ; módulo. 
NAME módulo1 ; especifica que o módulo objeto a se deve chamar 
 ; módulo1. 
 
8.1.6- Diretivas para controle de endereços 
 
Estas diretivas servem para determinar o endereço em que o código deve ser 
posicionado e para seleção do banco de registradores a utilizar. Estas diretivas 
encontram-se na tabela 10. 
 
 
 
Tabela 10- Diretivas para controle de endereços. 
 
Exemplos: 
 
ORG 2000H ; posiciona o contador de localização no endereço 2000H 
ORG reset ; em que reset é um símbolo predefinido correspondendo a um 
; dado endereço. 
USING 2 ; seleciona o banco de registradores número 2. 
 
 
8.1.7- Diretivas para definição de macros 
 
Este tipo de diretivas permite definir macros. Designa-se por macro um conjunto 
de instruções reunidas sob uma determinada etiqueta utilizando diretivas 
específicas. Quando a etiqueta é referida no programa o assembler procede à sua 
substituição pelo código referido anteriormente. Nem todos os assemblers 
suportam a utilização de macros. Estas diretivas são apresentadas na tabela 11. 
 
 
 
Tabela 11- Diretivas para definição de macros. 
 
Uma macro define-se do seguinte modo: 
 
nome_macro: MACRO ard1, arg2, ... ; comentário 
. 
. 
ENDM 
 
8.1.8- Outras diretivas 
 
A única diretiva listada neste ponto serve para assinalar o fim do módulo e por 
isso corresponde sempre à última linha de um programa em linguagem assembly. O 
seu formato é apresentado na tabela 12. 
 
 
 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
 
 
 
Tabela 12- Outras diretivas. 
9- Reset 
 
O reset do microcontrolador efetua-se colocando o pino RST no nível lógico 1 
durante pelo menos dois ciclos máquina (24 períodos do oscilador). Na tabela 13 
é apresentado o conteúdo dos SFRs depois do reset. 
 
 
 
Tabela 13- Valor dos SFRs depois do reset. 
 
O esquema de montagem recomendado para power-on reset do microcontrolador é 
apresentado na figura 12. 
 
 
 
Figura 12- Circuito para power-on reset. 
 
10- Estrutura e operação das portas E/S 
 
O 8051 possui 4 portas de entrada/saída, designados P0 a P3, todas elas 
bidirecionais. As portas são constituídas por uma latch, um driver de saída e um 
buffer de entrada. As latches correspondem aos SFRs P0 a P3. 
 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
10.1- Funções alternativas das portas E/S 
 
As portas P0, P2 e P3 têm funções específicas associadas à utilização de certas 
configurações ou blocos de hardware. A porta P0 é utilizada como barramento de 
endereços/dados nos acessos à memória externa. Esta porta serve para endereçar o 
byte menos significativo do endereço. A porta P2 é utilizada como barramento de 
endereços nos acessos à memória externa quando o endereçamento é de 16 bits. 
Esta porta endereça o byte mais significativo do endereço. A porta P3 é 
multifuncional estando os seus bits associados a diferentes blocos internos de 
hardware. As funções alternativas da porta P3 são apresentadas na tabela 14. 
 
 
 
Tabela 14- Funções alternativas da porta P3. 
 
 
10.2- Estrutura dos pinos E/S 
 
Os esquemas elétricos de um bit de cada um das portas são apresentados nas 
figuras 13, 14, 15 e 16. 
 
 
 
 
 
 
Figura 13- Esquema elétrico de um bit da porta P0. 
 
 
 
 
 
 
 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
 
 
 
Figura 14- Esquema elétrico de um bit da porta P1. 
 
 
 
Figura 15- Esquema elétrico de um bit da porta P2. 
 
 
 
Figura 16- Esquema elétrico de um bit da porta P3. 
 
A estrutura dos pinos E/S não é igual para todos eles. As portas P0 e P2 têm 
multiplexadores para redirecionar o pino para os barramentos de endereços ou 
dados, quando são utilizados para acesso à memória externa. As portas P1, P2 e 
P3 possuem pull-ups internos pelo que dispensam a utilização de pull-ups 
externos em circuitos de entrada. A porta P0 tem saídas open-drain devido à sua 
utilização como barramento multiplexado de endereços e dados. A operação das 
portas como entradas implicam a colocação das latches associadas às portas a 1, 
quando não estão sendo usadas para funções alternativas, para que os driver de 
saída sejam desativados. Algumas instruções para leitura das portas atuam sobre 
a latch, outras sobre o pino. As instruções que atuam sobre a latch, são 
instruções do tipo readmodify-write e encontram-se listadas na tabela 15. 
 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
 
 
Tabela 15- Instruções do tipo read-modify-write. 
 
Durante o acesso externo o conteúdo do registrador associado a P2 não é alterado 
e o conteúdo do registrador associado a P0 é colocado a 1. Os pinos de P3 ficam 
controlados pela função alternativa quando o conteúdo do registrador P3 é 
olocado a 1. c
 
10.3- Utilização das portas E/S como entradas 
 
Podem utilizar-se diversos dispositivos de entrada como sejam interruptores, 
conversores A/D, teclado, entre outros. De seguida apresentam-se alguns exemplos 
de interfaces com dispositivos de entrada. 
 
10.3.1- Interface com um DIP switch 
 
Um DIP switch consiste num conjunto de interruptores. Para a interface sugere-se 
o esquema de montagem da figura 17, que deve ser repetida para cada um dos 
interruptores utilizados na montagem. 
 
 
 
Figura 17- Esquema de montagem para interface com DIP switch. 
 
A montagem apresentada utiliza-se para portas que não tenham pull-ups internos. 
Caso a porta utilizado na ligação tenha pull-ups internos não é necessário 
colocar os resistores no circuito. Supondo que as ligações foram feitas para um 
DIP switch com 8 interruptores e que se utilizou a porta P2 para a ligação ao 
microcontrolador, o código para configuração da porta como entrada e para 
leitura do valor colocado à entrada é o seguinte. 
 
MOV P2,#FFH ; configuração da porta P2 como entrada. 
MOV A,P2 ; leitura da porta P2. 
 
10.3.2 – Int rface com um teclado e
 
Existem diversos tipos de teclados: mecânicos, capacitivos, de efeito de Hall ou 
de membrana. Cada um destes tipos de teclados apresenta características 
distintas e requer um modo de processamento e hardware de interfaces diferentes. 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
Consideremos um teclado mecânico. Os teclados mecânicos quando são pressionados 
apresentam à saída uma série de pulsos e não uma única transição, como se pode 
ver na figura 18. Este fenômeno designa-se por contact bounce e pode durar de 
5ms a 20ms. 
 
 
 
Figura 18- Ilustração do fenômeno de contact bounce. 
 
Para tornar obvio este problema é necessário usar uma das várias técnicas de 
deboucing, que podem ser implementadas utilizando hardware (circuito set-reset, 
porta CMOS, circuito RC, entre outros) ou por software. Neste exemplo o 
deboucing será feito por software. O algoritmo a utilizar num programa para 
leitura do teclado deverá seguir os passos seguintes: 
 
1- Procura no teclado para determinar se alguma tecla foi pressionada. 
2- Debouncing. 
3- Consultam-se uma tabela para determinar o código ASCII associado à tecla 
pressionada (se necessário). 
 
A implementação da rotina para procura no teclado da tecla premida 
depende do modo como é feitoa interface com o microcontrolador e do 
número de teclas disponíveis. O debouncing por software pode ser 
implementado através do algoritmo seguinte: 
 
1- Espera X ms (X depende do tempo que o contacto leva a estabilizar). 
2- Lê de novo o sinal associado à tecla. 
3- Se o sinal estiver no nível lógico zero a tecla foi pressionada. Caso 
contrário a tecla não foi pressionada. Implementação de um salto de 
acordo com a decisão anterior. 
 
A rotina para determinação do código ASCII correspondente à tecla 
pressionada pode ser implementada colocando em memória de código a tabela 
com os códigos correspondentes às teclas existentes. Esta tabela pode ser 
acedida através da instrução MOVC A,@A+DPTR, colocando o índice de 
acesso, de acordo com a tecla pressionada, em A. O código base para 
implementação desta rotina é apresentado de seguida. 
 
tabela: DB ‘...’ ; definição da tabela. Os caracteres devem ser 
; colocados entre aspas. 
conv: 
MOV DPTR,#tabela ;coloca em DPTR o endereço base da tabela. 
MOVC A,@A+DPTR ;lê código ASCII da tabela. 
LCALL display ;chamada da rotina que faz o display do caractere. 
RET 
 
10.4- Utilização dos portos I/O como saídas 
 
Podem utilizar-se como dispositivos de saída LEDs, displays de sete segmentos, 
LCDs, motores, conversores D/A entre outros. Em seguida são apresentados 
xemplos de interfaces para alguns dos dispositivos de saída referidos. e
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
10.4.1– Interface com LEDs 
 
O LED permite de um modo simples a visualização do valor de um dado pino de 
saída. A interface pode ser implementada recorrendo ao esquema da figura 19. 
 
 
 
Figura 19- Esquema de montagem para interface com LEDs. 
 
As resistências utilizam-se para limitar a corrente nos LEDs. O seu valor deve 
ser calculado tendo em conta as características dos LEDs utilizados. Não é 
necessário nenhum tipo de configuração para utilizar uma porta como saída. A 
ativação dos pinos como saída faz-se escrevendo para a latch associada ao pino. 
Por exemplo, o código necessário para acender os LEDs L1 e L3 e para apagar o 
LED L2 do circuito anterior seria: 
 
MOV P1,#5 
 
10.4.2 – Int rface com um display de sete segmentos e
 
Um display de 7 segmentos permite a visualização de dígitos entre 0 e 9. Este 
circuito tem sete entradas correspondentes aos 7 segmentos que podem ser 
manipulados de modo a permitir a visualização dos dígitos de acordo com a tabela 
16. 
 
 
 
Tabela 16- Tabela de conversão BCD para 7 segmentos. 
 
O esquema para interface entre o microcontrolador e o display é apresentado na 
figura 20. O buffer é utilizado no caso da porta do microcontrolador não 
fornecer corrente suficiente para fazer o drive do display. 
 
 
 
 
 
 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
 
 
Figura 20- Esquema de montagem para interface com um display de 7 segmentos. 
 
Código para escrita do dígito 6 no display: 
 
MOV P1,#5FH 
 
10.4.3- Interface com LCD 
 
O esquema de montagem para a interface depende do tipo de dispositivo LCD a 
utilizar. Como exemplo apresenta-se na figura 21 uma interface com o LCD LM015 
que pode servir de modelo para o desenvolvimento de interfaces para outros LCDs. 
 
 
 
Figura 21- Esquema de montagem para interface com o LCD LM015. 
 
O LCD recebe dois tipos de informação: ordens, para posicionamento do cursor, 
por exemplo, e dados. A seleção do tipo de informação faz-se através do pino RS 
do LCD. A latch é utilizada para fazer a desmultiplexagem do barramento do 
microcontrolador fornecendo o sinal para o pino RS. O decodificador de endereços 
é utilizado para fazer a seleção do LCD. O LM015 inclui um circuito de driving 
interno por isso não é necessária a colocação de buffers externos. 
 
Algoritmo para escrita no LCD: 
 
1- Inicialização do display. 
2- Envio dos códigos ASCII dos caracteres a serem mostrados. 
 
O código a desenvolver para implementar cada um dos passos do algoritmo anterior 
epende do LCD, do seu conjunto de instruções e do modo de operação. d
 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
11- Acesso à memória externa 
 
Num sistema com microcontrolador podem existem dois tipos de memória externa: 
memória de programa e memória de dados. Nos acessos à memória externa a porta 
P0 utiliza-se como barramento multiplexado de endereços/dados (byte menos 
significativo). Durante o acesso externo a latch associada a P0 é escrita com 1s 
e a porta não pode ser utilizado para outros fins. Quando o endereçamento da 
memória externa é feito a 16 bits a porta P2 é utilizado como barramento de 
endereços para endereçar o byte mais significativo. O sinal ALE deve ser usado 
para capturar o endereço para uma latch, de acordo com o esquema proposto na 
figura 6. 
 
11.1- Acesso à memória de programa externa 
 
O acesso à memória de programa externa é feito quando o sinal /EA está ativo 
para os endereços contidos no registrador PC que excedem a capacidade de memória 
interna do microcontrolador. O comando de leitura é dado pelo sinal /PSEN. O 
endereçamento é sempre feito a 16 bits, pelo que a porta P2 fica dedicado a esta 
função. O diagrama temporal típico de um acesso à memória de programa externa é 
apresentado na figura 22. 
 
 
A.D.- amostragem dados 
Figura 22- Diagrama temporal do acesso à memória de programa externa. 
 
11.2- Acesso à memória de dados externa 
 
O acesso à memória de dados externa pode ser de leitura ou de escrita. Os sinais 
de comando para essas operações são /RD, para leitura, e /WR, para escrita. O 
endereçamento pode ser de 16 bits (MOVX @DPTR) ou 8 bits (MOVX @Ri, com i=0 ou i 
=1). Com endereçamento de 8 bits a porta P2 pode ser usado para fins genéricos, 
podendo utilizar-se algumas das suas linhas para fazer paging da memória, caso 
seja necessário. A figura 7 apresenta uma interface para acesso à memória de 
dados externa. As figuras 23 e 24 apresentam os diagramas temporais típicos para 
os acessos de leitura e escrita, respectivamente, à memória de dados externa. 
 
 
 
Figura 23- Diagrama temporal do acesso à memória de dados – ciclo leitura. 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
 
 
Figura 24- Diagrama temporal do acesso à memória de dados – ciclo escrita. 
 
12- Temporização / Contagem 
 
Todos os microcontroladores incluem um bloco de hardware que possui capacidades 
para fazer temporização ou contagem. Este bloco é de extrema importância tendo 
em consideração as aplicações típicas dos microcontroladores (sistemas de 
controle de tempo real). O bloco de temporização/contagem permite criar atrasos 
com determinada duração, impor instantes de amostragem, medir a largura do pulso 
de um dado sinal, medir a freqüência de um sinal periódico ou contar o número de 
ocorrências de um dado evento, entre outras. Na função de temporização o 
registrador de contagem associado ao temporizador é incrementado a um ritmo fixo 
dependente da freqüência de oscilação aplicada ao o microcontrolador. Na função 
de contagem o registrador de contagem é incrementado em resposta a uma transição 
um sinal externo aplicado a um pino específico. n
 
12.1- Temporização/ contagem na família MCS-51 
 
A família MCS-51 possui dois tipos de blocos temporizadores/contadores: os 
Timers 0 e 1 e o Timer 2. Na função de temporização são contados ciclos de 
máquina, ou seja, a taxa de contagem é de fOSC/12, sendo fOSC a freqüência de 
oscilação aplicada ao microcontrolador. Na função de contagem, o incremento é 
feito na ocorrência de uma transição de 1 para 0 no sinal externo aplicado. O 
reconhecimento dessa transição demora dois ciclos de máquina, sendo por issoa 
axa máxima de contagem igual à ft
 
OSC/24. 
12.1.1- Timers 0 e 1 
 
Os Timers 0 e 1 são temporizadores/contadores de 16 bits com quatro modos de 
operação possíveis. Os registradores de contagem a eles associados são TH0, TL0, 
TH1 e TL1. Associado a cada temporizador/contador existe ainda uma flag de 
overflow que é ativada por hardware quando se excede a capacidade de contagem do 
registrador de contagem. Na ocorrência da condição de overflow o registrador de 
contagem passa a conter zeros e a contagem prossegue a partir desse valor. O 
registrador TMOD permite fazer a seleção tipo de função e do modo de operação de 
cada um dos temporizadores/contadores. Este registrador não é endereçável bit a 
bit. Este registrador é apresentado na figura 25. 
 
 
 
Figura 25- Registrador TMOD (endereço 89H). 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
O bit GATE permite determinar o modo como o temporizador/contador é iniciado ou 
parado. Para GATE = 0, a contagem será iniciada quando o bit de controle TRx = 
1. Este bit encontra-se no registrador TCON. Para GATE = 1, a contagem é 
iniciada se o sinal no pino /INTx estiver no nível lógico alto e, 
simultaneamente, TRx = 1. No primeiro caso diz-se que a ativação é feita por 
software e no segundo por hardware. O bit C/T permite fazer a seleção do tipo de 
função do bloco. Para C/T = 0 a função ativa é de temporização, para C/T = 1 a 
função ativa é de contagem. Os bits M1 e M0 permitem fazer a seleção do modo de 
operação de acordo com a tabela 17. 
 
 
 
Tabela 17- Seleção do modo de operação dos Timers 0 e 1. 
 
TCON é o registrador de controle dos Timers 0 e 1. Este registrador é 
endereçável bit a bit. A figura 26 apresenta o registrador TCON. 
 
 
 
Figura 26- Registrador TCON (endereço 88H). 
 
Só os quatro bits mais significativos estão relacionados com os temporizadores/ 
contadores, por isso só esses bits serão referidos neste momento. O bit TF1 é a 
flag de overflow do Timer 1. Este bit é colocado a 1 pelo hardware quando ocorre 
a condição de overflow no registrador de contagem do Timer 1. TR1 é o bit de 
controle de início/parada de operação do Timer 1. TF0 é a flag de overflow do 
Timer 0. TR0 é o bit de controle de início/parada de operação do Timer 0. As 
flags de overflow são colocadas a zero durante o processo de atendimento à 
interrupção do temporizador/contador. Caso não esteja a ser utilizada a 
interrupção respectiva é necessário proceder à colocação da flag a 0 por 
software. No modo de operação 0 o registrador do temporizador/contador é 
configurado como um registrador de 13 bits, utilizando o registrador THx (byte 
menos significativo da contagem) e os 5 bits menos significativos de TLx. A flag 
de overflow é ativada quando a capacidade do registrador de contagem é excedida. 
A contagem é iniciada quando TRx = 1 e GATE = 0. Se GATE = 1 o controle da 
contagem do temporizador/contador é feito através da entrada externa /INTx, o 
que facilita a medição da largura de pulsos. Na figura 27 apresenta-se o 
diagrama de blocos do Timer 1 no modo 0. 
 
 
 
Figura 27- Diagrama de blocos da operação do Timer 1 no modo 0. 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
No modo de operação 1 o funcionamento é análogo ao modo 0, mas com o registrador 
de contagem de 16 bits, utilizando os registradores TLx (byte menos 
significativo) e THx (byte mais significativo). No modo de operação 2 o 
registrador de contagem é configurado para 8 bits (TLx) com recarga automática. 
A condição de overflow ativa a flag respectiva e faz a recarga do valor contido 
no registrador THx em TLx. O valor de THx permanece inalterado. Na figura 28 é 
apresentado o diagrama de blocos do Timer 1 no modo 2. 
 
 
 
Figura 28- Diagrama de blocos do Timer 1 no modo de operação 2. 
 
No modo de operação 3, TL0 e TH0 funcionam como temporizadores separados. TL0 
utiliza os bits de controle do Timer 0: GATE, C/T, TR0, /INT0 e TF0. TL0 e pode 
ser utilizado como temporizador ou como contador. TH0 tem a função exclusiva de 
temporização e utiliza os bits de controle TR1 e TF1. O Timer 1 pode continuar a 
ser usado como temporizador nos modos 0, 1 e 2, mas não pode provocar 
interrupções nem atuar sobre a flag TF1, podendo ser utilizado para gerar a taxa 
de transmissão da porta série ou em qualquer aplicação que não necessite de usar 
interrupções. Este modo destina-se a aplicações que requerem um temporizador ou 
contador extra de 8 bits. Na figura 29 apresenta-se o digrama de blocos do Timer 
0 no modo 3. 
 
 
Figura 29- Diagrama de blocos da operação do Timer 0 em modo 3. 
 
12.1.2- Aplicações dos Timers 0 e 1 
 
Os Timers 0 e 1 utilizam-se para criação de atrasos, imposição de períodos de 
amostragem, medição da largura de pulsos, medição da freqüência ou período de 
uma forma de onda periódica, contagem de eventos externos, entre outras. 
 
Criação de atrasos 
 
De seguida é apresentado o método de cálculo utilizado para determinar o número 
de contagens a efetuar para gerar um atraso de X segundos. Utilizasse o modo de 
operação 1 por ser aquele que permite realizar uma contagem maior, mas o método 
não depende do modo utilizado. 
 
Freqüência de contagem = fOSC/12 ⇒ período = 12/fOSC. 
Atraso de X segundos ⇒ X/12/fOSC contagens. 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
Se o valor obtido for menor ou igual que a capacidade de contagem do modo 
utilizado (216–1 para o modo 1, por exemplo) então o atraso pode ser gerado 
diretamente pelo Timer 0 ou Timer 1 nesse modo. Caso contrário, ou se utiliza um 
modo de contagem com maior capacidade (se não se tratar do modo 1), ou o atraso 
tem que ser gerado com base num submúltiplo do valor desejado, tendo em conta o 
número de overflows do temporizador necessário ara perfazerem o valor total 
desejado. O valor inicial a colocar no registrador de contagem do temporizador 
desejado é igual à capacidade máxima do registrador menos de contagens 
necessárias para gerar o atraso. 
 
De seguida são apresentados alguns exemplos: 
 
1- Considere que dispõe de um 80C51 cujo cristal oscilador é de 12 MHz. 
Escreva uma rotina para gerar um atraso de 20ms. 
 
Período de contagem = 12/12MHz = 1us 
20ms ⇒ 20ms/1us = 20000 contagens 
20000 < 65535 ⇒ utilização direta de um dos temporizadores em modo 1. 
 
Escolhe-se o Timer 1. 
 
Valor para o registrador de contagem do Timer 1 = 65535 – 20000 = 45535 = B1DFH. 
 
Código da rotina que provoca o atraso: 
 
atr20ms: 
MOV TMOD,#00010000B ; Timer 1 em modo 1. 
CLR TF1 ; limpa a flag de overflow. 
MOV TH1, #B1H ; coloca byte superior em TH1. 
MOV TL1, #DFH ; coloca byte inferior em TL1. 
SETB TR1 ; inicia operação do Timer 1. 
espera: 
JNB TF1, espera ; espera até TF1 = 1. 
RET 
 
Para criar atrasos superiores a 65,5ms é necessário programar o Timer 0 ou 1 
para gerar um atraso que seja submúltiplo do valor desejado e contar o número de 
overflows do temporizador até se obter o valor desejado.. 
 
2- Considere o mesmo microcontrolador do exemplo anterior utilizado o mesmo 
cristal. Escreva uma rotina que gere um atraso de 1s. 
 
Como o atraso pedido é superior a 65.5ms a implementação não é direta. 
 
Algoritmo: 
 
1- Escrever um ciclo que gere um atraso de 50ms. 
2- Repetir o ciclo 20 vezes. 
 
Código: 
 
ct_ciclo SET R2 ; R2 utilizado como contador de ciclos. 
 
atr1s: 
MOV ct_ciclo, #20 ; definição do número de iterações. 
CLR ET1 ; disable interrupção Timer1. 
CLR TF1 ; limpar TF1. 
MOV TMOD, #10H ; programação do Timer 1 no modo1. 
MOV TH1, #3CH ; inicialização do registrador de contagem 
MOV TL1, #AFH ; com o valor 15535. 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina- TDM II 
TDMII – www.corradi.junior.nom.br
 
SET TR1 ; início contagem. 
rep: 
CLR TF1 ; limpeza da flag TF1. 
MOV TH1, #3CH ; repete inicialização 
; registrador de contagem 
MOV TL1, #AFH ; cada vez que há overflow. 
espera: 
JNB TF1, espera ; espera até TF1=1. 
DJNZ ct_ciclo, rep ; espera que o ciclo se realize 20 vezes. 
RET 
 
Medição da largura de impulsos 
 
Nesta aplicação é necessário ligar ao pino /INT1 ou /INT0 o sinal que se 
pretende medir. Programa-se o bloco com a função de temporização com o bit GATE 
= 1 para que a contagem seja permitida apenas enquanto o sinal externo se 
encontra no nível lógico alto. A contagem inicia-se quando o sinal passa ao 
nível lógico alto e termina quando o nível lógico se alterar. No caso do nível 
lógico do pulso ser diferente é necessário colocar um inversor externo entre o 
sinal e o pino do microcontrolador. Utilizando o modo de operação 1, se a 
duração do pulso for menor ou igual a 216-1 o seu valor é obtido diretamente (em 
ciclos máquina) nos registradores de contagem. Se a duração do pulso for maior 
que 216-1 tem que se considerar o número de overflows ocorridos para obter o 
valor final. A conversão do valor em ciclos máquina para segundos faz-se 
recorrendo a alguns cálculos simples. O método descrito para determinação da 
largura de um impulso recorre à utilização de interrupções pelo que será apenas 
apresentado o algoritmo do procedimento a utilizar. Serão utilizadas duas 
variáveis, uma para contar o número de ocorrências da condição de overflow 
(ct_count) e outra para indicar o fim do pulso (f_imp). Estas variáveis são 
atualizadas dentro das rotinas de serviço à interrupção. No exemplo utiliza-se o 
Timer 1. 
 
Algoritmo: 
 
1- Configurar o Timer 1 para operar no modo 1 e selecionar função de 
temporização. Colocar TF1 = 0 e inicializar os registradores de contagem do 
Timer 1 a zero. 
2- Inicializar ct_count a 0 e f_imp a 1. 
3- Selecionar a interrupção por flanco descendente do pino /INT1. 
4- Ativar a interrupção por overflow do Timer 0. Ativar a interrupção externa 
/INT1. 
5- Iniciar operação do Timer 1. 
6- Escrever uma rotina de serviço à interrupção por overflow do Timer 1 que 
incremente ct_count. 
7- Escrever uma rotina de serviço de interrupção /INT1 que decremente f_imp. 
8- Espera até que f_imp seja igual a 0. A largura do pulso é dada por larg_imp = 
(cont_ovf x 216 + cont_timer) (em ciclos máquina) em que larg_imp representa a 
largura do pulso, cont_ovf representa a contagem do número de overflows do Timer 
e cont_timer representa o valor contido nos registradores de contagem do 
temporizador. 
 
Medição da freqüência de um sinal periódico 
 
A freqüência corresponde, por definição, ao número de ciclos por segundo de um 
dado sinal. Para medir freqüência utiliza-se um dos temporizadores/contadores na 
função de contador, inicializando-se os registradores de contagem a 0. Utiliza 
se o sinal exterior como relógio do contador. O outro temporizador/contador gera 
um atraso de 1s. A contagem obtida ao fim de 1s corresponde à freqüência do 
sinal (em Hz). Em seguida é apresentado um exemplo. 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
3- Utilize os Timers 0 e 1 para medir a freqüência de um sinal desconhecido. 
Suponha que a freqüência é inferior a 65535 Hz. O Timer 0 será utilizado 
para fazer a contagem de ciclos e o Timer 1 para definir o intervalo de 
1s. Deve proceder-se à ligação do sinal externo ao pino T0. 
 
Algoritmo: 
 
1- Configurar Timer 0 para operar como contador em modo 1 sem sinal externo de 
gating. 
2- Configurar Timer 1 para operar como temporizador em modo 1 sem sinal externo 
de gating. 
3- Inicializar registradores de contagem de Timer 0 a 0. 
4- Utilizar Timer 1 para criar um a atraso de 1s. Colocar o valor 3CAFH nos 
registradores de contagem do Timer 1 para criar um atraso de 50ms. 
5- Esperar 1s. Parar a contagem do Timer 1. O valor contido nos registradores de 
contagem do Timer 1 corresponde à freqüência do sinal. 
 
Código: 
 
t1_ovc SET R0 ; registrador para guardar a contagem de overflow. 
freq_1 SET R1 ; byte inferior da freqüência. 
freq_h SET R2 ; byte superior da freqüência. 
 
ORG 0000H ; início do programa principal. 
SETB P3.4 ; ativação da função T0. 
MOV TMOD,#15H ; configura Timers 0 e 1. 
MOV t1_ovc,#20 ; inicializa a variável t1_ovc a 20. 
MOV TH0,#0 ; inicializa TH0 = 0. 
MOV TL0,#0 ; inicializa TH0 = 0 
MOV TH1,#3CH ; valores iniciais de contagem para geração de um 
MOV TL1,#AFH ; atraso de 50ms. 
CLR ET1 ; desativa a interrupção do Timer 1. 
SETB TR1 ; inicia operação de Timer 1. 
SETB TR0 ; inicia operação de Timer 0. 
rep: 
CLR TF1 ; TF1 = 0. 
MOV TH1,#3CH 
MOV TL1,#AFH 
esp: 
JNB TF1,esp ; espera ativação da flag TF1. 
DJNZ t1_ovc,rep ; espera até que o atraso de 50ms seja repetido 20 
 
; vezes. 
MOV freq_l, TL0 ; guarda byte inferior do valor obtido. 
MOV freq_h, TH0 ; guarda byte superior do valor obtido. 
END 
 
12.1.3- Timer 2 
 
O Timer 2 é um temporizador/contador de 16 bits, com aplicações diferentes das 
dos Timers 0 e 1 e que, para além destes, integra alguns dos microcontroladores 
da família MCS-51 (8052, entre outros). Este temporizador/contador pode ser 
utilizado para temporização ou contagem e possui três modos de operação 
distintos. Os registradores de contagem designam se TH2 e TL2 e existem ainda 
dois registradores adicionais RCAP2L e RCAP2H, designados registradores de 
captura. A seleção da função e do modo de operação deste temporizador faz-se nos 
registradores T2CON e T2MOD. T2CON é endereçável bit a bit. T2MOD não é 
endereçável bit a bit. Os registradores T2CON e T2MOD são apresentados nas 
figuras 30 e 31, respectivamente. 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
 
 
Figura 30- Registrador T2CON (endereço C8H). 
 
TF2 é a flag de overflow do Timer 2. Esta flag é ativada na ocorrência da 
condição de overflow nos registradores de contagem do Timer 2. TF2 tem que ser 
desativada por software. Se RCLK = 1 ou TCLK = 1, a flag nunca é ativada. EXF2 é 
a flag externa do Timer 2. EXF2 é ativada quando é feita uma captura ou recarga 
devida à ocorrência de uma transição negativa no sinal aplicado no pino T2EX, se 
EXEN2 = 1. RCLK é a flag do relógio de recepção, quando igual a 1 faz com que a 
porta série utilize a condição de overflow do Timer 2 para relógio de recepção, 
quando programada nos modos de operação 1 e 3. Se RCLK = 0 o relógio de recepção 
da porta série é dado pelo overflow do Timer 1. TCLK é a flag do relógio de 
transmissão. Esta flag tem significado semelhante à RCLK referindo-se à 
transmissão. EXEN2 é a flag de ativação externa do Timer 2. Quando igual a 1 
permite a captura ou recarga do valor dos registradores de contagem na 
ocorrência de uma transição negativa no pino T2EX (se o Timer 2 não estiver ser 
utilizado como relógio da porta série). EXEN = 0 faz com que as transições em 
T2EX sejam ignoradas. TR2 é o bit de controle do arranque/parada do Timer 2. TR2 
= 1 provoca o arranque enquanto que TR2 = 0 faz a parada. C/T2 é o bit de 
seleção da função do Timer 2. CP/RL2 é a flag de captura/recarga. Quando a 1 
provoca a captura dos valores contidos nos registradores de contagem para os 
registradores de captura na ocorrência de uma transição negativa no pino T2EX se 
EXEN2 = 1. Se CP/RL2 = 0, é feita a recarga do valor contido nos registradores 
de captura para os registradores de contagem quando ocorre a condição de 
overflow no temporizador ou quando ocorre uma transição negativa no pino T2EX se 
EXEN2 = 1. Quando RCLK = 1 ou TCLK = 1 este bit é ignorado e é forçada a recarga 
quando ocorre overflow. 
 
 
 
Figura 31- Registrador T2MOD (endereço C9H). 
 
T2OE é o bit de output enable do Timer 2 e DCEN o bit de ativação da contagem 
decrescente.Os modos de operação do Timer 2 são definidos através da 
programação dos bits referidos na tabela 18. 
 
 
 
Tabela 18- Modos de operação do Timer 2. 
 
No modo de auto-recarga, o Timer 2 pode fazer contagens crescentes ou 
decrescentes. Se DCEN = 0, a contagem é crescente e se EXEN2 = 0, a flag TF2 é 
ativada por overflow do registrador de contagem. A condição de overflow provoca 
ainda a carga do valor de 16 bits contido em RCAP2H e RCAP2L nos registradores 
de contagem TH2 e TL2. Se EXEN2 = 1, a carga dos valores contidos em RCAP2H e 
RCAP2L é feita na ocorrência da condição de overflow ou quando ocorre uma 
transição de 1 para 0 na entrada externa T2EX. Esta transição ativa a flag EXF2. 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
A ativação de TF2 e/ ou EXF2 pode ser usada para gerar interrupções, se 
necessário. A figura 32 apresenta o diagrama de blocos do Timer 2 em modo de 
auto-recarga para DCEN = 0. 
 
 
 
Figura 32- Diagrama de blocos do Timer 2 no modo de auto-recarga para DCEN = 0. 
 
No modo de auto-recarga, para DEN = 1, a contagem pode ser crescente ou 
decrescente. Se o sinal aplicado no pino T2EX estiver no nível lógico baixo, a 
contagem é crescente e a flag TF2 é ativada quando ocorre overflow. Esta 
condição provoca ainda a carga dos valores contidos em RCAP2H e RCAP2L nos 
registradores TH2 e TL2, respectivamente. Se o sinal aplicado no pino T2EX 
estiver no nível lógico alto, a contagem é decrescente. A condição de underflow 
ocorre quando o valor nos registradores de contagem igualar o valor contido nos 
registradores RCAP2H e RCAP2L. Esta condição ativa a flag de TF2 e provoca a 
carga do valor 0FFFFH nos registradores de contagem TH2 e TL2. A figura 33 
apresenta o diagrama de blocos do Timer 2 no modo de captura para DCEN = 1. 
 
 
Figura 33- Diagrama de blocos do Timer 2 em modo de auto recarga para DCEN = 1. 
 
No modo de captura, se EXEN2 = 0, o Timer 2 comporta-se como um temporizador de 
16 bits com ativação da flag TF2 na ocorrência da condição de overflow. Se EXEN2 
= 0, o Timer 2 comporta-se como descrito na situação anterior. A ocorrência uma 
transição do nível lógico alto para o nível lógico baixo na entrada externa T2EX 
provoca a captura do valor contido nos registradores de contagem TH2 e TL2 para 
os registradores de captura RCAP2H e RCAP2L, respectivamente. A transição 
referida ativa a flag T2EX do registrador T2CON. A ativação das flags TF2 e EXF2 
pode ser utilizada para gerar pedidos de interrupção. A figura 34 apresenta o 
diagrama de blocos do Timer 2 no modo de captura. 
 
 
 
 
 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
 
 
 
Figura 34- Diagrama de blocos do Timer 2 em modo de captura. 
 
No modo para geração de taxas de transmissão a ativação de RCLK ou TCLK força a 
porta série a utilizar a flag de overflow do Timer 2 para relógio de recepção ou 
transmissão, respectivamente, quando programada nos modos 1 ou 3. Nos casos dos 
bits RCLK e/ou TCLK estarem à zero será o overflow do Timer 1 a determinar a 
taxa da recepção e/ou transmissão da porta série. A figura 35 apresenta o 
diagrama de blocos do Timer 2 no modo de geração de taxas de transmissão ou 
recepção. 
 
 
 
Figura 35- Digrama de blocos do Timer 2 em modo de geração de taxas de 
transmissão. 
 
Saída de relógio programável 
 
O Timer 2 pode ser utilizado para gerar um sinal de relógio com duty-cycle de 
50% com freqüência compreendida entre 61HZ e 4MHz (para uma freqüência de 
operação de 16MHz). Esta função corresponde à função alternativa do pino P1.0 
(8052). A programação do Timer 2 como gerador de relógio faz-se colocando C/T2 = 
0 e T2OE = 1. O início da operação do temporizador faz-se através de TR2. A 
freqüência do sinal gerado depende da freqüência de oscilação do 
microcontrolador e do valor de reload dos registradores de captura RCAP2H e 
RCAP2L, sendo a relação entre ambos dados por: 
 
FCLOCK = fOSC/[4*(65536 – RCAP2H,RCAP2L)] 
 
em que fCLOCK representa a freqüência do sinal de relógio e fOSC representa a 
freqüência do oscilador do microcontrolador. Neste modo não é gerada nenhuma 
interrupção. É possível utilizar simultaneamente o Timer 2 para gerador de taxa 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
 
de transmissão e gerador de relógio, mas a freqüência dos dois tipos de operação 
não é independente. 
 
12.1.4- Aplicações do Timer 2 
 
O Timer 2 pode ser utilizado em todas as aplicações descritas para os Timers 0 e 
1 e ainda para medição do período de um sinal desconhecido. O modo de captura 
pode utilizar-se para recolha do tempo de chegada de determinado evento, geração 
de interrupções. 
 
Medição do período de um sinal desconhecido 
 
A medição é feita capturando dois flancos descendentes consecutivos do sinal, 
como se pode ver na figura 36. 
 
 
 
Figura 36- Medição do período de um sinal. 
 
A diferença entre os dois valores capturados determina o período em ciclos 
máquina. Para sinais muito lentos, o overflow do Timer 2 pode ocorrer várias 
vezes antes de se verificar a segunda transição sendo necessário contar o número 
de ocorrências da condição de overflow para determinar corretamente o período do 
sinal. O cálculo do período faz-se utilizando as expressões seguintes: 
 
Se flanco2 ≥ flanco1 ⇒ período = nOVF * 216 + dif 
Se flanco2 < flanco1 ⇒ (nOVF -1) * 216 + dif 
 
em que flanco1 representa o tempo capturado quando ocorreu a primeiro transição, 
flanco 2 representa o tempo capturado quando ocorreu a segunda transição, nOVF –
representa o número de ocorrências de overflow entre a detecção dos dois flancos 
e dif= é igual a flanco 2 – flanco 1. O Timer 2 deve ser programado do seguinte 
modo: 
 
1- Limpar TF2 e EXF2 (registrador T2CON). 
2- Limpar RCLK e TCLK. 
3- Colocar EXEN2 a 1 para permitir a captura dos valores captura. 
4- Limpar C/T2 para escolher a função de temporizador. 
5- Colocar CP/RL2 a 1 para permitir a captura no flanco descendente da transição 
do sinal no pino T2EX. 
6- Colocar TR2 a 1 para iniciar a operação do Timer 2. 
 
O programa principal deve esperar pela ocorrência da primeira transição e 
colocar o valor dos registradores de contagem a 0. Depois deve esperar pela 
ocorrência da segunda transição e de seguida efetuar os cálculos descritos. 
Paralelamente deve implementar-se uma rotina de serviço à interrupção por 
overflow do Timer 2 que incremente a variável nOVF. 
 
Contagem de eventos durante um dado período de tempo 
 
Se o evento se manifestar através da alteração do nível lógico de um dado sinal 
pode-se utilizar o algoritmo seguinte para proceder à contagem de evento, depois 
de se ter procedido à ligação do sinal ao pino T2EX. 
 
 
 - Introdução aos Microcontroladores – MCS51 
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 
TDMII – www.corradi.junior.nom.br
 
1- Programar o Timer 2 para o modo de captura. 
2- Programar outro Timer para gerar o intervalo de medição. 
3- Contar o número de vezes que a flag TF2 é ativada durante o intervalo 
referido e limpar a flag de cada vez que ela é ativada. 
 
Geração de sinal de relógio 
 
Em seguida apresenta-se um exemplo de aplicação do Timer 2 para geração de um 
sinal de relógio. 
 
1- Utilize o Timer 2 para geração de um sinal de relógio com duty-cycle de 
50% com freqüência igual a 4KHz. Assuma que fOSC = 12KHz. 
 
Utilizando a equação dada calcula-se o valor a colocar nos registradores RCAP2H 
e RCAP2L. Para f = 4KHz o valor obtido para os registradores de captura é FD12H. 
 
MOV T2CON,#04H ; seleciona o modo e ativa o Timer 2. 
MOV T2MOD,#02H ; ativa a saída do Timer 2. 
MOV RCAP2H,#FDH 
MOV RCAP2L,#12H 
SETB P1.0 ; ativa função alternativa de P1.0. 
 
13- Porta série 
 
A família MCS-51 dispõe de um bloco

Outros materiais