• Nenhum resultado encontrado

Microcontroladores Família MCS51

N/A
N/A
Protected

Academic year: 2021

Share "Microcontroladores Família MCS51"

Copied!
58
0
0

Texto

(1)

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

Microcontroladores

Família MCS51

Colégio Técnico de Campinas – COTUCA

Disciplina – TDM II- Departamento Eletroeletrônica

(2)

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.

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.

(3)

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.

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.

(4)

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

Tabela 1- Tabela comparativa das características de alguns microcontroladores da família MCS- 51.

3 - Organização da memória

A memória de dados e a memória de programa têm espaços de endereçamento diferentes cada um com 64 Kbytes, organizados segundo os mapas de memória da figura 3.

Figura 3- Mapas de memória do microcontrolador 80C51.

3.1 - Memória de programa

A memória de programa é uma memória do tipo ROM, por isso sobre ela só se efetuam operações de leitura. Este memória pode ser interna e/ou externa e ocupa no máximo 64 Kbytes. O acesso à memória de programa externa faz-se recorrendo ao sinal /PSEN (Program Strobe Enable) que deverá ser ligado ao pino de output

enable da memória. O sinal aplicado ao pino /EA do microcontrolador determina

(5)

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 memória de dados é do tipo RAM podendo ser lida ou escrita pelo microcontrolador. Esta memória pode ser interna e/ou externa. O espaço de endereçamento associado à memória de dados é de 64 Kbytes.

3.2.1 – Memória de programa externa

O acesso à memória de programa externa faz-se recorrendo aos sinais /RD (Read) e /WR (Write) fornecidos pelo microcontrolador para controle da operação da memória. O endereçamento pode fazer-se recorrendo a um mínimo de um e máximo de dois bytes. Para acesso à memória de programa externa utiliza-se a porta P0 como barramento multiplexado de endereços/dados (byte menos significativo). A porta P2, caso seja necessária a sua utilização, funciona como barramento de endereços (byte mais significativo).

3.2.2 - Memória de dados interna

A memória de dados interna encontra-se dividida em 3 blocos distintos, de acordo com o mapa da figura 4. O acesso à memória de dados interna faz-se utilizando endereços de 8 bits.

Figura 4- Memória de dados interna.

A área de memória superior contém os registrradores com funções especiais, SFRs (Special Function Registers). O acesso a esta área de memória faz-se utilizando endereçamento direto. A função de cada um destes registradores será analisada em detalhe no item 5. A área de memória superior representada na figura 4 a tracejado não está implementada no microcontrolador 80C51 existindo apenas nos dispositivos com 256 bytes de RAM interna. O acesso a esta área de memória é feito utilizando endereçamento indireto sendo uma região de uso genérico.

A parte inferior da memória de dados interna encontra-se dividida em três regiões distintas como se pode ver no mapa da figura 5. O acesso pode ser feito utilizando endereçamento direto ou indireto.

(6)

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.

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.

(7)

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.

(8)

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.

Tabela 3- Seleção do banco de registradores.

O bit PSW.2 designa-se OV e reflete a condição de overflow. O bit PSW.1 não tem nome atribuído e representa uma flag a ser definida pelo utilizador. Finalmente o bit PSW.0, designado P, reflete a paridade do registrador acumulador. O bit P é colocado no nível lógico 1 se o número de 1s no acumulador for impar e nos outros casos o bit P é colocado no nível lógico 0.

4.4 - Registrador Stack Pointer

Contém o endereço do topo da stack. A stack é uma estrutura de dados do tipo LIFO (last-in-first-out) utilizada para guardar informação de modo temporário.

4.5 - Registrador Data Pointer

Conjunto de dois registradores de 8 bits, DPL e DPH, que contêm um endereço de 16 bits. Este registrador tem três aplicações principais:

• fazer procura em tabelas no espaço de memória de programa utilizando a instrução MOVC A, @A+DPTR.

• Implementar saltos multi-direcionais utilizando a instrução JMP @A+DPTR.

• acesso à memória de dados externa, utilizando a instrução MOVX A,@DPTR ou a nstrução MOVX @DPTR,A.

i

4.6 - Registradores associados às Portas

P0 a P3 são os registradores associados aos latches das portas de E/S P0, P1, P2 e P3, respectivamente.

4.7 - Registradores para controle de interrupçõ s

e

IP e IE são os registradores que permitem fazer a seleção de prioridades e a ativação das interrupções, respectivamente.

4.8 - Registradores dos temporizadores/contadores

TH0, TL0 e TH1, TL1 são os registradores que contém as contagens dos temporizadores/contadores 0 e 1 respectivamente. TMOD e TCON são os registradores de controle e status dos temporizadores/contadores. O primeiro permite fazer a programação do modo de operação e no segundo encontram-se bits relacionados com o controle do funcionamento dos temporizadores/contadores.

(9)

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

i

5.1.1 - Registrador inerente

O modo de endereçamento registrador inerente utiliza-se para os registradores em que não é necessário especificar nenhum byte adicional para designar o operando. O registrador a operar é 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

