Академический Документы
Профессиональный Документы
Культура Документы
Microcontroladores
Famlia MCS51
2 - Famlia MCS-51
A arquitetura bsica da famlia MCS-51 constituda por uma unidade central de
processamento de 8 bits otimizada para aplicaes de controle, 64 Kbytes de
espao de endereamento para a memria de programa, 64 Kbytes de espao de
endereamento para a memria de dados, 4 Kbytes de memria de programa interna,
128 bytes de memria de dados interna, 32 linhas entrada/sada bidirecionais
endereveis individualmente. Dois temporizadores/contadores de 16 bits, uma
UART (universal asynchronous receiver transmiter) full duplex, uma estrutura de
interrupes com 5 fontes de interrupo correspondentes a 5 vetores de
interrupo com dois nveis de prioridades cada e um circuito oscilador para
gerar o sinal de relgio. O diagrama de blocos da arquitetura de base da famlia
MCS-51 pode ser visto na figura 2.
3 - Organizao da memria
A memria de dados e a memria de programa tm espaos de endereamento
diferentes cada um com 64 Kbytes, organizados segundo os mapas de memria da
figura 3.
4.2 - Registrador B
Este registrador utilizado durante as operaes de diviso e multiplicao em
conjunto com o registrador acumulador. Para outras operaes pode ser tratado
como um registrador comum. enderevel bit a bit.
5 - Modos de endereamento
A codificao das instrues da famlia MCS-51 feita utilizando um byte para o
cdigo de operao (opcode) e 0 a 2 bytes para informao sobre os operandos. Os
modos de endereamento utilizam-se para especificar os operandos necessrios
para cada instruo. A famlia MCS-51 dispe de 10 modos de endereamento
divididos por trs classes: modos de endereamento de dados, modos de
endereamento relativos a saltos e modos de endereamento relativos a bits.
Exemplos:
MOV R1,#25 ; coloca o valor 25 no registrador R1
INC R0 ; adiciona 1 ao contedo do registrador R0
5.1.2 - Direto
Este modo de endereamento utiliza-se para acessar a memria de dados interna. A
codificao da instruo feita com um byte para o cdigo de operao da
instruo e um byte adicional para especificar o endereo a acessar. Como a
especificao do endereo se faz num nico byte a gama de endereos possvel
de 0 a 255. A gama de endereamento referida permite acessar a toda a rea de
5.1.3 - Imediato
O modo de endereamento imediato permite especificar um valor numrico
constante. As constantes a especificar podem ter 8 bits ou 16 bits. Os valores
de 16 bits s podem ser usados em conjunto com o registrador DPTR. Em assembly
os valores numricos imediatos so precedidos do caractere #.
Exemplos:
5.1.4 - Indireto
No modo de endereamento indireto a instruo especifica um registrador que
contm o endereo do operando. Tanto a memria de dados interna como a externa
podem ser endereadas deste modo. Este modo de endereamento til no acesso a
arrays. S os registradores R0, R1 e DPTR podem ser utilizados como ponteiros de
dados. R0 e R1 so ponteiros de 8 bits e DPTR um ponteiro de 16 bits. O
registrador a utilizar precedido do caractere @.
Exemplos:
5.1.5 - Indexado
Este modo de endereamento s permitido para acesso memria de programa, por
isso s utilizado para leitura. Destina-se ao acesso a tabelas e a instrues
de salto. No acesso a tabelas um registrador de 16 bits (DPTR ou PC) contm o
endereo base da tabela e o acumulador carregado com o nmero de entrada na
tabela. O endereo da entrada na tabela calculado somando ao valor do
registrador o valor do acumulador. Na instruo JMP o endereo do destino
calculado como a soma do ponteiro base (DPTR ou PC) e do valor do acumulador.
Exemplos:
5.2.1 - Relativo
Este modo de endereamento utilizado com instrues de salto condicional. O
deslocamento (offset) do salto de 8 bits, tendo uma gama de 128 a 127 bytes,
e calcula-se tendo por referncia o primeiro byte depois da instruo de salto.
Quando o salto executado o deslocamento somado ao contedo do registrador PC
para formar o endereo de destino. O destino do salto normalmente especificado
utilizando um rtulo (label) sendo o assembler que calcula o valor do
deslocamento efetivo de acordo com as regras descritas.
Exemplos:
5.2.1 - Absoluto
Este modo de endereamento utilizado com as instrues ACALL e AJMP. So
especificados os 11 bits menos significativos da instruo de destino. Os 5 bits
mais significativos so iguais aos 5 bits mais significativos do registrador PC.
Devido ao fato de s ser possvel especificar 11 bits do endereo de destino s
so permitidos saltos dentro da pgina corrente de 2 Kbytes da memria de
programa. O endereo absoluto normalmente especificado recorrendo a um rtulo
que o assembler traduz.
Exemplos:
ACALL et3 ; chama a sub-rotina que tem incio na posio
; dada por et3
AJMP ciclo1 ; faz com que a instruo com o rtulo ciclo1
; seja executada a seguir instruo corrente.
Exemplos:
LCALL et5 ; chama a sub-rotina cujo incio corresponde
; posio de memria ao rtulo et5.
LJMP ciclo2 ; faz com que a instruo como rtulo ciclo2
; seja executada a seguir a esta instruo.
Exemplos:
SETB C ; coloca CY = 1.
CLR C ; coloca CY = 0.
CPL C ; complementa CY.
Exemplos:
6 - Conjunto de Instrues
O conjunto de instrues de qualquer microcontrolador pode dividir-se em cinco
grupos fundamentais de operaes: operaes de transferncia, operaes
aritmticas, operaes lgicas (por vezes estes dois grupos so considerados em
conjunto), operaes sobre variveis booleanas e operaes de salto.
A famlia MCS-51 no constitui exceo, podendo o seu conjunto de instrues ser
dividido nos cinco grupos referidos. As operaes pertencentes a cada grupo so
apresentadas em seguida. As notaes utilizadas pela famlia MCS-51 na
apresentao do seu conjunto de instrues so as seguintes:
Cada linha contendo instrues em assembly est dividida em 4 campos alguns dos
quais podem estar vazios. Esses campos so:
Exemplos:
Exemplos:
Exemplos:
Exemplos:
Para tornar obvio este problema necessrio usar uma das vrias tcnicas de
deboucing, que podem ser implementadas utilizando hardware (circuito set-reset,
porta CMOS, circuito RC, entre outros) ou por software. Neste exemplo o
deboucing ser feito por software. O algoritmo a utilizar num programa para
leitura do teclado dever seguir os passos seguintes:
As resistncias utilizam-se para limitar a corrente nos LEDs. O seu valor deve
ser calculado tendo em conta as caractersticas dos LEDs utilizados. No
necessrio nenhum tipo de configurao para utilizar uma porta como sada. A
ativao dos pinos como sada faz-se escrevendo para a latch associada ao pino.
Por exemplo, o cdigo necessrio para acender os LEDs L1 e L3 e para apagar o
LED L2 do circuito anterior seria:
MOV P1,#5
MOV P1,#5FH
1- Inicializao do display.
2- Envio dos cdigos ASCII dos caracteres a serem mostrados.
12.1.1- Timers 0 e 1
Os Timers 0 e 1 so temporizadores/contadores de 16 bits com quatro modos de
operao possveis. Os registradores de contagem a eles associados so TH0, TL0,
TH1 e TL1. Associado a cada temporizador/contador existe ainda uma flag de
overflow que ativada por hardware quando se excede a capacidade de contagem do
registrador de contagem. Na ocorrncia da condio de overflow o registrador de
contagem passa a conter zeros e a contagem prossegue a partir desse valor. O
registrador TMOD permite fazer a seleo tipo de funo e do modo de operao de
cada um dos temporizadores/contadores. Este registrador no enderevel bit a
bit. Este registrador apresentado na figura 25.
Criao de atrasos
De seguida apresentado o mtodo de clculo utilizado para determinar o nmero
de contagens a efetuar para gerar um atraso de X segundos. Utilizasse o modo de
operao 1 por ser aquele que permite realizar uma contagem maior, mas o mtodo
no depende do modo utilizado.
Escolhe-se o Timer 1.
atr20ms:
MOV TMOD,#00010000B ; Timer 1 em modo 1.
CLR TF1 ; limpa a flag de overflow.
MOV TH1, #B1H ; coloca byte superior em TH1.
MOV TL1, #DFH ; coloca byte inferior em TL1.
SETB TR1 ; inicia operao do Timer 1.
espera:
JNB TF1, espera ; espera at TF1 = 1.
RET
Algoritmo:
Cdigo:
atr1s:
MOV ct_ciclo, #20 ; definio do nmero de iteraes.
CLR ET1 ; disable interrupo Timer1.
CLR TF1 ; limpar TF1.
MOV TMOD, #10H ; programao do Timer 1 no modo1.
MOV TH1, #3CH ; inicializao do registrador de contagem
MOV TL1, #AFH ; com o valor 15535.
Algoritmo:
Algoritmo:
1- Configurar Timer 0 para operar como contador em modo 1 sem sinal externo de
gating.
2- Configurar Timer 1 para operar como temporizador em modo 1 sem sinal externo
de gating.
3- Inicializar registradores de contagem de Timer 0 a 0.
4- Utilizar Timer 1 para criar um a atraso de 1s. Colocar o valor 3CAFH nos
registradores de contagem do Timer 1 para criar um atraso de 50ms.
5- Esperar 1s. Parar a contagem do Timer 1. O valor contido nos registradores de
contagem do Timer 1 corresponde freqncia do sinal.
Cdigo:
; vezes.
MOV freq_l, TL0 ; guarda byte inferior do valor obtido.
MOV freq_h, TH0 ; guarda byte superior do valor obtido.
END
12.1.3- Timer 2
O Timer 2 um temporizador/contador de 16 bits, com aplicaes diferentes das
dos Timers 0 e 1 e que, para alm destes, integra alguns dos microcontroladores
da famlia MCS-51 (8052, entre outros). Este temporizador/contador pode ser
utilizado para temporizao ou contagem e possui trs modos de operao
distintos. Os registradores de contagem designam se TH2 e TL2 e existem ainda
dois registradores adicionais RCAP2L e RCAP2H, designados registradores de
captura. A seleo da funo e do modo de operao deste temporizador faz-se nos
registradores T2CON e T2MOD. T2CON enderevel bit a bit. T2MOD no
enderevel bit a bit. Os registradores T2CON e T2MOD so apresentados nas
figuras 30 e 31, respectivamente.
Figura 33- Diagrama de blocos do Timer 2 em modo de auto recarga para DCEN = 1.
A famlia MCS-51 dispe de um bloco de hardware que implementa uma ligao srie
com o exterior. Esse bloco de hardware designa-se UART (Universal Asynchronous
Receiver-Transmitter) e faz a transferncia de um byte de informao de cada
vez. A trama enviada constituda por um start bit, os bits de dados e um stop
bit. A ligao srie fornecida full duplex, ou seja, permite transmisso e
recepo simultneas. A UART da famlia MCS-51 permite ainda que seja iniciada a
recepo de um segundo byte antes de o byte recebido anteriormente ter sido
lido. A interface com este bloco de hardware faz-se atravs do um nico
registrador designado SBUF que, dependendo do contexto de utilizao permite o
acesso ao registrador de transmisso ou ao registrador de recepo da porta
srie. O acesso fsico aos dois registradores feito pelo hardware dependendo
do tipo de operao executada sobre SBUF. Se a operao for de leitura
acessado o registrador de recepo, caso a operao seja de escrita acessado o
registrador de transmisso. SCON o registrador de programao e estado Sereia
da porta srie. Este registrador enderevel bit a bit. A sua estrutura
apresentada na figura 37.
Os bits SM0 e SM1 servem para fazer a seleo do modo de operao da porta srie
de acordo com a tabela 19.
1 Escreva uma rotina que inicializa a porta srie para operar com os
parmetros seguintes: taxa de transmisso de 9600 bits/s, 1 start bit, oito bits
de dados e 1 stop bit, permisso para receber e transmitir e interrupes
inativas. Considere que a freqncia do oscilador do microcontrolador de
11.059 MHz.
2 - Escreva uma rotina que leia um caractere da porta srie utilizando o mtodo
de polling. Assuma que a porta foi inicializada como indicado no exemplo
anterior.
get_char:
JNB RI, get_char ; verificao (poll) da flag RI.
MOV A,SBUF ; leitura do caractere.
CLR RI
RET
3 Escrever uma rotina que envie pela porta srie o caractere contido no
acumulador. Assuma que a porta foi inicializada como indicado no exemplo
anterior.
put_char:
MOV SBUF,A ;envio do caractere.
esp:
JNB TI,esp ; verificao da flag TI.
CLR TI
RET
4 Escrever uma rotina que envie uma string terminada com um caractere nulo
pela porta srie. O endereo de incio da string fornecido pelo registrador
DTPR.
put_string:
MOVX A,@DPTR ; leitura do caractere.
JZ exit ; teste do fim da string.
LCALL put_char ; envia caractere.
INC DPTR ; prximo caractere.
AJMP put_string
exit:
RET
5 Escrever uma sub-rotina que receba uma string atravs da porta srie. O
endereo da posio de memria onde a string deve ser armazenada dado pelo
registrador DPTR. A string terminada pelo caractere carriage return (CR).
Para o master:
Para os slaves:
14- Interrupes
Entende-se por interrupes acontecimentos que necessitam que o processador
interrompa o fluxo normal do programa e execute determinado servio em resposta
ao acontecimento.
As interrupes podem classificar-se quanto sua origem: internas ou externas,
e quanto possibilidade de poderem ser ignoradas: mascarveis ou no
mascarveis.
As interrupes internas so geradas dentro do circuito integrado, por exemplo,
uma interrupo por ocorrncia de overflow num temporizador. Por contraponto as
interrupes externas so geradas fora do circuito integrado e sinalizadas
atravs de um sinal ligado a um pino especfico do microcontrolador.
As interrupes dizem-se mascarveis quando podem ser ignoradas pelo
processador. Neste caso possvel fazer a programao, atravs do valor de bits
especficos contidos num registrador prprio, de quais as interrupes que devem
(ou no) ser mascaradas.
As interrupes que no podem ser ignoradas pelo processador so designadas
interrupes no mascarveis. As interrupes utilizam-se para coordenao de
atividades E/S e em aplicaes crticas em termos temporais. O servio
interrupo prestado atravs da execuo de uma rotina especfica designada
rotina de servio da interrupo. Essa rotina deve ser colocada num endereo
especfico designado vetor de interrupo. A cada interrupo pode ser atribudo
um nvel de prioridade que, no caso de ocorrer mais do que uma interrupo
simultaneamente serve para decidir qual das interrupes atendido primeiro.
Normalmente a prioridades mais elevadas corresponde um servio mais rpido.
Exemplo:
JNB INT0,$ ; espera que o sinal no pino INT0 esteja no nvel lgico
; alto.
JB INT0,$ ; espera que o sinal no pino INT0 esteja no nvel lgico
; baixo.
RETI ; volta ao programa principal e executa uma instruo.
nome_rotina: ...
...
...
RETI
Exemplos:
MOV IP,#04H
int_cnt SET R2
3 Escrever uma rotina para envio e recepo de caracteres pela porta srie
utilizando a interrupo adequada.
4 Escrever uma rotina que leia ou escreva uma string atravs da porta srie,
utilizando interrupes. O fim de string recebida dado pelo caractere CR e a
string a enviar termina com o caractere nulo. A rotina anterior tem que ser
alterada para permitir o armazenamento dos caracteres em endereos consecutivo.
Assume-se que a memria externa utilizada para guardar as strings (recebidas
ou a enviar). Considera-se que o endereo da posio inicial onde deve ser
colocada a string recebida est guardado nos registradores R6 e R7 (sendo R6 o
byte mais significativo) e que o endereo inicial da string a enviar est
contido no registrador DPTR. necessrio incrementar o ponteiro de cada uma dos
strings depois da recepo/envio de cada caractere.
envstr:
PUSH DPH ; guarda o valor atual do registrador DPTR,
PUSH DPL ; parte alta e parte baixa.
ORL IE, #90H ; enable interrupo da porta srie.
es:
MOV DPH, R6 ; copia o valor do endereo da string
MOV DPL, R7 ; para o registrador DPTR.
MOVX A, @DPTR ; copia o caractere a enviar para A.
TDMII www.corradi.junior.nom.br - Introduo aos Microcontroladores MCS51
Colgio Tcnico de Campinas Cotuca Disciplina - TDM II
JZ sair ; continua se caractere 0.
SJMP es
Sair:
POP DPL ; restitui o valor inicial do registrador DPTR.
POP DPH
END
A ativao dos modos de poupana de energia faz-se atravs dos bits IDL e PD do
registrador PCON. A colocao do bit a 1 implica a ativao do modo de poupana
de energia respectivo. A figura 43 apresenta o esquema do registrador PCON. Este
registrador no enderevel bit a bit.
16.1.1- Assembler
Um assembler um programa que converte cdigo fonte, escrito em linguagem
assembly, em cdigo mquina. No mercado existem vrios assemblers disponveis
sendo muitas vezes referidos de modo a salientar alguma das suas caractersticas
particulares, assim passa a descrever-se o significado de algumas das
caractersticas mais referidas. Designa se por macro assembler um programa
assembler que permite a utilizao de macros. Um assembler diz-se de duas
passagens se permitirem a utilizao de smbolos antes destes terem sido
definidos. Um cross assembler um programa assembler que executado num
processador diferente daquele em que o cdigo vai ser utilizado e designa-se por
native assembler um assembler que executado no processador alvo.
O momento em que o cdigo processado pelo programa assembler designa-se
assembly time. Os programas assembler podem dividir-se em dois tipos: absoluto e
relocatable. Num assembler absoluto o cdigo fonte est contido num s ficheiro.
Como resultado da execuo do assembler produzido um ficheiro executvel, que
pode ser carregado no sistema alvo recorrendo a um programa designado loader. A
figura 44 apresenta o diagrama de blocos do modo de operao de um assembler
absoluto.
Num assembler relocatable o cdigo fonte pode estar espalhado por vrios mdulos
que podem corresponder a ficheiros diferentes. Como resultado da execuo deste
tipo de assembler produzido um ficheiro num formato designado formato objeto
que posteriormente tem que ser processado por um programa chamado linker ou
locator. A figura 45 apresenta o diagrama de blocos da operao de um assembler
relocatable. O programa assembler produz os seguintes ficheiros de sada: um
ficheiro executvel ou um ficheiro objeto (dependendo do tipo de assembler), uma
listagem, uma tabela de smbolos e a cross-reference. O ficheiro executvel,
produzido se o assembler for absoluto, um ficheiro em cdigo mquina que pode
ser carregado diretamente para o sistema alvo. O ficheiro objeto, produzido se o
assembler for relocatable, precisa ser processado por um linker antes de poder
ser carregado para o sistema alvo. A listagem assembler apresenta o cdigo fonte
(cdigo em linguagem assembly) e o resultado do processo de assembler, ou seja,
o cdigo mquina correspondente. No caso de existirem erros de sintaxe no
programa inicial eles so reportados neste ficheiro. A tabela de smbolos mostra
onde e como esto definidos os smbolos usados no cdigo fonte. A cross-
reference uma lista com todos os smbolos e etiquetas por ordem alfabtica e
refere o stio em que eles so utilizados no programa.
16.1.2- Linker
O linker um programa que faz a ligao entre os vrios ficheiros objeto,
correspondentes a diferentes mdulos, e localiza todos os endereos. Este
programa produz como sada um ficheiro em cdigo mquina (ficheiro executvel)
que pode ser carregado para o sistema alvo. Este programa utilizado em
conjunto com assemblers do tipo relocatable. Designa-se por link time o momento
em que o cdigo processado pelo linker.
16.1.3- Librarian
Este programa transforma mdulos de cdigo fonte em elementos de uma biblioteca.
Os elementos contidos na biblioteca encontram-se no formato objeto. Os elementos
da biblioteca correspondem a blocos de cdigo com funes genricas que podem
ser reutilizados noutros mdulos. O librarian utilizado em conjunto com
assemblers do tipo relocatable.
16.1.4- Loader
Designa-se por loader o programa que carrega o ficheiro executvel na memria do
microcontrolador. O momento em que o cdigo executado no microcontrolador
designa-se run rime.
16.2.1- Simuladores
Os simuladores so programas que correm normalmente num PC e simulam a operao
do microcontrolador, permitindo a anlise da execuo do programa. Os
simuladores permitem a visualizao do contedo dos registradores mais
importantes da arquitetura e o contedo das posies de memria de dados
interna. Estes programas so indicados para o teste das partes do programa
relacionadas com clculos e condies de salto. Por outro lado os simuladores
no so indicados quando necessrio testar o funcionamento de blocos de
hardware como os temporizadores, portas E/S ou porta srie, pois esses blocos
interagem com sinais externos que, quando muito, podem ser simulados por
software no tendo em conta as especificaes temporais a eles associadas. Pelas
razes enunciadas os simuladores no so indicados para o teste de situaes de
E/S nem de interrupes. Nestes programas o cdigo a testar no executado a
uma velocidade igual do sistema real. Os simuladores so as ferramentas de
debugging menos dispendiosas, mas so tambm as mais limitadas.
16.2.2- Monitores
Os programas monitores utilizam o sistema alvo como ferramenta de debugging,
associado ao PC que utilizado para a visualizao do processo. A ligao entre
o sistema alvo e o PC normalmente feita atravs de uma porta srie, dedicada a
esta funo. O programa monitor carregado no sistema alvo e permite a carga, a
execuo e a monitorizao do programa a testar. Esta tcnica utiliza alguns dos
recursos do sistema alvo. O modo como os monitores funcionam implica que o
espao de memria de dados e o espao de memria de cdigo sejam sobrepostos
para permitir que o monitor escreva na memria de cdigo quando feita a carga
do programa a testar para o sistema alvo. Por outro lado o cdigo a testar no
fica colocado no endereo de start-up (0000H), o que pode levar necessidade de
alterar o programa a testar de modo a adaptar-se s circunstncias de teste, o
que no vai corresponder situao de execuo normal do programa final.
Como vantagens os programas monitores apresentam a caracterstica de promover a
anlise do sistema enquanto o programa executado velocidade real e o fato de
ser possvel testar todo o tipo de situaes uma vez que o teste feito no
sistema alvo permitindo a interao com o hardware circundante. Em termos de
custo os monitores so mais dispendiosos do que os simuladores, mas menos
dispendiosos do que os emuladores.
16.2.3- Emuladores
Um emulador um bloco de hardware que colocado no sistema alvo e permite a
execuo e monitorizao da operao do programa a testar. Estes sistemas
permitem o desenvolvimento de cdigo com capacidade de debugging que corre no
hardware do sistema alvo. Para o teste utilizado o ambiente real do sistema
alvo. Esta ferramenta no utiliza as capacidades do sistema alvo podendo o
programa a testar ser executado normalmente. O programa executado velocidade
normal. Os emuladores utilizam as capacidades de E/S do sistema real podendo
testar todo o tipo de situaes. No necessrio proceder a alteraes do
cdigo para efeito de teste. Existem vrios tipos de emuladores no mercado. A
nica desvantagem da utilizao destes sistemas prende-se com o seu custo que
extremamente elevado.
Seqncia:
BEGIN:
...
...
END
Deciso:
IF (condio)
THEN
...
ELSE
...
Repetio:
WHILE (condio) DO
...
ou
DO
...
WHILE (condio)
Codificao do programa:
Bibliografia
[1] MCS51 Microcontroller Family Users Guide, Intel, 1994.
[2] Using the MCS-51 Microcontroller, Han-Way Huang, Oxford University Press,
2000.
[3] Design with Microcontrollers, John B. Peatman, McGraw-Hill, 1988.
[4] C and the 8051, Thomas W. Schultz, Prentice Hall, 1998.
Prof. Corradi