A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

A família 80C51 Organização:

Apresentações semelhantes


Apresentação em tema: "A família 80C51 Organização:"— Transcrição da apresentação:

1 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

2 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

3 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

4 80C51: Arquitectura do núcleo de base

5 Variantes dentro da família 80C51
As variantes principais que estão disponíveis nesta família têm as seguintes características principais:

6 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

7 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?)

8 Organização de memória (cont.)
Os recursos internos de MP e MD podem ser complementados externamente:

9 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)

10 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)

11 Interface com o exterior
Barramentos:

12 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)

13 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:

14 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)

15 Configuração de pinos

16 Diagramas temporais Leitura da MP externa:

17 Diagramas temporais (cont.)
Leitura da MD externa:

18 Diagramas temporais (cont.)
Escrita na MD externa:

19 Modelo de programação Diagrama de blocos da arquitectura de base:

20 A RAM (MD) interna revisitada

21 Os registos de funções especiais (SFR)

22 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)

23 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

24 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:

25 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

26 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):

27 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):

28 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):

29 Endereçamento específico dos registos
No caso das instruções que são específicas de certos registos (por exemplo, do acumulador):

30 Endereçamento imediato
O valor do operando está contido na posição de MP seguinte à que contém o código da instrução:

31 Endereçamento indexado
É usado para a leitura de valores armazenados na MP, servindo como apontador um registo de 16 bits (DP ou PC):

32 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

33 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:

34 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:

35 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)

36 Instruções aritméticas

37 Instruções aritméticas (cont.)
Exemplos:

38 Instruções lógicas

39 Instruções lógicas (cont.)
Exemplos:

40 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

41 Transferência de dados: MD interna

42 Transferência de dados: MD interna (cont.)
Exemplos:

43 Transferência de dados: MD externa

44 Transferência de dados: Leitura de tabelas na MP

45 Instruções Booleanas

46 Instruções Booleanas (cont.)
Exemplos:

47 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

48 Instruções de salto não condicional

49 Instruções de salto não condicional (cont.)
Exemplos:

50 Instruções de salto condicional

51 Instruções de salto condicional (cont.)
Exemplos:

52 Exemplo de aplicação Para consolidar os conhecimentos adquiridos, consideraremos agora o caso de pretendermos simular o funcionamento de um registo de deslocamento, como o que se apresenta a seguir:

53 Exemplo de aplicação (cont.)
Os pressupostos são os seguintes: O sinal de relógio é activo à transição ascendente No estado inicial, todas as saídas deverão estar a 0 A relação entre as entradas (IN e CLK) e as saídas (OUT[0..7]) deverá ser tão próxima quanto possível da que teria lugar através da implementação em hardware

54 Sequência de passos A sequência de passos até à solução é a seguinte:
Efectuar a atribuição entre os sinais exteriores e os pinos de E/S paralela do microcontrolador Reflectir sobre a sequência de operações que implementem a funcionalidade pretendida Codificar esta sequência em assembly Obter o código objecto, simular o seu funcionamento (verificação de projecto) e implementar na prática

55 Atribuição de recursos
A simplicidade do exemplo considerado dispensa-nos o uso de recursos externos a um 87C51, pelo que poderemos especificar a seguinte atribuição: Linhas de saída OUT[0..7] do registo de deslocamento estarão ligadas ao porto 1 (respectivamente P1[0..7]) Linhas de entrada ligadas ao porto 0 (CLK em P0.0 e IN em P0.1)

56 Sequência de operações a realizar
A sequência de operações a realizar pode especificar-se como se segue: Aguardar pela subida no sinal de relógio (CLK) Após a subida em CLK, deslocar o conteúdo de OUT[0..7] uma posição, no sentido de OUT[0] para OUT[7] (para a esquerda, considerando que OUT[7] está à esquerda) Se a entrada IN estiver em 1, colocar OUT[0] em 1; caso contrário, colocar OUT[0] em 0

57 Codificação em assembly
(analisar com pormenor; para que serve a linha 10?)

