Vous êtes sur la page 1sur 58
Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II Microcontroladores Família MCS51 Colégio

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

Microcontroladores Família MCS51

– Disciplina - TDM II Microcontroladores Família MCS51 Colégio Técnico de Campinas – COTUCA Disciplina –

Colégio Técnico de Campinas – COTUCA

Disciplina – TDM II- Departamento Eletroeletrônica

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 1- Conceitos Básicos Um

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

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.

através de três barramentos como se pode ver na figura 1. Figura 1 – Diagrama de

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.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 2 - Família MCS-51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

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.

de base da família MCS-51 pode ser visto na figura 2. Figura 2- Arquitetura do microcontrolador

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.

de alguns dos microcontroladores da família MCS-51. TDMII – www.corradi.junior.nom.br - Introdução aos

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II Tabela 1- Tabela comparativa

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

Técnico de Campinas – Cotuca – Disciplina - TDM II Tabela 1- Tabela comparativa das características

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

diferentes cada um com 64 Kbytes, organizados segundo os mapas de memória da

figura 3.

têm espaços de endereçamento

dados

e

a memória de programa

espaços de endereçamento dados e a memória de programa Figura 3- Mapas de memória do microcontrolador

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

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II programa. Se /EA =

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

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

microcontrolador. Esta memória pode ser interna e/ou externa. O espaço de endereçamento associado à memória de dados é de 64 Kbytes.

escrita pelo

memória de

dados

é

do

tipo

RAM

podendo

ser

lida

ou

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.

de dados interna faz-se utilizando endereços de 8 bits . Figura 4- Memória de dados interna.

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.

pode ser feito utilizando endereçamento direto ou indireto. Figura 5- Espaço inferior da memória de dados

Figura 5- Espaço inferior da memória de dados interna.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II Os 32 bytes inferiores

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

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 registrador PSW (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.

da memória sendo a leitura dos dados feita através de P0. Figura 6- Acesso à memória

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.

da memória. A troca de dados faz-se através da porta P0. Figura 7- Acesso à memória

Figura 7- Acesso à memória de dados externa.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 4 - Registradores com

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

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.

O registrador é apresentado em detalhe na figura 8. Figura 8- Registrador PSW. TDMII –

Figura 8- Registrador PSW.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II O bit mais significativo

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

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.

A seleção é feita de acordo com a tabela 3. Tabela 3- Seleção do banco de

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 instrução MOVX @DPTR,A.

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ções

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.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 4.9 - Registradores da

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

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, imediato, indireto e indexado.

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 é codificado no 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

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II memória de dados interna

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

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

ADD A,40H

; copia o conteúdo do acumulador para a posição de

; memória cujo endereço é 23H.

; 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 ADD A,#30 MOV DPTR,#20F0H

; carrega o acumulador com o valor 22. ; soma 30 ao acumulador ; 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

TDMII – www.corradi.junior.nom.br

; apontada por DPTR para o acumulador.

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 5.1.5 - Indexado Este

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

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

MOVC A,@A+DPTR

MOVC A,@A+PC

; 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.

; carrega o conteúdo da posição de memória

; apontada pela soma dos registradores acumulador

; e DPTR no acumulador.

; 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 longo.

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.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 5.2.3 - Longo Este

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

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:

; 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’

LCALL et5

; 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

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.

a codificação da operação, para além do

byte

utilizado para

o

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II Figura 9 - Mapa

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

Técnico de Campinas – Cotuca – Disciplina - TDM II Figura 9 - Mapa de endereços

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.

Nome do

 

Posição do BIT

 

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.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 5.4 - Espaço de

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

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 - Conjunto de Instruções

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)

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.

do espaço

• #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.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II Na operação de divisão

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

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, RRC) e troca de nibbles (conjunto de 4 bits) no acumulador.

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 MOV A,#8 MOVC A,@A+DPTR

; colocar endereço base no DPTR. ; colocar 8 no acumulador. ; 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.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II MOV A,30H ; colocar

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

MOV 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.

consultando o datasheet do microcontrolador a utilizar. Figura 10- Esquema de montagem do circuito temporizador

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.

partir do exterior pode utilizar-se o esquema da figura 11. Figura 11- Esquema de montagem do

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 execução de instruções

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.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 8- O assembly da

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

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:

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II • BIT – bit

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

• 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.

As diretivas deste tipo são apresentadas na tabela 5. Tabela 5- Diretivas para controle de segmentos.

Tabela 5- Diretivas para controle de segmentos.

Exemplos:

mprogr SEGMENT CODE RSEG mprogr dd1 SEGMENT DATA