(10)

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 ; copia o conteúdo do acumulador para a posição de ; memória cujo endereço é 23H.

ADD A,40H ; soma o conteúdo da posição de memória 40H ao ; acumulador.

Exemplos de operação sobre SFRs:

MOV B0H,A ; coloca o conteúdo do acumulador à saída da porta P3. Este estilo de programação, embora correto, não é muito claro e facilita a ocorrência de erros. Sempre que sejam referidos SFRs deve optar-se pela utilização do seu nome simbólico, o que torna o código mais perceptível evitando a ocorrência de erros. O assembler do MCS-51 permite a utilização de nomes simbólicos para os SFRs.

MOV P3,A ; coloca o conteúdo do acumulador à saída da porta P3 ; recorrendo ao nome simbólico do registrador associado ; a porta 3.

O assembler procede à tradução do nome simbólico para o endereço correspondente.

5.1.3 - Imediato

O modo de endereçamento imediato permite especificar um valor numérico constante. As constantes a especificar podem ter 8 bits ou 16 bits. Os valores de 16 bits só podem ser usados em conjunto com o registrador DPTR. Em assembly os valores numéricos imediatos são precedidos do caractere ‘#’.

Exemplos:

MOV A,#22 ; carrega o acumulador com o valor 22. ADD A,#30 ; soma 30 ao acumulador

MOV DPTR,#20F0H ; carrega o valor hexadecimal 20F0 ; no registrador DPTR.

5.1.4 - Indireto

No modo de endereçamento indireto a instrução especifica um registrador que contém o endereço do operando. Tanto a memória de dados interna como a externa podem ser endereçadas deste modo. Este modo de endereçamento é útil no acesso a

arrays. Só os registradores R0, R1 e DPTR podem ser utilizados como ponteiros de

dados. R0 e R1 são ponteiros de 8 bits e DPTR é um ponteiro de 16 bits. O registrador a utilizar é precedido do caractere ‘@’.

Exemplos:

ADD A,@R1 ; adiciona o conteúdo da posição de memória ; pontada por R1 ao acumulador.

MOV @R0, A ; guarda o conteúdo do acumulador na posição de ; memória apontada por R0.

MOVX A,@DPTR ; copia o conteúdo da posição de memória externa ; apontada por DPTR para o acumulador

.

(11)

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 ; coloca no registrador PC o valor igual à soma do ; conteúdo dos registradores DPTR e acumulador e ; continua a execução do programa a partir desse ; endereço.

MOVC A,@A+DPTR ; carrega o conteúdo da posição de memória

; apontada pela soma dos registradores acumulador ; e DPTR no acumulador.

MOVC A,@A+PC ; carrega o acumulador com o conteúdo da posição ; de memória cujo endereço é a soma dos

; registradores acumulador e PC.

5.2 - Modos de endereçamento relativos a saltos

São três os modos de endereçamento relativos a saltos: relativo, absoluto e ongo.

l

5.2.1 - Relativo

Este modo de endereçamento é utilizado com instruções de salto condicional. O deslocamento (offset) do salto é de 8 bits, tendo uma gama de –128 a 127 bytes, e calcula-se tendo por referência o primeiro byte depois da instrução de salto. Quando o salto é executado o deslocamento é somado ao conteúdo do registrador PC para formar o endereço de destino. O destino do salto é normalmente especificado utilizando um rótulo (label) sendo o assembler que calcula o valor do deslocamento efetivo de acordo com as regras descritas.

Exemplos:

JZ et1 ; salta para a instrução com o rótulo ‘et1’ se o ; valor no acumulador for nulo.

JNC et2 ; salta para a instrução com o rótulo ‘et2’ se a ; flag de carry do registrador PSW for igual a 0.

5.2.1 - Absoluto

Este modo de endereçamento é utilizado com as instruções ACALL e AJMP. São especificados os 11 bits menos significativos da instrução de destino. Os 5 bits mais significativos são iguais aos 5 bits mais significativos do registrador PC. Devido ao fato de só ser possível especificar 11 bits do endereço de destino só são permitidos saltos dentro da página corrente de 2 Kbytes da memória de programa. O endereço absoluto é normalmente especificado recorrendo a um rótulo que o assembler traduz.

Exemplos:

ACALL et3 ; chama a sub-rotina que tem início na posição ; dada por et3

AJMP ciclo1 ; faz com que a instrução com o rótulo ‘ciclo1’ ; seja executada a seguir à instrução corrente.

(12)

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:

LCALL et5 ; chama a sub-rotina cujo início corresponde à ; posição de memória ao rótulo et5.

LJMP ciclo2 ; faz com que a instrução como rótulo ‘ciclo2’ ; seja executada a seguir a esta instrução.

5.3 - Modos de endereçamento relativos a bits

Os modos de endereçamento relativos a bits são dois: bit inerente e bit direto.

5.3.1 - Bit inerente

