990 likes | 1.15k Views
A família 80C51. Organização: Microcontroladores versus microprocessadores Os microcontroladores da família 80C51 Interface com o exterior Modelo de programação Processamento dos pedidos de interrupção Modos de endereçamento e tipos de instruções
E N D
A família 80C51 • Organização: • Microcontroladores versus microprocessadores • Os microcontroladores da família 80C51 • Interface com o exterior • Modelo de programação • Processamento dos pedidos de interrupção • Modos de endereçamento e tipos de instruções • Exemplo: Simulação de um registo de deslocamento
Microcontroladores (Cs) e microprocessadores (Ps) • Um microcontrolador é fundamentalmente um componente que integra os três blocos principais na arquitectura de um computador: CPU, memória e E/S • Entre Cs e Ps existem as seguintes diferenças: • Os Cs dispõem de E/S interna de vários tipos • Os Cs podem dispor de ROM / EPROM • Os Cs são sobretudo vocacionados para tarefas de controlo, onde 8 bits são a solução mais comum
Os Cs da família 80C51 • A família 80C51 apresenta uma arquitectura interna algo complexa, o que a poderia desaconselhar como veículo para a introdução a este domínio. Contudo: • Trata-se de componentes com grande uso na prática, para os quais existe uma enorme variedade de aplicações de apoio ao projecto, comerciais ou do domínio público • A complexidade não é tanto devida à arquitectura do CPU interno, mas mais pela necessidade de se multiplexarem muitos sinais em poucos pinos
Variantes dentro da família 80C51 • As variantes principais que estão disponíveis nesta família têm as seguintes características principais:
Organização de memória • A família 80C51 distingue entre memória de programa (MP) e memória de dados (MD): • A MP contém o programa a executar (instruções e operandos), enquanto a MD serve apenas para dados • Uma vez que existe apenas um barramento de endereços e um barramento de dados, a distinção entre MP e MD é feita através do sinal de leitura (MP: /PSEN, MD: /RD) • Na MP efectuam-se apenas operações de leitura, sendo que na MD se efectuam operações de leitura e escrita
Organização de memória (cont.) • Ainda a distinção MP / MD: • A existência de dois tipos de memória obriga o 80C51 a ter internamente dois apontadores (PC, DP) • A selecção do sinal de leitura apropriado (/PSEN ou /RD) é feita automaticamente pela instrução a executar • MP e MD não são necessariamente ROM e RAM, podendo mesmo coexistir no mesmo componente de memória, e.g. uma NVRAM (de onde viria o sinal de leitura, neste caso?)
Organização de memória (cont.) • Os recursos internos de MP e MD podem ser complementados externamente:
Organização de memória (cont.) • O 80C51 inicializa a execução do programa a partir do endereço 0 (zero), que poderá ser de MP interna ou externa, de acordo com o estado do pino /EA: • Quando /EA=0, o 80C51 começa a execução do programa pela MP externa • Nos casos em que existe MP interna, forçar /EA=0 significa que esta memória não deve ser considerada (no entanto, se existir MP interna, será normalmente por aí que se iniciará a execução do programa)
Organização de memória (cont.) • Alguns aspectos importantes quanto à MD: • Os 128 endereços superiores permitem de facto aceder a 256 posições, de acordo com o modo de endereçamento (conforme seja directo ou indirecto, como veremos adiante) • Do total de 384 posições assim existentes, 128 correspondem aos registos de funções especiais (SFR, special function registers) (por exemplo, o DP ocupa dois destes 128 SFR)
Interface com o exterior • Barramentos:
Interface com o exterior (cont.) • Repare-se ainda que: • O barramento de endereços é partilhado com os portos de E/S paralela 0 e 2 • O porto 0 é também partilhado com o barramento de dados • AD[0..7]: A multiplexagem dados / endereços (oito bits menos significativos) é feita no domínio temporal (primeiro o endereço e depois os dados)
Interface com o exterior (cont.) • Atendendo à multiplexagem temporal em AD[0..7], o 80C51 proporciona o sinal de controlo (ALE) para uma latch externa que memoriza a metade menos significativa do endereço:
Interface com o exterior (cont.) • Barramento de controlo: • RST (reset) • /EA-VPP • /PSEN • ALE - /PROG • /INT0 e /INT1 (entradas de interrupção) • T0 e T1 • /WR • /RD • XTAL1 e XTAL2 (pinos do oscilador interno)
Diagramas temporais • Leitura da MP externa:
Diagramas temporais (cont.) • Leitura da MD externa:
Diagramas temporais (cont.) • Escrita na MD externa:
Modelo de programação • Diagrama de blocos da arquitectura de base:
Pedidos de interrupção • A arquitectura do núcleo de base do 80C51 suporta cinco fontes de interrupção: • Duas interrupções externas (pinos /INT0 e /INT1) • Duas interrupções provenientes dos timers • Uma interrupção proveniente do porto série • Cada uma destas fontes pode ser habilitada ou inibida e a cada uma pode ser atribuída alta ou baixa prioridade (em ambos os casos, individualmente)
Pedidos de interrupção (cont.) • Sobre a prioridade das interrupções: • O atendimento a uma interrupção de baixa prioridade pode ser interrompido por uma interrupção de alta prioridade, mas não vice-versa (e se forem interrupções da mesma prioridade?) • No que respeita a pedidos simultâneos, será atendido primeiro o que tiver mais alta prioridade; se forem iguais, será realizada uma sequência de pooling para determinar qual será atendido primeiro
Pedidos de interrupção (cont.) • O atendimento a um pedido de interrupção começa com o armazenamento do valor actual do PC na stack, a que se segue uma chamada à respectiva rotina de atendimento:
Modos de endereçamento • Será adoptada nesta apresentação a mesma classificação e organização que são seguidas na folha de características do componente (Philips) • Por cada modo de endereçamento, apresenta-se uma explicação sumária e alguns exemplos ilustrativos da sua utilização
Endereçamento directo • O operando é especificado através de um endereço de oito bits que se encontra na posição de MP seguinte à que contém o código da instrução (só pode ser usado com as posições internas de RAM e com os SFR):
Endereçamento indirecto • É usado um registo para especificar o endereço do operando (tanto pode ser usado com as posições de RAM internas como externas):
Endereçamento ao registo • O próprio código da instrução contém um campo com três bits que identifica qual dos registos R0 a R7 deve ser usado (dentro do banco seleccionado):
Endereçamento específico dos registos • No caso das instruções que são específicas de certos registos (por exemplo, do acumulador):
Endereçamento imediato • O valor do operando está contido na posição de MP seguinte à que contém o código da instrução:
Endereçamento indexado • É usado para a leitura de valores armazenados na MP, servindo como apontador um registo de 16 bits (DP ou PC):
Ainda os modos de endereçamento • Apesar de a folha de características do 80C51 não o referir explicitamente, este componente suporta também um modo de endereçamento a que é habitualmente dada a designação de endereçamento relativo (e.g. jb P1.2,marca) • Neste modo, e em vez do endereço de destino, o operando consiste na diferença (offset) entre esse endereço e o endereço actual
Ainda os modos de endereçamento (cont.) • O offset é apresentado como um byte em complemento para dois, o que permite saltos de até 127 bytes para a frente ou 128 bytes para trás:
Ainda os modos de endereçamento (cont.) • Esta solução permite poupar um byte na especificação do endereço, sendo o valor do offset calculado pela aplicação que gera o código objecto • Exemplo:
Tipos de instruções • O importante não é conhecer todas as instruções (nem isso seria possível), mas sim conhecer bem as características dos seus cinco grupos principais: • Instruções aritméticas (arithmetical) • Instruções lógicas (logical) • Transferência de dados (data transfer) • Instruções Booleanas (Boolean) • Instruções de salto (jump)
Instruções aritméticas (cont.) • Exemplos:
Instruções lógicas (cont.) • Exemplos:
Instruções de transferência de dados • Estas instruções sub-dividem-se em três grupos principais: • Transferência de dados na MD interna • Transferência de dados na MD externa • Leitura de tabelas armazenadas na MP • Cada um destes tipos será agora considerado individualmente
Transferência de dados: MD interna (cont.) • Exemplos:
Instruções Booleanas (cont.) • Exemplos:
Instruções de salto • Estas instruções sub-dividem-se em dois grupos principais: • Salto não condicional • Salto condicional • Cada um destes tipos será agora considerado individualmente
Instruções de salto não condicional (cont.) • Exemplos: