microprocessores e microcontroladores

123
O MICROPROCESSADOR 8085 2.1 – Pinagem e função das linhas de entrada/saida do 8085 Microprocessor and Microcontrollers Page 1 of 123 RD WR ALE 8 0 8 5 A

Upload: myworld007

Post on 12-Jun-2015

1.379 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Microprocessores e Microcontroladores

O MICROPROCESSADOR 8085

2.1 – Pinagem e função das linhas de entrada/saida do 8085

Microprocessor and Microcontrollers Page 1 of 92

RD

WR ALE

8085A

Page 2: Microprocessores e Microcontroladores

1- Alimentação e Sinal de Relógio

Pinos 1 e 2 – Entradas de conneção do circuito ressonante (cristal, ou qualquer outro circuito ressonante) gerador da frequência para a operação do microprocessador. Os restantes componentes do oscilador estão incorporados dentro do 8085. A freqência do clock do microprocessador deve ser metade da frequência do cristal (ou outro circuito ressonante). Assim, para que o microprocessdor opere a 3MHz o circuito ressonante deve gerar 6 MHz.

Microprocessor and Microcontrollers Page 2 of 92

Page 3: Microprocessores e Microcontroladores

Pino 37 – Saida do sinal de clock do microprocessador. Este sinal pode ser usado para sincronização do clock do microprocessador com o clock de dispositivos externos a ele conectados, como por exemplo, a memória ou unidades de I/O.