58 Verificação de projecto
É necessário esperar pela descida do relógio (linha 10), para evitar que uma única subida em CLK provoque múltiplas operações de deslocamento (dependendo da relação entre CLK e o relógio do 87C51):

59 Verificação de projecto (cont.)
Considerando CLK a 1 KHz e o relógio do 87C51 a 12 MHz, quantas operações de deslocamento ocorreriam se não tivéssemos aquele cuidado?

60 Verificação de projecto (cont.)
É ainda também importante atentarmos na diferença entre o tempo de propagação de um circuito com FF-D e a simulação via 87C51: Poderão daqui advir problemas (funciona-mento incorrecto)?

61 Expansão da funcionalidade
Suportar uma entrada Habilita (em P0.2): “.org...”? “#include...”?

62 Expansão da funcionalidade (cont.)
Suportar entradas de Habilita (P0.2) e Sentido (P0.3):

63 Avaliação do resultado
Comparando as duas alternativas (FF-D e 87C51) para a implementação do exemplo considerado, que conclusões podemos tirar relativamente a: Tempo de desenvolvimento? Flexibilidade da implementação? Rapidez de funcionamento? Como é que a resposta às questões anteriores é afectada pela complexidade do caso em estudo?

64 As interrupções revisitadas

65 Gestão das interrupções
O código executado pelo microcontrolador pode activar / desactivar (set / cleared) todas as flags de interrupção Cada fonte de interrupção pode ser habilitada / inibida individualmente (registo IE nos SFR) A cada fonte de interrupção pode ser atribuída uma prioridade alta ou baixa (registo IP nos SFR)

66 Interrupções externas
/INT0 e /INT1 podem ser activos ao nível ou à transição, de acordo com o conteúdo do registo TCON (SFR com endereço 88H) Se as interrupções forem activas à transição, as flags que as geram são limpas pelo hardware quando a respectiva rotina é executada (caso contrário, terá que ser o código do utilizador a fazê-lo)

67 Interrupções dos T/C As interrupções pedidas pelos temporizadores / contadores são geradas por TF0 e TF1, activadas por “rollover” nos registos dos respectivos T/C (excepto T/C 0 em modo 3, como veremos adiante) Quando é gerada uma interrupção proveniente dos T/C, a flag que a gerou é limpa pelo hardware quando a respectiva rotina é executada

68 Interrupções da comunicação série
Os pedidos de interrupção do periférico de comunicação série resultam do OR entre as flags RI (recepção) e TI (transmissão) Nenhuma destas flags é limpa pelo hardware quando a respectiva rotina é executada (o código da rotina tem primeiro que identificar a causa da interrupção e depois limpar a flag)

69 O registo IE (end. SFR A8H) – endereçável ao bit
Este registo permite-nos habilitar / inibir cada fonte de interrupção: EA inibe todas as interrupções se estiver em 0; se estiver em 1, estarão habilitadas as que tiverem o seu IE.x em 1 ES: periférico série; ET1 e ET0: dos T/C; EX1 e EX0: externas (pinos /INT1 e /INT0) IE.7 IE.6 IE.5 IE.4 IE.3 IE.2 IE.1 IE.0 EA - - ES ET1 EX1 ET0 EX0

70 O registo IP (end. SFR B8H) – endereçável ao bit
Este registo permite-nos atribuir a cada fonte de interrupção uma prioridade alta ou baixa: Uma fonte de interrupção terá alta prioridade quando o seu bit IP.x estiver em 1 baixa quando estiver em 0 PS: periférico série; PT1 e PT0: dos T/C; PX1 e PX0: externas (pinos /INT1 e /INT0) IP.7 IP.6 IP.5 IP.4 IP.3 IP.2 IP.1 IP.0 - - - PS PT1 PX1 PT0 PX0

71 O registo TCON (end. SFR 88H) – endereçável ao bit
Para além de controlar os T/C, este registo também se relaciona com as interrupções externas: IEx: O hardware activa (set) esta flag à transição descendente em /INTx e limpa-a (cleared) quando a respectiva rotina de atendimento é executada ITx: Se estiver em 1 a interrupção em /INTx é activa à transição descendente; caso contrário, é activa ao nível 0. TC.7 TC.6 TC.5 TC.4 TC.3 TC.2 TC.1 TC.0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