O modo de endereçamento bit inerente utiliza-se com instruções booleanas que operam com o bit carry flag do registrador PSW. O bit carry flag é codificado no código de operação não sendo necessário nenhum byte adicional para codificar o operando. Exemplos: SETB C ; coloca CY = 1. CLR C ; coloca CY = 0. CPL C ; complementa CY.

5.3.2 - Bit direto

Este modo de endereçamento utiliza-se com instruções booleanas que necessitam que o bit a operar seja identificado através de um byte adicional quando é feita a codificação da operação, para além do byte utilizado para o código de operação. São endereçáveis bits no espaço de RAM interna entre 20H e 2FH e bits da maioria dos SFRs. Endereços de bit entre 0 e 127 definem bits na área de memória de dados interna que pode ser endereçada bit a bit. Endereços de bit

entre 128 e 255 correspondem a bits dos SFRs que são endereçáveis

(13)

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

Figura 9 - Mapa de endereços de bit em memória interna.

A linguagem assembly do MCS-51 especifica que o endereçamento a bit pode ser feito de três modos: pelo número ou expressão correspondente ao endereço direto do bit (0-255), pelo nome ou endereço do registrador que contém o bit seguido de um ponto e da posição do bit no registrador (0-7) ou pelo símbolo predefinido do

bit em assembly. Posição do BIT Nome do Registrador 7 6 5 4 3 2 1 0 PSW CY AC FO RS1 RS0 OV P P3 RD WR T1 T0 INT1 INT0 TXD RXD

TCON TF1 TR1 TF0 TR0 IE1 IT1 TE0 IT0

SCON SM0 SM1 SM2 REN TB8 RB8 TI RI

IE EA ES ET1 EX1 ET0 EX0

IP PS PT1 PX1 PT0 PX0

Tabela 4 - Símbolos dos bits dos registradores de controle e status. Exemplos:

CLR PSW.6 ; coloca a 0 o bit 6 (auxiliary carry) do registrador ; PSW.

SETB TR1 ; coloca a 1 o bit 6 do registrador TCON.

SETB 08H ; coloca a 1 o bit 0 da posição de memória de dados ; interna 21H, correspondente ao endereço de bit 08H.

(14)

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

o

O conjunto de instruções de qualquer microcontrolador pode dividir-se em cinco grupos fundamentais de operações: operações de transferência, operações aritméticas, operações lógicas (por vezes estes dois grupos são considerados em conjunto), operações sobre variáveis booleanas e operações de salto.

A família MCS-51 não constitui exceção, podendo o seu conjunto de instruções ser dividido nos cinco grupos referidos. As operações pertencentes a cada grupo são apresentadas em seguida. As notações utilizadas pela família MCS-51 na apresentação do seu conjunto de instruções são as seguintes

:

• Rn – Registradores R0-R7 do banco de registradores selecionado.

• direto – endereço de uma posição de memória (8 bits) do espaço de endereçamento direto (RAM de dados interna ou SFRs).

• @Ri – posição de memória de dados interna (8 bits) endereçada indiretamente através dos registradores R0 ou R1.

• #dados – constante de 8 bits incluída na instrução. • #dados16 – constante de 16 bits incluída na instrução. • end16 – endereço de destino de 16 bits.

• end11 – endereço de destino de 11 bits.

• Rel – byte de deslocamento com sinal (complemento para 2).

6.1 - Operações de Transferência

O grupo de operações de transferência é constituído pelas operações que permitem a transferência ou troca de informação entre duas posições de memória. Existem operações para transferência de código (MOVC), para manipulação da stack (PUSH e POP) e para troca de dados entre o acumulador e um registrador ou byte direto (XCH). As operações pertencentes a este grupo de instruções são apresentadas na tabela de SET de Instruções no final da apostila. Na tabela são apresentados os mnemônicos da operação, utilizadas para a escrita do programa, a descrição sumária da operação, o número de bytes que a operação ocupa depois de codificada e o número de períodos do oscilador necessários para a execução da operação.

6.2 - Operações Aritméticas

O grupo de operações aritméticas inclui operações para adição (ADD e ADDC), subtração (SUBB), incremento (INC), decremento (DEC), multiplicação (MUL), divisão (DIV) e ajuste decimal (DA). De acordo com a arquitetura da unidade aritmética e lógica, um dos operandos das operações aritméticas tem que estar colocado no registrador acumulador, sendo o resultado apresentado no mesmo registrador (adição e subtração). No caso das operações de multiplicação e de divisão o segundo operando tem que estar colocado no registrador B. O resultado da operação de multiplicação é de 16 bits sendo o byte menos significativo apresentado no acumulador e o byte mais significativo no registrador B.

(15)

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

R

6.4 - Operações sobre variáveis booleanas

Este grupo de operações dispõe de instruções para colocar um bit a zero (CLR) ou a um (SETB), para complementar (CPL), para efetuar a operação AND ou OR entre um

bit e a flag de carry, para transferência de um bit para a flag de carry ou da flag de carry para um bit e operações de salto condicional baseadas no teste da flag de carry (JC, JNC) ou no teste de um bit (JB, JNB).

6.5 - Operações de salto