Pinos 20 e 40 – Estes são pinos de entrada da limentação do microprocessador (+5 Volts no pino 40 e no pino 20 a terra (ground).

2 – Linhas de Endereços

Pinos 12 a 19 e 21 a 28 - Estes são os pinos de saida das 16 linhas de endereços do 8085. Com estas 16 linhas o 8085 pode endereçar até ao maximo de 64 Kbates de memória. As 8 linhas mais significativas (A8 …A15) são linhas de saida unidirecional enquanto que as restantes 8 linhas (AD0 … AD7) são unidirecionais apenas quando usadas como parte de barramento de endereços.

3 – Linhas de Dados

As 8 linhas do barramento de dados comparilham a saida (são multiplexadas) com as oito linhas menos significativas (AD0 … AD7) do barramento de endereços. Portanto, a entrada ou saida de dados é feita através dos pinos 12 a 19. Assim, estes pinos são bi-direcionais quando usados como linha de dados.

4 – Linhas de Sinais de controle e indicação do estado do microprocessador

Este grupo inclue os seguintes sinais de controle:Pinos 31 e 32 – são sinais de indicação por parte do microprocessador aos circuitos de memória ou despositivos de I/O da operação de leitura e escrita respectivamente. Pino 34 – Este é um sinal de “status” que o microprocessador emite para indicar que se encontra a aceder a memória (IO/M no nível lógico Low) ou a aceder a um dispositivo de I/O (IO/M no nível High)Pinos 29 e 33 – Estes são sinais de indicação do estado do microprocessador, como por exemplo, se o microprocessador está na operação de busca de instrução, leitua de dado da memória, escrita de dado na memória, etc.Pino 30 - ALE (Adress Latch Anable) é o sinal que o microprocessador usa para

indicar ao periférico ou a memória que o o barramento de endereços já contém um endereço válido, isto é, o endereço já está estável.

5 – Sinais originados externamente

O 8085 possui cinco entradas (pinos 6 a 10) de pedido de interrupção por parte de dispositivos externos . Estas entradas são:Pino 6 - Trap: Entrada de interrupção não mascarável. Esta é a entrada de interrupção da mais alta perioridade de todas as cinco. A interrupção aplicada a esta entrada não pode ser bloqueada pelo programa tal como acontece com as outras entradas.Pino 7 , 8 e 9 – RST 7.5, RST 6.5, RST 5.5 - Restart Interrupts: Estas são entradas de interrupção vectorizadas que, quando activadas a sequência do programa é transferida para um local específico da memória designada por local de vector de interrupção (Interrupt Vector

Microprocessor and Microcontrollers Page 3 of 92

Page 4: Microprocessores e Microcontroladores

Location). RST 7.5 tem maior prioridade que RST 6.5 e esta tem, por sua vez, maior prioridade que RST 5.5.Pino 10 – INTR – Interrupt request: Esta é a entrada de pedido de interrupção da mais baixa prioridade. É usada como entrada de pedido de interrupção genérico.Pino 35 – READY: Este é o pino de entrada de sinal vindo de despositivos periféricos que normalmente operam a velocidades mais lentas que o microprocessador , para informar que já está pronto para receber ou enviar um dado para o microprocessador.

Pino 39 – HOLD: Esta é a entrada de um sinal vindo de um periférico tal como o controlador de DMA quando precisa de usar os barramentos de dados ou endereços.

Pino 36 – RESETIN: Quando esta entrada é levada ao nível lógio ‘Low” o contador de programas é zerado, os barramentos são levados ao estado de “Alta impedância” e o microprocesador é também zerado.

Pino 11 – INTA (Interrupt Acknoledgement): Este é um sinal de saida emitido pelo microprocessador para indicar o reconhecimento de um pedido de interrução.

Pino 38 – HLDA (Hold Acknowledge) – É um sinal de saida emitido pelo microprocessador para indicar o reconhecimento do pedido de HOLD.

Pino 3 – Reset Out : É um sinal de saida que indica que o microprocessador está sendo reinicializado. Este sinal pode ser usado para re-inicializar outros dispositivos.

5 – Linhas de Entrada/Saida Serial

Pino 5 e 6 – SID (serial data input) e SOD (serial data output): Estas corresponde a entrada serial e a saida serial respectivamente. Existem instruções especias do 8085 que permitem aceder a estas entradas.

2.2 – TEMPORIZAÇÃO E CICLOS DE MAQUINA DO 8085

O microprocessador 8085 foi concebido para executar 74 instruções. Cada instrução é dividida em duas partes: o codico da operação (opcode) e o operando. O opcode determina que operação deve ser executada (ADD, MOVE, etc) e o operando é a outra informação necessária para a instrução. Esta informação pode ser um dado, um endereço ou qualquer outra informação necessária para a instrução.Cada instrução é subdividida em ciclos de máquina – acessos a memória e cada ciclo de máquina é subdividida em ciclos de “clock”.O primeiro ciclo de máquina em cada instrução é o ciclo de busca de instrução (“Opcode fetch”). Este é a fase em que se busca a instrução e trazida para o microprocessador via barramento de dados. Os ciclos de máquinas subsequentes dependem de daca instrução específica.Os ciclos de máquina são subdivididos nos seguintes tipos:

● Busca de Opcode● Leitura de memória●Escrita na memória

Microprocessor and Microcontrollers Page 4 of 92

Page 5: Microprocessores e Microcontroladores

● Leitura de I/O● Escrita na I/O● Reconhecimento de um pedido de interrupção

O ciclo de busca de instruçãoComo foi anteriormente dito, a primeira operação em cada instrução consiste na busca do código da operação. Neste ciclo o endereço do local de memória onde o opcode da instrução se encontra armazenada é colodo no barramento de endereços e o dado (que neste caso é o opcode) lido para o microprocessador (mais precisamente para o registo de instruções) via barramento de dados. O ciclo de busca de opcode é designado po M1 e normalmente compreende 4 pulsos de clock T1 –T4. Durante T1 a T3 o endereço é colocado no barramento e o opcode trazido para o microprocessador. T4 é usado para a descodificação e execussão do opcode. O ciclos de máquina que se seguem depedem do que o opcode determina. Cada instrução possui o seu número de ciclos de máquina que pode ser diferente de qualquer outra instrução. O número de ciclos de clock (“T-states”) difere de um ciclo de máquina de do outro. Assim, cada instrução possui numeros e tipos de ciclos de máquina que pode ser diferente de qualquer outra instrução. Sendo assim, o número de ciclos de clock também é , em geral, diferente para cada instrução. Deste modo, para determinar os ciclos de máquina duma dada instrução é necessário conhecercom exactidão que instruções elementares compoem a instrução tendo sempre em conta que a primeira instrução elementar é a de busca de opcode. O exemplo da figura 2.3 mostra os ciclos de máquina e os ciclos de clock envolvidos na execussão da instrução MVI B, 42H (Transferir o dado constituido por 8 bits da memória – endereço 42H- para o registo B). Esta é uma instrução de dois bytes. O primeiro byte é o opcode e o segundo é o dado a ser movido (copiado) para o registo B. Supoe-se que a instrução está localizada no endereço 2000H

Microprocessor and Microcontrollers Page 5 of 92

RD

IO/M

A15-A8

AD7-AD0

M1 (Opcode Fetch) M2 (Leitura d Memória)

T1 T2 T3 T4 T1 T2 T3

20H 20H

00H 06H 01H 24H

Ck

ALE

Fig 1.3 - Diagrama temporal do ciclo de busca de Opcode

Page 6: Microprocessores e Microcontroladores

Como se pode verificar da figura acima, nos três primeiros ciclos de clock (t1 – T3) o endereço da instrução a se buscar (2000H) é colocado no barramento de endereços e o opcode da instrução (06H) é levado,via barramento de dados para o microprocessaddor. No quarto pulso do clock (T4) o opcode é descodificado e executado.O segundo ciclo de máquina da instrução compreende a operação de leitura de um dado na memória. Trata-se do ciclo de busca do segundo byte da instrução. O endereço deste operando encontra-se no local de memória logo a seguir ao opcode, isto é, no local 2001H. O dado contido neste local, o operando 42H é trazido para o registo B.Note que o sinal ALE é levado ao nível “High” no início de cada ciclo de máquina. Note também que o sinal IO/M vai é levado ao nível “Low” no inicio da fase de busca do opcode para indicar a operação de leitura de memória, e permanece neste estado durante o segundo ciclo de máquina por se tratar também de um ciclo de leitura. O sinal RD também é levado ao nível “Low” sempre que se pretenda ler um dado da memória.

O Ciclo de Leitura da MemóriaO ciclo de Leitura da memória é um ciclo de máquina no qual se busca um dado da memória para um dos registos internos do microprocessador. Para ilustrar este ciclo de máquina consideremos a instrução LDA 2020H ( ler o dado localizado no endereço 2020H da memória principal para o acumulador). O diagrama temporal que mostra a execussão desta instrução é apresentado na figura 2.4.

Repre-se que para além do ciclo de busca do Opcode (M1) , esta instrução possui mais três extra ciclos de leitura nomeadamente M2, M3 e M4. Os ciclos M2 e M3 são de busca do endereço (um byte de cada vez) enquanto que no ciclo M4 busca-se o dado propriamente dito. Supoe-se neste exemplo que a instrução localizada no endereço 2000H. Isto significa que o primeiro byte da instrução, o opcode, localiza-se no endereço 2000H, e o operando (de tipo endereço) que é constituido de dois bytes nas duas posições seguintes, isto é, 2001H e 2002H. Note-se que logo no início de ciclo M1 o sinal IO/M é levado ao nível “Low” e pernanece neste nos três ciclos de máquina seguintes, pois estes são todos ciclos de leitura

Microprocessor and Microcontrollers Page 6 of 92

RD

IO/M

ALE

AD7-AD0

Ck

00H

T2M1 M2 M3 M4

T3 T4 T1 T2 T3 T1 T2 T3 T1 T2T1 T3

20H 20H 20H 20H

3AH 01H 20H 02H 20H 20H Dado

A15-A8

Fig 1.4 - Diagrama temporal do ciclo de leitura da memória

Page 7: Microprocessores e Microcontroladores

de memória. Por sua vez, o sinal RD é levado ao nível “Low”sempre que um dado está para ser lido para o microprocessador via barramento de dados.

O Ciclo de Escrita na Memória

O ciclo de escrita da memória ocorre quando o microprocessador precisa de enviar umdado para a memória. Por exemplo a instrução MOV M, A envia o dado do acumulador para o local de memória cujo endereço se encontra no par de registos HL. Esta instrução é constituida de dois ciclos maquina; o de busca de instrução e o de escrita do dado na memória. A figura 2.5 mostra o diagrama temporal da execussão desta instrução.

De novo, supoe-se que a instrução se encontra no enderço 2000H da memória principal. Note-se que esta instrução é composta de um byte apenas (o opcode) e o código da instrução é 77H. No ciclo M2 o enderço que se encontra no par HL é colocado no barramento de endereços e o dado armazenado no acumulador é levado para a memória.

O Ciclo de Leitura em dispositivos de I/OO ciclo de leitura de I/O ocorre quando o microprocessador emite a instrução IN para ler um dado vindo de um dispositivo de entrada. Esta instrução possui três ciclos de máquina, nomeadamente, M1 para a leitura do Opcode, M2 para a leitura do endereço do dispositivo donde se pretende buscar o dado e M3 para a leitura do dado propriamente dito no disposivo de I/O. No totaal estes três ciclos levam “10 T-States” (pulsos de clock). A figura 2.6 mostra o diagrama temporal da instrução

Microprocessor and Microcontrollers Page 7 of 92

RD

IO/M

AD7-AD0

Ck

M1 (Opcode Fetch) M2 (Leitura d Memória)

T1 T2 T3 T4 T1 T2 T3

20H MSBA15-A8

ALE

WR

00H 77H LSB01H

Dado vindos do Ac

Fig 1.5 - Diagrama temporal do ciclo de escrita de memória

Page 8: Microprocessores e Microcontroladores

IN 80H , onde 80H é o endereço do porto onde se pretende ler. Note-se que nas operações de I/O o endereço é codificado em oito bits.

Em M1 o endereço da instrução (de novo considera-se o endereço 2000H) e colocado no barramento de endereços para a busaca do opcode seguindo-se depois da leitura do opcode que neste caso tem o valor DBH. No ciclo M2 o endereço do operando (posição seguinte a do opcode) é colocado no barramento de endereços e de seguida o operando é lido para o microprocessador. Note-se que o operando é cujo valor é 80H é o endereço do do dispositivo de I/O que se pretende ler.No terceiro ciclo (M3) o endereço do didpositivo a ser lido é colocado no barramento de endereços. Recorde-se que o endereço de I/O é constituido de oito bits. Porém, na altura da leitura de I/O estes oito bits são colocados tanto na parte alta (A15 – A8) como na paarte baixa (AD7 – AD0) do barramento.

O Ciclo de Escrita do dispositivos de I/O

O ciclo de escrita de I/O consiste no envio de um dado do acumulador para um dispositivo I/O especificado pelo endereço do port. A instrução OUT port tem três ciclos de máquina de máquina nomeadamente o de busca do opcode (8 bits) , o de busca do endereço do port (8 bits) e o de envio do dado do acumulador para o despositivo externo. A figura 2.6 mostra o diagramatemporal da instrução OUT 84H onde 84H é o endereço do port para onde o dado se pretende enviar.

Microprocessor and Microcontrollers Page 8 of 92

A15-A8

IO/M

RD

ALE

AD7-AD0

Ck

T2M1(Busca do opcode) M2(Leitura de mória) M3 (Leitura de I/O )

T3 T4 T1 T2 T3 T1 T2 T3T1

20H 20H 80H

00H DBH 01H 80H 80H Dado vindo de I/O

I/O

T2M1(Busca do opcode) M2(Leitura de mória) M3 (Escrita de I/O )

T3 T4 T1 T2 T3 T1 T2 T3T1

Ck

Fig 1.6 - Diagrama temporal do ciclo de Leitura de I/O

Page 9: Microprocessores e Microcontroladores

Esta instrução é composta de dois bytes, três ciclos de máquina e 10 T-States.O codigo exadecimal desta instrução é D3H. De novo supomos que a instrução está armazenada no endereço 2000H. Sendo assim o opcode tem o endereço 2000H enquanto que o operando está no endereço seguinte, isto é, 2001H. Como se pode os ciclos M1 e M2 são similares aos da operação de leitura de um I/O. Em M3, o endereço do port para o qual se pretende enviar o dado é colocado no barramento. Repare-se que, tal como no processo de busca de dado de um port, os oito bits de endereço do port são colocados tanto na parte alta (A15 – A8) e os mesmos oito bits são também colocados na parte baixa (AD7 – AD0) do barramento de dados.Após a colocação do enderço segue-se então a colocação do dado do acumulador para o barramento de dados para ser copiado para o despositivo endereçado.

Reconhecimento de InterrupçãoO ciclo de máquina de reconhecimento de um pedido de interrupção é um ciclo especial que é usado no lugar de ciclo de busca de opcode para a instrução RST (restart). Esta ciclo apresenta-se do mode similar ao ciclo de busca de opcode com a excepção de que neste ciclo envia-se o sinal INTA no lugar do sinal RD e os sinais de estado IO/M, S0 e S1 estão em 1 1 1 ao inves de 0 1 1. Por outro lado este ciclo tem 6 pulsos de clock e não 4 como acontece com o ciclo de busca de opcode.

3 - INTERFACE COM A MEMÓRIA

O microprocessador para poder executar uma determinada tarefa deve comunicar com a memória, despositivo onde os programas que determinam a sequência de passos a serem seguidos para a realização dessa tarefa estão armazenados. As memórias tanto podem ser ROM onde são normalmente guardados os programas ou RAM onde onde normalmente são armazenados temporariamente os dados resultantes dos calculos ou qualquer outro tipo de processamento. Em certos casos os programas são também armazenados na memória RAM.

Microprocessor and Microcontrollers Page 9 of 92

20H 20H 84H

00H D3H 01H 84H 84H Dado indo para I/O

ALE

AD7-AD0

A15-A8

WR

RD

IO/M

Fig 1.7 - Diagrama temporal do ciclo de escrita de I/O

Page 10: Microprocessores e Microcontroladores

Porém deve ficar claro que, devido a lolatilidade da memória RAM o programa armazenado numa RAM pode facilmente se perder.

3.1 – Connectando o Microprocessador a RAM e ROM

Para que haja uma comunicação efectiva entre o microprocessador e as memórias é necessária que se estabeleça uma conecção física entre as linhas de endereços , de dados e de controle com as suas correspondentes no circuito de memória. A figura 3.1 mostra um esquema típico de coneção entre o microprocessador 8085 e memórias.

Como se pode ver do esquema acima, para além dos circuitos de memória aparece também representado no sistema um descodificador de enderços. Este descodificador seleciona qual dos circuitos de memória irá ser selecionada, dependendo do endereço que aparece no barramento. Na maioria dos sistemas a ROM é reservada a faixa baixa dos endereços e a RAM a faixa superior dos endereços. Porém a determinação de que faixa específica cabe a ROM e qual caberá a RAM depende do projecto específico do sistema de microprocessador.

3.2– O Mapeamento da Memória

Designa-se de mapeamento de memória o esquema que mostra todos os endereços possíveis de um sistema baseado em microprocessador e a atribuição destes aos diversos dispositivos conectados ao microprocessador. O esquema abaixo apresenta o esquema de mapeamento de memória de um sistema baseado no microprocessador 8085.

Microprocessor and Microcontrollers Page 10 of 92

Barramento de controle

Barramento de Endereço

Barramento de dados

8085

Descodificador de

endereçosRAM ROM

Reservado aos usuários

Fig 1.8 – Interligação do 8085 com a memória

Page 11: Microprocessores e Microcontroladores

Como de pode notar neste mapeamento, a faixa de endereço compreendida entre o endereço 0000H até o endereço 1FFFH é reservado aos programas do sistema. Estes incluem aspectos como a localização dos vectores de interrupção, programas de inicialização do sistema e outras informações do sistema. A faixa seguinte de endereços de memória ROM está reservada a guardar o sistema operativo. Para a RAM está reservada a faixa de endereços compreendido entre 4000H a FFFFH. Esta é a área reservada aos programas dos usuários. Note-se que este mapeamento é apenas um exemplo. A quantidade de memória e o mapeamento desta depende do microprocessador e do projectista. Para o microprocessador 8085 com 16 linhas de endereço temos efectivamente 216 endereços possíveis o que pre-faz 65536 (64K) locais de memória de 8 bits cada. Sendo assim a faixa total de endereços vai de 0000H a FFFFH o que equivale a 0000000000000000 binário a 1111111111111111 binário

3.2– Interligação de Circuitos de Memória com o Microprocessador

Em geral, a memória conectada a um determinado sistema baseado em microprocessador nunca aparece toda ela num único circuito integrado. Esta situação é derivada do facto de,em sistemas baseados em microprocessadores, quase sempre, a necessidade de se usar diferentes tipos de memórias (RAM e ROM, por exemplo) e, por outro lado, pelo facto de que as memórias são fabrigadas em circuitos integrados com uma determinada quantidade que, quase sempre, não coincide com o espaço total de memória endereçáve do microprocessadorl. Por exemplo, para o microprocessador 8085 o espaço total de endereços disponível é de 64Kytes (216 locais de 8 bits). Se esta quantidade de memória aparecesse toda ela num único circuito, então as 16 linhas de endereços do 8085 dariam para selecionar cada posição individual da memória sem se recorrer a mecanismos auxiliaeres de endereçamento. Porém, como o espaço total endereçavel deve ser distribuido por vários circuitos de memória então surge a necessidade de se fazer um planeamento adequado de como estes circuitos devem ser conectados as linhas de endereços. Para ilustrar esta situação consideremos de novo o caso do 8085 em que se pretende conectar com blocos de memória de 16Kytes cada (16K x 8 bits). Para endereçar cada uma das posições de cada “chip” de 16 Kbytes apenas 14 das 16 linhas de endereços do 8085 são necessárias. Por outro lado, 4 circuitos destes seriam necessários para cubrir todo o espaço endereçavel do 8085. A figura 1.10 mostra como poderia ser implementado um sistema de endereçamento para a situação aqui descrita.

Microprocessor and Microcontrollers Page 11 of 92

Reservado ao sistema

operativo

Reservado para o uso do sistema

RAM(48Kbytes)

ROM

4000H - FFFFH

2000H - 3FFFH

0000H - 1FFFH

Fig 1.9 – Esquema geral de mapeamenro de memória do 8085

8Kbytes

8Kbytes

Page 12: Microprocessores e Microcontroladores

Para a entrada de endedereços de cada um dos circuitos de memória chegam as 14 linhas menos significativas ( AD0 a A13) do barramento de endereços do microprocessador. Estas 14 linhas permitem aceder 214 locais , o que equivale a 16384 bytes (16K x 8bits). A entrada de dados de cada circuito de memória chegam as linhas de dados (AD0 a AD7) vindas do mixcroprocessador.As duas linhas mais significativas de endereço (A14 e A15) são conectadas a entrada do descodificador. Este é basicamente um decoder 2 por 4 que permite que, para cada combinação das duas linhas de entrada apenas uma das saida esteja activada (Active Low). Assim, embora as 14 linhas de endereços conectadas a cada circuito de memória levem a seleção simultânea de um determinado local de memória, apenas quele circuito cuja entrada CS estiver activada (Active Low) poderá receber ou enviar dados para as linhas de dados. Note-se que, para além das duas linhas de endereço que entram no descodificador temos ainda a tentrada EN (anable) que recebe o sinal IO/M vindo do microprocessador. Este sinal permite fazer com que os circuitos de memória apenas estejam abilitadas apenas quando este sinal estiver no estado “LOW” , isto é, quando o microprocessador estiver numa operação de escrita ou leitura sobre a memória. Quando o sinal IO/M estiver no estado “High” todas as saidas do descodificador estarão no nível “High”, cortando deste modo a ligação entre os circuitos de memória e o barramento de dados.O esquema em blocos e a tabela de verdade do descodificador é apresentado na figura abaixo.

IO/M A14 A15 S0 S1 S2 S3 1 x x 1 1 1 1 0 0 0 0 1 1 1

Microprocessor and Microcontrollers Page 12 of 92

A1

4 – A15

IO/M

AD

0 – AD

7

AD

0 – A13

AD

0 – A13

AD

0 – A13

AD

0 – A13

8085 0

16kx8

CS

1

16kx8

CS

2

16kx8

CS

3

16kx8

CS

AD0 – A15

AD

0 – AD

7

AD

0 – AD

7

AD

0 – AD

7

Descodificador de

Endereços

EN

Fig 1.10 – Esquema geral de métodos de descodificação da memória para o 8085

A14

Decoder 2 - 4A15

IO/M

S0

S1

S2

S3

Page 13: Microprocessores e Microcontroladores

0 0 1 1 0 1 1 0 1 0 1 1 0 1 0 1 1 1 1 1 0

00 – Chip 001 – Chip 110 – Chip 2 11 – Chip 3

3.2– Interligação de Circuitos de I/O com o Microprocessador

A interligação do microprocessador 8085 aos dipositivos de entrada/saida (I/O) pode ser feita com o recurso a dois métodos diferentes nomeadamente: Método de mapeamento de I/O nos endereços de memória e o método mapeamento de periféricos.

3.2.1 – Método de mapeamento de I/O nos endereços de memória

O acesso a um periférico com o método de mapeamento de I/O nos endereços de memória é similar ao usado para aceder qualquer local de memória. Este método consiste basicamente em usar parte do mapa de endereços de memória para fazer o endereçamento de I/O. Com este método o acesso a um dispositivo de I/O faz-se tal como acontece com o acesso qualquer posição de memória. Assim a leitua ou escrita de insformação num dispositivo de I/O faz-se com as mesmas instruções de leitura ou escrita de memória e o sinal I/O deve ser tratado tal como acontece no acesso a memória. Este método tem a desvantagem de usar parte de endereços de memória pois deste modo nem todo o mapa de nedereços pode ser usado para a memória. A figura 1.12 mostra o exemplo de mapeamento de I/O na gama de endereços de memória.

Microprocessor and Microcontrollers Page 13 of 92

Para cada um circuitos de memóriaPara o Descodificador 0000H – 3FFFFH

Faixa de endereços de cada circuito chip

Chip 0: 0000H – 3FFFH

Chip 1: 4000H – 7FFFH

Chip 2: 8000H – BFFFH

Chip 3: C000H – FFFFH

Fig. 1.11 - Esquema de descodificador de endereços

Fig. 1.12 - Esquema geral do sistema de endereçamento dos circuitos de memória da fig 1.10

Mapa de I/O

0000H

2F00H

2FFFH

FFFFH

I/O

Dispositivo 7

Dispositivo 6

Dispositivo 5

Dispositivo 4

Dispositivo 3

Dispositivo 2

Dispositivo 1

Dispositivo 0

2FE0H – 2FFFH

2FC0H – 2FDFH

2FA0H – 2FBFH

2F80H – 2F9FH

2F60H – 2F7FH

2F40H – 2F5FH

2F20H – 2F3FH

2F00H – 2F1FH

Mapa de da Memória

00 0000 0000 0000 – 11 1111 1111 1111 b

Page 14: Microprocessores e Microcontroladores

No exemplo da figura acima aos despositivos de I/O está reservada a faixa de endereços de 2F00H a 2FFFH (0010 1111 0000 0000b a 0010 1111 1111 1111b). Assim o sistema não deve usar estes endereços para as operações normais de memória. Ao invez disto, o circuito de descodificação de I/O deverá detectar estes endereços a selecionar o dispositivo indicado.Repare-se que a cada dispositivo está reservado não apenas um único endereço mas sim uma faixa de endereços. Por exemplo, qualquer endereço na faixa de 2FE0H a 3FFFH (0010 1111 1110 0000 a 0011 1111 1111 1111) irá selecionar o dispositivo 7. A razão do uso de um bloco de endereços para selecionar um dispositivo ao invés de um simples endereço tem a ver com a redução de número de linhas de endereço necessárias para a seleção de um dado dispositivo. Tal como se ilustra na figura abaixo.

Neste exemplo as linhas de endereço A15 – A8 são usadas para selecionar a faixa de endereços reservada a operações com despositivos de I/O. O valo 2FH nos bits A15 a A8 selecuiona a faixa de endereços reservados a I/O. As linhas A7 a A5 (mostrads com o siblo x) são para a seleção de um dos oito dispositivos de I/O. As linhas A4 a A0 não são usadas para o endereçamento de qualquer dispositivo de I/O, resultando deste modo num circuito de decodificação de endereços mais simplificado. A figura 1.14 mostra o exemplo de um circuito de descodificação de endereços de I/O para o caso de acesso de dispositivos de I/O através do mapeamento de I/O nos endereços de memória

Microprocessor and Microcontrollers Page 14 of 92

Fig. 1.12 – Exemplo de endereçamento de I/O no mapa de endereços de memória

A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 0 0 1 0 1 1 1 1 x x x DC DC DC DC DC

Fig. 1.13 – Exemplo de distribuição de linhas de endereços no acesso de I/O atraves do mapeamento de I/O nos endereços de memória

A15

A14

A13

A12

A11

A10

A9

A8

A7

A6

A5

+5V

IO/M

A

B

C

G1

G2A

G2B

Y0

Y1

Y2

Y3

Y4

Y5

Y6

Y7

Devoce 0

Devoce 1

Devoce 2

Devoce 3

Devoce 4

Devoce 5

Devoce 6

Devoce 7

74LS30N

Page 15: Microprocessores e Microcontroladores

Na figura acima as linhas de endereço A15 – A8 são conectadas as entradas de uma porta NAND (74LS30N). A saida da gate só irá estar activada (Nivel Lógico “LOW”) apenas quando os oito bits mais significativo (A15 – A8) do endereço que é levado a meória tiverem o valor 2FH (0010 1111b). O sinal a saida da porta NAND (cujo estado activo é “LOW”) é conectado a uma das ntrads de “ANABEL” do descodificador de 3 por 8 (74LS138). A outra entrada de “ANABLE” do descodificador (também de estado activo “LOW”) é conectada ao sinal IO/M vindo do microprocessador. Deste modo o descodificador só estará abilitado quando o sinal IO/M estiver no nível lógico “LOW” significando que o microprocessador está numa operação de aceso a memória e os oitos bits mais significativosdo endereço tiverem o valor 2FH indicando que a operação de leitura ou escrita é dirigida ao bloco de memória reservado a despositivos de I/O, para o caso aqui exemplificado.As linhas de endereço A7, A6 e A5 são conectadas as três entradas de seleção do descodificador. Desde modo, os três bits de endereço que aparecem nestas linhas irão activar (Estado activo “LOW”) uma das saidas do descodificador, selecionado desde modo um dos 8 despositivos de I/O.

3.2.2 - MÉTODO DE MAPEAMENTO DE PERIFÉRICOS.

No método de endereçamento de periféricos por mapeamento de periféricos a faixa de endereços para o acesso a dispositivos de I/O está fora do mapa de endereços do sistema de memórias. Isto significa que os dispositos de I/O têm o seu próprio mapa de endereços que não faz parte do mapa de endereços de memórias do sistema. A figura 1.15 mostra o mapa de memórias e o mapa de I/O para um sistema que usa o metodo de mapeamento de I/O.

Microprocessor and Microcontrollers Page 15 of 92

74LS138N

Fig1.14 – Exemplo de circuito de descodificação de endereços de I/O usando Uma faixa de endereços de memória

Mapa de memória

0000H

FFFFH

Mapa de I/O

5FH

40H

FFH

00H

I/Os 0 - 7

I/O 0

I/O 75FH

40H

5CH – 5FH

40H – 43H

Page 16: Microprocessores e Microcontroladores

A vantagem deste método está no facto de que o mapa de endereços de memórias é usado todo ele para o acesso a memória. Porém, neste métodos, o acesso de dispositivos de I/O deve ser feito usando exclusivamente instruções concebidas especialmente para a comunicação de I/o.

Quando se usa o método de mapeamento de periféricos o 8085 usa um endereço de apenas 8 bits para o acesso de I/O. Estes podem ser os oito bits menos significativos (AD0 a AD7) ou os oito bits mais significativos ( A8 a A15). Assim, a faixa de endereços para o acesso de dispositivos de I/O vai de 00H a FFH. Na execussão de uma instrução de entrada ou saida (I/O) os oito bits de endereço são enviados para as oito linhas mais significativas do barramento de endereços (A15 – A8) e, ao mesmo tempo, também para as oito linhas menos significativas do barramento (AD7 – AD0).

Na figura acima está exemplificado um caso de acesso de 8 dispositivos de I/O usando a faixa de endereços de 40H a 5FH ( 0100 0000 a 0101 1111) ocupando deste modo um total de 32 endereços. Os restantes endereços estrão assim disponíveis para outros despositivos. Para o acesso de cada um dos oito dispositivos a faixa de endereços de 40F a 5F é subdividida em 8 subfaiaxas. Assim, a cada dispositivo está reservada uma faixa de 4 endereços. Para a seleção de cada um dos oito dispositivos será necessário um descodificador de 3 por 8. Assim, 3 linhas de endereço (das oito disponíveis para as operações de I/O) podem ser usadas como entrada do descodificador. Para a seleção de todo o bloco de endereços reservado a estes 8 dispositivos (Isto é, para a abilitação do descodificador) terá que se selecionar o conjunto de bits que se mantém constante em toda a faixa de endereços de 40H a 5FH. A figura 1.16 mostra o “layout” de bits das linhas de endereços durante o processo de acesso destes oito dispositivos.

Como se pode observar, para a faixa de endereços de 40H a 5FH as linhas de endereços AD7 – AD5 mantêm-se em 010. Assim, esta combinação de bits vai ser usada para a abilitação do descodificador . Para a selecção de um dispositivo específico serão então usadas as linhas AD4 – AD2 como entradas do descodificador e as linhas AD1 – AD0 “são don’t cares”. Como foi mencionado na secção anterior, esta forma de implementar o mecanismo de descodifição de endereços visa simplesmente simplificar o circuito de discodificação.A figura 1.17 mosta a implemetação do circuito de descodificação do exemplo em consideraç`ao.

Microprocessor and Microcontrollers Page 16 of 92

Fig. 1.15 - Mapa de Memórias e Mapa de I/O para um sistema de mapeamento de I/Os

AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0

0 1 0 x x x DC DC

Fig.1.16 – Layout dos bits das linhas de endereço no acesso dos I/O na faixa de 40H a 5FH

Page 17: Microprocessores e Microcontroladores

Na figura acima , quando AD7 – AD5 são 010 o sinal a saida da porta NAND é activado (Active LOW). O sinal a saida desta Gate é usado como entrada entrada de um dos “Anables” do descodificador. A outra entrada de “Anable” do descodificador (G1) de tipo “Active High” é conectada ao sinal IO/M que, quando o microprocessador está acedendo um dispositivo de I/O é levado a nível High.em conjunto com o sinal é usado para abilitar o descodificador. A terceira entrada de “Anable” do descodificador é conectada permanentemente a terra. As entrada de selecção do descodificador são conectadas as linhas de endereço do microprocessador AD2, AD3 e AD4 para a seleção de um dos oito despositivos de Entrada/Saida.

Exemplo 2 – Usar endereços de 50H a 5FH para o acesso de 4 dispositivos de I/O

50 a 5F = 0101 00 00 a 0101 11 11

2 – PROGRAMAÇÃO DO 8085

2.1 - IntroduçãoComo foi mencionado no capítulo anterior, o microprocessador é programado a nível de linguagem assemby. Por se tratar de programação de baixo nível, o programador deverá conhecer a arquitetura do microprocessador em uso para que possa fazer o uso correcto dos registos internos do microprocessador. Este conhecimento terá que se estender até ao nível de bits, isto é, de quanto bits são constituidos os registos e como é que os bits de um registo podem ser individualmente manipulados. Assim, para começar a programar o 8085 teremos que, primeiro , considerar o seu modelo de programação que, como já mencionado, trata-se do conecimento do layout dos registos do microprocessador. A figura 2.1 mostra o modelo de programação do 8085

Microprocessor and Microcontrollers Page 17 of 92

AD2

AD3

AD4

IO/M

A

B

C

G1

~G2A

~G2B

Y0

Y1

Y2

Y3

Y4

Y5

Y6

Y7

Devoce 0

Devoce 1

Devoce 2

Devoce 3

Devoce 4

Devoce 5

Devoce 6

Devoce 7

AD5

AD6

AD7

74LS138N

Fig. 1.17 – Circuito típico de descodificação por mapeamneto de I/Os para o 8085

Acumulador A (8 ) Registo de Estado F (8 )B (8 ) C (8 )

D (8 ) E (8 )

H (8 ) L (8 )

Apontador da Pilha (SP) (16)

Contador de programas (PC) (16)

Fig. 2.1 – Modelo de programação do 8085

Page 18: Microprocessores e Microcontroladores

Como se pode observar na figura acima, o 8085 apresenta seis registos de oito bits para o uso geral nomeadamente, registos B, C, D, E, H e L. Para além destes a figura mostra também outros quatro registos de uso específico nomeadamente o acumulador de (A) e o registo de estado (Flag Regisster) ambos de oito bits e o contador de programas (PC) e o apontador de pilha (SP) estes de 16 bits cada. Na programação é importante conhecer a letra (em maiscula) usada como simblo de cada um dos registos porque em assembly esses simblos são usados para se referir aos registos a que elas representam. O Acumulado é usado em todas as operações artiméticas e lógicas. Nas suas operações, a ALU usa quase sempre o acumulador como fonte do operando (ou um dos operandos) da instrução. O resultado da operação levada a cabo na ALU é tamém quase sempre guardado no acumulado.O apontador de programas (Stack Pointer) é um registo de 16 bits que guarda o endereço do topo da pilha, uma área de memória reservada a aplicações especias durante a execussão de programas (O assunto de uso de pilha será considerado nos próximos capítulos).O contador de programas é um registo de 16 bits que contém o endereço da próxima instrução a se buscar da memória para ser executada enquanto que o registo de estado contém informação sobre o estado do acumulador resultante da última operação lógica ou artimética executada na ALU tal como se mostra no quadro que se segue.

Cada um dos 8 bits do registo de estado indica uma determinada situação do acumulador tal como a seguir se descreve:

● S (sign ) – Este bit é activado (é levado ao valor binário 1) se, como resultado da última operação artimética executada na ALU o bit mais significativo do acumulador (D7) ficou com o valor binário 1. Este bit é usado em operações artiméticas com numeros sinalizados para indicar se o resultado é um valor negativo (S = 1) ou positivo (S=0).

● Z (Zero) – Este bit é activado quando a última operação lógica ou artimética executada na ALU fez com que o acumulador ficasse com o valor zero. ● AC (Carry Auxiliar) – Este bit é activado quando, durante uma operação um carry (vai 1) ocorrer entre D3 e D4 do acumulador. Este “Flag é usado internamente nas operações de conversão para BCD, não sendo disponível para o programador.

● P (Paridade) – Este bit é activado se, como resultado da última operação lógica ou artimética executada na ALU o acumulador ficou com um numero par de 1s.

● CY (Carry) – Este bit é activado se a operação efectudada gerou um carry (vai 1) em D7.

Microprocessor and Microcontrollers Page 18 of 92

D0D1D2D3D4D5D6D7

S Z AC P CY

Fig. 2.2 - Formato do “Flag Register” do 8085

Page 19: Microprocessores e Microcontroladores

Os “Flag”S, Z, P e CY são normalmente usados pelo programador em operações de saltos (Jump) condicionais, chamadas a subrotinas e retorno de subrotinas ou ainda na tomada de decisões nas operações lógicas e artiméticas.Outro aspecto importante mostrado no modelo de programação é o alinhamento em pares dos registos de uso geral. Cada um dos pares mostrados pode ser usado como se se tratasse de um único registo de 16 bits para as operações que envolvem números de 16 bits. Este mecanismo é usado em quase todos os microprocessadores em que os registos de uso geral são de 8 bits para obter registos de 16 bits (ou para obter registos de 32 bits para o caso de microprocessadore com registos de uso geral de 16 bits). Assim, para o 8085 pode se formar pares de registo BC, DE, e HL.

2.2 – Operações Típicas do 8085

2.2.1 – Operações de Transferência de Dados

As operações de transferência de dados, tal como foi visto nos capítulos anteriores, englobam instruções que permitem a cópia de dados de um registo para outro registo, de memória para um registo, de registo para a memória, de acumulador para um dispositivo de I/O ou de um dispositivo de I/O para o acumulador.No 8085 o formato de instruções de transferência de dados é:

Opcode destino, fonte

O conjunto de instruções de transferência de dados do 8085 são:

MVI R , dado (8 bits) - Levar o operando dado para o registo RMVI M, dado (8 bits) - Levar o operando dado para o local de memória cujo endereço se encontra no para HL.MOV R1, R2 - Mover o conteudo do registo R2 para o registo R1. MOV R , M - Mover o conteúdo de local de memória cujo endereço se encontra no

par HL para o registo R.MOV M, R – Mover o conteúdo do registo R para o local de memória cujo endereço

se localiza no par HL.LXI Rp, dado (16 bits) – Levar o operando dado (um valor de 16 bits) para o par de registos RpLDA dado (16 bits) – Trazer para o acumulador o conteúdo do local de memória apontado pelo operando dado.LDAX Rp – Trazer para o acumulador o conteudo do local de memória cujo endereço

se encontra no par de registos Rp LHLD dado (16 bits) – Trazer para o registo L o conteúdo do local de memória apontado pelo operando dado e depois trazer para o registo H o

conteúdo do local de memória endereçado por dado+1 (isto é, o local logo a seguir ao endereço dado)

STA dado (16 bits) – Levar o conteúdo do acumulador para o local de memória apontado pelo operando dado.

STAX Rp - Levar o conteúdo do acumulador para o local de memória apontado pelo par de registos Rp.

Microprocessor and Microcontrollers Page 19 of 92

Page 20: Microprocessores e Microcontroladores

SHLD dado (16 bits) – O conteúdo do registo L é guardado no local de memória cujo endereço é o operando dado e o conteúdo do registo H é guardado no endereço dado+1 (isto é o local de memória logo a seguir ao endereço dado).

XCHG – O conteúdo do par de registo HL é levado para o par DE e o conteúdo do par DE levado para o par HL. Esta é uma operação de troca de conteúdos destes pares de registos.

IN port (8 bits) – Buscar um dado do dispositivo de entrada cujo endereço é operando port para o acumulador. Note-se que port é um valor de

8 bits.OUT port (8 bits) – Guardar ao conteúdo do acumulador no didpositivo de saida cujo endereço (de 8 bits) é o operando port. O exemplo que se segue mostra o uso de algumas destas instruções na elaboração de um programa em assembly de 8085.

Enunciado: Elaborar um programa que lê um dado localizado na posição 2050H da memória para o registo B e um outro localizado na posição 2070H para o registo D. Depois envia o dado em B para um dispositivos de saida com os endereços 80H e o dado em D para um outro dispositivo de saida com endereço 90H.

Repare que está tarefa poderia ser conseguida de forma muito mais simples como a seguir se mostra.

2.3 – Modos de EndereçamentoPor modos de endereçamento refere-se aos métodos de indicação do local para onde (ou donde) um determinado dado deve ser transferido. O microprocessador 8085 apresenta 4 modos de endereçamento que a seguir passamos a consider:

1 - Endereçamento Imediato – As instruções de transferência de dados constituidas pelo Opcode seguido de um operando de tipo dado são designadas de instruções com

Microprocessor and Microcontrollers Page 20 of 92

Solução 1:

LDA 2050H - Levar do local de me mória apontado por 2050H para o acumuladorMOV B, A - Transferir do acumulador para o registo BLDA 2070H - Levar do local de me mória apontado por 2070H para o acumuladorMOV D, A - Transferir do acumulador para o registo DOUT 90H - Enviar o conteudo do acumulador para o despositivo de saida com endereço 90HMOV A, B - Trazer do registo B para o acumuladorOUT 80H - Enviar o conteudo do acumulador para o despositivo de saida com endereço 80H

Solução 2:

LDA 2050H - Levar do local de me mória apontado por 2050H para o acumuladorOUT 80H - Enviar o conteudo do acumulador para o despositivo de saida com endereço 80HLDA 2070H - Levar do local de me mória apontado por 2070H para o acumuladorOUT 90H - Enviar o conteudo do acumulador para o despositivo de saida com endereço 90H

Page 21: Microprocessores e Microcontroladores

endereçamento imediato. Estas instruções são constituidas de 2 ou três bytes em que o primeiro byte é o opcode e o segundo (e terceiro) o operando do tipo dado que pode ser de 8 bits ou 16 bits. Um exemplo deste tipo de endereçamento é encontrado na instrução:

MVI B, F8H

Nesta instrução o dado F8H é transferido para o registo B

2 – Endereçamento por Registo – Instruções de transferência de dados em que tanto a fonte como o destino são registos são designadas de instruções com o modo de endereçamento por registos. Neste tipo de endereçamento a instrução é constituida por um único byte que por si só contem a informação sobre a tarefa a ser executada, a fonte e o destino do(s) operando(s). Um exemplo deste tipo de endereçamento é encontrado na instrução: MOV B, ANesta instrução o conteúdo do acumulador é transferido para o registo B

3 – Endereçamento Directo - As instruções de transferência de dados constituidas pelo Opcode seguido de um operando de tipo endereço são designadas de instruções com Endereçamento Directo. Instruções com este tipo de endereçamento são constituidas por 3 bytes; o opcode e e 16 bits que constituem o endereço de um local de memória onde se tem que buscar ou guardar um dado. Um exemplo deste tipo de endereçamento é encontrado na instrução: STA 2020HNesta instrução o conteudo do acumulador é levado para o local de memória endereçado pelo operando 2020H

4 – Endereçamento Indirecto - Instruções de transferência de dados em que o endereço do local de memória para onde (ou donde) o dado deve ser transferido se encontra num dos pares de registos são designadas de instruções com Endereçamento Inirecto. Estas instruções são constituidas de um único byte. Os 8 bits definem a tarefa em si a ser executada e o par de registos que contém o endereço de um local de memória onde se tem que buscar ou guardar um dado. Um exemplo deste tipo de endereçamento é encontrado na instrução:

MOV M , A

Nesta instrução o conteudo do acumulador é levado para o local de memória cujo endereçado se encontra no par HL

O entendimento dos diferentes modos de endereçamento ajuda a dominar os tipos de instruções de transferência de dados.

2.4 – Operações Artiméticas

As instruções neste grupo realizam várias operações artiméticas tais como adição, subtração, incremento e decremento. Na maioria das vezes um dos operandos está no acumulador e o resultado é guardado também no acumulador. Após a operação os “Flags” do registo de estado são activados ou desactivados de acordo com o resultado da operação.As instruções para as operações artiméticas do 8085 são:

Microprocessor and Microcontrollers Page 21 of 92

Page 22: Microprocessores e Microcontroladores

ADD R - O conteúdo do registo R é adicionado ao conteúdo do acumulador e o resultado é guardado no acumulador. ADD M - O conteúdo do local de memória cujo endereço se encontra no par de registos HL é adicionado ao conteúdo do acumulador e o resultado é guardado no acumulador.

ADI dado (8 bits) - O operando dado (de 8 bits) é adicionado ao conteúdo do acumulador e o resultado é guardado no acumulador.

ADC R - O conteúdo do registo R e o Carry são adicionados ao conteúdo do acumulador e o resultado é guardado no acumulador.

ADC M - O conteúdo do local de memória cujo endereço se encontra no par de registos HL e o Carry são adicionados ao conteúdo do acumulador e o resultado é guardado no acumulador.

ACI dado (8 bits) - O operando dado (de 8 bits) e o carry sao adicionados ao conteúdo do acumulador e o resultado é guardado no acumulador.

As três últimas instruções são usadas na adição com números com mais de 8 bits.

DAD Rp - O conteúdo do do par de registos Rp é adicionado ao conteúdo do par de registos HL e o resultado guardado no par HL.

SUB R - O conteúdo do registo R é subtraido do conteúdo do acumulador e o resultado é guardado no acumulador. (A = A – R)

SUB M - O conteúdo do local de memória cujo endereço se encontra no par de registos HL é subtraido do conteúdo do acumulador e o resultado é guardado no acumulador. (A = A – M)

SUI dado (8 bits) - O operando dado (de 8 bits) é subtraido do conteúdo do acumulador e o resultado é guardado no acumulador (A = A - dado).

SBB R - O conteúdo do registo R e o Carry são subtraidos ao conteúdo do acumulador e o resultado é guardado no acumulador (A = A –CY – M).

SBB M - O conteúdo do local de memória cujo endereço se encontra no par de registos HL e o Carry são subtraidos conteúdo do acumulador e o resultado é guardado no acumulador. (A = A – Cy – M)

SBI dado (8 bits) - O operando dado (de 8 bits) e o carry sao subtraidos do conteúdo do acumulador e o resultado é guardado no acumulador

(A = A – Cy – dado).As três últimas instruções são usadas na subtração com números com mais de 8 bits.

Microprocessor and Microcontrollers Page 22 of 92

Page 23: Microprocessores e Microcontroladores

INR R – O conteúdo do registo R é incrementado por 1.

INR M – O conteúdo da posição de memória cujo endereço se encontra no par HL é incrementado por 1.

INX Rp - O conteúdo do par de registos Rp é incrementadr por 1.

DCR R – O conteúdo do registo R é decrementado por 1.

DCR M – O conteúdo da posição de memória cujo endereço se encontra no par HLé decrementado por 1.

DCX Rp - O conteúdo do par de registos Rp é decrementado por 1.DAA – O número binário de 8 bits que se encontra no acumulador é ajustado para formar 2 digitos BCD de 4 bits cada. O exemplo que se segue mostra o uso de alugumas destas instruções na elaboração de um programa em assembly de 8085.

Exemplo1 :Elaborar um programa que adiciona os conteúdo das posições de memória cujos endereços são 2020H e 2021H e guarda o resultado na posição 2022H

([ 2022] [2020h] + [2021H])

e depois subtrai o conteúdo da posição 2021H do conteúdo da posição 2020H e guarda a diferença na posição 2023H

([ 2023] [2021h] - [2020H]).

Microprocessor and Microcontrollers Page 23 of 92

Solução 1:LDA 2020H - Carregar para o camulador o conteudo do local de memória cujo endereço é 2020HMOV B, A - Guardar (temporariamente) o conteudo do acumulador no registo BLDA 2021H - Carregar para o camulador o conteudo do local de memória cujo endereço é 2021HMOV C, A - Guardar (temporariamente) o conteudo do acumulador no registo CADD B - Adicionar o conteudo do acumulador com o conteudo do registo B. O resultado fica no AccSAT 2022H - O conteudo do acumulado é guardado no loacl de memória apontado pelo endereço 2022H MOV A, B - Retornar para o acumulador o dado guardado no registo BSUB C - Subtrair o conteudo do acumulador do o conteudo do registo C. O resultado fica no AccSTA 2023H - O conteudo do acumulado é guardado no loacl de memória apontado pelo endereço 2023H

Solução 2:

LXI H, 2020H - Levar o operando 2020H (endereço do segundo operando) para o par HLLDA 2021H - Carregar para o camulador o conteudo do local de memória cujo endereço é 2021HADC M - Somar o conteudo do acumulador com o apontado por HL STA 2022H - O conteudo do acumulado é guardado no loacl de memória apontado pelo endereço 2022H LDA 2021H - Carregar para o camulador o conteudo do local de memória cujo endereço é 2021HSUB M - (A = A – M)STA 2023H - O conteudo do acumulado é guardado no loacl de memória apontado pelo endereço 2023H

Page 24: Microprocessores e Microcontroladores

2.5 – Operações LógicasAs instruções das operações lógicas do 8085 realizam os operadores AND, OR, XOR, NOT e operações de rotação. Tal como nas operações artiméticas, o acumulador é usado como fonte do operando (ou um dos operandos) e o resultado é retornado para o acumulador. No 8085 as instruções para as operações lógicas são:

ANA R - Realiza a operação AND entre o conteúdo do Acumulador com o conteúdo do registo R. O resultado é retornado para o acumulador. ANA M - Realiza a operação AND entre o conteúdo do acumulador com o conteúdo do local de memória apontado pelo par HL. O resultado é retornado para o acumulador.

ANI dado (8 bits) – Realiza a operação AND entre o conteúdo do acumulador com o operando dado. O resultado é retornado para o acumulador.

ORA R - Realiza a operação OR entre o conteúdo do Acumulador com o conteúdo do registo R. O resultado é retornado para o acumulador.

ORA M - Realiza a operação OR entre o conteúdo do acumulador com o

conteúdo do local de memória apontado pelo par HL. O resultado é retornado para o acumulador.

ORI dado (8 bits) – Realiza a operação OR entre o conteúdo do acumulador com o operando dado. O resultado é retornado para o acumulador.

XRA R - Realiza a operação XOR entre o conteúdo do Acumulador com o conteúdo do registo R. O resultado é retornado para o acumulador.

XRA M - Realiza a operação XOR entre o conteúdo do acumulador com o

conteúdo do local de memória apontado pelo par HL. O resultado é retornado para o acumulador.

XRI dado (8 bits) – Realiza a operação OR entre o conteúdo do acumulador com o operando dado. O resultado é retornado para o acumulador.

CMP R – O conteúdo do registo R é comparado com o conteúdo do acumuador. O

Microprocessor and Microcontrollers Page 24 of 92

Page 25: Microprocessores e Microcontroladores

conteúdo do acumulador não é alterado. Os bits do registo de Flags são activados (ou desactivados) de acordo com o resultado da comparação. O “Flag” Z é activado se (A) = (R). O “Flag” CY é activado se (A) < (B).

Se (A) > (B) ambos os “Flags” Z e CY são desactivados.

CMP M – O conteúdo do local de memória apontado pelo par de registos HL é comparado com o conteúdo do acumuador. O conteúdo do acumulador não é alterado. Os bits do registo de Flags são activados (ou desactivados) de acordo com o resultado da comparação. O “Flag” Z é activado se (A) = (HL). O “Flag” CY é activado se (A) <(HL). Se (A) > (HL) ambos os “Flags” Z e CY são desactivados.

CPI dado (8 bits) - O conteúdo do acumuado é comparado com o operando dado. O conteúdo do acumulador não é alterado.

O “Flag” Z é activado se (A) = dado. O “Flag” CY é activado se (A) < dado. Se (A) > dado ambos os “Flags” Z e CY são desactivados.

RLC – O conteúdo do acumulador é sujeito a uma rotação para a esquerda em uma posição. O bit mais significativo passa para o local do Carry e para a posição do bit menos significativo. A figura 2.3 ilustra esta operação.

RRC - O conteúdo do acumulador é sujeito a uma rotação para a direita em uma posição. O bit menos significativo passa para o local do Carry e para a posição do bit mais significativo. A figura 2.4 ilustra esta operação.

RAL – O conteúdo do acumulador é sujeito a uma rotação para a esquerda em uma posição passando pelo “Flag”. O bits do Carry passa para a posição do bit menos significativo e o bit mais significativo passa para a posiçao do Carry. A figura 2.5 ilustra esta operação.

Microprocessor and Microcontrollers Page 25 of 92

AcumuladorCY

Fig. 2.3 – Instrução RLC

CY

Acumulador

Fig. 2.5 – Instrução RAL

CY

Acumulador

Fig. 2.4 – Instrução RRC

Page 26: Microprocessores e Microcontroladores

RAR – O conteúdo do acumulador é sujeito a uma rotação para a direita em uma posição passando pelo “Flag”. O bits do Carry passa para a posição do bit mais significativo e o bit menos significativo passa para a posiçao do Carry. A figura 2.6 ilustra esta operação.

CMA – O conteúdo do acumulador é complementadoCMC – O Carry é complementadoSTC – O Carry é activado

O exemplo que se segue mostra o uso de alugumas destas instruções na elaboração de um programa em assembly de 8085.

Elaborar um programa que lê um dado duma porta de entrada com endereço 85H e salva no endereço 201F da memória. Depos faz uma rotação em uma posição a esquerda dos bits do dado lido, aplica uma operação de AND do valor que foi submetido a rotação com o valor 55H e guarda o resultado na posição 2020H da memória.

2.6 – Operações de SaltoAs Operações de Salto ou desvio são usadas para efectuar desvios condicionais ou incondicionais da sequência do programa, chamadas e retornos de subrotinas, e reinicializações.Os saltos condicionais baseiam-se na análise do estado dos “flags” Z, CY, P ou S. No 8085 as instruções para as operações de salto são:

JMP endereço (16 bits) – A sequência do programa é transferida para a instrução localizada no endereço indicado. Neste caso trata-se de um salto incondicional

JC endereço (16 bits) - A sequência do programa é transferida para a instrução localizada no endereço indicado se o “flag” do Carry estiver activado.

JNC endereço (16 bits)- A sequência do programa é transferida para a instrução localizada no endereço indicado se o “flag” do Carry não estiver activado.

Microprocessor and Microcontrollers Page 26 of 92

CYAcumulador

Fig. 2.6 – Instrução RAR

Solução :IN 85H - Ler o dado do port (endereço 85H) para o acumulador STA 201FH - Guardar o dado na memória (endereço 201fH)RLC - Um “shift” a esquerda do conteúdo do acumuladorANI 55H - Operação AND entre o conteúdo do acumulador e o dado 55HSTA 2020H - Guardar o conteúdo do acumulador na memória (endereço 2020H)

Page 27: Microprocessores e Microcontroladores

JZ endereço (16 bits)- A sequência do programa é transferida para a instrução localizada no endereço indicado se o “flag” Z estiver activado.

JNZ endereço (16 bits)- A sequência do programa é transferida para a instrução localizada no endereço indicado se o “flag” Z não estiver activado.

JP endereço (16 bits)- A sequência do programa é transferida para a instrução localizada no endereço indicado se o “flag” S não estiver activado que é a indicação de um sinal positivo ou não negativo.

JM endereço (16 bits)- A sequência do programa é transferida para a instrução localizada no endereço indicado se o “flag” S estiver activado que é a indicação de um sinal negativo.

JPE endereço (16 bits)- A sequência do programa é transferida para a instrução localizada no endereço indicado se o “flag” P estiver activado que é a indicação de uma paridade par.

JPO endereço (16 bits)- A sequência do programa é transferida para a instrução localizada no endereço indicado se o “flag” P não estiver activado que é a indicação de uma paridade impar.

CALL endereço (16 bits)- A sequência do programa é transferida para a instrução localizada no endereço indicado e o endereço da instrução logo a seguir a CALL é levada para o topo da pilha.CZ endereço (16 bits)- Se o “flag” Z estiver activado a sequência do programa é transferida para a instrução localizada no endereço indicado e o endereço da instrução a logo a seguir a CZ é levada para o topo da pilha.

CNZ endereço (16 bits)- Se o “flag” Z não estiver activado a sequência do programa é transferida para a instrução localizada no endereço indicado e o endereço da instrução a logo a seguir a CZ é levada para o topo da pilha.

CC endereço (16 bits)- Se o “flag” CY estiver activado a sequência do programa é transferida para a instrução localizada no endereço indicado e o endereço da instrução a logo a seguir a CC é levada para o topo da pilha.

CNC endereço (16 bits)- Se o “flag” CY não estiver activado a sequência do programa é transferido para a instrução localizada no endereço indicado e o endereço da instrução a logo a seguir a CNC é levada para o topo da pilha.

CP endereço (16 bits)- Se o “flag” S não estiver activado a sequência do programa é transferida para a instrução localizada no endereço indicado e o endereço da instrução a logo a seguir a CP é levada para o topo da pilha.

CM endereço (16 bits)- Se o “flag” S estiver activado a sequência do programa é transferida para a instrução localizada no endereço indicado e o endereço da instrução a logo a seguir a CM é levada para o topo da pilha.

CPO endereço (16 bits)- Se o “flag” P não estiver activado (paridade impar) a sequência do programa é transferida para a instrução localizada no endereço indicado e o endereço da instrução a logo a seguir a CPO é levada para o topo da pilha.

Microprocessor and Microcontrollers Page 27 of 92

Page 28: Microprocessores e Microcontroladores

CPE endereço (16 bits)- Se o “flag” P estiver activado (paridade par) a sequência do programa é transferida para a instrução localizada no endereço indicado e o endereço da instrução a logo a seguir a CPE é levada para o topo da pilha.

RET - A sequência do programa é transferida para o endereço que se encontra no topo da pilha.

RZ - A sequência do programa é transferido para o endereço que se encontra no topo da pilha se o “flag” Z estiver activado.

RNZ - A sequência do programa é transferido para o endereço que se encontra no topo da pilha se o “flag” Z não estiver activado.

RC - A sequência do programa é transferido para o endereço que se encontra no topo da pilha se o “flag” CY estiver activado.

RNC - A sequência do programa é transferido para o endereço que se encontra no topo da pilha se o “flag” CY não estiver activado.

RP - A sequência do programa é transferido para o endereço que se encontra no topo da pilha se o “flag” S não estiver activado.

RM - A sequência do programa é transferido para o endereço que se encontra no topo da pilha se o “flag” S estiver activado.

RPO - A sequência do programa é transferido para o endereço que se encontra no topo da pilha se o “flag” P não estiver activado (paridade impar).

RPE - A sequência do programa é transferido para o endereço que se encontra no topo da pilha se o “flag” P estiver activado (paridade par).

RST n (onde n = 0 a 7) - A sequência do programa é transferido para um dos oito locais fixos de memórias situados entre os endereços 0000H a 0038H. Estas instruções são usadas em conjunto com as interrupções. O endereço logo a seguir a instrução RST é guardado no topo da pilha.

PCHL – O conteúdo do par de registos HL é levado para o registo contador de programas (PC).

O exemplo que se segue mostra o uso de alugumas destas instruções na elaboração de um programa em assembly de 8085.

Escrever um programa que lê continuamenteb o conteudo de um dispositivo de entrada com endereço 80H e faz o teste do bit 0 do dado lido. A leitura do dispositivo só termina se se constatar que o bit 0 está activado. Neste caso a execussão do programa deve prosseguir no endereço 4040H.

Microprocessor and Microcontrollers Page 28 of 92

Solução1 : Incio: IN 80H - Ler o dado do port (endereço 80H) para o acumulador . Inicio é um Lable ANI 01H - Operação AND entre o conteudo do acumulador e o operando 01H JZ inicio - Saltar para a instrução com o lable inicio se o flag Z estiver activado (significando que o bit zero continua desactivado) JMP 4040H - Salto incondicional para para o endereço 4040H

Page 29: Microprocessores e Microcontroladores

OBS 1: Se o bit 0 tiver sido activado depois desta instrução seria complementado passando para 0 e efectuando a operação AND do acumulador com o valor 01H teriamos o valor zero no acumulador. Se o bit zero estivesse desactivado, depois da operação de complemento passava a ser 1 e a operação AND com o operando 01H deixaria o acumulador com um valor diferente de zeo. Este método de complementar , aplicar a operação AND para depois testar para ver se é o acumulador ficou com o valor zero é um método comumente usado para testar um bit para ver se está activado ou não. OBS 2: Se o programa tiver que ser introduzido a manualmente então não poderiamos usar o lable. Neste caso teriamos que usar o endereço da instrução LDA 3000H que é para onde se deve saltar. Porém, quando se usa o assembler, pode se usar Lables pois o assembler irá converter inserir o endereço correspondente a instrução indicada pelo Lable.

2.7 – Operações de controle da máquina

Microprocessor and Microcontrollers Page 29 of 92

Solução2 : Incio: IN 80H - Ler o dado do port (endereço 80H) para o acumulador . Inicio é um Lable ANI 01H - Operação AND entre o conteudo do acumulador e o operando 01H JNZ 4040H - Se o “flag” Z não estiver activado (significando que o bit 0 estava activado)

saltar para o endereço 4040H JMP inicio - Saltar para a instrução com o lable inicio

Solução3 : Incio: IN 80H - Ler o dado do port (endereço 80H) para o acumulador . Inicio é um Lable CMA - Complementar o acumulador – veja OBS 1 ANI 01H - Operação AND entre o conteudo do acumulador e o operando 01H JZ 4040H - Se o “flag” Z for activado (significando que o bit 0 estava activado)

saltar para o endereço 4040H JMP inicio - Saltar para a instrução com o lable inicio - veja OBS 2

Page 30: Microprocessores e Microcontroladores

As operações de controle da máquina engloba instruções para o controlo da pilha, abilitação e desabilitação de interrupções, controlo das operações de Entrada/Saida serial, não operação e pausa.No 8085 as instruções para as operações de controle da máquina são:

PUSH Rp – O conteudo do par de registos Rp são levados para o topo da pilha. Primeiro a ser levado é o conteudo do registo do bytes mais significativo.

PUSH PSW – O conteudo do acumulador é levado primeiro para o topo da pilha e, de seguida, o conteúdo do registo de estado é levado também para a pilha.

POP Rp – O conteudo do topo da pilha é colocado no registo do byte menos significativo ( C, E, L) do par RP e o byte seguinte da pilha é levado para o registo do byte mais significativo (B, D, H) do par Rp

POR PSW – O conteudo do topo da pilha é levado para o registo de estado e o byte seguinte da pilha é levado para o Acumulador.

XTHL – O conteúdo do topo da pilha é trocado com o conteúdo do registo L, de seguida o conteúdo do byte seguinte da pilha é trocado com o conteúdo do registo H.

SPHL – O conteúdo do para HL é copiado no apontador da pilha (SP).

EI – O Flip-Flop do “Interrupt anable” é activado e todas as entradas de pedido de interrupção são abilitadas.

DI - O Flip-Flop do “Interrupt anable” é desactivado e todas as entradas de pedido de interrupção, com a excepção da entrada TRAP são desabilitadas.

HLT – O processador é levado ao estado de pausa.

NOP – O processador não executa nenhuma operação (útil).

RIM – Esta instrução executa várias acções: Lê o estado das interruções (abilidado ou desabilitado) o estado das entradas de pedidos de interrupção, e a entrada serial de dados (veja figura 2.7).

Microprocessor and Microcontrollers Page 30 of 92

Fig. 2.7 – Estado do Acumulador Depois da instrução RIM

SID I 7.5 I 6.5 I 5.5 IE M 7.5 M 6.5 M 5.5

Bit do dado de entrada

serial

Pedidos de interrupção em

estado de espera (se o bit estiver

activado)

Interrupt Mask (Activado se bit = 1)Flag do

“Interrupt Enable”

Page 31: Microprocessores e Microcontroladores

SIM - Esta instrução também executa várias acções: Ela activa “Interrupt mask” para RST 7.5, 6.5 e 5.4, desactiva o flip-flop de RST 7.5 e activa a saida serial de dados. O acumulador é configurado antes desta instrução de acordo com a figura 2.8.

2.8 – LoopsO loop é uma técnica muito frequentemente usada na programação que consiste e repetir uma sequência de instruções convista a efectuar uma mesma tarefa várias vezes. Determinados tipos de tarefas requerem um loop contínuo enquanto que outros requerem loops condicionais. O loop contínuo é normalmente usado em sistemas em que se requere uma leitura contínua (scanning) de sinais de entradas convista a tomada de uma determinada decisão. Um exemplo deste tipo é um sistema de segurança duma instalação no qual as portas e janelas são contiuamente verificada para se determinar se ocorreu ou não uma intrusão.O loop condicional é aplicado em processos nos quais um conjunto de passos deve ser repetido enquanto uma dada condição for verdadeira.

Microprocessor and Microcontrollers Page 31 of 92

Fig. 2.8 – Configuração do Acumulador para a instrução SIM

SOD SDE xxx R 7.5 MSE M 7.5 M 6.5 M 5.5

Bit do dado de saida

serial

Seria Data

Enable

Interrupt Mask (Activado se bit = 1)Mask

Enable1 = Enable

Desactivar o flip-flop de RST 7.5

Inicio

Ler as entradas

Se o sistema estiver abilitado e se ocorreu

alguma intrusão registar a ocorrência

Se o sitema estiver abilitado e se ocorreu alguma intrusão

emitir o(s) respectivos alarme(s)

Fig.3.1 –a: Fluxograma de loop contínuo

não

Emitir alarmes dos sensores que estiverem

activados

Inicio

Ler as entradas

Activar os meios de combate aos

incendiosRegistar o estado dos restantes

sensores

Sensor de incendio

activado?

sim

Page 32: Microprocessores e Microcontroladores

No 8085 o loop contínuo é implementado com o uso da instrução JMP enquanto que o loop condicional é implementado com o uso de uma das instruções de salto condicional nas quais a condição de um dos flags do registo é testado para se determinar se o salto deverá ocorrer ou não.

Implementação de contadores

Uma das aplicações mais frequentes dos loops na programação em asembly é a contagem de ocorrências de um determinado evento. A forma mais comum de implemetar um mecanismo de contagem é carregar num registo ou par de registos com um determinado valor e, usando uma instrução de salto condicional, decrementar o contado de cada vez que o evento ocorre. Este método funciona se, a prior, sermos capazes de determinar quantas vezes o evento poderá ocorrer. Este método pode também ser usado se se preteder executar uma determinada acção de cada vez que um determinado evento ocorre. Se o número de vezes em que um determinado evento pode ocorrer não poder ser determinado logo a partida então a solução é usar um registo ou par de registos para, partindo de zero, ir incrementando por 1 de cada vez que o evento ocorre.O fluxograma da figura 3.3 mostra o esquema geral de implementação de um contador quando o número de vezes em em que um determinado rá ocorrer é conhecido com antecedência.

.

Microprocessor and Microcontrollers Page 32 of 92

O programa em Assembly para este fluxograma é:

MVI contador, valor inicialInicio: Instrução1

Instrução 2 ------------- Instrução n DCR contador

JNZ inicioRET

Fig.3.1 –a: Fluxograma de loop condicional

Não

Decrementar contador

Executar a tarefa

Inicializar o contador

Inicio

contador = 0

Retornar

Sim

Page 33: Microprocessores e Microcontroladores

Exemplo: Elaborar um programa que transfere 100 (1000) bytes da memória, começando do endereço 3400H para um despositivo de saida com endereço 7FH. Suponha que o despositivo pode receber os dados na mesma velocidade de operação do µP.

Para o caso de transferência de 1000 bytes será necessário usar um par de registos para a implementação do contador tal como abaixo se mostra.

Microprocessor and Microcontrollers Page 33 of 92

O programa em Assembly para este fluxograma é:

MVI D, 64HLXI H, 3400H

loop: MOV A, M OUT 7FH

DCR D INX H

JNZ loopHLT

Fig. 3.4 – Exemplo de implementação de contador

Sim

Inicializar o contador

Inicio

Decrementar o contador

Acumulador = 0

Fim

Não

Ler o dado da memória

Enviar o dado para o despositivo

Inicializar BC

Inicio

Decrementar BC

Copiar B no acumulador

Acumulador = 0

Fim

Não

OR A com C

Ler o dado da memória

Enviar para o despositivo

O programa em Assembly para este fluxograma é:

LXI B, 03E8H Inicializar contador (Par BC) LXI H, 3040H Carregar o endereço inicial no par HL Loop: MOV A, M

OUT 7FH INX H incrementar endereço DCX B decrementar contador MOV A, B

OR C testar se o contador já é zero JNZ Loop RET

Inicialização do Registo D para servir de cotador

Inicialização do Par HLcom o endereço de inicio do local onde se vão buscar os dados

Page 34: Microprocessores e Microcontroladores

Como se pode notar, no início o par BC é carregado com o valor 03E8H (1000 decimal) servindo deste modo como um contador. Em cada ciclo do loop o contador é decrementado e o processo termina quando o contador ficar com o valor zero. O método usado para verificar se o conteudo do par BC é através da aplicação do operador OR sobre os registos C (que inicialmente é copiado para o acumulador) e B. De facto, este operador só vai gerar um resultado zero se ambos os registos ficarem com o valor zero.

Implementação de “Delays”

Um dos usos mais communs do loop condicional é na criação de rotinas ou programas para gerar “delays” (retardos). O fluxograma abaixo mostra um rotina que cria um retardo cuja duração é determinada pelo número de vezes em que as instruções dentro do loop serão repetidas. Como se pode observar neste fluxograma, para a criação de um delay é normalmente usada a instrução NOP (no Operation) dentro do loop. Esta instrução apresenta 4 ciclos de máquina. O delay conseguido em cada ciclo do loop será a soma do tempo de execussão da instrução (ou instruções ) NOP com o tempo de execussão da instrução de salto condicional . Note-se que o salto condicional requere duas instruções nomeadamente a de decremento do contador (Neste caso DCR que tem 4 T - states) e a de salto propriamente dito(JNZ que apresenta 10 periodos de clock se o salto ocorrer e 7 periodos de clock se o salto não ocorrer). Assim, o delay obtido em cada ciclo será dado por:

DelayNOP + DelayDCR + DelayJNZ≠0

O Delay total será portanto dado por :

(N-1) * (n x DNOP + DDCR + DJNZ ≠0) + (n x DNOP + DDCR + DJNZ=0)

Microprocessor and Microcontrollers Page 34 of 92

(N-1) * (n x DNOP + DDCR + DJNZ ≠0)

Fig. 3.3 – Exemplo de implementação de contador usando um par de registos

Page 35: Microprocessores e Microcontroladores

Onde N é o número total de loops e n é o número de instruções NOP dentro do loop.

Neste exercicio o valor FFH (255 em decimal) é carregado no registo B , que é usado como contador, e de cada que o loop é executado, este valor é decrementado em uma unidade.

Supondo que o microprocessador opera com um clock de 2MHz teriamos:

T = 1/f = 1/2MHz = 0.5μs

Dt = 254 x ( 4 x 0.5 + 4 x 0.5 + 10 x 0.5) + 4 x 0.5 + 4 x 0.5 + 7 x 0.5 = 2424μs

Para a obtenção de Delays mais longos podem se usar loops aninhados tal como se ilustra no exemplo da figura que se segue.

Microprocessor and Microcontrollers Page 35 of 92

O programa em Assembly para este fluxograma é:

MVI B, FFHInicio: NOP

DCR BJNZ inicioRET

Inicializar o contador

Inicio

NOOP

Decrementar o contador

Contador = 0

Retornar

Não

Sim

O Delay total é dada por:

254x(DNOP + DDCR + DJNZ ≠0) +(DNOP + DDCR + DJNZ=0)

Fig. 3.2 – Uso do Loop condicional na implementação de “Delays”

Não

Inicializar o registo B para o loop externo

Inicio

Inicializar o registo C para o loop interno

Decrementar C

fim

Não

Decrementar B

C = 0 ?

B = 0 ?

O programa em Assembly para este fluxograma é:

MVI B, FFHLoopext: MVI C FFHLoopint : MOV A, L DCR C

JNZ Loop_int DCR B JNZ Loop_ext

27949.5

Esta componente pode se despresar

Page 36: Microprocessores e Microcontroladores

No exemplo acima, o registo C é usado como contador do loop exterior enquanto que o registo B é usado como contador do loop exterior. Assim, para cada iteração do loop exterior o loop interior é executado n vezes onde n é o valor carregado inicialmente no contador do loop interior. Deste modo, o delay total é dado pelo delay do loop interior multiplicado por m, onde m é o valor carregado no loop exterior. Para aumentar mais o delay instruções NOP podem ser inseridos tanto no loop interior como no loop exterior ou em ambos.

IndexaçãoIndexação é uma técnica que consiste em usar um par de registos contendo endereço inicial de um bloco de memória e ir incrementando o conteúdo por 1 para aceder (para leitura ou escrita) sucessivamente locais consecutivos desse bloco de memória. O exercício que se segue mostra o uso do método de indexação.

Exercício: Elaborar um programa que permite mover um bloco de 100 bytes de dados armazenados em locais consecutivos de memória , partindo do endereço 2020H, para um outro bloco de 100 bytes que começa com o endereço 3020H

Microprocessor and Microcontrollers Page 36 of 92D = 0 ?Não

Carregar o endereço de inicio do bloco de origem dos dados para o par HL

Inicio

Carregar o valor 64H no registo D

fim

Guardar o conteudo do Acc. No local de memória apontado BC

Carregar o endereço de inicio do bloco de destino dos dados para o par BC

Buscar o dado apontado por HL para o Acc

Incrementar HL por 1

Incrementar BC por 1

Decrementar D por 1

Sim

Page 37: Microprocessores e Microcontroladores

Neste programa o par de registos HL é inicialmente carregado com o endereço inicial do bloco de 100 bytes de memória de onde se pretende transferir os dados, o par BC é carregado com o endereço inicial do bloco de 100 bytes para onde os dados serão transferidos e o registo D é carregado com o valor 64H para servir de contador.Dentro do loop o local de memória apontado pelo par HL é lido e trazido para o acumulador e, de seguida, o dado no acumulador é transferido para o local de memória apontado pelo par BC. Depois estes registos são incrementados enquanto que o registo D é decrementado. O loop é repetido até que o valor no regidto D se torne zero indicando que todos os 100 bytes já foram transferidos. Repare que o registo D é usado como contador porque é muito mais fácil testar para verifivar se D já contém o valor zero (como consequeência dos decrementos consecutivos) do que verificar se o par HL já atingiu o valor endereço inicial + 99.

A Pilha (Stack)

A pilha é um bloco de memória que é configurado para ser usado principalmente para o armazenar temporariamente informação referente ao estado do microprocessador logo antes

Microprocessor and Microcontrollers Page 37 of 92

O programa em Assembly para este fluxograma é:

LXI H, 2020H LXI B, 3020H MVI D, 64H Loop: MOV A, M

STAX B INX H INX B DCR D JNZ loop HLT

Fig. 3.5 – Exemplo de uso da técnica de indexação para a transferência de um bloco de dados.

Page 38: Microprocessores e Microcontroladores

de uma chamada a uma subrotina. O acesso a pilha é conseguida atraves das instruções PUSH e POP. O microprocessador também acede a pilha atomaticamente sempre que se faz a chamada a ou quando se retorna de subprograma. A pilha funciona no modo “Push-down” visto que o último dado levado a pilha irá ser colocado no topo da pilha. No acesso da pilha para a operação de leitura, o último dado introduzido será sempre o primeiro a ser lido. Isto significa que a pilha funciona no sistema d LIFO. O bloco reservado a pilha é determinado carrengado o endereço do início do bloco no registo SP através da instrução LXI SP. Depois, quando um dado é colocado na pilha, o apontador de pilha é primeiro decrementado e, deste modo, o dado é colocado no endereço (SP) -1. Note-se que a pilha cresce no sentido inverso do crescimento do endereço, isto é, cada novo dado que é introduzido na pilha vai ocupar a posição imediadamente inferior a última posição ocupada. Deste modo, a pilha nunca pode sair fora do mapa de endereços do microprocessador.Um outro aspecto a ter em conta é que embora, tal como toda a memória conectada ao 8085, seja organizada em bytes (8 bits) as instruções PUSH e POP lidam com pares de registos, isto é, lida com dados de 8 bits. Assim, na execussão destas instruções duas idas a memória são levadas a cabo para para a busca ou o armazenamento dos dois bytes do dado.A figura 3.5 mostra o mecanismo de implementação de uma pilha.

Inicializaçãop da pilha e dos registos internos:

LXI SP, 2300H ; inicializar o stack pointer com o endereço 2300HLXI B, 42D9H ; careggar o par BC com o valor 42D9H (42 para o registo B e

D9 para o registo C)

Transferência do dado para a pilha:

PUSH B ; Guardar o conteudo do par BC na pilha (Primeiro guarda-se o conteudo de B e depois o conteúdo de C)

Microprocessor and Microcontrollers Page 38 of 92

SP

H

D

A

B 45 D9

2300

Conteúdo dos registos Pilha

F

C

E

L

2300

22FF

22FE

22FD

SP

SP

H

D

A

B 45 D9

2300

D9

42

X

Conteúdo dos registos Pilha

F

C

E

L

2300

22FF

22FE

22FDSP

Page 39: Microprocessores e Microcontroladores

Transferência do dado da pilha para o par de registos:

POP B ; Busca o conteudo da pilha (o conteúdo das duas “ultimas posições da pilha) para o par BC

No primeiro caso temos o exemplo de definição da pilha. Neste caso a pilha começa no endereço 2300H. Neste exemplo temos ainda a inicialização do par de registos BC com o valor 45D9H. Neste momento a pilha ainda se encontra vazia.No segundo caso o conteúdo do par BC é levado para a pilha através da instrução PUSH BC. Repare que na execussão desta instrução primeiro o endereço no apontador de pilha (SP) é decrementado e o conteúdo do registo B que constitui o byte mais significativo é levado para a pilha, depois o SP é decrementado de novo e o conteúdo do registo C que constitui o byte menos significativo é levado para a pilha. Deste modo o byte mais significativo do par BC fica no endereço mais alto e o byte menos significativo no endereço mais baixo. No último caso da figura 3.6 temos a execussão da instrução POP B que lê dado da pilha para o par BC. Repare que na execuss`ao desta instrução primeiroé transferido o conteúdo do local de memória apontado por SP que neste caso constitui o byte menos significativo para o registo C. Depois SP é incrementado e o conteúdo do local apontado pelo novo endereço em SP é lido para o registo B. Por fim SP é incrementado de novo e a execussão da instrução termina.SUBROTINASA necessidade de implementação de uma subrotina surge quando um determinado conjunto de instruções tem de ser executada várias vezes no mesmo programa ou então em multiplas partes do mesmo programa. Em assembly de 8085 a chamada a uma subrotina é efectuada através da instrução CALL. Quando uma subrotina está em execussão, o retorno ao programa principal é realizado através da instrução RET. A execussão da instrução CALL começa por guardar o conteúdo do contador de programas (PC) na pilha para depois

Microprocessor and Microcontrollers Page 39 of 92

SP

H

D

A

B 45 D9

2300

D9

42

X

Conteúdo dos registos Pilha

F

C

E

L

2300

22FF

22FE

22FD

SP

Fig. 3.6 – Comportamento da pilha nas fazes de inicialização, escrita e leitura

Page 40: Microprocessores e Microcontroladores

transferir a sequência da execussão do programa para o endereço do início da rotina. Recorde-se que o contador de programas contem sempre o endereço da próxima instrução por se executar. Assim, quando a instrução está a ser executada o PC contém o endereço da instrução logo a seguir a instrução CALL. Por outro lado uma subrotina terminam sempre com a instrução RET. A execussão desta instrução faz com que o endereço que havia sido levado para a pilha na altura da chamada da subrotina seja lido de volta para o PC retomando-se deste modo a execussão do programa principal. A implementação de uma rotina (para gerar um delay de 20ms) é exemplificada no exercício que se segue:

Elaborar um programa que, ao iniciar zera todos os bits de um registo de 8 bits usado como uma porta de saida com endereço 09H. De seguida fica a monitorar continuamente o estado de uma chave (Switch) conectada ao bit 0 de um registo de oito bits que é usado como uma porta de entrada com endereço 08H. Logo que constatar que a chave está activada (nível lógico um) o programa deve esperar durante 20ms para depois enviar um sinal de nível lógico 1 para a activação de um mecanismo de sinalização luminosa (luz amarela) conectado ao bit 0 da porta de saida acima referida. Depois passa a monitorar o estado da chave conectada ao bit 1 da porta de entrada. Logo que constatar que a chave está activada (nível lógico um) o programa deve esperar de novo durante 20ms para depois enviar um outro sinal de nível lógico 1 para a activação de um mecanismo de sinalização liminosa (luz vermelha) conectado ao bit 1 da porta de saida.

NB1: Os 20 ms de espera devem ser obtidos por meio de implementação de uma rotina que realiza um delay. Antes da chamada da rotina deve-se salvaguardar o conteudo de todos os registos na pilha.

Microprocessor and Microcontrollers Page 40 of 92

S2

S1

xx x x x x b1 b05V

Entrada (endereço 09H)xx x x x x b1 b0

Saida (endereço 08H)

E N B

Po

rta

d

eE

ntr

ada

I 7

I 0

E N B

Po

rta

d

e S

aid

a

O7

O0

E n d er e ç o s

D a d o s

µP

D0 … D7

D0 … D7

A3

A0

A7

A3

A7 A0

O programa em Assembly para este fluxograma é:

MVI A, 00H OUT 08H ; Resetar as saidasloop1: IN 09H ; Ler a entrada dos switches

ANI 01H ; Testar o 1o switchJZ loop1 ; Se não activado continuar

;no loopCALL delay ; chamar a subrotina que gera

; 20ms de delayMVI 01 OUT 08H ; enviar 00000001 para a saida

Loop2: IN 09H ; Ler a entrada dos switchesANI 02H ; Testar o 2o switch

JZ loop2 ; Se não activado continuar ;no loop

CALL delay ; ; chamar a subrotina que gera ; 20ms de delay

MVI 02 OUT 08H ; enviar 00000010 para a saidaHLT

Delay: LXI B 682H ; carregar BC com o valor 1667Loop: DCX B ; Decrementar BC por 1

MOV A, C ; ORA B ; fazer A OR B

;(o mesmo que C OR B) JNZ Loop ; repetir o loop se BC ainda não é 0 RET ; Retornar ao programa principal

não

Desactivar todos os bits da porta de saida

Inicio

Pausa

sim

switch 0 activdo?

Delay

Delay de 20 ms

switch 1 activdo?

Delay

Delay de 20 ms

Activar o bit 1 da porta de saida

sim

não

Ler o conteudo da porta de entrada

Activar o bit 0 da porta de saida

Page 41: Microprocessores e Microcontroladores

Microprocessor and Microcontrollers Page 41 of 92

Fig. 3.7– Exemplo de implementação de uma subrotina

Ler o conteudo da porta de entrada

Page 42: Microprocessores e Microcontroladores

O programa começa com a inicialização do port de saida enviando o valor 00H o que faz com que o “port” seja “resetado”. Depois lê a porta de entrada e verifica se o swicth 1 (S!) está activado. Caso este esteja activado chama-se a rotina que gera um delay de cerca de 20ms e depois dá saida o valor 02H (0000 0010) para o porta de saida. Depois este processo é repetido para o switch 2.A rotia que gera o delay implemeta um loop simples usando o par BC como contador. Este par de registos é inicializado com o valor decimal 1667 que quando decrementado até zero e considerando que o microprocessador funciona com a frequência de clock de 2 MHz irá resultar num delay de cerca de 20ms. Repare que o teste para se determinar se o par BC contém ou não o valor zero é feito usando o operador OR entre os registos B e C. O resultado do teste só será zero se ambos os registos estiverem com o valor zero.

O tempo de delay é determinado pela expressão:TD = T-states (no loop) x (contador -1) x Periodo do clock ++ T-States (último ciclo) x perido do clock

Sendo o loop composto pelas instruções:

Loop: DCX B ; 6 T-States

MOV A, C ; 4 T-States

ORA B ; 4 T-States

JNZ loop ; 10 T-States se o salto ocorrer ou 7 T-States se o salto ; não ocorrer

Teremos então:TD ≈ NT-states x 1/f x Nloops

Então teremos Nloops ≈ TD / NT-states x 1/f = 20000µs/ (24 x 0.5 µs) ≈1667

Aninhamento de subrotinas

Em assembly uma subrotina pode chamar uma outra subrotina e este por sua vez pode chamar uma outra e assim por diante. O limite em termos do grau de aninhamento é determinado pela extensão de memória a que a pilha está reservada pois em cada chamada a uma subrotina o endereço de retorno e possivelmente outra informação referente ao estado do microprocessador e que se encontra nalguns registos internos devem ser guardados na pilha. Sendo assim, enquanto a pilha não estiver “cheia” as subrotinas podem continuar a ser aninhadas. A figura 3.8 ilustra o que acontece na pilha durante a chamada a subrotinas.

Microprocessor and Microcontrollers Page 42 of 92

Programa Principal

CALL2020H

40

20

……

2023H

Subrotina 1

CALL2040H

60

20

……

RET

2043H

Subrotina 2

2060H

…..

RET

Pilha

23

20

43

20

x

SP

Page 43: Microprocessores e Microcontroladores

4- Dispositivos de Suporte

Como foi visto nos capítulos anteriores, os componentes fundamentais num sistema baseado em microprocessador são, em primeiro lugar, a CPU e depois a memória. Entretanto, para que o microprocessador possa efectuar uma tarefa realmente útil é preciso que haja mecanismos que permitam a introdução dos programas e dos dados para a memória. Por outro lado, é imperioso que haja mecanismos que permitam que os resultados dos processos que têm lugar na CPU possam estar desponibilizados ao usuário. Os dispositivos de suporte são “chips” que são concebidos para auxiliar o microprocessador em tarefas bem específicas. Estes “Chips” são muito pouco flexiveis (isto é muito menos inteligentes) que o microprocessador mas eles realizam a tarefa a se destinam de forma muito mais eficiente e rápida. Os dispositivos de suporte são concebidos em extreita ligação com um determinado tipo de microprocessador ou então família de microprocessadores e destinam-se esencialmente a servirem de interfaces com periféricos ou a então efectuar funções que se acredita que serão mais eficientemente realizadas quando implementadas num circuito dedicado, livrando deste modo o microprocessador deste tipo de tarefas que geralmente requerem pouca “inteligência”. Deste modo, o microprocessador irá dedicar grande parte do seu tempo em tarefas de computação propriamente ditas.Num sistema baseado em microprocessador o conjunto destes circuitos de suporte com o microprocessador é frequentemente designado por “Chip Set”.

4.1 - Dispositivos de Interface paralelo

Uma forma muito elementar de implementar um inteface paralelo atraves do qual dados estruturados sob a forma de bytes (ou um duplo bytes) pode ser enviado para microprocessador pode ser conseguida usando um simples circuito contendo 8 ou 16 3-state buffers tal como se ilustra na figura abaixo

.

Microprocessor and Microcontrollers Page 43 of 92

Barramento de dados

Vcc

74ALS244

1A1

1A2

1A3

1A4

2A1

2A2

2A3

2A4

1Y1

1Y2

1Y3

1Y4

2Y1

2Y2

2Y3

2Y4

D0

D1

D2

D3

D4

D5

D6

D7G1 G2

SELFig.1.4a – Exemplo de implementação de um interface de entrada paralelo

Page 44: Microprocessores e Microcontroladores

O 74ALS 244 é circuito integrado contendo 8 3-state buffers tal como se ilustra na figura abaixo.

Na operação de leitura (através da instrução IN Endereço) o microprocessador emite o endereço reservado a esta entrada. Após a descodificação do endereço gera-se um sinal de nível Low que vai activar as duas entradas G1 e G2 que activam os 3-state buffers para permitir a passagem do dado correspondente a posição de cada um dos interruptores.

Por outro lado, uma forma simples de implementar um inteface paralelo para saida de dados do microprocessador para o exterior pode ser conseguido com o uso de um registo com uma saida de três estados como ilustrado na figura que se segue.

Microprocessor and Microcontrollers Page 44 of 92Fig.2.4a – Exemplo de implementação de um interface de saida paralelo

Fig.1.4b – Estrutura do buffer 74ALS244

Barramento de dados

74ALS374

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

D0

D1

D2

D3

D4

D5

D6

D7

OC CLk

Vcc

SEL

Page 45: Microprocessores e Microcontroladores

Na fig.2.4a o microprocessador envia um conjunto de oito bits que se destinam a acionar um conjunto de oito LEDs. Deste modo, o estado dos LEDs (Acesso ou apagado) irá reflectir o valor binário do byte enviados do microprocessadora traves da instrução OUT Endereço. Com esta instrução, o endereço desta porta de saida é descodificada e o sinal a saida do descodificador de endereços é aplicado a entrada de Clock permitindo assim o carregamento do dado no registo onde permanecerá até que uma outra instrução de saida destinada a esta mesma porta venha alter o conteúdo do registo. O “chip” 74ALS374 é um registo de entrada paralela e saida paralela constituido por 8 flip-flops tipo D com um 3-state buffer a saida.

4.2 - Despositivos de Interface Programáveis O mecanismo de implementação de interfaces de entrada ou saida paralela em que se usam simples portas de três estados ou simples registos apenas se usam em sistemas muito simples, como por exemplo, em placas de ensaio de microprocessadores usados nas aulas laboratorias. Em sistemas mais complexos estes dispositivos aparecem normalmente incorporadas em unidades de interface mais complexos e, quase sempre programáveis.

4.2.1 - Interface Paralelo Programável– PPI- 8255

PPI – 8255 ( Programable periferal interface) é um circuito integrado de suporte programável de baixo custo concebido para servir de interface paralelo entre o microprocessador e um periférico. É um dispositivo com três portas paralelas de oito bits cada designadas por porta A, Porta B e Porta C que podem ser programadas independentemente para servirem tanto como porta de entrada como para porta de saida e que podem ser usadas para interconectar o microprocessador com qualquer periférico cuja porta de entrda/saida é compatível com circuitos TTL. A figura 3.4 mostra o “Pinout “ do PPI-8255ª.

Microprocessor and Microcontrollers Page 45 of 92

Fig.2.4b – Estrutura do registo 74ALS374

Page 46: Microprocessores e Microcontroladores

.

Como se pode verificar na figura 3.4 o PPI-8255A é conectado com o microprocessador através de 8 linhas de dados (pinos D7 a D0) , 4 linhas de controle (pinos RD, WR, CS, e RESET) e duas linhas de endereço (A1, A0) . A conecção com os periféricos é feita através de 16 linhas de dados (Portas A e B) e ainda outras 8 linhas (Porta C) que podem ser usadas tanto para Entrada/Saida de dados como para controle. Por fim, dois pinos (Vcc e GND) conectam o PPI-8255 a fonte de alimentação perfazendo assim 40 pinos no total.

Estrutura interna do PPI- 8255A figura 3.5 apresenta a estrutura interna do interface paralelo PPI-82C55A. A coneccão entre o barramento de dados do microprocessador e os registos internos do PPI é através do “Data bus buffer” que na essencia é um conjunto de “3-state buffers” estruturados de tal modo que permitam a comunicação bi-direcional entre o µP e o PPI.

Microprocessor and Microcontrollers Page 46 of 92

Fig.3.4 – PPI-8255 - “Pinout “ e método de conecção com o µP

CONTROL

Page 47: Microprocessores e Microcontroladores

O dado é transmitido do µP para o PPI-82C55A através da execussão da instrução OUT. A leitura do dado que se encontra no PPI para µP é feita através da execussão da instrução INA informação de configuração (“Control Words”) e a informação do estado do PPI são também transmitidos/lidos através do “Data bus buffer”.

Bloco de comando das operações de leitura e escrita (Read Write Control Logic) - este bloco recebe dados do barramento de endereços e do barramento de controle do µP e gera os sinais apropriados para o controle da operação do PPI nomeadamente a selecção de um registo interno, a direção do fluxo dos dados, a inicialização PPI e a seleção do próprio PPI.As entradas RD e WR (de tipo active LOW) recebem o sinal de controle de direção do fluxo de dados, isto é, PPI para µP ou do µP para PPI. A entrda CS (de tipo active LOW) habilita o PPI para se poder comunicar com o µP. As entrads de controle A0 e A1 são usadas para a seleção de um dos “ports” A, B, e C e dos dois registo internos de controle (registos de comando) tal como se ilustra na tabela abaixo.

Microprocessor and Microcontrollers Page 47 of 92

Fig. 3.5 - Estrutura interna do PPI-82C55A

Page 48: Microprocessores e Microcontroladores

A entrada de controle RESET (de tipo active high) faz com que, quando activada, sejam zerados os registos internos do PPI e as três portas de conecção com periféricos são todos configurados como portas de entrada.

Blocos de controle ( Group A and Gruop B Control) – Os dois blocos de controle são constituidos essencialmente por registos ( Control Word Registers) que recebem dados vindos do microprocessador e que se destinam a configuração do modo de operação do PPI e um circuito que, de acordo com o conteúdo do registo de comando e da informação vinda do bloco de comandos das operações de leitura/escrita, gera sinais que determinam o modo de funcionamento cada uma das portas de entrada/saida.O microprocessador tanto pode enviar dado para o registo de controle como pode também ler o dado nele contido. O registo de controle do grupo A controla a operação da porta de Entrada/Saida A e os 4 bits mais significativos da pota C. O registo de controle do grupo B controla a operação da porta de Entrada/Saida B e os 4 bits menos significativos da pota C.As portas de Entrada/saida podem ser configuradas para desempenhar funções diversas tais como entrada de dados vindo do periférico, saida de dados para o periférico, saida de sinais de controle ou então entrada de sinais de controle.As portas A e B são usadas para a conecção com um periférico para entrda ou saida de dados. Na operação de saida a porta A comporta-se como um registo de 8 bits com saidas de 3-state buffers. Na operação de entrada esta porta comporta-se como um simples registo de 8 bits. A porta B é usada como um registo de entrada/saida com 3-state buffer. A porta C pode ser usada como um registo de 8 bits de saida com 3-state buffer ou como um simples conjunto de 3-state buffers de entrada. Esta porta pode ser subdividida em duas portas

Microprocessor and Microcontrollers Page 48 of 92

Fig.3.5 – Controlo das operações básicas do 82C55A

Operações de saida

Operações de Entrada

Desabilitar

Page 49: Microprocessores e Microcontroladores

de 4 bits cada. Nestas condições cada porta age como um simples registo de 4 bits que pode receber ou enviar sinais de controle de ou para o periférico ou microprocessador.Quando o PPI-8255 é conectado com o µP 8085 os endereços usados são normalmente C0H, C1H , C2H e C3H para aceder os ports A, B, C e o registo de controle respectivamente. A tabela abaixo e o circuito da figura 3.7 mostra uma implementação típica do circuito de descodificação do PPI-8255.

Operação do PPI-8255

Como o nome indica, o PPI-8255 é um dispositivo programável. Quer isto dizer que o funcionamento deste dispositivo é determinado pelo programa que, de entre outras tarefas que deve executar, é concebido também para configurar o dispositivo. A configuração do PPI consiste essencialmente no envio por parte do microprocessador da chamada palavra de comando (“comand word”) num dos registos de controle.Na programação do PPI-8255 o passo inicial é determinar os endereços de I/O que devem ser alocados ao dispositivo, ou melhor, a cada uma das três portas de Entrada/Saida e ainda aos registos de controle. Estes endereços irão determinar o circuito lógico de descodificação do PPI e as entradas A1 e A0 tal como o exemplo apresentado na figura 3.7. De seguida, de

Microprocessor and Microcontrollers Page 49 of 92

Fig.3.6 – Endereços de acesso do 8255 pelo µP 8085

Fig.3.7 – Circuito típico de descodificação de endereços do PPI-8255

IO/M

IO/M

RD

WR

CS

A1

RD

WR

8255A

A0

A7

A6

A5

A1

A0

A4

A3

A2

Page 50: Microprocessores e Microcontroladores

acordo com o modo de funcionamento pretendido, é necessário determinar a palavra de comando a ser enviado para o registo de comando para a configuração do dispositivo.

A configuração do PPI consiste em determinar a função e o modo de operação de cada uma das portas de Entrada/Saida. Em relação ao modo de operação, o PPI8255 pode ser configurado para operar em I/O mode (modo de E/S) ou em BSR mode (Modo de activação/Desactivação de bits). Quando o PPI funciona em I/O mode as suas portas de conecção com periféricos podem ser programada para funcionarem como simples portas de Entrada/Saida ( sem dialogo com periférico), como portas de Entrada/Saida com a capacidade de dialogo com o periférico ou microprocessador, ou ainda como porta de entrada bi-direcional. Estes modos de operação são designados por Modo 0, Modo 1 e modo 2 respectivamente. A figura 3.8 mostra ao formato do “cotrol word” na configuração do PPI-6255.

Funcionamento no modo 0

No Modo 0 As portas A e B são configuradoas independentemente como portas de entrada ou de saida. A Porta C é subdividida em duas portas de 4 bits cada. Cada sub-grupo de 4 bits é programado independentemente como porta de entrada ou de saida.A operação do PPI-8255 no modo 1 é ilustrado na figura 3.9. Neste modo de operação, as portas A e B são usdas como portas de entrada ou de saida. A porta B usa as linhas PC0, PC1

Microprocessor and Microcontrollers Page 50 of 92

D7 D6 D5 D4 D3 D2 D1 D0

CONTROL WORD

Port C ( PC3 – PC0) 1 = input 0 = output

Port B 1 = input 0 = output

Selecção do Modo 0 = Modo 0 1 = Modo 1

GR

UP

O B

Port C ( PC7 – PC4) 1 = input 0 = output

Port A 1 = input 0 = output

Selecção do Modo 00 = Modo 0 01 = Modo 1 1x = Modo 2

GR

UP

O A

Modo de Operação 1 = I/O mode 0 = BSR Mode

Figura 3.8 – layout da palavra de controle do PPI-8255

Page 51: Microprocessores e Microcontroladores

e PC2 para para o dialogo com o periférico e/ou µP para as operações de entrada como as de saida. A porta A usa as linhas PC3, PC4 e PC5 para o dialogo para as operações de entrada. Para as operações de saida, a porta A usa as linhas PC3, PC6 e PC7 para o dialogo, deixando deste modo as linhas PC4 e PC5 como linhas de entrada ou saida.

Funcionamento no modo 1

Quando o PPI está a operar no modo 1 os sinais usados para o dialogo são:

● (Strobe input) – Sinal vindo do periférico para indicar que o periférico já tem na sua saida um dado (byte) pronto para o PPI ler. Para a porta A este sinal é conectado a linha PC5 enquanto que para a porta B este sinal é conectado a linha PC2 ●IBF (input Buffer Full) – Sinal de reconhecimento saindo do PPI para indicar que já recebeu um byte de dado. Para a porta A este sinal é obtido na linha PC5 e para a porta B na linha PC1. ●INT (interrupt Request) – Sinal gerado pelo PPI para solicitar serviço ao microprocessador. Este sinal sai da linha PC3 para a porta A e PC0 para a porta B e é conectado a entrada de pedido de interrupção do microprocessador. ● (Output Buffer Full) – sinal gerado pelo PPI para indicar a um periférico que tem um dado pronto para ser lido (pelo periférico). Para a porta A este sinal é obtido na linha PC7 enquanto que para a porta B o sinal sai pela linha PC1 ● (ACKnowledge) – Sinal de entrada vindo de um periférico para indicar que este já

Microprocessor and Microcontrollers Page 51 of 92

Figura 3.9 – layout da palavra de controle no modo 1

CONTROL WORD

Port B 1 = input 0 = output

Port B Modo 1 Port C – PC6, PC7 – se port A é entrada Port C – PC4, PC5 – se port A é saida 1 - Input 0 - Output

Modo de Operação 1 = I/O mode 0 = BSR Mode

D7 D6 D5 D4 D3 D2 D1 D0

1 0 1 1/0 1/0 1 1/0 x

Port A 1 = input 0 = output

Port A Modo 1

STB

OBF

ACK

Page 52: Microprocessores e Microcontroladores

recebeu o dado (byte) enviado pelo PPI. Para a porta A este sinal é obtido na linha PC6 enquanto que para a porta B o sinal sai pela linha PC2). As figura 3.10 mosta as portas A e B e os sinais de controle quand o PPI opera no modo 1.