72 Atendimento das interrupções
Ao atender uma interrupção, o hardware do 80C51 determina a execução de uma instrução LCALL para a respectiva rotina de atendimento: Endereços de atendimento: IE H; TF BH; IE H; TF BH; RI ou TI H A flag associada à interrupção é limpa pelo hardware nuns casos, mas noutros terá que o ser pelo código LCALL força o PC na stack, mas quaisquer outros registos (e.g. ACC, PSW, ...) terão que ser guardados pelo código

73 Retorno das interrupções
A execução da rotina de atendimento continua até que seja encontrada uma instrução RETI (return from interrupt): RETI informa o processador que terminou o atendimento à interrupção e extrai da stack o endereço de retorno RET (retorno de subrotina) faria algo semelhante, mas manter-se-ia a indicação de estar em curso o atendimento a uma interrupção (qual o problema?)

74 Exemplo (KEIL): Interrupções via /INT0
; código para ilustrar o atendimento de interrupções ; externas em /INT0, activas à transição cseg at 0 salta: jmp inicio ; uma vez que 0003H tem que conter o código de atendimento ; a /INT0, em 0000 cabe apenas uma instrução de salto cseg at 0003h intext0: inc r1 reti ; o atendimento a /INT0 apenas incrementa o R1, pelo que o ; seu conteúdo nos diz quantas interrupções foram atendidas cseg at 0010h inicio: mov r1,#0 ; inicializa R1 com 0 mov tcon,#01 mov ie,#81h ; programa o funcionamento das interrupções via /INT0 ciclo: mov a,p0 add a,p1 mov p2,a jmp ciclo ; está sempre a colocar em P2 o valor de P1+P0 end

75 Int. via /INT0: Visualização no dScope

76 Os temporizadores / contadores (T/C) do 80C51
Existem dois T/C com 16 bits, podendo cada um funcionar como temporizador (T) ou contador (C): Como temporizador o registo é incrementado por cada ciclo máquina (12 ciclos de relógio) Como contador o registo é incrementado à descida do sinal no pino (T0 ou T1) – sendo T0 / T1 amostrados uma vez em cada ciclo máquina, a detecção de descida leva 24 ciclos de relógio (primeira amostra 1, segunda 0)

77 Controlo de funcionamento dos T/C
O controlo de cada T/C é feito através dos registos TMOD e TCON (dois dos SFR): O estado (activo / parado) é controlado através do registo TCON A definição da função pretendida (temporizador ou contador) é feita pelo bit C-/T em TMOD Para cada T/C (seja como temporizador ou como contador) existem quatro modos de funcionamento, definidos pelos pares de bits (M1,M0) em TMOD

78 T/C: Modos 0 e 1 (iguais nos dois T/C)
TCON: TMOD: Este modo é compatível com o temporizador do 8048 (8 bits com pré-divisão por 32) No modo temporizador, e com Gate em 1, podemos medir a largura do impulso em /INTx O modo 1 é igual ao 0, mas agora em 16 bits

79 T/C: Modo 2 (igual nos dois T/C)
TCON: TMOD: A contagem é em 8 bits (TL1) Quando se excede o limite da contagem (“overflow”) é pedida uma interrupção e TL1 é automaticamente recarregado com o conteúdo de TH1 (que se mantém)

80 T/C: Modo 3 (diferente para cada T/C)
TCON: TMOD:

81 T/C: Modo 3 (cont.) Comentários ao modo 3:
Neste modo, o T/C 1 está parado (como quando TR1=0) TL0 e TH0 funcionam de modo independente (em 8 bits) TH0 funciona como temporizador, controlado por TR1 e pedindo interrupções via TF1 (repare-se que TR1 e TF1 pertenciam ao T/C 1, nos outros modos de funcionamento) Nota: O T/C 1 pode ainda ser usado (retirando-o do modo 3), mas sem poder controlar TF1