As instruções do grupo de operações de salto permitem alterar o fluxo de execução do programa. Existem instruções para chamada de rotinas (ACALL, LCALL), retorno de rotinas (RET) e de rotinas de serviço a interrupções (RETI), salto incondicional (AJMP, LJMP) e salto condicional (JZ, JNZ, CJNE, DJNZ). Existe ainda uma instrução que não produz nenhum resultado (NOP). A instrução de salto condicional JZ e JNZ permite o salto com base no teste do valor da flag de zero. A instrução CJNE compara o valor contido no acumulador, num registrador ou numa posição de memória acessível indiretamente, com o valor imediato ou com o byte direto referido na instrução e salta se os valores forem iguais. A instrução DJNZ decrementa o registrador ou byte direto e salta se o resultado da operação de decremento for zero.

6.6- Exercícios Resolvidos

1- Considere uma tabela com 50 elementos de 8 bits. A tabela está armazenada na memória de programa com início no endereço 1000H. Escreva uma seqüência de instruções que carregue o nono elemento da tabela no acumulador.

MOV DPTR,#1000H ; colocar endereço base no DPTR. MOV A,#8 ; colocar 8 no acumulador.

MOVC A,@A+DPTR ; utilizar endereçamento indexado para transferir ; o nono elemento da tabela para o acumulador. 2- Escrever uma seqüência de instruções para trocar o conteúdo das posições

de memória 40H e 30H.

MOV A,40H ; colocar conteúdo do endereço 40H (end. direto) em A. MOV B,30H ; colocar conteúdo do endereço 30H em B.

MOV 30H,A ; guardar conteúdo de A na posição 30H. MOV 40H,B ; guardar conteúdo de B na posição 40H.

3- Adicione o conteúdo das posições de memória 40H e 30H e deixe o conteúdo no acumulador.

MOV A,30H ; colocar o conteúdo do endereço 30H em A. ADD A,40H ; somar o conteúdo do endereço 40H a A.

4- Subtrair o conteúdo da posição de memória 40H e o carry ao conteúdo da posição de memória 30H.

(16)

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.

Figura 10- Esquema de montagem do circuito temporizador utilizando o oscilador interno do microcontrolador.

Se o sinal de relógio for fornecido a partir do exterior pode utilizar-se o esquema da figura 11.

Figura 11- Esquema de montagem do circuito temporizador para dispositivos HMOS ou CHMOS, utilizando um sinal de relógio externo.

7.1- Ciclos máquina e ex cução de instruções

e

A execução de uma instrução implica a realização de uma série de operações base sobre o hardware que não podem ser executadas num único período de oscilação. Um ciclo máquina corresponde ao número mínimo de períodos do oscilador de que o microcontrolador necessita para executar uma instrução. Na família MCS-51 um ciclo máquina encontra-se dividido em 6 estados S1 a S6, cada um com duração de dois períodos do oscilador. Assim um ciclo máquina corresponde a um total de doze períodos do oscilador. O sinal ALE é ativado durante os estados S1 e S4 de cada ciclo máquina apresentado por isso uma freqüência igual a 1/6 da freqüência do oscilador.

(17)

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:

(18)

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.

Tabela 5- Diretivas para controle de segmentos. Exemplos:

mprogr SEGMENT CODE ; define o segmento de código mprogr .

RSEG mprogr ; ativa o segmento mprogr.

dd1 SEGMENT DATA ; define o segmento de dados dd1.

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

xdd SEGMENT XDATA PAGE ; define o segmento de dados externos xdd ; alinhado com uma página de 256 bytes.

BSEG AT 20H ; define um segmento absoluto de bit com

; início no endereço 20H.

8.1.2- Diretivas para definição de símbolos

As diretivas para atribuição de símbolos atribuem determinado valor a um símbolo. As diferenças entre as várias diretivas deste tipo relacionam-se com o tipo de valor a atribuir ao símbolo. A lista das diretivas deste tipo é apresentada na tabela 6.

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

pt_leitura SET R1 ; utilizar R1 como pt_leitura.

falso EQU 0 ; utilizar falso para representar 0.

flag1 BIT 50H ; utilizar o bit cujo endereço é 50H como flag1. restart CODE 00H ; faz restart igual à memória de código 00H. PORT1 DATA 90H ; atribui a PORT1 o valor 90H correspondente

(19)

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.

Tabela 7- Diretivas para inicialização de memória. Exemplos:

segmento1: DB 7EH,60H,6DH,79H ; inicializa 4 posições de 8 bits, com início

; na posição cujo endereço corresponde à

; etiqueta segmento1, com os valores ; indicados.

prompt: DB ‘Ola, como esta!’ ; neste caso a inicialização é feita com ; os códigos ASCII

; correspondentes aos caracteres entre ‘’. tab_salto: DW end1, end2, end3 ; inicializa o segmento de

; código com os endereços

; correspondentes às etiquetas ; end1, end2 e end3.

8.1.4- Diretivas para reserva de memória

Este tipo de diretivas serve para reservar espaços de memória de 1 ou de 8 bits. As diretivas deste tipo são apresentadas na tabela 8.