Microprocessor and Microcontrollers Page 52 of 92

PPI-8255 no modo 1 – Operação de Entrada

PPI-8255 no modo 1 – Operação de Saida

Page 53: Microprocessores e Microcontroladores

Funcionamento no modo 2

No modo 2 a transferência de dados entre o PPI-8255 e o periférico é feita na forma bi-direcional. Este modo é usado para a transmissão de dados entre dois computadores ou entre o controlador de disco e o microprocessador. Neste modo de operação a porta A é usada para a comunicação bi-direcional e cinco linhas da porta C para a troca de sinais de controle (handshaking). A porta B pode ser usada tanto no modo 0 como no modo 1. Os cinco sinais de dialogo usados pela porta A quando está configurada no modo 2 são:

INTR (PC3 - saida) - Este sinal é usado para solicitar um interrupção ao microprocessador, tanto para as operações de entrada como para as operações de saida.

Operações de saida (PC7 - saida) – O PPI activa este sinal (nível lógico 0) quando recebe um byte do microcessador. Portanto este sinal pode ser usado para solicita o periférico para ler o dado.

(PC6 - entrada) – Quando esta entrada é activada (nível lógico 0) os three-state buffers de saida da porta A libertem o dado para ser lido pelo periférico.

Operações de Entrada (PC4 - entrada) - Quando esta entrada é activada (nível lógico 0) o PPI lê o dado que lhe é apresentado na porta A para o seu registo interno de entrada.