82 O registo TCON (end. SFR 88H) – endereçável ao bit
Os bits TFx e TRx estão associados aos T/C: TFx: Pede as interrupções do T/C x (set por hardware quando ocorre overflow; limpa por hardware quando se salta para a rotina de atendimento) TRx: controlo de estado (activo / parado) do T/C x (controlado por software para activar / parar o T/C x) TC.7 TC.6 TC.5 TC.4 TC.3 TC.2 TC.1 TC.0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

83 O registo TMOD (end. SFR 89H) – endereçável ao bit
Existem quatro bits por cada T/C: Gate: Em conjunto com TRx, controla o estado (activo / parado) do C/T (ver esquemas que descrevem os modos de funcionamento) C-/T: Define a função (0: temporizador; 1: contador) M1,M0: Definem o modo de funcionamento (0 a 3) TM.7 TM.6 TM.5 TM.4 TM.3 TM.2 TM.1 TM.0 Gate C-/T M1 M0 Gate C-/T M1 M0

84 Exemplo (KEIL): Funcionamento do T/C 1
; exemplo para ilustrar o funcionamento dos T/C com interrupções ; T/C 1 funciona como contador de 8 bits com auto-reload ; deve complementar-se P1.0 quando forem contados três impulsos exteriores cseg at 0 inicio: mov tmod,#60H ; contador, modo 2 (quando TR1=1 e T1 desce) mov ie,#88H ; permite interrupções do T/C 1 mov tl1,#0fdh ; para contar apenas três vezes mov th1,#0fdh ; para recarregar o TL1 setb tr1 ; permite início da contagem jmp $ ; apenas para ficar aqui parado cseg at 001bh tc1int: ; complementa o bit P1.0 cpl p1.0 reti end

85 T/C 1: Visualização no dScope

86 A porta de comunicação série no 80C51
Pode transmitir e receber em simultâneo (é do tipo “full duplex”) Os registos de recepção e transmissão são ambos acedidos através do SBUF (SFR c/ end. 99H): A escrita no SBUF carrega o registo de transmissão A leitura do SBUF acede ao registo de recepção (fisicamente diferente) A porta série tem quatro modos de funcionamento

87 Porta série: Modos de funcionamento 0 e 1
Modo 0 - Transmissão em 8 bits (LSB primeiro), com taxa de transmissão (baud rate) de 1/12 da frequência de relógio. Os dados entram e saem via RxD, estando o relógio de transmissão em TxD. Modo 1 - Transmissão em 10 bits: Start bit (0), bits de dados (LSB primeiro) e um Stop bit (1), com baud rate variável. Envio por TxD e recepção por RxD.

88 Porta série: Modos de funcionamento 2 e 3
Modo 2 - Transmissão em 11 bits: Start bit (0), bits de dados (LSB primeiro), um nono bit programável (e.g. o bit de paridade no registo PSW) e um Stop bit (1). O baud rate pode ser 1/32 ou 1/64 da frequência do relógio. Envio por TxD e recepção por RxD. Modo 3 - Como no modo 2, mas agora com baud rate variável.

89 Taxas de transmissão (baud rate)
No modo 0, o baud rate é fixo e igual a 1/12 da frequência de relógio No modo 2, o baud rate depende do bit SMOD no registo PCON (SFR c/ end. 87H), sendo dado por (2SMOD / 64) x (frequência) (1/64 ou 1/32, portanto) Nos modos 1 e 3, o baud rate é variável e determinado pelo T/C 1 (e também depende do bit SMOD)

90 Uso do T/C 1 para determinar o baud rate
Nos modos 1 e 3 o baud rate é determinado pela seguinte expressão: (2SMOD / 32) x (ritmo de overflow do T/C 1) As interrupções através deste T/C devem estar inibidas O T/C 1 pode funcionar como temporizador ou como contador, em qualquer modo de funcionamento, excepto o modo 3 (recorde-se que neste modo o T/C 1 está parado)