Tabela 8- Diretivas para reserva de memória. Exemplos:

DBIT 9 ; reserva nove bits.

DS 25 ; reserva 25 bytes no segmento ativo.

8.1.5- Diretivas para ligação do programa

As diretivas para ligação do programa utilizam-se quando o programa a desenvolver se encontra distribuído por vários módulos. Como os módulos necessitam de partilhar informação torna-se necessário identificar a origem da informação (quando externa) ou qual a informação que vai ser partilhada. As diretivas deste tipo utilizam-se para essas funções e encontram-se na tabela 9.

(20)

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

Exemplos:

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

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

NAME módulo1 ; especifica que o módulo objeto a se deve chamar ; módulo1.

8.1.6- Diretivas para controle de endereços

Estas diretivas servem para determinar o endereço em que o código deve ser posicionado e para seleção do banco de registradores a utilizar. Estas diretivas encontram-se na tabela 10.

Tabela 10- Diretivas para controle de endereços. Exemplos:

ORG 2000H ; posiciona o contador de localização no endereço 2000H ORG reset ; em que reset é um símbolo predefinido correspondendo a um

; dado endereço.

USING 2 ; seleciona o banco de registradores número 2.

8.1.7- Diretivas para definição de macros

Este tipo de diretivas permite definir macros. Designa-se por macro um conjunto de instruções reunidas sob uma determinada etiqueta utilizando diretivas específicas. Quando a etiqueta é referida no programa o assembler procede à sua substituição pelo código referido anteriormente. Nem todos os assemblers suportam a utilização de macros. Estas diretivas são apresentadas na tabela 11.

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

Uma macro define-se do seguinte modo:

nome_macro: MACRO ard1, arg2, ... ; comentário .

. ENDM

8.1.8- Outras diretivas

A única diretiva listada neste ponto serve para assinalar o fim do módulo e por isso corresponde sempre à última linha de um programa em linguagem assembly. O seu formato é apresentado na tabela 12.

(21)

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

Tabela 12- Outras diretivas.

9- Reset

O reset do microcontrolador efetua-se colocando o pino RST no nível lógico 1 durante pelo menos dois ciclos máquina (24 períodos do oscilador). Na tabela 13 é apresentado o conteúdo dos SFRs depois do reset.

Tabela 13- Valor dos SFRs depois do reset.

O esquema de montagem recomendado para power-on reset do microcontrolador é apresentado na figura 12.

Figura 12- Circuito para power-on reset.

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

O 8051 possui 4 portas de entrada/saída, designados P0 a P3, todas elas bidirecionais. As portas são constituídas por uma latch, um driver de saída e um

(22)

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.

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.

(23)

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

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

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

Figura 16- Esquema elétrico de um bit da porta P3.

A estrutura dos pinos E/S não é igual para todos eles. As portas P0 e P2 têm

multiplexadores para redirecionar o pino para os barramentos de endereços ou

dados, quando são utilizados para acesso à memória externa. As portas P1, P2 e P3 possuem pull-ups internos pelo que dispensam a utilização de pull-ups externos em circuitos de entrada. A porta P0 tem saídas open-drain devido à sua utilização como barramento multiplexado de endereços e dados. A operação das portas como entradas implicam a colocação das latches associadas às portas a 1, quando não estão sendo usadas para funções alternativas, para que os driver de saída sejam desativados. Algumas instruções para leitura das portas atuam sobre a latch, outras sobre o pino. As instruções que atuam sobre a latch, são instruções do tipo readmodify-write e encontram-se listadas na tabela 15.

(24)

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

Tabela 15- Instruções do tipo read-modify-write.

Durante o acesso externo o conteúdo do registrador associado a P2 não é alterado e o conteúdo do registrador associado a P0 é colocado a 1. Os pinos de P3 ficam controlados pela função alternativa quando o conteúdo do registrador P3 é

olocado a 1. c

10.3- Utilização das portas E/S como entradas

Podem utilizar-se diversos dispositivos de entrada como sejam interruptores, conversores A/D, teclado, entre outros. De seguida apresentam-se alguns exemplos de interfaces com dispositivos de entrada.

10.3.1- Interface com um DIP switch

Um DIP switch consiste num conjunto de interruptores. Para a interface sugere-se o esquema de montagem da figura 17, que deve ser repetida para cada um dos interruptores utilizados na montagem.

Figura 17- Esquema de montagem para interface com DIP switch.

A montagem apresentada utiliza-se para portas que não tenham pull-ups internos. Caso a porta utilizado na ligação tenha pull-ups internos não é necessário colocar os resistores no circuito. Supondo que as ligações foram feitas para um DIP switch com 8 interruptores e que se utilizou a porta P2 para a ligação ao microcontrolador, o código para configuração da porta como entrada e para leitura do valor colocado à entrada é o seguinte.

MOV P2,#FFH ; configuração da porta P2 como entrada. MOV A,P2 ; leitura da porta P2.

10.3.2 – Int rface com um teclado

e