mprog1 SEGMENT CODE AT 1000H ;define o segmento de código mprogr1 com ; início no endereço 1000H.

; define o segmento de código mprogr . ; ativa o segmento mprogr. ; define o segmento de dados dd1.

xdd SEGMENT XDATA PAGE

BSEG AT 20H

; define o segmento de dados externos xdd

; alinhado com uma página de 256 bytes.

; 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.

A lista das diretivas deste tipo é apresentada na tabela 6. Tabela 6- Diretivas para definição

Tabela 6- Diretivas para definição de símbolos.

Exemplos:

pt_leitura SET R1 falso EQU 0 flag1 BIT 50H restart CODE 00H PORT1 DATA 90H

; utilizar R1 como pt_leitura. ; utilizar falso para representar 0. ; utilizar o bit cujo endereço é 50H como flag1. ; faz restart igual à memória de código 00H. ; atribui a PORT1 o valor 90H correspondente ; ao endereço do registrador associado ao porto P1.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 8.1.3- Diretivas para inicialização

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

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.

7 apresenta as diretivas disponíveis com esta função. Tabela 7- Diretivas para inicialização de memória.

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.

. As diretivas deste tipo são apresentadas na tabela 8. Tabela 8- Diretivas para reserva de

Tabela 8- Diretivas para reserva de memória.

Exemplos:

DBIT 9 D S 25

; reserva nove bits. ; 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ções e encontram-se na tabela 9.

utilizam-se para essas funções e encontram-se na tabela 9. Tabela 9- Diretivas para ligação do programa.

Tabela 9- Diretivas para ligação do programa.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II Exemplos: PUBLIC s1, s2,

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

Exemplos:

PUBLIC s1, s2, s3

EXTRN CODE(s1, s2) ; declara que os símbolos s1 e s2 estão definidos noutro

; torna públicos os símbolos s1, s2 e s3.

NAME módulo1

; módulo.

; 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.

a utilizar. Estas diretivas encontram-se na tabela 10. Tabela 10- Diretivas para controle de endereços. Exemplos:

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

USING 2

; dado endereço. ; 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.

de macros. Estas diretivas são apresentadas na tabela 11. Tabela 11- Diretivas para definição de macros.

Tabela 11- Diretivas para definição de macros.

Uma macro define-se do seguinte modo:

nome_macro: MACRO ard1, arg2,

.

.

ENDM

; comentário

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.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II Tabela 12- Outras diretivas.

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

Técnico de Campinas – Cotuca – Disciplina - TDM II Tabela 12- Outras diretivas. 9- Reset

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.

13 é apresentado o conteúdo dos SFRs depois do reset . Tabela 13- Valor dos SFRs

Tabela 13- Valor dos SFRs depois do reset.

O

apresentado na figura 12.

esquema de montagem recomendado para power-on reset do microcontrolador é

recomendado para power-on reset do microcontrolador é Figura 12- Circuito para power-on reset . 10- Estrutura

Figura 12- Circuito para power-on reset.

10- Estrutura e operação das portas E/S

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.

O 8051 possui 4 portas de entrada/saída,

designados P0

a

P3, todas

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 10.1- Funções alternativas das

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

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.

alternativas da porta P3 são apresentadas na tabela 14. Tabela 14- Funções alternativas da porta P3.

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.

um das portas são apresentados nas figuras 13, 14, 15 e 16. Figura 13- Esquema elétrico

Figura 13- Esquema elétrico de um bit da porta P0.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II Figura 14- Esquema elétrico

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

Técnico de Campinas – Cotuca – Disciplina - TDM II Figura 14- Esquema elétrico de um

Figura 14- Esquema elétrico de um bit da porta P1.

TDM II Figura 14- Esquema elétrico de um bit da porta P1. Figura 15- Esquema elétrico

Figura 15- Esquema elétrico de um bit da porta P2.

P1. Figura 15- Esquema elétrico de um bit da porta P2. Figura 16- Esquema elétrico de

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.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II Tabela 15- Instruções do

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

Técnico de Campinas – Cotuca – Disciplina - TDM II Tabela 15- Instruções do tipo read-modify-write

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 é colocado a 1.

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.

para cada um dos interruptores utilizados na montagem. Figura 17- Esquema de montagem para interface com

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 – Interface com um teclado

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.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II Consideremos um teclado mecânico.

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

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.

designa-se por contact bounce e pode durar de 5ms a 20ms. Figura 18- Ilustração do fenômeno

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 é feito a 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 LCALL display RET