IBF ( PC6 – saida) – O PPI activa esta saida (nível lógico 1) para indicar ao periférico que o seu registo de entrada contém um dado, isto é , que o dado que acabou de ler do periférico ainda não foi transferido para o microprocessador. A figura 3.11 mostra a configuração e a operação do PPI no modo 2.

Microprocessor and Microcontrollers Page 53 of 92

OBF

ACK

OBF

STB

Page 54: Microprocessores e Microcontroladores

Microprocessor and Microcontrollers Page 54 of 92

Figura 3.11 – Funcionamento do PPI-8255 no modo 2

Page 55: Microprocessores e Microcontroladores

Funcionamento no modo BSR

O modo BSR (Bit Set Reset) é selecionado quando o bit 7 da palavra de controle é levado para o nível lógico 0. Este modo afecta apenas a porta C e é usado para activar (levar pata o nível lógico 1) ou desactivar (levar para o nível lógico 0) um determinado bit desta porta. A figura 3.12 mostra o formato da palavra de controle para levar o PPI-8255 a operar no modo BSR.

Quando este modo é selecionado as portas A e B são mantidas no modo em que anteriormente se encontravam.

1 –Exemplo 1 - Usando o 8085, um buffer 74LS244 como um porta de entrada e um latch 74LS373 como porta de saida implementar um sistema que permite uma leitura de segundo a segundos, um conjunto de oito sinais digitais que representam o estado de 8 sensores de intrusão colocados em oito diferentes portas de um edifício e emite sinais digitais Low or High que são usados para accionar um conjunto de 8 indicadores visuais (lâmpadas) . O Low na porta de saida apaga a lampada e o High permite acender a lampada. A porta de saida deve ter o endereço 38H e o endereço da porta de entrada o endereço 39H.