Existem diversos tipos de teclados: mecânicos, capacitivos, de efeito de Hall ou de membrana. Cada um destes tipos de teclados apresenta características distintas e requer um modo de processamento e hardware de interfaces diferentes.

(25)

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.

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 ;lê código ASCII da tabela.

LCALL display ;chamada da rotina que faz o display do caractere. RET

10.4- Utilização dos portos I/O como saídas

Podem utilizar-se como dispositivos de saída LEDs, displays de sete segmentos, LCDs, motores, conversores D/A entre outros. Em seguida são apresentados

xemplos de interfaces para alguns dos dispositivos de saída referidos. e

(26)

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.

Figura 19- Esquema de montagem para interface com LEDs.

As resistências utilizam-se para limitar a corrente nos LEDs. O seu valor deve ser calculado tendo em conta as características dos LEDs utilizados. Não é necessário nenhum tipo de configuração para utilizar uma porta como saída. A ativação dos pinos como saída faz-se escrevendo para a latch associada ao pino. Por exemplo, o código necessário para acender os LEDs L1 e L3 e para apagar o LED L2 do circuito anterior seria:

MOV P1,#5

10.4.2 – Int rface com um display de sete segmentos

e

Um display de 7 segmentos permite a visualização de dígitos entre 0 e 9. Este circuito tem sete entradas correspondentes aos 7 segmentos que podem ser manipulados de modo a permitir a visualização dos dígitos de acordo com a tabela 16.

Tabela 16- Tabela de conversão BCD para 7 segmentos.

O esquema para interface entre o microcontrolador e o display é apresentado na figura 20. O buffer é utilizado no caso da porta do microcontrolador não fornecer corrente suficiente para fazer o drive do display.

(27)

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

Figura 20- Esquema de montagem para interface com um display de 7 segmentos. Código para escrita do dígito 6 no display:

MOV P1,#5FH

10.4.3- Interface com LCD

O esquema de montagem para a interface depende do tipo de dispositivo LCD a utilizar. Como exemplo apresenta-se na figura 21 uma interface com o LCD LM015 que pode servir de modelo para o desenvolvimento de interfaces para outros LCDs.

Figura 21- Esquema de montagem para interface com o LCD LM015.

O LCD recebe dois tipos de informação: ordens, para posicionamento do cursor, por exemplo, e dados. A seleção do tipo de informação faz-se através do pino RS do LCD. A latch é utilizada para fazer a desmultiplexagem do barramento do microcontrolador fornecendo o sinal para o pino RS. O decodificador de endereços é utilizado para fazer a seleção do LCD. O LM015 inclui um circuito de driving interno por isso não é necessária a colocação de buffers externos.

Algoritmo para escrita no LCD: 1- Inicialização do display.

2- Envio dos códigos ASCII dos caracteres a serem mostrados.

O código a desenvolver para implementar cada um dos passos do algoritmo anterior epende do LCD, do seu conjunto de instruções e do modo de operação.

(28)

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.

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.

(29)

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

Figura 24- Diagrama temporal do acesso à memória de dados – ciclo escrita.

12- Temporização / Contagem

Todos os microcontroladores incluem um bloco de hardware que possui capacidades para fazer temporização ou contagem. Este bloco é de extrema importância tendo em consideração as aplicações típicas dos microcontroladores (sistemas de controle de tempo real). O bloco de temporização/contagem permite criar atrasos com determinada duração, impor instantes de amostragem, medir a largura do pulso de um dado sinal, medir a freqüência de um sinal periódico ou contar o número de ocorrências de um dado evento, entre outras. Na função de temporização o registrador de contagem associado ao temporizador é incrementado a um ritmo fixo dependente da freqüência de oscilação aplicada ao o microcontrolador. Na função de contagem o registrador de contagem é incrementado em resposta a uma transição

um sinal externo aplicado a um pino específico. n

12.1- Temporização/ contagem na família MCS-51

A família MCS-51 possui dois tipos de blocos temporizadores/contadores: os

Timers 0 e 1 e o Timer 2. Na função de temporização são contados ciclos de

máquina, ou seja, a taxa de contagem é de fOSC/12, sendo fOSC a freqüência de oscilação aplicada ao microcontrolador. Na função de contagem, o incremento é feito na ocorrência de uma transição de 1 para 0 no sinal externo aplicado. O reconhecimento dessa transição demora dois ciclos de máquina, sendo por isso a

axa máxima de contagem igual à f

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

(30)

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 o sinal no pino /INTx estiver no nível lógico alto e, simultaneamente, TRx = 1. No primeiro caso diz-se que a ativação é feita por

software e no segundo por hardware. O bit C/T permite fazer a seleção do tipo de

função do bloco. Para C/T = 0 a função ativa é de temporização, para C/T = 1 a função ativa é de contagem. Os bits M1 e M0 permitem fazer a seleção do modo de operação de acordo com a tabela 17.

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

TCON é o registrador de controle dos Timers 0 e 1. Este registrador é endereçável bit a bit. A figura 26 apresenta o registrador TCON.

Figura 26- Registrador TCON (endereço 88H).