;lê código ASCII da tabela. ;chamada da rotina que faz o display do caractere.

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 exemplos de interfaces para alguns dos dispositivos de saída referidos.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 10.4.1– Interface com LEDs

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

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.

pode ser implementada recorrendo ao esquema da figura 19. Figura 19- Esquema de montagem para interface

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 – Interface com um display de sete segmentos

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.

a visualização dos dígitos de acordo com a tabela 16. Tabela 16- Tabela de conversão BCD

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.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II Figura 20- Esquema de

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

Técnico de Campinas – Cotuca – Disciplina - TDM II Figura 20- Esquema de montagem para

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.

para o desenvolvimento de interfaces para outros LCDs. Figura 21- Esquema de montagem para interface com

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 depende do LCD, do seu conjunto de instruções e do modo de operação.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 11- Acesso à memória

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

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.

à memória de programa externa é apresentado na figura 22. A.D.- amostragem dados Figura 22- Diagrama

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.

e escrita, respectivamente, à memória de dados externa. Figura 23- Diagrama temporal do acesso à memória

Figura 23- Diagrama temporal do acesso à memória de dados – ciclo leitura.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II Figura 24- Diagrama temporal

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

Técnico de Campinas – Cotuca – Disciplina - TDM II Figura 24- Diagrama temporal do acesso

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

num sinal externo aplicado a um pino específico.

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 f OSC /12, sendo f OSC 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 isso a taxa máxima de contagem igual à f 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.