Microprocessor and Microcontrollers Page 55 of 92

D7 D6 D5 D4 D3 D2 D1 D0

0 x x x D3 D2 D1 1/0

000 – bit 0

001 – bit 1

010 – bit 2

011 – bit 3

100 – bit 4

101 – bit 5

110 – bit 6

111 – bit 7

Bit Select

Set - 1

Reset - 0

Modo BSR

Não usados

D0-D7 – Entrada de dados LE – Latch Enable Q0 – Q7 - saida de dados OE – Output Enable

Page 56: Microprocessores e Microcontroladores

Microprocessor and Microcontrollers Page 56 of 92

Descodificação do Endereço 38H = 0 0 1 1 1 0 0 0

74LS244

AD

0 AD

7

74LS373

A8 A

15

LE

A14

A10

A8

A9

A11A12A13

A15

IO/M RD

Descodificação do Endereço 39H = 0 0 1 1 1 0 0 1

74LS244

1Y1 1Y2 1Y3 1Y4 2Y1 2Y2 2Y 2Y4

1A11

1A21

1A31

1A41

2A11

2A21

2A31

2A41

G1

G2

808

5

IO/M

RD

WR

LE

AD

0 AD

7

74LS373

D0 D1 D2 D3 D4 D5 D6 D7

Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7