Só os quatro bits mais significativos estão relacionados com os temporizadores/ contadores, por isso só esses bits serão referidos neste momento. O bit TF1 é a

flag de overflow do Timer 1. Este bit é colocado a 1 pelo hardware quando ocorre

a condição de overflow no registrador de contagem do Timer 1. TR1 é o bit de controle de início/parada de operação do Timer 1. TF0 é a flag de overflow do

Timer 0. TR0 é o bit de controle de início/parada de operação do Timer 0. As flags de overflow são colocadas a zero durante o processo de atendimento à

interrupção do temporizador/contador. Caso não esteja a ser utilizada a interrupção respectiva é necessário proceder à colocação da flag a 0 por

software. No modo de operação 0 o registrador do temporizador/contador é

configurado como um registrador de 13 bits, utilizando o registrador THx (byte menos significativo da contagem) e os 5 bits menos significativos de TLx. A flag de overflow é ativada quando a capacidade do registrador de contagem é excedida. A contagem é iniciada quando TRx = 1 e GATE = 0. Se GATE = 1 o controle da contagem do temporizador/contador é feito através da entrada externa /INTx, o que facilita a medição da largura de pulsos. Na figura 27 apresenta-se o diagrama de blocos do Timer 1 no modo 0.

(31)

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.

Figura 28- Diagrama de blocos do Timer 1 no modo de operação 2.

No modo de operação 3, TL0 e TH0 funcionam como temporizadores separados. TL0 utiliza os bits de controle do Timer 0: GATE, C/T, TR0, /INT0 e TF0. TL0 e pode ser utilizado como temporizador ou como contador. TH0 tem a função exclusiva de temporização e utiliza os bits de controle TR1 e TF1. O Timer 1 pode continuar a ser usado como temporizador nos modos 0, 1 e 2, mas não pode provocar interrupções nem atuar sobre a flag TF1, podendo ser utilizado para gerar a taxa de transmissão da porta série ou em qualquer aplicação que não necessite de usar interrupções. Este modo destina-se a aplicações que requerem um temporizador ou contador extra de 8 bits. Na figura 29 apresenta-se o digrama de blocos do Timer 0 no modo 3.

Figura 29- Diagrama de blocos da operação do Timer 0 em modo 3.

12.1.2- Aplicações dos Timers 0 e 1

Os Timers 0 e 1 utilizam-se para criação de atrasos, imposição de períodos de amostragem, medição da largura de pulsos, medição da freqüência ou período de uma forma de onda periódica, contagem de eventos externos, entre outras.

Criação de atrasos

De seguida é apresentado o método de cálculo utilizado para determinar o número de contagens a efetuar para gerar um atraso de X segundos. Utilizasse o modo de operação 1 por ser aquele que permite realizar uma contagem maior, mas o método não depende do modo utilizado.

Freqüência de contagem = fOSC/12 ⇒ período = 12/fOSC. Atraso de X segundos ⇒ X/12/fOSC contagens.

(32)

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 (216–1 para o modo 1, por exemplo) então o atraso pode ser gerado diretamente pelo Timer 0 ou Timer 1 nesse modo. Caso contrário, ou se utiliza um modo de contagem com maior capacidade (se não se tratar do modo 1), ou o atraso tem que ser gerado com base num submúltiplo do valor desejado, tendo em conta o número de overflows do temporizador necessário ara perfazerem o valor total desejado. O valor inicial a colocar no registrador de contagem do temporizador desejado é igual à capacidade máxima do registrador menos de contagens necessárias para gerar o atraso.

De seguida são apresentados alguns exemplos:

1- Considere que dispõe de um 80C51 cujo cristal oscilador é de 12 MHz. Escreva uma rotina para gerar um atraso de 20ms.

Período de contagem = 12/12MHz = 1us 20ms ⇒ 20ms/1us = 20000 contagens

20000 < 65535 ⇒ utilização direta de um dos temporizadores em modo 1. Escolhe-se o Timer 1.

Valor para o registrador de contagem do Timer 1 = 65535 – 20000 = 45535 = B1DFH. Código da rotina que provoca o atraso:

atr20ms:

MOV TMOD,#00010000B ; Timer 1 em modo 1.

CLR TF1 ; limpa a flag de overflow.

MOV TH1, #B1H ; coloca byte superior em TH1. MOV TL1, #DFH ; coloca byte inferior em TL1.

SETB TR1 ; inicia operação do Timer 1.

espera:

JNB TF1, espera ; espera até TF1 = 1. RET

Para criar atrasos superiores a 65,5ms é necessário programar o Timer 0 ou 1 para gerar um atraso que seja submúltiplo do valor desejado e contar o número de

overflows do temporizador até se obter o valor desejado..

2- Considere o mesmo microcontrolador do exemplo anterior utilizado o mesmo cristal. Escreva uma rotina que gere um atraso de 1s.

Como o atraso pedido é superior a 65.5ms a implementação não é direta. Algoritmo:

1- Escrever um ciclo que gere um atraso de 50ms. 2- Repetir o ciclo 20 vezes.