bit a bit . Este registrador é apresentado na figura 25. Figura 25- Registrador TMOD (endereço

Figura 25- Registrador TMOD (endereço 89H).

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II O bit GATE permite

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

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

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.

o

sinal

no

pino

/INTx

estiver

no

nível lógico

alto

e,

17. o sinal no pino /INTx estiver no nível lógico alto e, Tabela 17- Seleção do

Tabela 17- Seleção do modo de operação dos Timers 0 e 1.

TCON

endereçável bit a bit. A figura 26 apresenta o registrador TCON.

é

o registrador de controle

dos

Timers

0

e

1.

Este

registrador é

de controle dos Timers 0 e 1. Este registrador é Figura 26- Registrador TCON (endereço 88H).

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.

27 apresenta-se o diagrama de blocos do Timer 1 no modo 0. Figura 27- Diagrama de

Figura 27- Diagrama de blocos da operação do Timer 1 no modo 0.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II No modo de operação

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

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.

é apresentado o diagrama de blocos do Timer 1 no modo 2. Figura 28- Diagrama de

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.

29 apresenta-se o digrama de blocos do Timer 0 no modo 3. Figura 29- Diagrama de

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 = f OSC /12 período = 12/f OSC . Atraso de X segundos X/12/f OSC contagens.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II Se o valor obtido

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

Se o valor obtido for menor ou igual que a capacidade de contagem do modo utilizado (2 16 –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 CLR TF1 MOV TH1, #B1H MOV TL1, #DFH SETB TR1

; Timer 1 em modo 1. ; limpa a flag de overflow. ; coloca byte superior em TH1. ; coloca byte inferior em TL1. ; inicia operação do Timer 1.

espera:

 

JNB TF1, espera RET

; espera até TF1 = 1.

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 CLR ET1 CLR TF1 MOV TMOD, #10H MOV TH1, #3CH MOV TL1, #AFH

; definição do número de iterações. ; disable interrupção Timer1. ; limpar TF1. ; programação do Timer 1 no modo1. ; inicialização do registrador de contagem ; com o valor 15535.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II   SET TR1 ;

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

 

SET TR1

; início contagem.

rep:

 

CLR TF1 MOV TH1, #3CH

; limpeza da flag TF1. ; repete inicialização

MOV TL1, #AFH

; registrador de contagem ; cada vez que há overflow.

espera:

 

JNB TF1, espera DJNZ ct_ciclo, rep RET

; espera até TF1=1. ; espera que o ciclo se realize 20 vezes.

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 2 16 -1 o seu valor é obtido diretamente (em ciclos máquina) nos registradores de contagem. Se a duração do pulso for maior que 2 16 -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:

selecionar função de

temporização. Colocar TF1 = 0 e inicializar os registradores de contagem do Timer 1 a zero.

1- Configurar

o

Timer

1

para

operar

no

modo

1

e

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 2 16 + 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.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 3- Utilize os Timers

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

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 freq_1 SET R1 freq_h SET R2

; registrador para guardar a contagem de overflow. ; byte inferior da freqüência. ; byte superior da freqüência.

 

ORG 0000H SETB P3.4 MOV TMOD,#15H MOV t1_ovc,#20 MOV TH0,#0 MOV TL0,#0 MOV TH1,#3CH MOV TL1,#AFH CLR ET1 SETB TR1 SETB TR0

; início do programa principal. ; ativação da função T0. ; configura Timers 0 e 1. ; inicializa a variável t1_ovc a 20. ; inicializa TH0 = 0. ; inicializa TH0 = 0 ; valores iniciais de contagem para geração de um ; atraso de 50ms. ; desativa a interrupção do Timer 1. ; inicia operação de Timer 1. ; inicia operação de Timer 0.

rep:

 

CLR TF1

; TF1 = 0.

MOV TH1,#3CH

MOV TL1,#AFH

esp:

 

JNB TF1,esp DJNZ t1_ovc,rep

; espera ativação da flag TF1. ; espera até que o atraso de 50ms seja repetido 20

MOV freq_l, TL0 MOV freq_h, TH0 END

; vezes. ; guarda byte inferior do valor obtido. ; guarda byte superior do valor obtido.

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.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II Figura 30- Registrador T2CON

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

Técnico de Campinas – Cotuca – Disciplina - TDM II Figura 30- Registrador T2CON (endereço C8H).

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.

ignorado e é forçada a recarga quando ocorre overflow . Figura 31- Registrador T2MOD (endereço C9H).

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

são definidos através da

decrescente. Os modos de operação do

programação dos bits referidos na tabela 18.

Timer

2

do programação dos bits referidos na tabela 18. Timer 2 Tabela 18- Modos de operação do

Tabela 18- Modos de operação do 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.

No

modo

de auto-recarga, o

Timer

2

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II A ativação de necessário.

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

A ativação de

necessário. A figura 32 apresenta o diagrama de blocos do Timer 2 em modo de

auto-recarga para DCEN = 0.

usada para gerar interrupções, se

TF2

e/

ou

EXF2

pode ser

usada para gerar interrupções, se TF2 e/ ou EXF2 pode ser Figura 32- Diagrama de blocos

Figura 32- Diagrama de blocos do Timer 2 no modo de auto-recarga para DCEN = 0.

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.

No modo de auto-recarga, para

DEN

=

1,

a contagem

DCEN = 1. No modo de auto-recarga, para DEN = 1, a contagem Figura 33- Diagrama

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.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II Figura 34- Diagrama de

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

Técnico de Campinas – Cotuca – Disciplina - TDM II Figura 34- Diagrama de blocos do

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.

no modo de geração de taxas de transmissão ou recepção. Figura 35- Digrama de blocos do

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:

F CLOCK = f OSC /[4*(65536 – RCAP2H,RCAP2L)]

em que f CLOCK representa a freqüência do sinal de relógio e f OSC 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

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II de transmissão e gerador

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

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.

consecutivos do sinal, como se pode ver na figura 36. Figura 36- Medição do período de

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 = n OVF * 2 16 + dif Se flanco2 < flanco1 (n OVF -1) * 2 16 + 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, n OVF – 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 n OVF .

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.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 1- Programar o Timer

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

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 f OSC = 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 MOV T2MOD,#02H MOV RCAP2H,#FDH MOV RCAP2L,#12H SETB P1.0

; seleciona o modo e ativa o Timer 2. ; ativa a saída do Timer 2.

; ativa função alternativa de P1.0.

13- Porta série

A família MCS-51 dispõe de um bloco de hardware que implementa uma ligação série

com o exterior. Esse bloco de hardware designa-se UART (Universal Asynchronous Receiver-Transmitter) e faz a transferência de um byte de informação de cada vez. A trama enviada é constituída por um start bit, os bits de dados e um stop bit. A ligação série fornecida é full duplex, ou seja, permite transmissão e recepção simultâneas. A UART da família MCS-51 permite ainda que seja iniciada a recepção de um segundo byte antes de o byte recebido anteriormente ter sido lido. A interface com este bloco de hardware faz-se através do um único

registrador designado SBUF que, dependendo do contexto de utilização permite o acesso ao registrador de transmissão ou ao registrador de recepção da porta série. O acesso físico aos dois registradores é feito pelo hardware dependendo do tipo de operação executada sobre SBUF. Se a operação for de leitura é acessado o registrador de recepção, caso a operação seja de escrita é acessado o registrador de transmissão. SCON é o registrador de programação e estado Sereia da porta série. Este registrador é endereçável bit a bit. A sua estrutura é apresentada na figura 37.

bit a bit . A sua estrutura é apresentada na figura 37. Figura 37- Registrador SCON

Figura 37- Registrador SCON (endereço 98H).

Os bits SM0 e SM1 servem para fazer a seleção do modo de operação da porta série de acordo com a tabela 19.

SM0

SM1

Modo

Descrição

Taxa de Transmissão

0

0

0

Registrador de deslocamento

F

OSC /12

0

1

1

UART 8 bits

Variável

1

0

2

UART 9 bits

F OSC /64 ou F OSC /32

1

1

3

UART 9 bits

Variável

Tabela 19- Modos de operação da porta série.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II O bit SM2 permite

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

O bit SM2 permite a comunicação multiprocessador nos modos 2 e 3. Nos modos 2 e

3 se SM2 = 1, RI não é ativado se o nono bit de dados recebido for igual a 0. No modo 1 se SM2 = 1, RI só é ativado se o stop bit recebido for válido. No modo 0 SM2 deve ser igual a 0. O bit REN permite ativar a recepção de bytes. REN = 1 ativa recepção. Se REN = 0 a recepção de informação não é permitida. TB8 é o nono bit de dados a ser transmitido nos modos 2 e 3. RB8 é o nono bit de dados recebido nos modos 2 e 3. No modo 1, se SM2 = 0, RB8 representa o stop bit recebido. No modo 0 não é utilizado. TI é a flag de transmissão. Esta flag é colocada a um no início do envio do stop bit indicando que a UART está pronta para uma nova transmissão. RI é a flag de recepção. Esta flag é ativada depois de a informação recebida ter sido colocada no registrador de recepção, indicando que a informação está disponível para leitura.

13.1- Modos de operação

Como referido na tabela 19, existem 4 modos de operação possíveis para a porta série. Em todos os modos a transmissão é iniciada por qualquer instrução que utilize o registrador SBUF como destino. A recepção é iniciada pela condição RI = 0 e REN = 1, para o modo 0 e pela chegada de um start bit se REN = 1, para os outros modos de operação.

13.1.1- Modo de operação 0

Neste modo de operação a informação entra e sai através do pino RXD. O pino TXD apresenta o relógio de deslocamento. São transmitidos/recebidos 8 bits, sendo o bit menos significativo o primeiro a ser enviado (ou recebido). A taxa de transmissão é fixa e igual a (1/12) * f OSC . Sendo f OSC a freqüência do oscilador do microcontrolador.

13.1.2- Modo de operação 1

Neste modo são transmitidos, através do pino TXD, ou recebidos, através do pino RXD, 10 bits: 1 start bit (0), 8 bits de dados, 1 stop bit (1). Na recepção o stop bit é colocado no bit RB8 do registrador SCON. A taxa de transmissão é variável e determinada pela taxa de overflow do Timer 1, do Timer 2, ou de ambos.

13.1.3- Modo de operação 2

No modo 2 a informação é transmitida através do pino TXD e recebida através do pino RXD. A trama é composta por 11 bits: 1 start bit (0), 8 bits de dados, 1 nono bit de dados programável (TB8) e 1 stop bit (1). O bit TB8 pode ser colocado a 0 ou a 1, podendo ser-lhe atribuído o valor do bit de paridade P do registrador PSW. Na recepção o nono bit de dados recebido é colocado em RB8 e o stop bit é ignorado.

Neste modo a taxa de transmissão é fixa podendo ser igual a 1/32 * f OSC ou a 1/64

* f OSC

.

13.1.4- Modo de operação 3

Este modo é essencialmente igual ao modo 2 podendo a taxa de transmissão ser programável. São transmitidos, através do pino TXD, ou recebidos, através do pino RXD 11 bits: 1 start bit (0), 8 bits de dados, 1 nono bit de dados programável e 1 stop bit (1). A taxa de transmissão é controlada pela taxa de overflow do Timer 1 ou do Timer 2 podendo ser projetada para o valor desejado.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II 13.2- Taxas de transmissão

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

13.2- Taxas de transmissão

No modo o a taxa de transmissão é fixa e igual à f OSC /12. No modo 2 a taxa de transmissão depende do valor do bit SMOD do registrador PCON. O valor da taxa de transmissão é dado pela expressão seguinte:

Taxa de transmissão no modo 2 = 2 SMOD * (f OSC /64).

Nos modos 1 e 3 a taxa de transmissão é determinada pela taxa de overflow do Timer 1 (ou do Timer 2) e pelo valor do bit SMOD. A taxa de transmissão é dada pela expressão seguinte:

Taxa de transmissão nos modos 1 e 3 = 2 SMOD * (taxa de overflow do Timer 1).

13.2.1- Utilização do Timer 1 para gerar a taxa de transmissão

Na maioria das aplicações para geração de taxa de transmissão é utilizado o modo de auto-recarga para o temporizador. Caso se utilize esse modo à expressão que permite a determinação do valor a colocar no registrador de contagem do Timer 1 é a seguinte:

Taxa de transmissão dos modos 1 e 3 = (2 SMOD /32) * (f OSC /(12*(256-TH1))

Nesta aplicação a interrupção do Timer 1 deve ser desligada. No caso de se pretenderem taxas de transmissão muito baixas pode-se ativar a interrupção do Timer 1 e configurá-lo no modo 1, usando a interrupção para fazer a recarga do valor inicial de contagem por software. A tabela 20 apresenta os valores de programação do Timer 1 para o conjunto de taxas de transmissão mais utilizadas em conjunto com a interface RS-232.

mais utilizadas em conjunto com a interface RS-232. Tabela 20- Valores comuns de taxas de transmissão

Tabela 20- Valores comuns de taxas de transmissão geradas pelo Timer 1.

13.2.2- Utilização do Timer 2 para gerar a taxa de transmissão

A programação do Timer 2 deve ser feita colocando os bits TCLK e RCLK do registrador T2CON a 1. A taxa de transmissão pode ser diferente da taxa de recepção. O Timer 2 pode ser configurado como contador ou temporizador sendo normalmente configurado como temporizador. Nesta aplicação a flag TF2 não é ativada e o pino T2EX não tem ligação com o Timer 2 podendo ser usado para gerar uma interrupção externa. A programação dos registradores de contagem do Timer 2 faz-se recorrendo à seguinte expressão:

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II Taxa de transmissão dos

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

Taxa de transmissão dos modos 1 e 3 = f OSC /[32 *(65536- (RCAP2H,RCAP2L)]

em que (RCAP2H,RCAP2L) é o valor contido nos registradores RACP2H e RCAP2L (total de 16 bits). A tabela 21 apresenta os valores de programação do Timer 2 para o conjunto de taxas de transmissão mais utilizadas em conjunto com a interface RS-232.

mais utilizadas em conjunto com a interface RS-232. Tabela 21- Valores comuns de taxas de transmissão

Tabela 21- Valores comuns de taxas de transmissão geradas pelo Timer 2.

Na escolha do Timer 1 ou 2 para a geração de taxas de transmissão é necessário ter em conta a precisão de cada um deles. Por exemplo, para gerar 9,6 KHz o Timer 1 é mais preciso que o Timer 2.

13.3- Comunicações multiprocessador

Os

multiprocessador. O nono bit de dados recebido é colocado em RB8 e a porta pode

ser programada de modo que se RB8 = 1 seja gerada uma interrupção. A programação faz-se colocando o bit SM2 do registrador SCON a 1. O bit SM2 não afeta o modo 0

e no modo 1 pode ser utilizado para verificar a validade do stop bit.

13.4- Aplicações da porta série

porta série destinam-se a comunicações

modos

de

operação 2

e

3

da

D e seguida serão apresentadas algumas aplicações para cada modo da porta série.

13.4.1- Aplicações do modo 0

O modo 0 utiliza-se para a comunicação com dispositivos periféricos que tenham interfaces série.

13.4.2- Aplicações do modo 1

Este modo utiliza-se para comunicação com a interface RS-232. Como as polaridades elétricas e os níveis de tensão diferem da porta série para a interface RS-232 somos necessários um circuito que proceda à conversão dos níveis de tensão. Esse circuito, por exemplo, a MAX232 da MAXIM, deve ser colocada entre a porta série do microcontrolador e a ligação RS-232 do PC. Em seguida apresentam-se alguns exemplos de programação da porta série para operar neste modo:

operar com os

parâmetros seguintes: taxa de transmissão de 9600 bits/s, 1 start bit, oito bits

de dados e 1 stop bit, permissão para receber e transmitir e interrupções inativas. Considere que a freqüência do oscilador do microcontrolador é de 11.059 MHz.

1

Escreva uma

rotina que inicializa

a porta

série para

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Inic: Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II CLR IE.4 ;

Inic:

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

CLR IE.4

; desativa a interrupção da porta série.

ANL TMOD,#0FH

; programação do Timer 1 para gerar a

ORL TMOD,#20H

; taxa de transmissão desejada.

MOV TL1,#FDH

; valor de recarga.

MOV TH1,#FDH;

ANL PCON,#7FH

; SMOD = 0;

MOV SCON,#50H

; inicialização da porta série.

RET

2 - Escreva uma rotina que leia um caractere da porta série utilizando o método de polling. Assuma que a porta foi inicializada como indicado no exemplo anterior.

get_char:

JNB RI, get_char ; verificação (poll) da flag RI.

MOV A,SBUF

; leitura do caractere.

CLR RI

RET

3 – Escrever uma rotina que envie pela porta série o caractere contido no

acumulador. Assuma anterior.

porta foi inicializada como indicado no exemplo

que

a

put_char:

 

MOV SBUF,A

;envio do caractere.

esp:

 

JNB TI,esp

; verificação da flag TI.

CLR TI

RET

4 – Escrever uma rotina que envie uma string terminada com um caractere nulo

pela porta série. O endereço de início da string é fornecido pelo registrador

DTPR.

put_string:

 

MOVX A,@DPTR JZ exit LCALL put_char INC DPTR AJMP put_string

; leitura do caractere. ; teste do fim da string. ; envia caractere. ; próximo caractere.

exit:

RET

5 – Escrever uma sub-rotina que receba uma string através da porta série. O

endereço da posição de memória onde a string deve ser armazenada é dado pelo registrador DPTR. A string é terminada pelo caractere carriage return (CR).

 

CR EQU 0DH

; código ASCII do caractere CR.

get_string:

 

LCALL get_char CJNE A,#CR,go MOV A,#0 MOVX @DPTR,A RET

; recebe caractere ; teste do fim da string? ; termina a string com ; o caractere null.

go:

 

MOVX @DPTR,A INC DPTR AJMP get_string

;guarda o caractere recebido.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II O método de polling

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

O método de polling só deve ser usado quando o microcontrolador não tem outras tarefas para executar. A outra abordagem possível utiliza interrupções e será analisada posteriormente.

13.4.3- Aplicação dos modos 2 e 3

Estes modos utilizam-se para comunicação entre vários microcontroladores. Nestes sistemas um dos microcontroladores funciona como unidade de controle e é designado master, os restantes designam-se slaves. O master comanda o funcionamento de todo o sistema. Cada slave possui um endereço único normalmente de 8 bits. O endereçamento e a informação são enviados pelo mesmo canal de comunicação e torna-se necessário distinguir cada um dos casos. A distinção faz-

se recorrendo ao nono bit de dados da trama enviada para a porta série. Se esse

bit for igual a 1 o caractere deve ser considerado como um endereço, se for igual a 0 o caractere deve ser considerado como informação. A comunicação entre processadores deve seguir um protocolo bem definido. Consideremos um sistema multiprocessador em que o master pretende enviar informação para um dos vários processadores slave. O algoritmo a seguir segue os seguintes passos:

Para o master:

1- Primeiro é enviado um byte de endereçamento que identifica um dos vários

slaves.

2- De seguida é enviada a informação.

Para os slaves:

1- Quando é enviado um byte de endereçamento gera-se uma interrupção em cada um

dos slaves que analisam o byte de endereço.

2- Se o endereço recebido corresponde ao endereço do slave, esse slave coloca

SM2 a 0 e prepara-se para receber a informação que se segue.

3- Os slaves não endereçados não alteram o valor de SM2 e ignoram os dados

seguintes.

14- Interrupções

Entende-se por interrupções acontecimentos que necessitam que o processador interrompa o fluxo normal do programa e execute determinado serviço em resposta

ao

acontecimento.

As

interrupções podem classificar-se quanto à sua origem: internas ou externas,

e

quanto à possibilidade de poderem ser ignoradas: mascaráveis ou não

mascaráveis.

As interrupções internas são geradas dentro do circuito integrado, por exemplo,

uma interrupção por ocorrência de overflow num temporizador. Por contraponto as interrupções externas são geradas fora do circuito integrado e sinalizadas através de um sinal ligado a um pino específico do microcontrolador. As interrupções dizem-se mascaráveis quando podem ser ignoradas pelo processador. Neste caso é possível fazer a programação, através do valor de bits

específicos contidos num registrador próprio, de quais as interrupções que devem (ou não) ser mascaradas. As interrupções que não podem ser ignoradas pelo processador são designadas interrupções não mascaráveis. As interrupções utilizam-se para coordenação de atividades E/S e em aplicações críticas em termos temporais. O serviço à interrupção é prestado através da execução de uma rotina específica designada rotina de serviço da interrupção. Essa rotina deve ser colocada num endereço específico designado vetor de interrupção. A cada interrupção pode ser atribuído

um nível de prioridade que, no caso de ocorrer mais do que uma interrupção

simultaneamente serve para decidir qual das interrupções é atendido primeiro.

Normalmente a prioridades mais elevadas corresponde um serviço mais rápido.

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II A programação de um

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

A programação de um sistema utilizando interrupções implica, além da escrita do

programa principal, a escrita da rotina de serviço à interrupção, a inicialização da tabela de vetores de interrupção, que no caso dos vetores serem fixos não é necessária e a ativação do serviço da interrupção através do bit de enable correspondente no registrador próprio. É importante referir que o serviço de interrupções implica algum overhead devido ao processo de comutação entre a

operação normal e o serviço da interrupção.

14.1- Interrupções do MCS51

O microcontrolador 8051 possui cinco fontes de interrupção distintas: duas

interrupções externas, associadas aos sinais dos pinos INT0 e INT1, duas interrupções por overflow dos temporizadores/contadores, associadas às flags TF0

e TF1 e uma interrupção associada à porta série. As fontes de interrupção referidas são apresentadas na figura 38.

de interrupção referidas são apresentadas na figura 38. Figura 38- Fontes de interrupção do 8051. Na

Figura 38- Fontes de interrupção do 8051.

Na família MCS-51 todas as interrupções são mascaráveis. As interrupções podem ser individualmente ativadas/desativadas recorrendo à programação do registrador IE. Este registrador é endereçável bit a bit. Qualquer um dos bits do registrador IE, quando igual a 1, implica a ativação da interrupção respectiva. Se o bit estiver a 0 a interrupção associada está desativada.

bit estiver a 0 a interrupção associada está desativada. Figura 39- Registrador IE (endereço A8H) .

Figura 39- Registrador IE (endereço A8H).

O bit EA desativa todas as interrupções. Se este bit estiver ativo, a ativação

de cada uma das interrupções depende do seu bit de ativação individual. O bit EA

é utiliza-se para fazer a desativação global das interrupções. O bit ES controla

a interrupção da porta série. Os bits ET1 e ET0 controlam as interrupções do

Timer 1 e 0, respectivamente e os bits EX1 e EX0 controlam as interrupções externas 1 e 0, respectivamente. A família MCS-51 permite definir dois níveis de prioridade, que podem ser atribuídos individualmente a cada uma das interrupções através do registrador IP. Este registrador é endereçável bit a bit. A colocação de um destes bits a 1 implica a atribuição do nível de prioridade alta, enquanto que a sua colocação a 0 implica a atribuição do nível de prioridade baixo.

a 0 implica a atribuição do nível de prioridade baixo. Figura 40- Registrador IP (endereço B8H).

Figura 40- Registrador IP (endereço B8H).

TDMII – www.corradi.junior.nom.br

- Introdução aos Microcontroladores – MCS51

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II PS é o b

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

PS é o bit de prioridade da interrupção da porta série. PT1 e PT0 são os bits de prioridade das interrupções dos Timers 1 e 0, respectivamente. PX1 e PX0 são os bits de prioridade das interrupções externas 1 e 0. A estrutura de interrupções da família MCS-51 permite que todas as flags que geram interrupções possam ser colocadas a 1 ou a 0 por software, gerando a interrupção respectiva ou cancelando-a.

14.1.1- Interrupções externas

As interrupções externas associadas aos pinos /INT0 e /INT1 podem ser sensíveis ao nível do sinal (nível baixo), ou à sua transição (flanco descendente). A programação do tipo de acontecimento que provoca a interrupção é feita no registrador TCON cuja composição se repete na figura 41.

registrador TCON cuja composição se repete na figura 41. Figura 41- Registrador TCON. Apenas serão referidos

Figura 41- Registrador TCON.

Apenas serão referidos neste capítulo os bits associados às interrupções. Os bits associados ao controle dos Timers 0 e 1 já foram referidos anteriormente. TF1 e TF0 são as flags de overflow do Timer 1 e 0, respectivamente. Estas flags são ativadas por hardware e são também desativadas por hardware quando o processador salta para a rotina de serviço de interrupção respectiva. No caso de não estarem sendo utilizada a interrupção as flags não são desativadas automaticamente sendo necessário fazê-lo por software. IE1 e IE0 são as flags de flanco das interrupções externas 1 e 0, respectivamente. Estas flags são ativadas por hardware quando é detectado um flanco descendente no sinal correspondente. IE1 e IE0 são desativadas quando a interrupção respectiva é processada. IT1 e IT0 são os bits de controle do tipo das interrupç