A10

A8

A9

A11

A12A13A14

A15

IO/M WR

Page 57: Microprocessores e Microcontroladores

Exemplo 2 : Usando o PPI-8255 implementar um circuito que permite a leitura do estado de 8 “limit Switches”. Aspós a leitura o sistema deve depois activar o LED vermelho se a entrada repectiva estiver activada ou LED verde se a entrada estiver não activada. Considere que o PPI a faixa de endereços de C0H a C3H.

Microprocessor and Microcontrollers Page 57 of 92

Delay 30 S

Inicio

Ler a porta de entrada

Enviar os dados para a porta de saida

INICIO: IN 39H OUT 38H

CALL DELAY JMP INICIO

DELAY: MVX C350HLOOP: NOP

NOP NOP ;(4) NOP DCX ;(6) MOV A, L ; (4) OR A H ; (4)

JNZ LOOP ;(10/7) RET

OBS: f = 2 MHzN-Pulsos = 40 T = 40x0.5µS = 20 µSN-Loops = 1000000 µS/20 µS = 50000d50000d = C350H

D7 D6 D5 D4 D3 D2 D1 D0

CONTROL WORD

Port C ( PC3 – PC0) 1 = input 0 = output

Port B 1 = input 0 = output

Selecção do Modo 0 = Modo 0 1 = Modo 1

GR

UP

O B

Port C ( PC7 – PC4) 1 = input 0 = output

Port A 1 = input 0 = output

Selecção do Modo 00 = Modo 0 01 = Modo 1 1x = Modo 2

GR

UP

O A

Modo de Operação 1 = I/O mode 0 = BSR Mode

Figura 3.8 – layout da palavra de controle do PPI-8255

Page 58: Microprocessores e Microcontroladores

Para o funcionamento do PPI no modo 0 com portas A e B como saidas e porta C como entrada a palavra de controle é:

Endereços:C0H Porta A C1H Porta BC2H Porta CC3H Registo de controle

MVI 89H ;Inicialização no modo zero OUT C3H LOOP: IN C2H ; ler a porta de entrada (porta C)

OUT C0H ; enviar para a porta A CMA ; Complementar Acumulador

OUT C1H ; Enviar para a porta B JMP LOOP

Microprocessor and Microcontrollers Page 58 of 92

1 0 0 0 1 0 0 1

Porta C como entrada(PC3 – PC0)

Porta B como Saida

Grupo B no modo 0

Porta C como entrada(PC7 – PC4)

Porta A como Saida

Grupo A no modo 0

Modo I/O

Page 59: Microprocessores e Microcontroladores

Microprocessor and Microcontrollers Page 59 of 92

A0A1

RD

WR

CS

CS

A15

A14

A13

A12

A11

A10

5V dcc

C0

C1

C2

C3

C4

C5

C6

C7

B4

B2

B0B1

B3

B5B6B7

A5

A1

A3

A0

A2

A4

A6A7

D0

D7

8085

AD0

AD7

RD

WR

IO/M

A10

A14

A9A8

A11A12A13

A15

RD

P P

I – 8 2

5 5

WR

IO/M

RD

IO/M

WR

Figura 3.9 – Uso do PPI-8255 no modo zero

Page 60: Microprocessores e Microcontroladores

DISPOSITIVO DE INTERFACE SERIAL

Os despositivos de interface serial permitem a transferência de dados da CPU para um periférico ou do periférico para a CPU na forma srial, isto é, bit a bit. A comunicação de dados entre dois dispositivos na forma serial é mais lenta que a comunicação dos mesmos na forma paralela. Porém a transferência de dados na forma serial apresenta-se menos cara sob o ponto de vista de linhas necessárias para o transporte dos sinias. Teóricamente, apenas um condutor é necessário para transportar a informação do interface serial para o mundo exterior acrescido do condutor de retorno ou massa. A comunicação de dados na forma serial é usada em situações em que os dados devem ser transmitidos para distâncias acima de alguns metros. De entre vários aspectos a considerar na comunicação serial de dados a concepção de um interface serial deve ter em conta o modo como o equipamento tramsmissor e o equipamento receptor são conectados para poderem tramsmitir e/ou receber os dados. Assim a conecção pode ser simplex em que dum lado exixte apenas um tramsmissor e do outro lado apenas um receptor sendo que a transmissão se realiza num só sentido, half-duplex em que existe transmissão e recepção nos dois sentidos mas em cada instante apenas um transmite e o outro recebe ou então full-duplex em que ambos os pontos podem transmitir e receber simultaneamente.

Um outro aspecto que se deve considerar é o mecanismo de sincronização entre o transmissor e o receptor. O processo de sincronização permite responder a questão de como um fluxo de dados é dividido em bits individuais e como um conjunto de bits são subdivididos em palavras (unidades básicas de informação). Assim, no interface de comunicação serial a divisão de fluxo de dados em bits e palavras pode ocorrer nos chamados modos assincrono ou sincrono.Na transmissão serial assincrona, os “Clocks” do lado de transmissão e do lado de recepção que são responsáveis pela divisão do fluxo de dados em bits e em palavras não são sincronizados. A figura abaixo ilustra a forma de onda que corresponde a transmissão de um único caractere (caracter ‘c’) codificado em ASCII que usa 7 bits para a codificação de caracteres.

Microprocessor and Microcontrollers Page 60 of 92

A B A B

Uma linha de transmissão apenas

(half-duplex)

Duas linha de transmissão (full-duplex)

bit de Paridade

bit de Start

bit de Stop

7 bits de informação(1101111)

10 bits correspondentes ao envio de um só caractere

01 1 0 1 1 1 1 01

Duração do bit

Estado de

Repouso

Page 61: Microprocessores e Microcontroladores

Neste modo de transmissão para além dos bits de informação propriamente ditos mais alguns bits são anexados para o controle do inicio da transmissào do caractere, do fim da transmissão do caractere e ainda de bit(s) de dectecção de erros na transmissão.Quando nenhum dados está sendo transmitido a saida do transmissor é mantido no nível lógico “High” o que representa o estado de repouso. Quando o transmissor pricisa de enviar uma palavra, a linha de saida é levada ao estado lógico “Low” durante o período correspondente a um bit. O equipamento de recepção sente esta alteração de estado (High para Low) e considera como sendo o bit de início de transmissão de uma palavra. Assim, de seguida irá proceder a amostragem dos pulsos subsequentes com um intervalo de amostragem correspondente ao período de um bit. O clock para a amostragem é gerado na própria unidade de recepção e desde que a frequência deste não tenha uma diferênça superior a 4% da frequência do clock da unidade transmissora, a amostragem de cada bit irá ocorrer muito próximo do ponto médio de cada bit. Depois dos 7 bits de informação mais um bit (ou mais) é transmitido para a verificação da paridade com vista a deteção de possíveis erros na transmissão. Depois do bit de paridade segue-se o bit de Stop que indica o fim de transmissão de um caractere. Depoisnda transmissão do bit de Stop pode iniciar a transmissào de um novo caractere ou o sistema pode simplesmente entrar no estado de repouso. A transmissão serial assincrono é mais usada na transmissão de dados codificados em ASCII.

Na transmissão serial de dados no modo Sincrono a informação é transmitida continuamente, sem “gaps” entre grupos adjacentes de bits. O termo grupo de bits é usado aqui porque sistemas de transmissão sincrona são mais usados para transmitir blocos de dados codificado puramente em binário ao invés de caracteres ASCII. Para a sincronização de bits o transmissor deve enviar o sinal de clock para o recepto para que este possar na amostragem (recuperação) de cada bit tal como se ilustra na figura que se segue.

O sinal de sincronização requere um condutor adicional. Uma outra solução pode ser a codificação do sinal de clock de modo a ser incluido no próprio sinal de dados.A separação entre dois blocos de dados é conseguida inserindo-se um caractere especial de sincronização entre os blocos.

Interface Prográmável de comunicação 8251A

O Intel 8251A é um interface de comunicação serial construido como um dispositivo de standar industrial para comunicação Universal, Sincrono/Assincrono que pode desempenhar ambas as funções de , Receptor/Transmissor – USART- concebido especialmente para a comunicação serial de dados com microprocessadores da família Intel tais como o 8080, 8085, 8086 e 8088. O USART pode receber dados na forma paralela vindas da CPU para depois formatar e depois converter num fluxo de bits para serem enviados para um periférico na forma serial. Por outro lado a USART pode receber um fluxo de bits transmitidos serialmente por um dispositivo exterbo para depois paralelizar, fazer a verificação de possíveis erros de transmissão para depois enviar para a CPU. A USART dá uma indicação a CPU sempre que tiver recebido um dado do exterior e pretenda que este seja transferido para a memória e ainda sempre que estiver em condições de receber dados da CPU para transmitir. A CPU pode

Microprocessor and Microcontrollers Page 61 of 92

Dados

Clock

01 1 1 0 1 1 1 10

1 1

Page 62: Microprocessores e Microcontroladores

també ler o estado da USART em qualquer momento. A figura que se segue mostra o esquema em blocos da USART.

Fig. 4.--- a

Microprocessor and Microcontrollers Page 62 of 92

Fig. 4.---a - Pin out do 8251A

Fig. 4.---b Pin Esquema em blocos do 8251A

Page 63: Microprocessores e Microcontroladores

Descrição do Circuito

Como se pode constatar na fig.4.—c, o interface serial 8251ª é constituido de sete blocos principais que a seguir descrevem:

1 – Buffer do barramento de dados (Data bus buffer) – Este bloco é constituido o interface entre o barramento de dados e a própria USART. O bloco é constituido essencialmente de three-state buffers que, mediante a execussão de instruções IN ou OUT, permitem ao dispositivo enviar para a CPU ou receber da CPU um conjunto de oito bits. Os dados tanto podem representar a informação a ser transmitida para o exterior, palavras de comando ou informação do estado do dispositivo.2 – Bloco de controle das operações de Leitura/Escrita (Read/Write Control Logic) – Neste bloco esta implementada a lógica que permite a seleção do chip em si e o controle das operações de leitura ou escrita atraves dos sinais RD , WR e CS vindos da CPU. Neste bloco chega também o sinal de CLK que representa o “Master Clock” do sistema e que é usado para, a partir deste, derivar a(s) frequência(s) de operação das diversas unidades lógicas do dispositivo. Ten-se ainda a entrada .que permite disntiguir se o dado vindo da CPU é um dado de informação (destinado ao registo de dado de transmissão) ou uma palavra de comando ( destinado ao registo de controle). O nível high na entrada RESET leva o dispositivo ao estado de repouso permanecendo neste estado até que novas palavras de comando sejam enviadas para o dispositivo para a definição da sua operação. A tabela abaixo mostra o comportamento do 8251A em função das diversas combinações dos sinais acima descritos.

Microprocessor and Microcontrollers Page 63 of 92

Fig. 4.---c - Detalhes da constituição interna do 8251A

C/D

Data Bus

Page 64: Microprocessores e Microcontroladores

3 - Bloco de controle de Modem – Este bloco implementa a lógica necessária para o controle da coneção do 8251 com um MODEM, dispositivo fundamental na comunicação a longas distâncias. Os sinais de entrada ou saida gerados neste bloco são sinais de uso geral de modo que eles podem ser usados para funções que podem não ser de controle de modem. Os sinais de controle gerados ou aplicados deste bloco são:DSR (Data Set Ready) – Entrada de estado activo “Low”. Esta entrada é usada pelo equipamento externo, normalmente o MODEM para indicar que está pronto para transferir um dado para o 8251. A CPU pode testar o estado desta entrada acedendo o bit reservado a esta entrada no registo de estado.DTR (Data terminal redy) - Saida de estado activo “Low” que o 8251 usa para informar ao equipamento externo, normalmente o MODEM, que tem um dado pronto para transferir informação. Esta saida pode ser activada (estado activo Low) através de programa configurando o bit respectivo na palavra de comando.RST (Request to send) - Saida de estado activo “Low” que o 8251 usa na transmissão em half-duplex para solicitar ao equipamento/Dispositivo com quem está conectado, normalmente o MODEM, a autorizaçao para começar a enviar dados, isto é, para que o equipamento receptor possa disponibilizar a linha de recepção de sinal.CTS (Clear to send) – Um nível lógico Low nesta entrada informa o 8251 que pode começar com a transmissão serial de dados. O 8251 inicia a transmissão de dados se o bit TxEnable no registo de comando estiver activado (Estado Logico High).

4 – Buffer de Transmissão (Transmitter Buffer) – Este é essencialmete um registo (com saida em three-State) que recebe dados paralelos vindos do “Data Bus Buffer”, converte-os em serial, insere o(s) bits ou caractere de controle de erros de transmissào (dependendo do protocolo de comunicação) e dá saida do dado já completo através do pino de saida TxD na borda descendente do sinal de entrada TxC. O dado começará a ser transmitido se o transmissor estiver habilitado e a entrada CTS estiver activada. A saida TxD voltará a ser levada ao estado de repouso se CTS ou TxEnable forem desactivados ou então se a entrada RESET for activada ou ainda se o transmissor estiver vazio.5 – Bloco de controle do transmissor (Transmit Control) – Este bloco gere todas as ctividades relacionadas com o processo de transmissão serial dos dados. Para o seu funcionamento este bloco recebe e envia sinais de controle tanto internamente (gerados ou aplicados dentro do próprio circuito) como também sinais vindos do exterior.Os sinais gerados neste bloco para o exterior são:TxRDY ( Transmitter Ready) – Este é o sinal indica a CPU que o 8251 está pronto para receber um dado destinado a ser transmitido. O 8251 pode usar este sinal para o pedido de interrupção. Se a CPU opera no modo Polling, ela pode testar o estado deste sinal no registo de estado.TxE (Transmitter Empty) – O 8251 activa esta saida para indicar que o transmissor está vazio, isto é, que já acabou de transmitir o dado. Na operação em half Duplex este sinal pode ser usado para permitir a comutação do equipamento do estados de transmissão para o estado de recepção.

Microprocessor and Microcontrollers Page 64 of 92

Barramento de dados Reg. Controlo

Barramento de dados em alta impedância

Barramento de dados em alta impedância

Barramento de dados 8251 Reg. dado

0 1 0 0

8251 Reg. estado Barramento de dados

8251 Reg. dado Barramento de dados

Barramento de dados

0 0 1 0

C/D RD WR CS

x x x 1

1 1 0 0

x 1 1 0

1 0 1 0

Page 65: Microprocessores e Microcontroladores

TxC (Transmitter Clock) – Este é o sinal de clock que determina a velocidade de transmissão (Baund Rate). O bit é “empurrado” para a saida na borda descendente dos pulsos deste sinal.6 – Bloco de Recepção (Receiver Buffer) – Este bloco é responsável pela recepção serial dos dados que chegam através da entrada RxD, conversão deste dados que chegam bit a bit do formato serial para formato paralelo (paralelizar), verificar possíveis erros ocorridos na transmissão, extrair os bits ou caracteres inseridos pelo transmissor destinados a detecção de erros e enviar os dados de informação propriamente dita , byte a byte, para a CPU. 7 – Bloco de Controle da recepção (Receiver Control) – Este bloco gere a operação do bloco de recepção. Uma das tarefas deste bloco é a deteção de erros e a activação do seu correspondente bit no registo de estado, a decteção de falsos Start Bits e ainda a activação do bit de indicação de erros no “frame” se se constatar a auxencia do Stop Bit no dado recebido.Os sinais que chegam/partem deste bloco são:RxRDY ( Receiver Ready) – Este é um sinal de saida que indica que o 8251 contem um dado que já está pronto para ser enviado para a CPU. Este sinal pode ser usado para o pedido de interrupção. Se o mecanismo de comunicação da CPU com os I/O for através do modo Polling, a CPU pode testar o estado do bit correspondente a este sinal no registo de estado.RxC (Receiver Clock) – Este é o sinal de clock que permite estabelecer a taxa (em bits por segundo ou Baunds) em que o dados são recebidos.SYNDET/BRKDET ( SYNC Detect/Break Detect) – Este pino pode ser programado tanto como entrada como para saida. Quando configurado como saida, este sinal é activado quando (modo interno de sincronização) para indicar que o caractere(s) de sincronização foi detectado. Quando programado como entrada, a ctivação deste sinal indica que o 8251 pode começar a “empacotar os dados que vinha recebendo. No modo Assincrono, o pino é usado como sinal de saida para indicar que o 8251 recebeu o sinal de break que normalmente é usado para cortar a comunicação. A figura que se segue mostra o modo típico como o 8251ª é interligado ao microprocessador.

Microprocessor and Microcontrollers Page 65 of 92

C/D CS D7 ---D0 RD WRCLK

A0

8251A

Barramento de endereços

Barramento de dados

Barramento de Controle

Descodificador

Reset

RD WRIO/M

Clock

C/D CS D7 … D0 RD WR

Page 66: Microprocessores e Microcontroladores

Configuração do 8251