Código:

ct_ciclo SET R2 ; R2 utilizado como contador de ciclos.

atr1s:

MOV ct_ciclo, #20 ; definição do número de iterações.

CLR ET1 ; disable interrupção Timer1.

CLR TF1 ; limpar TF1.

MOV TMOD, #10H ; programação do Timer 1 no modo1.

MOV TH1, #3CH ; inicialização do registrador de contagem

(33)

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

SET TR1 ; início contagem.

rep:

CLR TF1 ; limpeza da flag TF1.

MOV TH1, #3CH ; repete inicialização ; registrador de contagem MOV TL1, #AFH ; cada vez que há overflow. espera:

JNB TF1, espera ; espera até TF1=1.

DJNZ ct_ciclo, rep ; espera que o ciclo se realize 20 vezes. RET

Medição da largura de impulsos

Nesta aplicação é necessário ligar ao pino /INT1 ou /INT0 o sinal que se pretende medir. Programa-se o bloco com a função de temporização com o bit GATE = 1 para que a contagem seja permitida apenas enquanto o sinal externo se encontra no nível lógico alto. A contagem inicia-se quando o sinal passa ao nível lógico alto e termina quando o nível lógico se alterar. No caso do nível lógico do pulso ser diferente é necessário colocar um inversor externo entre o sinal e o pino do microcontrolador. Utilizando o modo de operação 1, se a duração do pulso for menor ou igual a 216-1 o seu valor é obtido diretamente (em ciclos máquina) nos registradores de contagem. Se a duração do pulso for maior que 216-1 tem que se considerar o número de overflows ocorridos para obter o valor final. A conversão do valor em ciclos máquina para segundos faz-se recorrendo a alguns cálculos simples. O método descrito para determinação da largura de um impulso recorre à utilização de interrupções pelo que será apenas apresentado o algoritmo do procedimento a utilizar. Serão utilizadas duas variáveis, uma para contar o número de ocorrências da condição de overflow (ct_count) e outra para indicar o fim do pulso (f_imp). Estas variáveis são atualizadas dentro das rotinas de serviço à interrupção. No exemplo utiliza-se o

Timer 1.

Algoritmo:

1- Configurar o Timer 1 para operar no modo 1 e selecionar função de temporização. Colocar TF1 = 0 e inicializar os registradores de contagem do

Timer 1 a zero.

2- Inicializar ct_count a 0 e f_imp a 1.

3- Selecionar a interrupção por flanco descendente do pino /INT1.

4- Ativar a interrupção por overflow do Timer 0. Ativar a interrupção externa /INT1.

5- Iniciar operação do Timer 1.

6- Escrever uma rotina de serviço à interrupção por overflow do Timer 1 que incremente ct_count.

7- Escrever uma rotina de serviço de interrupção /INT1 que decremente f_imp. 8- Espera até que f_imp seja igual a 0. A largura do pulso é dada por larg_imp = (cont_ovf x 216 + cont_timer) (em ciclos máquina) em que larg_imp representa a largura do pulso, cont_ovf representa a contagem do número de overflows do Timer e cont_timer representa o valor contido nos registradores de contagem do temporizador.

Medição da freqüência de um sinal periódico

A freqüência corresponde, por definição, ao número de ciclos por segundo de um dado sinal. Para medir freqüência utiliza-se um dos temporizadores/contadores na função de contador, inicializando-se os registradores de contagem a 0. Utiliza se o sinal exterior como relógio do contador. O outro temporizador/contador gera um atraso de 1s. A contagem obtida ao fim de 1s corresponde à freqüência do sinal (em Hz). Em seguida é apresentado um exemplo.

Referências

Documentos relacionados

Nº Inscrição Nome do Candidato Cota Opção: 37 - Técnico em Eletromecânica - Noite. 4675 ADRIANO DOMINGOS

Por esta razão, objetivamos analisar a política de expansão da Igreja Católica na Bahia, na década de 1950, e sua correlação com a criação do Primeiro Bispado em Vitória

CONCLUSÕES E PROPOSTAS PARA TRABALHOS FUTUROS Nesta dissertação, foi apresentada uma avaliação do desempenho das funções de proteção aplicadas em transformadores de potência,

Os roedores (Rattus norvergicus, Rattus rattus e Mus musculus) são os principais responsáveis pela contaminação do ambiente por leptospiras, pois são portadores

luntárias e sem nenhuma responsabilidade. Afinal, há mais mulheres machistas no mundo do que grãos de areia no mar, companheiros. E, não, isso não é culpa nossa. É culpa da

As pontas de contato retas e retificadas em paralelo ajustam o micrômetro mais rápida e precisamente do que as pontas de contato esféricas encontradas em micrômetros disponíveis

Taxas da Associação de Proprietários de Bens Imóveis (HOA, em Inglês), cujo pagamento é realizado mensalmente e inclui seguro sobre a gestão e manutenção de áreas

Código Descrição Atributo Saldo Anterior D/C Débito Crédito Saldo Final D/C. Este demonstrativo apresenta os dados consolidados da(s)