91 Geração do baud rate via T/C 1: Forma habitual
No caso mais comum, o T/C é usado no seu modo 2 (como temporizador com auto-reload) O baud rate da porta série, nos seus modos 1 e 3, é então dado por (2SMOD / 32) x (frequência / (12 x (256-(TH1)))) (TH1): Conteúdo do T/C 1, oito bits mais significativos Para uma frequência de 11,0592 MHz, quais os valores de SMOD e (TH1), para resultar um baud rate de bps? (modo 2 do T/C 1) (modos 1 e 3 da porta série)

92 O registo SCON (end. SFR 98H) – endereçável ao bit
Bits SM0, SM1 e SM2: SM0 e SM1: Definem o modo de funcionamento (0 a 3). SM2: Habilita a capacidade de comunicação em sistemas do tipo multiprocessador, nos modos 2 e 3. Neste caso, o nono bit em 1 dá origem a um pedido de interrupção, para indicar que chegou um endereço de nó. SC.7 SC.6 SC.5 SC.4 SC.3 SC.2 SC.1 SC.0 SM0 SM1 SM2 REN TB8 RB8 TI RI

93 SCON (end. SFR 98H) – endereçável ao bit (2)
Bits REN, TB8 e RB8: REN: Controlado por software para permitir (1) ou inibir (0) a recepção. TB8: Nono bit a transmitir nos modos 2 e 3 (controlado por software). RB8: Nos modos 2 e 3, é o nono bit recebido. No modo 1, se SM2=0, é o stop bit recebido. No modo 0, não é usado. SC.7 SC.6 SC.5 SC.4 SC.3 SC.2 SC.1 SC.0 SM0 SM1 SM2 REN TB8 RB8 TI RI

94 SCON (end. SFR 98H) – endereçável ao bit (3)
Bits TI e RI: TI: Flag de interrupção por envio. Activada por hardware no final do oitavo bit em modo 0, ou no início do Stop bit nos restantes modos. Deve ser limpa por software. RI: Flag de interrupção por recepção. Activada por hardware no final do oitavo bit em modo 0, ou a meio do Stop bit nos restantes modos. Deve ser limpa por software. SC.7 SC.6 SC.5 SC.4 SC.3 SC.2 SC.1 SC.0 SM0 SM1 SM2 REN TB8 RB8 TI RI

95 Exemplo (KEIL): Escreve em P1 o byte recebido
; segmento de código para ilustrar a recepção série no 80C51 ; cada byte recebido é escrito na porta 1 cseg at 0 salta: jmp inicio cseg at 0023h int_psr: clr ri ; limpa a flag que indica interrupção por recepção mov p1,sbuf ; copia para a porta 1 o byte que acabou de chegar reti cseg at 0030h inicio: mov scon,#70h ; porta série em modo 1 (SM0,SM1)=(0,1), recepção habilitada (REN=1) ; activa RI quando lê o Stop bit (SM2=1) mov tmod,#20h ; T/C 1 como temporizador (C/T=0) em modo 2 (M1,M0)=(1,0) mov tl1,#0fdh mov th1,#0fdh ; com SMOD em 0 por omissão, resulta um baud rate de bps mov ie,#90h ; habilita apenas as interrupções da porta série setb tr1 ; activa o funcionamento do T/C 1 jmp $ end

96 Porta série: Visualização no dScope

97 Outro exemplo: Recepção de uma tabela de valores
Requisitos (assuma-se a frequência de 11,0592 MHz): Baud rate de bps (gerados pelo T/C 1), palavras de 10 bits (start bit, dados, stop bit) Armazena os bytes recebidos em MD interna, a começar em 30H Termina quando receber a sequência ASCII “FIM”: 46H-49H-4DH Quando terminar, reinicializa apontador para a tabela e salta para 2000H

98 Conclusão Objectivo principal do capítulo: Apresentar a arquitectura em que se baseia a família de microcontroladores 80C51 Pistas para a continuação do estudo: Evolução da arquitectura 80C51 (e.g. arquitectura XA) Outros microcontroladores (e.g. Motorola 68HCXX e Microchip PIC)


Carregar ppt "A família 80C51 Organização:"

Apresentações semelhantes


Anúncios Google