Para que o 8251A possa operar num determinado modo é necessário que este seja configurado. A configuração consiste no envio, por parte da CPU, de um conjunto de palavras de comando que permitem a inicialização do “chip” para que este possa suportar a forma de comunicação desejada. De entre outros aspectos, as palavras de controle escritas no 8251 determinam a velocidade de Transmissão/Recepção, o número de bits que compoem um caractere, o número de Stop Bits, o modo de comunicação (Sincrona ou Assincrona), a paridae, etc. Só depois da programação é que o 8251 se encontra pronto para executar as suas funções no processo de comunicação. Logo que o processo de configuração termina o 8251 activa a saida TxRDY para indicar a CPU que o “chip” se encontra pronto para receber um dado da CPU para ser transmitido. Esta saida é desactivada automaticamente logo que o 8251 recebe um dado da CPU. Por outro lado, quando o 8251 acaba de receber um dado vindo do Modem ou qualquer outro dispositivo, este activa a saida RxRDY para indicar que um caracter foi recebido e esta pronto para ser enviado para a CPU. Esta saida é desactivada automaticamente logo que a CPU lê o dado. O 8251 só irá começar com a transmissão serial do dado apenas quando o bit TxEnable for activado no registo de comando e a entrada CTS se encontrar no nível Low.

Definição do modo de comunicação

O envio da palavra que determina o modo de operação do 8251 deve sempre ser antecedido de envio de um comando re RESET do chip. Logo a seguir ao RESET o 8251 considera que a palavra que se segue é uma instrução do modo de operação seguida de caracteres de sincronizaçào (no caso de comunicação sincrona) e depois instrução de comando. A figura abaixo mostra a sequência de envio de comandos de inicialização do 8251. e o formato da palavra de Esta sequência é ilustrada na figura que se segue.

Formato da instrução do modo de operação O formato da instrução de modo de operação depende do tipo de comunicaçào pretendida. As figuras abaixo mostram os formatos da instrução de modo de operação para a comunicação Assincrona e Sincrona respectivamente.

Microprocessor and Microcontrollers Page 66 of 92

Page 67: Microprocessores e Microcontroladores

Quando for programado para a operação no modo Assincrono, o USART 8251 insere auotomaticamente no caractere recebido da CPU, o “Start Bit” logo a anteceder ao bit menos significativo do dado, o bit de paridade (se for o caso) logo a seguir ao bit mais significativo do dado e ainda o(s) “Stop Bit(s)” logo a seguir ao bit de paridade. Só depois é que o dado é serializado e o caractere transmitido bit a bit através do pino de saida TxD. O Shift de cada bit é efectuado na borda descentente do pulso do clock TxC. A velocidade de transmissão é programada para ser igual a frequência de TxC ou 1/16 de TxC ou ainda 1/60 de TxC. Se o 8251 não tiver nenhum dado para transmitir a saida TxD mantem no nível High o que é entendido pelo dispositivo a que está conectado como uma marca de estado de espera.Do lado de recepção, a entrada RxD encontr-se no nível “High” enquanto nenhum dado estiver a ser recebido. Uma transição de “High” para “Low” é entendido como sendo a chegada do “Star Bit”. Uma vez confirmado que não se trata de uma transsição falsa, o processo de amostragem dos bits subsequentes começa incluindo o bit de paridade e o(s) “Stop Bits”. A amostragem é feita na borda descendente dos pulsos de RxC. Depois faz-se a análise dos bits de controle (paridade e Stop Bits). Se se constatar erro de paridade o bit respectivo no registo de estado é activado. Se se constatar que o “Stop Bit” tem o nível lógico Low o Framing Error” é activado no registo de estado para indicar erro no formato do dado recebido. Depois o o dado é carregado no registo (paralelo) de saida e o sinal RxRDY é activado para dar indicação que já existe um dado pronto para ser transferido para a CPU. Se o dado anteriormente carregado no registo de saida não chegou a ser lido pela CPU, ele se perde pois será substituido pelo dado actual. Se isto ocorrer então o bit de “OVERRUM ERROR” é activado no registo de estado. Todos estes bits de erros podem ser desactivados através da instrução de desactivação de erros.

Microprocessor and Microcontrollers Page 67 of 92

Formato da instrução do modo de comunicação Assincrona

Formato da instrução do modo de comunicação Sincrona

Page 68: Microprocessores e Microcontroladores

Operação no modo Sincrono

Neste modo de transmissão, O USART 8251 mantém continuamente a saida TxD no estado “High” até que a CPU envie o primeiro caractere (normalmente o caractere de sincronização) para ser transmitido. Quando a linha CTS vai para o estado “Low” o primeiro caractere é enviado bit a bit para a saida em sincronia com a borda descendente do pulso de TxC. Uma vez inicida a transmissão o fluxo de bits na saida TxD deverá ser contínuo, a velocidade de TxC. Se a CPU não enviar dado para o 8251 antes do do buffer de transmissão ficar vazio este irá automaticamente inserir caracteres de sincronização para ser transmitido. Se isso ocorrer, a saida TxEMPTY será activada para sinalizar que o 8251 está vazio e que se encontra a transmitir apenas o caractere se sincronização. Esta saida será desactivada internamente logo que o 8251 receber um dado da CPU.Na recepção, os bits que vão chegando na entrada RxD são amostrados (sampled) na borda ascendente dos pulsos de RxC. O conteudo do buffer de recepção (RxBuffer) é comparado bit a bit com o caractere de sincronização. Logo que se constate a recepção do caractere de sincronização o sinal SYNDET é activado e o 8251 passa para o modo de recepção de caracteres de infomaç`ao propriamente dita (incluindo bits de paridade).Se o USART for programado para aceitar sincronização externa, a sincronização ocorre com a aplicação de um nível “High” na entrada SYNDET. O mecanismo de verificaçào de erros o o mesmo que usado no modo Assincrono.

Instruções de Comando

Logo que a instrução de definição do modo de operação e os caracteres de sincronização (caso seja necessário) forem escritos no 8251 então o dispositivo está pronto para ser usado na comunicação. As instruções de controle destinam-se ao controle da própria operação do dispositivo. Estas instruções implementam funções tais como habilitar ou desabilitar a transmissão/Recepção, desactivação de bits de erros no registo de estado e o controle do MODEM. A figura abaixo apresenta o formato das instruções de comando.

Microprocessor and Microcontrollers Page 68 of 92

Page 69: Microprocessores e Microcontroladores

LEITURA DO REGISTO DE ESTADOEm sistemas de comunicação de dados torna-se necessário de vez em quanto, examinar o dispositivo responsável pela comunicação com o objectivo de se interirar dos erros que eventualmente possam ocorrer ou quias outras condições que requerem uma atenção por parte do processador. O 8251 apresenta facilidades que permitem o programador ler o estato do dispositivo em qualquer momento durante a operação do “chip”. Para a leitura do estado do 8251 a CPU emite a instrução habitual de leitura de um I/O. Para esta operação a entrada C/D deve estar em “High”. A figura que se segue mostra o formato do registo de estado.

Microprocessor and Microcontrollers Page 69 of 92

Page 70: Microprocessores e Microcontroladores

Repare-se que alguns deste bits têm o mesmo significado de alguns pinos de saida do 8251.As figuras que se seguem mostram o exemplo típico de coneção do USART 8251 com um MODEM.

Microprocessor and Microcontrollers Page 70 of 92

Page 71: Microprocessores e Microcontroladores

Exemplo: Apresentar o esquema detalhado de conecção do 8085 com o USART 8251 e este com um modem. Elaborar depois um programa em assembly que configura o USART 8251 para funcionar com as seguintes caracteristicas: 1 - Modo Transmissão/Recepção no modo assincrono2 – Paridade Impar3 – Dados codificados em 8 bits4 – 1 Bit de stopDepois da configuração o microprocessador deve enviar para um modem conectado a saida da da porta serial em referência dados armazenados nos locais compreendidos entre os endereços 3000 a 30FF.

CONTROLADOR DE INTERRUPÇÒES

Num sistema baseado em microprocessador, a CPU precisa de estar constantemente em comunicação com todos os periféricos a ele conectados tais como o teclado, a impressora, interface de comunicação serial, disco duro, etc. Por exemplo, o teclado precisa de ser atendido pelo microprocessador para a operação de transferência de um dado buffer do teclado para a memória, quando o utilizador carregar numa dada tecla. Por outro lado, um interface de comunicação (serail ou paralela) como por exemplo o PPI-8255 deverá ser atendido pelo microprocessador sempre que um dado novo chegar a sua entrada.

Microprocessor and Microcontrollers Page 71 of 92

AD0

AD7

D0

D7

A8

A15

Page 72: Microprocessores e Microcontroladores

Em princípio existem dois métodos de estabelecer uma comunicação eficiente entre o microprocessador e os periféricos. Um destes métodos é o chamado “polling” ou scanning que é ilustrado na figura 3.8.

Como se pode observar na figura acima, no método de “polling” o microprocessador está constantemente a examinar , de forma sequenciada, a cada dispositivo de E/S a ele conectado para ver se este precisa de algum serviço do microprocessador.Por exemplo, no caso de um interface paralelo implementado na base de PPI-8255 a CPU poderia examinar a saida IBF (input Buffer Full) já que está saida é activada quando o PPI já recebeu um dado de um periférico e que ainda não foi transferido para o microprocessador. Este método apresenta uma grande desvantagem pelo facto de grande parte do programa principal estar dedicado a execussão de loops que tem se destinam a verificação de cada um dos dispositivo de E/S para determinar se algum deles está a precisar de algum serviço por parte da CPU. Note-se que quanto maior for o número de I/Os conectados ao microprocessador pior será o desempenho do sistema porque muito mais tempo será gasto apenas no teste dos dispositivos de E/S. Repare-se ainda que num determinado ciclo de testes pode acontecer que alguns ou mesmo nenhum dos dispositivos de E/S esteja a precisar de algum serviço. Portanto, este método usa de forma pouco eficiente o tempo de processamento da CPU.O segundo método de estabelecer o dialogo entre a CPU e os dispositivos de E/S e que resolve os problemas de ineficiêcias apresentadas no método polling é o chamado método de interrupção (interrupt-driven data exchange or interrupt-driven communicaton) que é ilustrado na figura .

Microprocessor and Microcontrollers Page 72 of 92

Multiplex comandado pela CPU

CPU

ROM

RAM

I/On

I/O1

I/O2

I/O3

Figura 3.10 – Ilustração do método de “polling”

Page 73: Microprocessores e Microcontroladores

Neste método de comunicação entre a CPU e dispositivos de E/S é inicializado quando o próprio periférico (mais precisamente o seu interface) emitir um pedido ao microprocessador a solicitar um serviço por parte da CPU. Com este método, o microprocessador estará a usar grande parte do seu tempo na execussão de outros programas (talvés mais complexos ou importantes para o funcionamento do sistema) e só irá se dedicar ao atendimento de um periférico quando for solicitado para o efeito. Para este propósito o dispositivo de E/S precisa de ter uma saida que, quando este precisa de algum serviço, irá enviar um sinal para a CPU indicando que, logo que este termine a execussão da instrução que está em curso, terá que interromper o programa para passar para uma rotina concebida para servir o I/O que solicitou a interrupção e , logo que esta rotina estiver concluida, o microprocessador deverá retornar ao programa que havia sido interrompido.A sequência de eventos que têm lugar quando o microprocessador recebe um pedido de interrupção (Nível lógico high nas entradas INTR, TRAP, RST5.5, RST6.5 e RTS7.5 para o caso do 8085) são:1 – Reconhecer o pedido (Nível lógico “Low” na saida INTA para o caso do µP 8085).2 – Completar a execussão da instrução em curso.3 – Salvar os registos internos na pilha.4 –Chamar a rotina concebida para servir o dispositivo que solicitou a interrupção ( interrupt- handling rotine)5 – Executar a rotina6 – Fazer a reposição dos registos internos7 – Retornar ao programa que havia sido interrompido.Tendo em conta que o microprocessador normalmente se encontra conectado a vários periféricos, o processo de atendimento de uma interrupção terár que responder as seguintes questões:1 – Que periférico está a solicitar a interrupção ?2 – Como localizar a rotina do periférico em causa?3 – Se dois ou mais periféricos solicitarem interrupção qual deles deverá ser atendido

Microprocessor and Microcontrollers Page 73 of 92

Figura 3.11 – Ilustração do método de Interrupções

CPU

ROM

RAM

I/On

I/O1

I/O2

I/O3

Controlador de InterrupçõesINTR

Page 74: Microprocessores e Microcontroladores

primeiro? As duas primeiras questões são resolvidas através da implementação dos chamados vectores de interrupção que são acompanhados pelas respectivas tabelas de vectores de interrupções. O vector de interrupções é um valor binário que o periférico que solicita a interrupção deve fornecer ao µP para que este possa saber onde localizar a rotina concebida para servir o periférico. A tabela de vectores de interrupção é um conjunto de locais consecutivos de memória onde se encontra o (endereço de) início de cada uma das rotinas de serviço dos dispositivos de E/S conectados ao microprocessador. Para o 8085 a tabela de vectores de interrupções vai dos endereços 0000H até 0040H tal como está ilustrado na figura abaixo.

Figura 3.12 – Tabela de vector de Interrupções do 8085

Como foi referenciado o periférico que solicita a interrupção deve providenciar o mecanismo para que a instrução a ser executada pelo microprocessador logo a seguir ao reconhecimento da interrupção esteja localizada num dos endereços aprersentados na tabela acima. Para o 8085 ( e para o 8080) esta instrução deve ser uma das instruções RST n onde ( n varia de 0 a 7) pois cada uma destas instruções equivale a um JUMP para um dos endereços apresentados na tabela de vectores de interrupções. Portanto logo que o periférico receber o sinal de reconhecimento de interrupção vindo do µP este deve apresentar no barramento de dados um valor binario que representa o codigo binário da instrução RST n. A figura 3.13 ilustra um circuito básico que permite o periférico a gerar e enviar para o µP a instrução RST n.

No circuito acima, a comutação dos oito micro-interruptores para a posição ON ou OFF permitirá a aplicação a entrada do “buffer” 74ALS244 de qualquer valor (binário) compreendido entre 00H a FFH para gerar qualquer uma das oito instruções RST n . Por exemplo, se a rotina de atendimento do periférico inicia no endereço 0020H então os micro-interruptores do circuito da figura 3.12 devem ser posicionados de modo a gerar o código binário da instrução RST 4 (11100111 ou E7H) para ser aplicado na entrada do “buffer”. Deste modo, logo que o

Microprocessor and Microcontrollers Page 74 of 92

SEL

808

5

Vcc

74ALS 2441A1 1A2 1A3 1A4 2A1 2A2 2A3 2A4

1

1Y1 1Y2 1Y3 1Y4 2Y1 2Y2 2Y3 2Y4G1

G2

Ba

rramento

de dados

INTA

Micro-interruptores

Fig.3.12 – Micanismo simples de implementação de vector de interrupções

Page 75: Microprocessores e Microcontroladores

microprocessador emitir o sinal de reconhecimento da interrupção (INTA) o “buffer 74ALS244 estará habilitado e o microprocessador poderá ler o código binário da instrução e leva-ló para o registo de instruções.

O CONTROLADOR PROGRAMÁVEL DE INTERRUPÇÕES PIC-8259A

O PIC-8259A é um dispositivo da Intel concebido para fazer a gestão de interrupções tanto para microprocessadores de 8 bita (8085 e 8088) como também para o 8086 minimizando deste modo a sobrecarga do microprocessador no atendimento de pedidos de interrupção. As funções básicas do PIC-8259 são:● Receber sinais de pedidos de interrupções vindos de oito periféricos, multiplexá-los para depois gerar um único sinal a ser aplicado a entrada de pedido de interrupção do microprocessador.● Gerar o vector de interrupções para qualquer um dos oito locais da tabela de interrupções.● Gerir perioridades nos pedidos de interrupções de acordo com um esquema pré-estabelecido● Mascarar entradas de pedidos de interrupções individualmente.● Permitir a leitura por parte do microprocessador do estado de cada uma das oito entradas de pedido de interrupção.● Gerar sinal de pedido de interrupção do tipo “Level –triggered” ou “edge-triggered”.● Permitir a expansão de entradas de pedidos de interrupção até 64linhas de entrada.● Permitir a configuração de modo a poder ser conectado com o 8085 ou com o 8066/8088 Como foi mencionado o PIC-8259 tem oito entradas de pedidos de interrupção mas incorpora um bloco que permite a coneção em cascata de até oito circuitos deste género de modo a se poder lidar com 64 pedidos de interrupção.A figura 3.13 mostra o esquema em blocos do PIC-8259A

“Data Bus Buffer” - como se pode notar da figura 3.13 a conecção (linhas de dados) entre o PIC-8259A e o microprocessador é feita através das oito linhas de dados D0 – D7 que partem do bloco designado por “Data Bus Buffer”. Este bloco é essencialmete constituido de 8 “3-State

Microprocessor and Microcontrollers Page 75 of 92

Fig.3.13 – Esquema em blocos do PIC-8259A

Page 76: Microprocessores e Microcontroladores

buffers” bi-direcionais que serve de interface entre o PIC-8259 e o barramento de dados do microprocessador.

Read/Write Logic – Este bloco recebe os sinais de controle vindos do µP e gera e os diversos sinais que permitem habilitar o “chip” em si e os diversos registos internos para poderem receber e/ou enviarem dados da CPU. Os sinais que são conectados a este bloco são:

CS – Um sinal de nível Low nesta entrada habilita o chip para que este possa se comunicar com o µP.WR - Um sinal de nível Low nesta entrada permite o µP enviar para PIC-8259A comandos de controle para a configuração do chip.

RD - Um sinal de nível Low nesta entrada permite o PIC-8259A envir para a CPU os estados do registo de interrupções (IRR), do registo de interrupção em serviço (ISR) do registo de mascramento de interrupções (IMR) ou ainda dos níveis de interrupções.

A0 – Esta entrada é usada em conjunto com os sinais WR e RD no envio, por parte da CPU, dos vários comandos para o PIC-8259A e na leitura dos registos de estado. Esta linha é conectada directamente com uma das linhas de endereço do µP.A figura abaixo mostrao exemplos típicos de conecção do PIC-8259A com o microprocessador

Bloco de controlo (Control Logic) – Neste bloco está implementada toda a lógica que permite comandar o modo de operação deste controlador. Para o efeito, este bloco contém registos de inicialização (Initialization Command Word Registers – ICW) e registos de comandos de operação ( Operation Comando Word Registers – OCW). É através destes registos que o controlador recebe comandos da CPU para a configuração do modo de operação do circuito no seu todo. Este bloco permite também a leitura, por parte da CPU, de alguns destes registos e, deste modo, fazendo com que a CPU possa se inteirar do estado do controlador. É também a responsabilidade deste bloco gerar o sinal de pedido de interrupção – INT - que é enviado para o microprocessador e receber do microproprocessador o sinal de reconhecimento da interrupção- INTA.

Registo de Pedido de Interrupções (IRR) - Este é um registo de oito bits que está conectado as oito linhas que recebem os sinais de pedido de interrupção vindas dos periféricos. Portanto, este registo recebe e armazena todas as solicitações de interrupções que chegam dos periféricos.

O bloco de gestão de prioridades (Periority Resolver) – Este é também um registo de oito bits que recebe do registo de interrupções os bits que estão activados e, de acordo com a prioridade estabelecida para cada uma das entradas, passa para o registo de interrupções em serviço, no memento em que o microprocessador envia o sinal de reconhecimento de interrupção, aquele pedido de maior prioridade.

O registo de interrupções em serviço (ISR) – Este é também um registo de oito bits em que apenas o bit correspondente ao pedido de interrupção de maior prioridade determinada pelo módulo “Periority Resolver” é activado. Portanto este registo contém o pedido de interrupção que está sendo atendido .

O registo de mascramento de interrupções (IMR) contém os bits das entradas de interrupções que estão mascaradas, isto é, aquelas que mesmo ocorrendo, não deverão ser atendidas.

Microprocessor and Microcontrollers Page 76 of 92

Page 77: Microprocessores e Microcontroladores

O bloco de conecção em cascata (Cascade Buffer/Comparator) controla a conecção de dois ou mais PIC-8259A permitindo deste modo que o µP possa ser conectado a mais que oito periféricos que podem emitir um pedido de interrupção. Para este efeito, as linhas CAS0 – CAS2 constituem um barramento “privado” do chip que permitem a comunicação entre os PIC-8259A quando estes estão interligados. Estas linhas comportam-se como linhas de saida quando o PIC-8259A é configurado para funcionar como “Master” e comportam-se como linhas de entrada quando o PIC-8259A é configurado para funcionar como “Slave”. Com estas linhas o PIC-8259A “Master” envia um dado de três bits que constitue a identificação (ID) do “Slave” que deverá estar a ser atendido pela CPU, para um dado pedido de interrupção.

Como vem ilustrado na figura 3.14 a determinação se o PIC-8259A funciona como “Master” ou “Slave” é feita conectando o pino SP/EN no nível “High” (Vcc) para configurar como Master ou então no nível “Low” ( GND) para configurar como “Slave”. Nesta configuração apenas o pino de pedido de interrupção (INT) do PIC-8259A “Master” é conectado ao µP. Os pinos de

Microprocessor and Microcontrollers Page 77 of 92

Fig.3.14 – Conecção do PIC-8259A com o µP

Fig.3.14 – Conecção do PIC-8259A em casta

Page 78: Microprocessores e Microcontroladores

pedido de interrupção dos PIC-8259A “Slaves” são conectados as etradas de pedido de interrupção do PIC-8259A “Master”.

Sequência de eventos no pedido de interrupçãoQuando o PIC-8259A é conectado ao 8085 a sequência de eventos que têm lugar quando um periférico solicita um pedido de interrupções é a seguinte:

1- Uma ou mais linhas de entradas de pedidos de Interrupção são levados ao nível “High” pelo periférico que solicita a interrupção activado deste modo o bit ou bits correspondentes no IRR.

2- O PIC-8259A avalia estes pedidos e, caso seja necessário, gera e envia o pedido de interrupção para o µP.

3- Quando o µP reconhece o pedido de interrupção acitva (nível lógico Low) a INTA .

4- Oquando o PIC-8259A recebe o sinal da CPU o bit correspondente ao pedido de maior prioridade (caso haja mais que um pedido em simultâneo) é activado no ISR e o bit correspondente é desactivado no IRR. Ao mesmo tempo o PIC-8259A envia para o barramento de dados o código binário 11001101 (CDh) que corresponde a instrução CALL para o 8085.

5- O microprocessador lê o código da instrução CALL para o registo de instruções e de seguida emite dois novos pulsos para o PIC-8259A.

6- Estes dois pulsos fazem com que o PIC-8259A envia para a CPU através do barramento

de dados, o endereço pre-programado da rotina de serviço do periférico que está solicitando a interrupção. No primeiro pulso é emitido o byte menos significativo do endereço e no segundo pulso o byte mais significativo.

7- Os três bytes emitidos pela PIC-8259A completam a instrução CALL. Quando o PIC-8259AFunciona no modo AEOI (Automatic End Of Interruption) o bit do registo ISR é desactivado nofim do terceiro pulso . Caso contrário o bit da interrupção em serviço no ISR mantem-se activado até que o µP envie para o PIC-8259A o comando do EOI ( End of Interrution.

Os três bytes libertados pelo PIC-8259A para a CPU a seguir aos três pulsos de reconhecimento do pedido de interrupção têm o seguinte formato:

Como foi acima mencionado, o primeiro byte que o PIC-8259A envia para a CPU é o

código da instrução CALL.

Microprocessor and Microcontrollers Page 78 of 92

INTA

INTA

INTA

INTA

Figura 3.15a - Conteúdo do primeiro byte enviado pelo PIC-8259A para a CPU logo a seguir o primeiro pulso de reconhecimento da interrupção

Figura 3.15- b Figura 3.15 - c

Page 79: Microprocessores e Microcontroladores

Como foi visto nos capítulos anteriores, no 8085 o espaço reservado para a implementação (ou melhor, início de implementação) das rotinas de atendimento das interrupções podem se de 4 bytes ou de 8 bytes. Assim, a figura 3.15-b mostra o conteúdo do segundo byte que PIC-8259A envia para a CPU para em que aquatro bytes estão reservados para cada rotina de

serviço de interrupção. Repare que neste caso os cinco bits menos significativos são pré-definidos pelo PIC-8259A e identificam cada uma das 8 entradas de pedido de interrupção (IRn) enquanto que os restantes 3 mais significativos são inseridos no momento da configuração do “Chip”.A figura 3.15-c mostar o caso em que a cada rotina de atendimento da interrupção são reservados 8 bytes. Para este caso, os 6 bits menos significativos identificam as entrada IR enquanto que os 2 mais significativos são inseridos no momento da configuração. Conteúdo do terceiro byte enviado pelo PIC-8259A para a CPU logo a seguir o primeiro pulso de reconhecimento da interrupção .é apresentado na figura 3.15-d. O conteúdo deste byte é determinado no memento da configuração do “Chip”.

Modos de OperaçãoPor modos de operação entende-se como sendo o modo como as perioridades de cada uma das entradas de pedido de interrupção serào atendidas de acordo com as perioridades estabelecidas para cada uma delas. Assim, o PIC-8259A possui os seguintes modo de gestão de perioridades:1 – Full Nested Mode – Este é o modo pré-definido em que o PIC-8259A atribui as prioridades no atendimento de pedidos de interrupção. Neste modo, a entrada IR0 apresenta a mais alta prioridade e, de forma seuqencial, a entrada IR7 é atribuida a prioridade mais baixa. Neste modo é possível também selecionar e configurar a entrada da masi alta prioridade e, as entradas subsequentes terão as prioridades a descrescer sequencialmente. Por exemplo, se a entrada IR4 for configurada como a de prioridade mais alta então a sequencia de prioridades irá decrescer de IR4 , IR5, IR6, IR7, IR0, IR1, IR2 ate IR3.

Rotação automática - Neste modo, quando uma entrada de pedido de interrupção é atendida, esta passa automaticamente para a última prioridade e todas as outras entradas sofrem um rotação de prioridades. Deste modo todas as entradas são consideradas como tendo a mesma prioridade. Este modo de operação é ilustrado na figura que se segue.

Microprocessor and Microcontrollers Page 79 of 92

Figura 3-15 – Conteúdo do 2o byte enviado pelo PIC-8259A para a CPU logo a seguir ao segundo pulso de reconhecimento

INTA

Figura 3.15 – c Conteúdo do terceiro byte enviado pelo PIC-8259A para a CPU

Page 80: Microprocessores e Microcontroladores

Neste exemplo, a figura 3.16-a mostra uma situação em que duas entradas de pedido de interrupção estão activadas. Neste caso IR3 será atendida. Quando a rotina de atendimento de IR3 terminar esta entrada passa a ter a prioridade mais baixa tal como se ilustra na figura 3.16-b. Todas as outras entradas sofrerão uma rotaç`ao nas prioridades.

Rotação EspecíficaNeste modo a entrada de prioridade mais baixa pode ser especificada dinâmicamente, através do programa. As prioridades das entradas subsequentes terão a sequêcia crescente partindo daquela que foi estabelecida como sendo a de mais baixa.Para além destes três modos de operação o PIC-8259A possui outros modos de operação cujos detalhes podem ser encontrados em manuais específicos deste “Chip”.

Programação do PIC-8259A

A programação do PIC-8259 é um processo que tem por objectivo configurar o chip de modo a poder operar de acordo com as especificações do sistema onde o chip está incorporado. A programação do “chip”compreende duas fases distintas nomeadamente a inicialização e a configuração do modo de operação. A inicialização do PIC-8259 é levado a cabo antes deste começar a operar no sistema. Só após a inicialização é que o PIC-8259 terá a informação indispensável para poder exercer funções básicas no sistema.O processo de inicialização consiste no envio por parte da CPU de uma sequência de dois a quatro Palavras de Inicialização (Initialization Command Words – ICW). Ests palavras de inicialização configuram os vários parâmetros necessários para a operação do 8259 tais como o carregamento dos vetores de Interrupção, a quantidade de bytes reservadas a cada (o início) rotina (4 bytes ou 8 bytes), o tipo de pulso que deve ser aplicado a intrada IR do PIC-8259 (Level trigged ou edge trigged), se no sistema está apenas um PIC-8259 ou alguns conectados em cascata, se o PIC-8259 está conectado ao μP 8085 ou ao 8086/8088, etc.O fluxograma e as tabelas que se seguem mostram a sequência de inicialização e alguns dos parâmetros de inicialização do PIC-8259.

Microprocessor and Microcontrollers Page 80 of 92

Estados de IRR

Prioridades

Mais Baixa

Mais Alta

Estados de IRR

Prioridades

Mais Alta

Mais Baixalta

Figura 3.16-b

Figura 3.16-a

Page 81: Microprocessores e Microcontroladores

Como se pode observar no fluxograma da figura 3.17, dependendo do modo como PIC- 8259 é usado num dado sistema, a inicialização pode requere entre duas a quatro palavras de inicialização designadas por ICW1 , ICW2, ICW3 e ICW4. As funções de cada uma destas palavras de inicialização são descritas a seguir.

1 - ICW1 A configuração do PIC- 8259 começa com o envio da palavra de inicialização ICW1 (Initialization Command Word 1). O PIC- 8259 reconhece um determinado byte para ele enviado como correspondendo a ICW1 na base de dois critérios:1 – A entrada A0 do PIC- 8259 está no nível lógico 0 (zero). Repare que esta entrada é conectada a linha de endereço A0.2 – O bit D4 da palavra está no nível lógico 1.

A função de ICW1 é informar ao PIC- 8259 como este está sendo usado no sistema como por exemplo no modo simples ou em cascata, Interrupção de tipo Edge Trigged ou Level Trigged, a faixa de separação dos endereços das rotinas que servem as interrupções (4 bytes um do outro ou 8 bytes um do outro), se a quarta palavra de inicialização será necessária ou não, etc. Os detalhes do significado de cada um dos bits do ICW1 são apresentados na figura 3.18.

Microprocessor and Microcontrollers Page 81 of 92

Conectado em cascata

ICW4 necessário?

Pronto para aceitar interrupções

Fig. 3.17 – Fluxograma de inicialização do PIC - 8259

Funcionamnto no modo pre-defnido

Page 82: Microprocessores e Microcontroladores

Como se pode do quadro acima, quando o PIC-8259 está conectado ao 8080 ou 8085 os três últimos bits (D5 – D7) da primeira palavra de inicialização formam uma parte do bytes menos significativo do endereço das rotinas de serviço das interrupções. Quando o intervalo entre os endereços de chamada das rotinas é de 4 bytes os três bits são usados na formação do endereço tal como se apresenta no quadro . Quando se usa um intervalo é de 8 bytes apenas bits D7 e D6 são usados. Neste caso D5 é ignorado (Don’t care). Quando o PIC-8259 é conectado ao 8086 ou 8088 estes três bits podem assumir valorres lógicos 0 ou 1. Os quadros que se seguem mostram o modo como estes bits são usados na formação do byte menos significativo do endereço de serviços das rotinas:

Microprocessor and Microcontrollers Page 82 of 92

ICW1

ICW2Fig. 3.18 Formato de ICW1 do PIC - 8259

Page 83: Microprocessores e Microcontroladores

No caso em que a separação dos endereços é de 4 bytes o PIC-8259 gera os seis primeiros bits do byte menos significativo do vector de interrupção enquanto os dois bits mais significativos provem de de ICW1.No caso em que a separação dos endereços é de 8 bytes o PIC-8259 gera os cinco primeiros bits do byte menos significativo do vector de interrupção enquanto os três bits mais significativos provem de de ICW1. Repare que neste caso o PIC-8259 multiplics o numero de interrupção por 4 para gerar estes primeiros cinco bits do vector de interrupção

Repare-se que quando se trata de ICW1 (primeira palavra de inicializaçào) D4 deve estar necessariamente em 1.Quando o PIC-8259 é usado com o 8080/8085, a quarta palavra de inicialização (ICW4) tanto pode ser necessária como também pode ser ignorada. Nestas condições, se PIC-8259 não receber ICW4 então as funções determinadas por esta palavra de inicialização estarão no modo pré-defionido. 2 - ICW2 Logo a seguir ao envio de ICW1 o PIC-8259 fica a espera de receber a segunda palavra de inicialização – ICW2. No 8080/8085 o conteudo de ICW2 é constitui o byte mais significativo dos endereço de chamada das rotinas de serviço das interrupções tal como se mostra no quadro que se segue.

3 – ICW3 Esta palavra de inicialização apenas é enviada para o PIC-8259 se o bit SNGL de ICW1 for tiver sido atribuido o valor 0. Se SNGL for 1 a palavra que se segue a ICW2 será interpretada como sendo ICW4 se A0 for 1 e IC4 vindo de ICW4 for 1. Caso contrário esta palavra será interpretada como sendo uma das palavras de comando. ICW3 também tem duas interpretações dependendo se o o PIC-8259 é usado como Master ou Slave.

Microprocessor and Microcontrollers Page 83 of 92

a

Fig. 3.20 - Formato do ICW2

Fig. 3.19 - Obtenção do vectore de interrupções; a - endereços separados em 4 bytes; b – Endereços separados em 8 bytes

b

Page 84: Microprocessores e Microcontroladores

Quando o PIC-8259 é usado como Master, os oito bits de ICW3 são usados para indicar quais as entrdas estão conectadas a saida de outros PIC-8259 que foram configurados como Slaves no sistema. Quando o PIC-8259 é usado como Slave ICW3 indica para que entrada do Master este Slave estará conectado. Neste caso apenas os três bits menos significativos sào usados para este efeito. O quadro da figura 3.22 mostra o formato ICW3 quando o o PIC-8259 é usado como Slave.

ICW4 – Esta palavra de inicialização é enviada para o PIC-8259 apenas se o bit IC4 d ICW1 estiver activado. O propósito desta palavra de inicialização é configurar o PIC-8259 para operar num modo diferente do modo pré-definido. O modo pré-defenido equivale a carregar ICW4 com o valor 00H. O formato e as tarefas de ICW4 são apresentados na figura 3.23.

Microprocessor and Microcontrollers Page 84 of 92

Fig. 3.21 – Funções de ICW3 ; a - PIC-8259 como Master; b – PIC-8259 como Slave

ab

Fig. 3.22 – Identificação da entrada do Master a que o Slave está conectado

Fig. 3.23 – Formato de ICW4

Page 85: Microprocessores e Microcontroladores

Os bits D7 a D5 são mantidos no nível lógico zero (0).

D4 – SFNM: Este bit é usado para selecionar o modo de operação designado por Special Full Nested Mode. Este modo de opereração só pode ser selecionado quando existem mais que um controlador conectados em cascata. A operação em SFNM equivale ao modo de operação Full Nested Mode já visto para o caso de utilização de um simples PIC-8259 com a particularidade de apenas as entrads de maior prioridade do Slave que está sendo atendido poderem ser atendidas. No SFNM apenas o Master é que precisa ser programado.

D3 – BUF: Este bit informa o PIC-8259 se a saida de dados D0 a D7 são conectados a um Buffer ou não. Se a saida de dados vão dar a um buffer então o pino designado por SP/EN torna-se num pino de saida cujo sinal é usado para servir de anable para o buffer conectado as saidas D0 a D7. Assim, se o bit BUF for zero (0) a saida do PIC-8259 não está conectada a um buffer . Neste caso (1) o bit M/S é ignorado (don’t care) e (2) o pino SP/EN é usado como entrada para informar o despositivo se está sendo usado como Master (Pino 16 = High) ou Slave (pino 16 = Low). Num sistema que usa apenas um PIC-8259 esta entrada deve ser conectyada permanentemente ao nivel High. Por outro lado, se BUF for 1 então a saida de dados D0 a D7 do PIC-8259 vão dar a um beffer. Um sinal de anable será gerado no pino 16 (SP/EN) e o bit M/Sserá usado para determinar se um dado PIC-8259 é usado como Master ou Slave.

D2 – M/S – Este bit determina se um dado PIC-8259 está sendo usado como Master ou Salve. Este bit só tem sentido quando o bit BUF está no nível “High”.

D1 – AEOI - Este bit determina se o PIC-8259 recebe a informação do fim de atendimento da interrupção (End Of Interrupt) vinda da CPU (através da própria rotina de atendimento da interrupção) ou gerar o seu próprio sinal de EOI logo que receber o último pulso de reconhecimento de interrupção vindo do microprocessador.

Comando de operação

Logo que o processo de envio de comandos de inicialização termina o PIC-8259 encontra-se já pronto para receber e processar pedidos de Interrupção. Entretanto, enquanto o dispositivo se encontra em operação este pode receber do microprocessador comandos que permitem modificar a configuração inicial do modo de operação através do envio por parte da CPU dos chamados Operation Command Words (OCW). Em qualquer momento o PIC-8259 pode receber comandos de operação vindas da CPU para alterar o seu modo de operação.Existem três comandos de operação designadas por OCW1, OCW2 e OCW3. As funções de cada um destes comandos são de seguida descritas.

OCW1 – Esta palavra de controle é usada para determinar quais as entradas de pedido de interrupção se pretende que estejam activas e quais é que se pretende que estejam inibidas. O comando de controle OCW1 é escrito no registo de mascaramento de interrupções (IMR). Cada posição de bit deste registo corresponde a posição de uma entrada de pedido de interrupção. O formato de OCW1 é apresentada no quador que se segue.

Microprocessor and Microcontrollers Page 85 of 92

Fig. 3.24– Formato de OCW1

Page 86: Microprocessores e Microcontroladores

Assim, para mascarar (inibir) uma dada entrada de pedido de interrupção é necessário colocar na posição correspondente do registo IMR o valor binário 1 enqunato que o valor binário 0 permite que um pedido de interrupção na entrada respectiva possa ser atendido. Por exemplo se o conteúdo de OCW1 for 34H (00110100b) as entrads IR2, IR4 e IR5 estarão desactivadas. Entretanto, um pedido de interrupção aplicado a uma entrada que se encontra mascarada não se perde por completo pois este pedido é memorizado no registo IRR e poderá ser atendida logo que esta entrada for activada.

OCW2 - Este comando de operação é usado para especificar o tipo de de comando do fim de interrupção (EOI específico ou EOI não específico), e estabelecer a rotação das perioridades no atendimento das interrupções. Os bits D4 e D3 devem ser mantidas em zero (0). Os bits D7, D6, D5, D2, D1 e D0 devem ser programados de acordo com os quadros que se seguem.

Repare que os bit R, SL e EOI (D7, D6 e D5 reapectivamente) especificam o tipo de rotação de perioridades das entradas de pedido de interrupção enquanto que os bits L2, L1 e L0 (D2, D1 e D0 respectivamente) especificam a entrada de pedido de interrupção alvo dessa rotaçào.

OCW3 – Este comando de operação tem duas funções básicas nomeadamente a verificaç`ao do estado dos registos (IRR e ISR) e o macaramento de entradas de pedidos de interrupção.

Endereçamento do PIC- 8259

Dois aspectos deve se ter em conta no endereçamento do PIC- 8259 nomeadamente:A entrada designada por CS (chip Select) estiver no nível lógico zero(0).A seleção dos vários registos internos do PIC- 8259 depende do estado da entrada A0 (pino de endereço) e do estado de alguns bits específicos das palavras de comando (ICW1, OCW2 e OCW3). Assim, dois endereços consecutivos em que o bit menos significativo varia de zero a 1 são necessários para endereçar o PIC- 8259. A figura que se segue mostra o exemplo de um circuito típico de descodificação do endereço do PIC- 8259.

Microprocessor and Microcontrollers Page 86 of 92

Fig. 3.25– Formato de OCW2

Page 87: Microprocessores e Microcontroladores

Repare-se a entrada A0 do PIC- 8259 é conectada directamente a linha de endereços AD0. O circuito 82c338 é um descodificador de endereços de três entradas por duas saidas. O sistema usa o endereços 18h (0001 1000b) e 19h (0001 1001b). A saida Y6 do descodificador HPL-82c338 é usada para a activação (nível Lógico 0) da entrda CS do PIC- 8259. Esta entrada será activada quando as entrdas A, B e C do descodificador tiverem os valores lógicos 0, 1 e 1 respectivamente.

Microprocessor and Microcontrollers Page 87 of 92

Fig. 3.25– Circuito típico de endereçamento do PIC- 8259

Page 88: Microprocessores e Microcontroladores

Microprocessor and Microcontrollers Page 88 of 92

Page 89: Microprocessores e Microcontroladores

Microprocessor and Microcontrollers Page 89 of 92

Page 90: Microprocessores e Microcontroladores

Quando a fase de inicialização do chip estiver completa o PIC-8259 estará já pronto para aceitar os pedidos de interrupção de periféricos, analiza-las e gerar um sinal de pedido de interrupção ao μP. Entretanto, durante a operação o PIC-8259 pode receber da CPU comandos que determinam o modo de operação do “Chip”. Estes são os chamados palavras de comando de operação

Microprocessor and Microcontrollers Page 90 of 92

IO/M

IO/M

WR

G1 G2

Page 91: Microprocessores e Microcontroladores

Microprocessor and Microcontrollers Page 91 of 92

Page 92: Microprocessores e Microcontroladores

Microprocessor and Microcontrollers Page 92 of 92