Beruflich Dokumente
Kultur Dokumente
Curitiba, 2002
SUMRIO
Sistemas Microprocessados............................................................................. 2 Hardware ............................................................................................... 2 Software................................................................................................. 5 Microcontroladores ........................................................................................... 7 Microcontroladores MCS51 .............................................................................. 8 Parte 1 Hardware Bsico Disposio dos Terminais ...................................................................... 9 Descrio Funcional dos Terminais .....................................................10 Arquitetura Interna ...............................................................................12 Organizao da Memria.....................................................................13 Bancos de Registros ............................................................................14 Registros Bit Endereveis ..................................................................15 Registros de Funo Especial .............................................................15 Clock ....................................................................................................17 Reset....................................................................................................18 Memrias Externas de Programa e de Dados .....................................19 Parte 2 - Software Programao .......................................................................................25 Modos de Endereamento ...................................................................25 Conjunto de Instrues ........................................................................26 Linguagem Assembly...........................................................................47 Tpicos Importantes em Programao ................................................49 Linguagem C........................................................................................51 Parte 3 Hardware Avanado Ports de Entrada e Sada.....................................................................52 Interrupes .........................................................................................60 Temporizadores / Contadores de Eventos...........................................67 Interface Serial .....................................................................................80 Modos de Reduo de Consumo.........................................................84 Bibliografia......................................................................................................86 Informaes teis na Internet.........................................................................87 Anexos Conjunto de Instrues MCS51 Manual da Placa P51 Manual do Paulmon Tutoriais
SISTEMAS MICROPROCESSADOS
Sistemas microprocessados dividem-se basicamente em hardware e software. O hardware constitudo dos componentes fsicos do sistema (dispositivos eletrnicos) e o software constitudo dos componentes lgicos (programas e dados). Chama-se de firmware o conjunto de programas gravados em ROM, especficos para o funcionamento de um determinado sistema microprocessado.
HARDWARE
Principais Dispositivos de Hardware
Microprocessador (CPU): Constitui o bloco "inteligente" do sistema. Segue uma seqncia de instrues previamente armazenadas, chamada de programa. o responsvel pela execuo de operaes lgicas, aritmticas e de controle. Memria no-voltil (ROM, PROM, EPROM): Armazena a seqncia de instrues do programa a ser executado. Memria voltil (SRAM, DRAM): Armazena temporariamente os dados relativos ao programa. Tambm pode armazenar programas de maneira temporria. Perifricos (interface paralela, interface serial, temporizadores / contadores de eventos, entre outros): So os responsveis pela comunicao com o mundo externo ao sistema (entrada e sada de dados). Decodificador de endereos: Seleciona o dispositivo a ser acionado pelo microprocessador, auxiliando o microprocessador no gerenciamento do barramento de dados. Circuito de reset: o responsvel pela inicializao do sistema. Circuito de clock: Fornece a cadncia (velocidade) de execuo das instrues do programa pelo microprocessador.
Barramento de Endereos (Address Bus): o conjunto de sinais digitais atravs do qual so selecionados dispositivos conectados ao barramento de dados. Cada componente do sistema corresponde a um endereo ou faixa de endereos, atendendo quando solicitado pelo microprocessador ou por outro dispositivo, no caso de DMA. Barramento de Controle (Control Bus): Conjunto de sinais digitais que auxiliam o endereamento dos diversos dispositivos de um sistema microprocessado, sinalizando o tipo de operao a ser efetuada. atravs do barramento de controle que se definem operaes de leitura ou escrita, acesso memria, acesso aos perifricos ou requisies de DMA. Tambm atravs de sinais especiais do barramento de controle que so realizadas interrupes no processamento do programa para atender a eventos de maior prioridade.
Perifricos
E/S
Interrupes
Circuito De Clock
SOFTWARE
Principais Conceitos de Software
Sistemas microprocessados operam segundo a execuo seqencial de instrues e operandos armazenados em memria. A essa lista de instrues d-se o nome de programa armazenado. Como a execuo do programa seqencial, apenas uma instruo executada a cada instante de tempo. Chama-se de algoritmo uma seqncia de operaes simples para se realizar uma determinada tarefa mais complexa. Uma das formas mais comuns e acessveis de se representar um algoritmo o fluxograma, uma tcnica que consiste em representar na forma de diagrama a seqncia das operaes e decises a serem realizadas para a sua execuo. O grau de refinamento das operaes representadas em um fluxograma depende em grande parte dos recursos oferecidos pela linguagem de programao a ser utilizada.
FIM
O uso de uma linguagem de programao faz-se necessrio para a implementao real de um algoritmo na forma de programa executvel, a fim de estruturar as instrues e seus respectivos operandos na seqncia a ser seguida pelo microprocessador. Cada microprocessador possui suas prprias instrues, as quais so codificadas de maneira nica e constituem a chamada linguagem de mquina ou cdigo de mquina da CPU.
Linguagens de Programao
A principal funo das linguagens de programao proporcionar ao programador uma ferramenta para elaborao de programas que os torne mais inteligveis do que a linguagem de mquina. Sendo assim, existem linguagens de programao que se aproximam mais da linguagem do microprocessador, chamadas linguagens de baixo nvel (como a linguagem Assembly), e existem linguagens que se aproximam mais da linguagem do programador, chamadas linguagens de alto nvel (como a linguagem C). Os programas implementados em linguagens diferentes da linguagem de mquina necessitam ser traduzidas para que possam ser devidamente executadas pelo microprocessador. Aplicativos que realizam a tarefa de codificar os programas para linguagem de mquina recebem os nomes de montador (assembler), no caso da linguagem Assembly, e compilador no caso da linguagem C ou qualquer outra linguagem de alto nvel. Existem tambm os chamados interpretadores, os quais codificam e executam programas em linguagens de alto nvel em tempo real. bastante comum interpretadores para a linguagem BASIC. Pode-se dividir um programa grande em vrios arquivos contendo cdigo-fonte, facilitando a sua manuteno (modularidade). Um outro aplicativo chamado link-editor (linker) o reponsvel pela ligao dos diversos mdulos do programa para constituir a sua forma final em linguagem de mquina ou cdigo-objeto. O link-editor tambm o responsvel pela ligao do cdigoobjeto de bibliotecas de funes utilizadas em linguagens de alto nvel. Atualmente existem ambientes integrados de desenvolvimento de software, constitudos de editor de cdigo-fonte, montador, compilador, linkeditor e simulador de programas em um nico aplicativo.
Ferramentas de Desenvolvimento
Alm dos aplicativos necessrios para o desenvolvimento de programas tambm so necessrias ferramentas para a validao do funcionamento do sistema como um todo (hardware e software). Para essa finalidade existem programas simuladores de hardware e software, programas monitores (debuggers), emuladores de memrias ROM e RAM, e emuladores de microprocessadores e microcontroladores, podendo estes ltimos operar em tempo real ou no.
MICROCONTROLADORES
Os microcontroladores, tambm chamados de "microcomputadores de somente um chip", vm revolucionando o projeto de sistemas eletrnicos digitais devido enorme versatilidade de hardware e software que oferecem. Um microcontrolador rene em apenas um componente os elementos de um sistema microprocessado completo, antes desempenhados por diversos dispositivos (memria ROM, memria RAM, interface paralela, interface serial, temporizadores / contadores de eventos, controlador de interrupes, entre outros). Talvez a vantagem mais marcante dos microcontroladores seja a possibilidade de ter seus programas gravados internamente na fabricao do componente, impedindo a engenharia reversa ou cpias no autorizadas.
Famlias de Microcontroladores
MCS51 Intel e outros fabricantes M68HC11 Motorola Z8 Zilog COP8 National PIC Microchip AVR - Atmel
MICROCONTROLADORES MCS51
Histrico
A famlia de microcontroladores MCS51 uma das mais antigas existentes e, talvez por este motivo, uma das mais conhecidas e utilizadas. Graas a essa caracterstica, a quantidade de ferramentas de desenvolvimento e bibliotecas de software bastante ampla e variada. Alm da Intel (fabricante original do 8051), diversas outras empresas passaram a comercializar diferentes verses da famlia MCS51, tais como: Atmel, Dallas Semiconductor, Intregrated Silicon Solutions, Philips, Infineon Technologies, entre outras.
Modelos
Os microcontroladores da famlia MCS51 possuem internamente ROM (memria de programa) e RAM (memria de dados); temporizadores / contadores de eventos; controlador de interrupes; interfaces de entrada / sada de 8 bits e interface serial sncrona / assncrona. Os principais modelos so: 8031 sem ROM (ROMLESS), 128 bytes de RAM e 2 T/C 8051 com 4KB de ROM, 128 bytes de RAM e 2 T/C 8751 com 4KB de EPROM, 128 bytes de RAM e 2 T/C 8032 sem ROM (ROMLESS), 256 bytes de RAM e 3 T/C 8052 com 8KB de ROM, 256 bytes de RAM e 3 T/C 8752 - com 8KB de EPROM, 256 bytes de RAM e 3 T/C
Variaes
80C31, 80C32, 80C51 e 80C52 verses CMOS, incluindo modos de baixo consumo de energia 80LV31, 80LV32, 80LV51 e 80LV52 verses low-voltage (ISSI) 89C51 e 89C52 verses com memria Flash reprogramvel (Atmel, ISSI, Philips) 89C1051, 89C2051 e 89C4051 verses com memria Flash reprogramvel, comparadores analgicos e invlucro reduzido (Atmel) 80C320 verso com clock otimizado (trs vezes mais veloz), capaz de operar em at 33MHz (Dallas Semiconductor) C505L verso com 32KB de ROM, 512 bytes de RAM, conversor A/D de 10 bits e interface para LCD (Infineon Technologies) P51XA-G3, P51XA-H3 e P51XAS3 verses com arquitetura de 16 bits (Philips)
AT89C51 (DIP40)
AT89C1051 (DIP20)
RST
10-17
P3.0-P3.7
18 19 20 21-28
29
PSEN\
30
ALE
31
EA\
32-39
P0.0-P0.7
40
VCC
10
atravs das funes especiais dos terminais do Port 3 que se obtm acesso a perifricos internos do microcontrolador (interface serial, contadores de eventos e controlador de interrupes). Os sinais de controle de leitura e escrita da memria de dados externa tambm so fornecidos atravs de terminais do Port 3. No entanto, o Port 3 pode ser utilizado apenas como E/S simples.
11
ARQUITETURA INTERNA:
T0 T1
XTAL1
XTAL2
Gerador de Clock
Microcontroladores MCS51 Hugo Vieira Neto, M.Sc Curitiba, 2002 Barramento de Dados Interno Controle do Barramento de Expanso Interfaces de Entrada / Sada Programveis Interface Serial Programvel WR\ RD\ PSEN\ ALE EA\ Ports RXD TXD
CPU MCS51
RST
INT1\ INT0\
12
ORGANIZAO DA MEMRIA
O 8051 acessa as memrias de programa e dados atravs de sinais de controle diferentes, resultando em mapas de memria separados para programas e dados.
Memria de Programa
EA\=1 EA\=0
0000H
PSEN\=0
FFFFH
FFFFH
A memria de programa pode ser expandida atravs de barramentos externos. Aps o reset, o microcontrolador 8051 ir buscar a primeira instruo no endereo 0000H da memria de programa. O nvel lgico presente no terminal EA\ determina se o microcontrolador dever iniciar a busca das instrues na memria interna ou exclusivamente na memria externa, ignorando a memria interna, se a mesma existir. O sinal PSEN\ habilita o acesso memria de programa externa.
Memria de Dados
00H BANCOS DE REGISTROS 00H RAM INTERNA 7FH 80H REGISTROS ESPECIAIS FFH RAM DE USO GERAL 7FH FFFFH REGISTROS ENDEREVEIS POR BIT 1FH 20H RAM EXTERNA 2FH 30H WR\ RD\ 0000H
De maneira similar, possvel expandir a memria de dados utilizando barramentos externos. Entretanto, as memrias de dados interna e externa so tratadas pelo 8051 de maneira radicalmente diferente: a interna acessada atravs de endereos de 8 bits (MOV) e a externa atravs de endereos de 16 bits (MOVX). Os sinais RD\ e WR\ so os responsveis pelos acessos de leitura e escrita, respectivamente, na memria de dados externa.
13
BANCOS DE REGISTROS
Os microcontroladores da famlia MCS51 possuem quatro conjuntos de registros, chamados de bancos de registros. Cada banco possui 8 registros, chamados de R0 a R7. Os registros de R0 a R7 normalmente so utilizados como operandos de instrues, armazenando dados temporrios na execuo do programa. Pode-se comutar o banco de registros em uso atravs do estado dos bits de controle RS1 e RS0, existentes no registro de funo especial PSW. O uso de diferentes bancos de registros especialmente til na implementao de subrotinas e rotinas de atendimento a interrupes, minimizando o uso da pilha para o salvamento de dados. Quando uma instruo utiliza o modo registro de endereamento, o endereo fsico de memria de dados interna a ser acessado depende do estado dos bits de controle RS1 e RS0, que determinam qual o banco de registros em uso no momento, como mostra a tabela abaixo.
Banco PSW:RS1 PSW:RS0 Endereo 00H 01H 02H 03H 04H 05H 06H 07H 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH 10H 11H 12H 13H 14H 15H 16H 17H 18H 19H 1AH 1BH 1CH 1DH 1EH 1FH Registro R0 R1 R2 R3 R4 R5 R6 R7 R0 R1 R2 R3 R4 R5 R6 R7 R0 R1 R2 R3 R4 R5 R6 R7 R0\ R1\ R2\ R3\ R4\ R5\ R6\ R7\
14
REGISTROS BIT-ENDEREVEIS
Nos microcontroladores da famlia MCS51, a faixa que vai do endereo 20H ao endereo 2FH da memria de dados interna chamada de regio de registros bit-enderecveis. Estas posies da memria de dados interna possuem uma caracterstica especial que permite a alterao individual de cada bit atravs de instrues especialmente destinadas a este fim. Desta maneira, cada bit enderevel possui um endereo individual especfico, como mostra a tabela abaixo.
Registro 20H 21H 22H 23H 24H 25H 26H 27H 28H 29H 2AH 2BH 2CH 2DH 2EH 2FH bit 7 07H 0FH 17H 1FH 27H 2FH 37H 3FH 47H 4FH 57H 5FH 67H 6FH 77H 7FH bit 6 06H 0EH 16H 1EH 26H 2EH 36H 3EH 46H 4EH 56H 5EH 66H 6EH 76H 7EH Endereos Individuais dos Bits bit 5 bit 4 bit 3 bit 2 bit 1 05H 04H 03H 02H 01H 0DH 0CH 0BH 0AH 09H 15H 14H 13H 12H 11H 1DH 1CH 1BH 1AH 19H 25H 24H 23H 22H 21H 2DH 2CH 2BH 2AH 29H 35H 34H 33H 32H 31H 3DH 3CH 3BH 3AH 39H 45H 44H 43H 42H 41H 4DH 4CH 4BH 4AH 49H 55H 54H 53H 52H 51H 5DH 4CH 5BH 5AH 59H 65H 64H 63H 62H 61H 6DH 6CH 6BH 6AH 69H 75H 74H 73H 72H 71H 7DH 7CH 7BH 7AH 79H bit 0 00H 08H 10H 18H 20H 28H 30H 38H 40H 48H 50H 58H 60H 68H 70H 78H
PC Program Counter
Contador de Programa: indica o endereo da prxima instruo a ser executada (16 bits).
Contm os sinalizadores (flags) que indicam as ocorrncias na execuo da ltima operao lgica ou aritmtica. Contm tambm os bits de controle para a seleo do banco de registros em uso.
15
A (E0H) e B (F0H)
Trata-se do acumulador (A), empregado nas operaes lgicas e aritmticas da CPU, e de um registro secundrio (B), empregado apenas nas operaes de multiplicao e diviso. So registros intimamente relacionados com a Unidade Lgica e Aritmtica da CPU.
Registros de 8 bits que compem respectivamente os bytes mais e menos significativos do ponteiro de dados de 16 bits chamado DPTR, utilizado para endereamento indireto da memria de programa e da memria externa de dados.
Registros que contm cpias dos estados dos quatro Ports de E/S. A escrita nesses registros altera automaticamente o contedo na sada do Port correspondente. A leitura carrega o estado de entrada presente nos terminais do Port no registro correspondente.
Registros de habilitao / desabilitao das interrupes e de definio da prioridade de atendimento de cada uma delas.
Presente apenas na verso CMOS, este registro permite colocar o 80C51 em modos de reduo de consumo de energia, preservando o contedo da memria interna.
Registros de dados dos temporizadores / contadores de eventos 1 e 0, respectivamente. Contm os valores das contagens realizadas (16 bits).
Registros de controle da interface serial e de armazenamento dos dados a serem transmitidos (escrita) ou recebidos (leitura).
16
CLOCK
O 8051 possui um oscilador interno destinado a gerar o sinal de clock do sistema. Pode-se fazer uso de um cristal oscilador na freqncia de operao desejada, conectado-o aos terminais XTAL1 e XTAL2, juntamente com dois capacitores de realimentao conectados ao terra do circuito. Para fazer uso de um circuito de clock externo ao 8051, basta conectar o terminal XTAL1 ao potencial de terra do circuito (GND) e aplicar o sinal externo ao terminal XTAL2. Dessa maneira o sinal de clock externo ir diretamente ao circuito de temporizao e controle do microcontrolador. A freqncia de operao do 8051 pode chegar a um mximo de 8, 10 ou 12MHz conforme o modelo utilizado, embora existam atualmente tambm verses que operam em at 24MHz (89C51) e 33MHz (80C320). A freqncia de clock dividida internamente por 12 para a gerao dos ciclos de mquina necessrios execuo das instrues. Sendo assim, os ciclos de mquina do 8051 tm a durao de 12 ciclos de clock, embora em algumas verses otimizadas (80C320) os ciclos de mquina durem apenas 4 ciclos de clock, sendo portanto 3 vezes mais velozes que a verso original.
17
RESET
O reset do 8051 ativado quando o terminal RST levado a nvel lgico 1 por dois ou mais ciclos de mquina. Consiste basicamente na inicializao de alguns registros com valores predeterminados: Os registros A, B, PSW, DPTR, PC e todos os registros dos temporizadores / contadores de eventos so zerados. O registro SP carregado com o valor 07H. Os Ports P0, P1, P2 e P3 so carregados com FFH. Durante o reset o nvel lgico dos terminais indeterminado, assumindo valor 1 aps a execuo da seqncia de reset interna. O registro SCON zerado e o registro SBUF fica com valor indeterminado. O registro PCON tem apenas o seu bit mais significativo zerado. Os registros IE e IP so carregados com o valor XXX00000B, (X=indeterminado). A RAM interna no tem o seu contedo afetado pelo reset.
Um circuito reset automtico ao ligar o sistema (power-on-reset) pode ser implementado com a conexo de um capacitor externo entre o potencial de alimentao e o terminal RST.
18
D0-D7
D0-D7
AD0-AD7
Latch CK
A0-A7
EPROM
A0-A7
RAM
ALE 8051 A8-A15 OE\ PSEN\ RD\ WR\ A8-A15 OE\ WR\
O sinal ALE indica quando a parte menos significativa dos endereos est disponvel no Port 0. Este sinal serve para habilitar um latch de 8 bits externo, destinado a armazenar a parte menos significativa do barramento de endereos (A7-A0). Aps o armazenamento dos sinais A7-A0, o Port 0 apresenta os sinais D7-D0. desta forma que ocorre a demultiplexao do barramentos de dados e endereos. O sinal PSEN\ habilita a leitura da memria de programa externa, tornando-se ativo quando o 8051 busca instrues externamente. O terminal EA\ quando em nvel lgico 1 informa ao 8051 que os primeiros 4KB da memria de programa esto na memria de programa interna e o restante na memria externa, se estiver presente. Quando em nvel lgico 0, o terminal EA\ determina que o microcontrolador busque todas as instrues de programa na memria externa, ignorando completamente a memria interna, se esta existir. Os sinais RD\ e WR\ somente so ativados no caso de leitura ou escrita, respectivamente, na memria de dados externa (as instrues que acessam a memria de dados externa MOVX so distintas das que acessam a memria interna MOV).
19
Os sinais RD\, WR\ e PSEN\ nunca so ativados simultaneamente, conforme mostra a tabela abaixo. PSEN\ 1 1 1 0 RD\ 1 1 0 1 WR\ 1 0 1 1 Funo Nenhum Acesso Externo Escrita na Memria de Dados Leitura da Memria de Dados Leitura da Memria de Programa
Os sinais de acesso s memrias externas possuem comportamentos bem definidos, apresentados nos diagramas de tempo a seguir.
PSEN\
Port 0
A0-A7
Instruo
A0-A7
Port 2
A8-A15
A8-A15
PSEN\
RD\
Port 0
Dado
A0-A7 (PCL)
Instr.
Port 2
A8-A15 (PCH)
20
PSEN\
WR\
Port 0
Dado
A0-A7 (PCL)
Instr.
Port 2
A8-A15 (PCH)
Barramento de Dados
E0-E7
FlipFlops D CK
S0-S7
21
Nas pginas a seguir so apresentados alguns diagramas esquemticos de possveis sistemas baseados em microcontroladores da famlia MCS51. O primeiro deles (Sistema Mnimo) utiliza a menor quantidade possvel de componentes externos, apenas para implementar os circuitos de clock e power-on-reset. Neste caso, todos os pinos de E/S ficam disponveis para interconexo com outros dispositivos externos no representados no diagrama. Em seguida so apresentados diagramas esquemticos de sistemas que fazem uso de memrias externas. So apresentados sistemas com apenas memria de programa externa (Sistema com ROM Externa), apenas memria de dados externa (Sistema com RAM Externa) e, finalmente, com memrias de programa e de dados externas (Sistema com ROM e RAM Externas). Os Ports 0 e 2 ficam comprometidos com a implementao dos barramentos externos de dados e de endereos. O Port 3 fica parcialmente comprometido com a implementao dos sinais de acesso memria de dados externa, quando esta for utilizada. Deve-se observar a presena do latch para demultiplexao dos barramentos externos e a forma de conexo dos sinais do barramento de controle (ALE, EA\, PSEN\, RD\ e WR\). O diagrama esquemtico de um sistema que utiliza a tcnica de E/S mapeada em memria (Sistema com E/S Mapeada em Memria) tambm apresentado. Deve-se notar a presena de um decodificador de endereos para gerar os sinais de habilitao dos dispositivos de E/S, que neste caso so apenas flip-flops D (sadas) e buffers tri-state (entradas). Por fim, apresentado o diagrama esquemtico de um sistema com memrias externas de programa e de dados, E/S mapeada em memria (interface para display inteligente de cristal lquido) e interface serial padro RS-232. O Sistema Completo apresentado bastante similar placa P51 (ver anexos) e possui algumas cactersticas especiais quanto forma de acesso s memrias externas, possibilitando o seu uso com o programa monitor PAULMON (ver anexos). Programas monitores como o PAULMON permitem que se armazene e execute programas na memria RAM externa do sistema. Entretanto, para que isso seja possvel, o hardware deve prever alguma forma de acesso RAM externa como se fosse memria de programa. No diagrama esquemtico do Sistema Completo o sinal de leitura da RAM externa gerado atravs de uma operao lgica E entre os sinais PSEN\ e RD\ (componente U7:A). Desta forma, a RAM externa acessada tanto como memria de dados externa (quando o sinal RD\ estiver ativo) quanto como memria de programa externa (quando o sinal PSEN\ estiver ativo). Esta caracterstica faz com que os mapas de memria de programa e de dados se sobreponham, sendo necessrio, portanto, um decodificador de endereos para atribuir faixas de endereos distintas para a habilitao da ROM e da RAM externas (decodificador composto pelos componentes U3 e U7:B,C,D). O mesmo decodificador de endereos gera sinais de habilitao para possveis perifricos mapeados em memria, bem como o sinal de habilitao para um display inteligente de cristal lquido (CN9) mapeado em memria (componentes U3 e U8:A,B,C,D). O Sistema Completo apresentado possui diversos jumpers (JP1 a JP10) para a configurao do sistema (ver legenda no canto inferior esquerdo do diagrama esquemtico).
22
X1 1 1 .0 5 9 2 MHz C2 3 3 pF U1
19 XTAL1 RST EA/ VPP 39 38 37 36 35 34 33 32 P0 .0 P0 .1 P0 .2 P0 .3 P0 .4 P0 .5 P0 .6 P0 .7 P2 .0 P2 .1 P2 .2 P2 .3 P2 .4 P2 .5 P2 .6 P2 .7 P2 0 / A8 P2 1 / A9 P2 2 / A1 0 P2 3 / A1 1 P2 4 / A1 2 P2 5 / A1 3 P2 6 / A1 4 P2 7 / A1 5 21 22 23 24 25 26 27 28 PSEN ALE/ PROG P0 0 / P0 1 / P0 2 / P0 3 / P0 4 / P0 5 / P0 6 / P0 7 / AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 29 30 XTAL2 9 31 18
C3 3 3 pF
C1 1 0 uF
10 11 12 13 14 15 16 17
AT8 9 C5 2
Tit le Size Nu m b er
SISTEMA MINIMO
Rev
A4
03/ 2002 Da t e Filen a m e MINIMO5 1 .S0 1
1 .0
Dr a wn b y Sh eet 1
HUGO of 1
X1
1 1 .0 5 9 2 MHz
C2
C3
3 3 pF
18
3 3 pF
U1 U2
29 30 OC C 1D 2D 3D 4D 5D 6D 7D 8D 1Q 2Q 3Q 4Q 5Q 6Q 7Q 8Q 2 5 6 9 12 15 16 19 A0 A1 A2 A3 A4 A5 A6 A7 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 A8 A9 A1 0 A1 1 A1 2 A1 3 A1 4 A1 5 D0 D1 D2 D3 D4 D5 D6 D7 3 4 7 8 13 14 17 18 D0 D1 D2 D3 D4 D5 D6 D7 1 11
C1 1 0 uF
19
XTAL1
XTAL2
RST
31
EA
PSEN ALE
U3
Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 11 12 13 15 16 17 18 19 10 9 8 7 6 5 4 3 25 24 21 23 2 26 27 1 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A1 0 A1 1 A1 2 A1 3 A1 4 A1 5 D0 D1 D2 D3 D4 D5 D6 D7
P3 .0 P3 .1 P3 .2 P3 .3 P3 .4 P3 .5 P3 .6 P3 .7
10 11 12 13 14 15 16 17
P3 0 / P3 1 / P3 2 / P3 3 / P3 4 / P3 5 / P3 6 / P3 7 /
P0 0 / P0 1 / P0 2 / P0 3 / P0 4 / P0 5 / P0 6 / P0 7 /
P1 .0 P1 .1 P1 .2 P1 .3 P1 .4 P1 .5 P1 .6 P1 .7
1 2 3 4 5 6 7 8
P1 0 / T2 P1 1 / T2 EX P1 2 P1 3 P1 4 P1 5 P1 6 P1 7
P2 0 / A8 P2 1 / A9 P2 2 / A1 0 P2 3 / A1 1 P2 4 / A1 2 P2 5 / A1 3 P2 6 / A1 4 P2 7 / A1 5
7 4 HC3 7 3
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A1 0 A1 1 A1 2 A1 3 A1 4 A1 5
3
PSEN 22 20 G/ VPP E
8 0 C3 2
2 7 C5 1 2
Tit le Size
Nu m b er
Rev
A4
03/ 2002 Da t e Filen a m e ROMEXT5 1 .S0 1
1 .0
Dr a wn b y Sh eet 1
HUGO of 1
X1
1 1 .0 5 9 2 MHz
C2
C3
3 3 pF
18
3 3 pF
U1 U2
29 30 OC C 1D 2D 3D 4D 5D 6D 7D 8D 1Q 2Q 3Q 4Q 5Q 6Q 7Q 8Q A8 A9 A1 0 A1 1 A1 2 A1 3 A1 4 A1 5 2 5 6 9 12 15 16 19 A0 A1 A2 A3 A4 A5 A6 A7 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 D0 D1 D2 D3 D4 D5 D6 D7 3 4 7 8 13 14 17 18 D0 D1 D2 D3 D4 D5 D6 D7 1 11
C1 1 0 uF
19
XTAL1
XTAL2
RST
31
EA/ VPP
U3
D0 D1 D2 D3 D4 D5 D6 D7 11 12 13 15 16 17 18 19 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A1 0 A1 1 A1 2 A1 3 A1 4 D0 D1 D2 D3 D4 D5 D6 D7 10 9 8 7 6 5 4 3 25 24 21 23 2 26 1
P3 .0 P3 .1 P3 .2 P3 .3 P3 .4 P3 .5
10 11 12 13 14 15 16 17
P3 0 / P3 1 / P3 2 / P3 3 / P3 4 / P3 5 / P3 6 / P3 7 /
P0 0 / P0 1 / P0 2 / P0 3 / P0 4 / P0 5 / P0 6 / P0 7 /
P1 .0 P1 .1 P1 .2 P1 .3 P1 .4 P1 .5 P1 .6 P1 .7
1 2 3 4 5 6 7 8
P1 0 / T2 P1 1 / T2 EX P1 2 P1 3 P1 4 P1 5 P1 6 P1 7
P2 0 / A8 P2 1 / A9 P2 2 / A1 0 P2 3 / A1 1 P2 4 / A1 2 P2 5 / A1 3 P2 6 / A1 4 P2 7 / A1 5
7 4 HC3 7 3
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A1 0 A1 1 A1 2 A1 3 A1 4
AT8 9 C5 2
20 WR RD 27 22 CS WE OE
62256
Tit le Size
Nu m b er
Rev
A4
03/ 2002 Da t e Filen a m e RAMEXT5 1 .S0 1
1 .0
Dr a wn b y Sh eet 1
HUGO of 1
1
X1
1 1 .0 5 9 2 MHz C3 3 3 pF U1
XTAL2 18
C2
3 3 pF
C1 1 0 uF U2
PSEN ALE 29 30 OC C 1 11
19
XTAL1
RST
31
EA
U3
2
P2 0 / A8 P2 1 / A9 P2 2 / A1 0 P2 3 / A1 1 P2 4 / A1 2 P2 5 / A1 3 P2 6 / A1 4 P2 7 / A1 5 A8 A9 A1 0 A1 1 A1 2 A1 3 A1 4 A1 5 21 22 23 24 25 26 27 28
10 11 12 13 14 15 16 17
P3 0 / P3 1 / P3 2 / P3 3 / P3 4 / P3 5 / P3 6 / P3 7 /
39 38 37 36 35 34 33 32
D0 D1 D2 D3 D4 D5 D6 D7 3 4 7 8 13 14 17 18 2 5 6 9 12 15 16 19 10 9 8 7 6 5 4 3 25 24 21 23 2 26 27 1 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A1 0 A1 1 A1 2 A1 3 A1 4 A1 5 11 12 13 15 16 17 18 19
D0 D1 D2 D3 D4 D5 D6 D7
A0 A1 A2 A3 A4 A5 A6 A7
D0 D1 D2 D3 D4 D5 D6 D7
P1 .0 P1 .1 P1 .2 P1 .3 P1 .4 P1 .5 P1 .6 P1 .7
1 2 3 4 5 6 7 8
P1 0 / T2 P1 1 / T2 EX P1 2 P1 3 P1 4 P1 5 P1 6 P1 7
7 4 HC3 7 3
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A1 0 A1 1 A1 2 A1 3 A1 4 A1 5
8 0 C3 2
PSEN 22 20 G/ VPP E
2 7 C5 1 2 U4
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A1 0 A1 1 A1 2 A1 3 A1 4 10 9 8 7 6 5 4 3 25 24 21 23 2 26 1 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A1 0 A1 1 A1 2 A1 3 A1 4 D0 D1 D2 D3 D4 D5 D6 D7 11 12 13 15 16 17 18 19 D0 D1 D2 D3 D4 D5 D6 D7
20 WR RD 27 22
CS WE OE
62256
4
Tit le Size
SISTEMA COM ROM E RAM EXTERNAS
4
Nu m b er Rev
A3
03/ 2002 Da t e Filen a m e ROMRAM5 1 .S0 1
1 .0
Dr a wn b y Sh eet 1
HUGO of 1
X1
1 1 .0 5 9 2 MHz
C2
C3
3 3 pF
3 3 pF
U1 U2 U4 :A
1 G 1 11 WR0 1 11 OC C
C1 1 0 uF
19
XTAL1
XTAL2
18
RST
31
EA/ VPP
29 30
U5
CLR CLK
2
7 4 HC2 4 4 U4 :B
RD0 E4 E5 E6 E7 11 13 15 17 A1 A2 A3 A4 19 G Y1 Y2 Y3 Y4 9 7 5 3
P3 .0 P3 .1 P3 .2 P3 .3 P3 .4 P3 .5 1D 2D 3D 4D 5D 6D 7D 8D 1Q 2Q 3Q 4Q 5Q 6Q 7Q 8Q E0 E1 E2 E3 A1 A2 A3 A4 Y1 Y2 Y3 Y4
10 11 12 13 14 15 16 17
P3 0 / P3 1 / P3 2 / P3 3 / P3 4 / P3 5 / P3 6 / P3 7 /
P0 0 / P0 1 / P0 2 / P0 3 / P0 4 / P0 5 / P0 6 / P0 7 /
39 38 37 36 35 34 33 32
D0 D1 D2 D3 D4 D5 D6 D7 3 4 7 8 13 14 17 18 2 5 6 9 12 15 16 19 2 4 6 8 18 16 14 12
D0 D1 D2 D3 D4 D5 D6 D7
A0 A1 A2 A3 A4 A5 A6 A7
D0 D1 D2 D3
7 4 HC3 7 3
D0 D1 D2 D3 D4 D5 D6 D7 D4 D5 D6 D7
3 4 7 8 13 14 17 18
1D 2D 3D 4D 5D 6D 7D 8D
1Q 2Q 3Q 4Q 5Q 6Q 7Q 8Q
2 5 6 9 12 15 16 19
S0 S1 S2 S3 S4 S5 S6 S7
P1 .0 P1 .1 P1 .2 P1 .3 P1 .4 P1 .5 P1 .6 P1 .7
1 2 3 4 5 6 7 8
P1 0 / T2 P1 1 / T2 EX P1 2 P1 3 P1 4 P1 5 P1 6 P1 7
P2 0 / A8 P2 1 / A9 P2 2 / A1 0 P2 3 / A1 1 P2 4 / A1 2 P2 5 / A1 3 P2 6 / A1 4 P2 7 / A1 5
21 22 23 24 25 26 27 28
P2 .0 P2 .1 P2 .2 P2 .3 P2 .4 P2 .5 P2 .6 P2 .7
7 4 HC2 7 3 7 4 HC2 4 4
AT8 9 C5 2
A6 A7 2 3 A B G RD3 RD 1 Y0 Y1 Y2 Y3 RD0 RD1 RD2 4 5 6 7
U3 :A
U6 :A
1 G 1 11 WR1
7 4 HC1 3 9 U3 :B
A6 A7 A B G WR 1 5 Y0 Y1 Y2 Y3 14 13 12 11 10 9 WR0 WR1 WR2 WR3
U7
E8 E9 E1 0 E1 1 2 4 6 8 A1 A2 A3 A4 Y1 Y2 Y3 Y4 18 16 14 12 D0 D1 D2 D3 CLR CLK
3
7 4 HC1 3 9
7 4 HC2 4 4 U6 :B
RD1 E1 2 E1 3 E1 4 E1 5 19 G 11 13 15 17 A1 A2 A3 A4 Y1 Y2 Y3 Y4 9 7 5 3 D4 D5 D6 D7
D0 D1 D2 D3 D4 D5 D6 D7
3 4 7 8 13 14 17 18
1D 2D 3D 4D 5D 6D 7D 8D
1Q 2Q 3Q 4Q 5Q 6Q 7Q 8Q
2 5 6 9 12 15 16 19
S8 S9 S1 0 S1 1 S1 2 S1 3 S1 4 S1 5
7 4 HC2 7 3 7 4 HC2 4 4
4
Tit le Size
SISTEMA COM E/ S MAPEADA EM MEMORIA
4
Nu m b er Rev
A3
03/ 2002 Da t e Filen a m e ESMEM5 1 .S0 1
1 .0
Dr a wn b y Sh eet 1
HUGO of 1
A
CN1
X1
1 1 .0 5 9 2 MHz D1
+V VI G 2 VO 1 3
C 2
C2 U9 VAL C8 3 3 nF C1 0 1 0 0 uF C9 7805 1 N4 0 0 1 1 0 0 nF C1 1 1 0 0 nF C1 2 1 0 0 nF
C3
1
U2
PSEN OC C 1 11
RST
3 3 pF
3 3 pF
D0 D1 D2 D3 D4 D5 D6 D7 1 2 3 4 5 6 7 8
C1 1 0 uF
U1
CON8 M CN2
19
C2
JP1 U4
C 1
XTAL1
XTAL2
18
RST
C1
31
C3
EA/ VPP
29 30
R1
8 k2
A0 A1 A2 A3 A4 A5 A6 A7
1 2 3 4 5 6 7 8
CON8 M CN3
A8 A9 A1 0 A1 1 A1 2 A1 3 A1 4 A1 5 1 2 3 4 5 6 7 8
P3 .0 P3 .1 P3 .2 P3 .3 P3 .4 P3 .5 P3 .6 P3 .7 1D 2D 3D 4D 5D 6D 7D 8D 1Q 2Q 3Q 4Q 5Q 6Q 7Q 8Q Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8
10 11 12 13 14 15 16 17
P3 0 / P3 1 / P3 2 / P3 3 / P3 4 / P3 5 / P3 6 / P3 7 /
P0 0 / P0 1 / P0 2 / P0 3 / P0 4 / P0 5 / P0 6 / P0 7 /
39 38 37 36 35 34 33 32
D0 D1 D2 D3 D4 D5 D6 D7 3 4 7 8 13 14 17 18 2 5 6 9 12 15 16 19 10 9 8 7 6 5 4 3 25 24 21 23 2 26 27 1 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A1 0 A1 1 A1 2 A1 3 A1 4 A1 5 C2 C1 A1 4 C3 PSEN C2 C1 A1 5 C3 E 22 G/ VPP 20 11 12 13 15 16 17 18 19
D0 D1 D2 D3 D4 D5 D6 D7
A0 A1 A2 A3 A4 A5 A6 A7
D0 D1 D2 D3 D4 D5 D6 D7
7 4 HC3 7 3
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A1 0 A1 1 A1 2 A1 3
2
JP2
P1 .0 P1 .1 P1 .2 P1 .3 P1 .4 P1 .5 P1 .6 P1 .7 A8 A9 A1 0 A1 1 A1 2 A1 3 A1 4 A1 5
1 2 3 4 5 6 7 8
P1 0 / T2 P1 1 / T2 EX P1 2 P1 3 P1 4 P1 5 P1 6 P1 7
P2 0 / A8 P2 1 / A9 P2 2 / A1 0 P2 3 / A1 1 P2 4 / A1 2 P2 5 / A1 3 P2 6 / A1 4 P2 7 / A1 5
21 22 23 24 25 26 27 28
CON8 M CN4
AT8 9 C5 2 JP3
JP8
C2
P3 .3
C1
C3
2 7 C5 1 2 JP4
C1
P1 .0 P1 .1 P1 .2 P1 .3 P1 .4 P1 .5 P1 .6 P1 .7
1 2 3 4 5 6 7 8
1 0 uF
C2
C4
U6
C6 1 0 uF
C3
CON8 M CN5 U5
C1 +
V+
C1 -
V-
1 0 uF
C5
C2 +
C2 -
C7 1 0 uF
P3 .5
C2
JP9
P3 .1
11
T1 IN
T1 OUT
14
TX
P3 .0 P3 .1 P3 .2 P3 .3 P3 .4 P3 .5 P3 .6 P3 .7 D0 D1 D2 D3 D4 D5 D6 D7 11 12 13 15 16 17 18 19 D0 D1 D2 D3 D4 D5 D6 D7
1 2 3 4 5 6 7 8
C1
10
3
A1 4
C3
T2 IN
T2 OUT
DTR
P3 .0
12
R1 OUT R1 IN
13
RX
P3 .4
C2
JP1 0
C1
R2 OUT R2 IN
DSR
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A1 0 A1 1 A1 2
C3
MAX2 3 2 U7 :C
9 8 10 A1 3
10 9 8 7 6 5 4 3 25 24 21 23 2 26 1
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A1 0 A1 1 A1 2 A1 3 A1 4
CON4 M
C2 C3 P3 .6 27 C3 C2
CONFIGURACOES
JP1
C1 - C2
ROM INTERNA
U3 U7 :B 7 4 HC0 8
6 5 11 13 4
JP5
C1 20 CS WE A0 A1
CN9
TX RX
CN7
C1 - C3
ROM EXTERNA
JP2
C1 - C2
2764/ 128
A1 3 A1 4 A1 5
1 2 3
A B C
C1 - C3
27256/ 512
JP6
C1
22
DSR DTR OE
1 2 3 4 5 6
JP3
12
C1 - C2
C1 - C3
27512
6 4 5
G1 G2 A G2 B
Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
15 14 13 12 11 10 9 7
CS1 CS2
U7 :D 7 4 HC0 8
C2
62256 JP7
C1 1 C3 P3 .7 2 3
CON6 M U7 :A CN8
+V 1 2 3 4
JP4
C1 - C2
ROM 8 K
7 4 HC1 3 8 7 4 HC0 8
PSEN
C1 - C3
ROM 6 4 K
JP5
8 10 9
C1 - C2
6264
U8 :C U8 :B 7 4 HC0 2 U8 :D
11 13 12 5 4 6 3 2
D0 D1 D2 D3 D4 D5 D6 D7
1 2 3 4 5 6 7 8 9 10 11 12 13 14
C1 - C3
62256
P3 .6
7 4 HC0 8 U8 :A
1
CON1 4 M
Tit le Size
SISTEMA COMPLETO
CON4 M
JP6
C1 - C2
RAM 2 0 0 0 H
4
Nu m b er Rev
C1 - C3
RAM 0 0 0 0 H
JP7
C1 - C2
DADOS
C1 - C3
DADOS/ PROG.
7 4 HC0 2
7 4 HC0 2
JP8
C1 - C2
EXEC. NORMAL
P3 .7
A3
03/ 2002 Da t e Filen a m e COMPLE5 1 .S0 1
1 .0
C1 - C3
PASSO A PASSO
7 4 HC0 2
Dr a wn b y Sh eet 1
HUGO of 1
EXERCCIOS
1) Com base nos diagramas esquemticos dos sistemas apresentados, responda as seguintes questes: a) Explique com suas palavras o que ocorreria com o Sistema Mnimo se o terminal EA\ do 89C52 fosse conectado a GND em vez de Vcc. b) Por que o terminal EA\ do 80C32 do Sistema com ROM Externa no pode ser conectado a Vcc? E se o 80C32 fosse substitudo por um 89C52, seria possvel conectar o terminal EA\ a Vcc? Por que? c) Para que o Sistema com RAM Externa funcione corretamente, em qual componente do sistema o programa a ser executado dever estar gravado? Por que? d) Determine quantos bytes de memria de programa interna e externa o Sistema com ROM e RAM Externas possui. Determine tambm quantos bytes de memria de dados interna e externa este sistema possui. e) Determine em que faixa de endereos esto localizados os perifricos representados pelos componentes U4, U5, U6 e U7 no Sistema com E/S Mapeada em Memria. Quais so os componentes que implementam entradas? E quais so os componentes que implementam sadas? Como seria possvel ampliar o nmero de entradas e sadas mapeadas em memria? f) Explique como fica o mapa de memria do Sistema Completo quando os jumpers de JP1 a JP7 so colocados nas posies C1-C3. E como fica o mapa de memria deste sistema quando os jumpers JP1, JP4, JP6 e JP7 so colocados nas posies C1-C2 (com os jumpers JP2, JP3 e JP5 nas posies C1-C3). g) Esquematize uma forma de se mapear em memria um conversor A/D ADC0820 no Sistema Completo. Procure fazer uso ao mximo dos recursos j disponveis (barramentos externos, decodificador de endereos, etc.). Explique em que faixa de endereos ocorreria o acesso a este conversor A/D. 2) Os seguintes componentes esto disponveis para projetos de sistemas de hardware: microcontroladores 80C31, 80C32, 89C51 e 89C52; memrias EPROM 27C64, 27C128, 27C256 e 27C512; memrias RAM 6116, 6264 e 62256; e ainda toda a famlia HC de circuitos integrados TTL. Elabore os seguintes projetos tericos de hardware, visando o uso da menor quantidade de componentes possvel: a) Projete o hardware de um sistema baseado no microcontrolador 80C32 com 8KB de memria de programa e 32KB de memria de dados. O sistema deve incluir os circuitos de power-on-reset e clock.
23
b) O levantamento dos requisitos necessrios para determinado sistema baseado na arquitetura MCS51 revelou a necessidade de pelo menos 6KB de memria de programa, pelo menos 200 bytes de memria de dados e pelo menos 12 bits de E/S. Com base nessas informaes, projete o hardware para tal sistema. c) Deseja-se um sistema baseado no microcontrolador 89C51 que possua exatamente 2KB de memria de dados externa e pelo menos 6 bits de entrada e 8 bits de sada a mais que os bits disponveis nos Ports de E/S. Projete o hardware de um sistema que atenda a esses requisitos, utilizando a tcnica de E/S mapeada em memria para a implementao dos bits de E/S adicionais.
24
PROGRAMAO
O 8051 utiliza cdigos de instruo de 8 bits. Entretanto, suas instrues podem ter extenso varivel entre um e trs bytes. As instrues de apenas um byte de extenso no requerem operandos ou ento j os possuem embutidos nos 8 bits do cdigo da instruo. As instrues de dois ou trs bytes de extenso so as que possuem um ou dois bytes adicionais, correspondentes ao(s) operando(s). Para cada instruo o tempo de execuo pode ser de um a quatro ciclos de mquina (cada ciclo de mquina corresponde a 12 ciclos de clock), conforme a complexidade da operao a ser executada e o nmero de bytes extras a serem buscados na memria de programa. Na programao em linguagem Assembly (baixo nvel) so utilizados smbolos mnemnicos para representar os cdigos das instrues, facilitando o entendimento por parte do programador, evitando que seja necessrio decorar os cdigos de cada instruo. A codificao do programa propriamente dita realizada por um aplicativo montador (assembler). No caso do uso de uma linguagem de programao de alto nvel como a linguagem C utiliza-se um compilador, que o responsvel pela traduo para o Assembly e posterior montagem do cdigo.
MODOS DE ENDEREAMENTO
Modo Imediato
Permite carregar constantes em posies da memria de dados interna. Nas instrues da famlia MCS51, as constantes so precedidas pelo smbolo #.
Modo Direto
Essa forma de endereamento utiliza diretamente o endereo da posio da memria de dados interna na qual ser efetuada a operao.
Modo Indireto
Nesse caso o endereo da posio de memria onde ser efetuada a operao indicado de forma indireta pelos registros R0 ou R1 do banco de registros em uso ou pelo registro DPTR. Os registros R0, R1 e DPTR atuam como ponteiros nessas instrues, sendo R0 e R1 ponteiros para endereos de 8 bits e DPTR um ponteiro para endereos de 16 bits. Nas instrues da famlia MCS51, os ponteiros so precedidos pelo smbolo @.
Modo Registro
Permite o acesso aos registros R0 a R7 do banco de registros em uso (working registers), definido pelos bits de controle RS1 e RS0 existentes no registro de funo especial PSW.
25
CONJUNTO DE INSTRUES
O conjunto das instrues do 8051 pode ser dividido em 5 grupos: transferncia de dados, operaes lgicas, operaes aritmticas, manipulao de variveis booleanas e controle de programa. A seguir sero analisadas algumas das instrues de cada grupo.
Transferncia de Dados
Fazem parte do grupo de transferncia de dados as instrues MOV, MOVC, MOVX, PUSH, POP, XCH e XCHD. A instruo MOV copia o contedo de um endereo da memria de dados interna (ou uma constante) para outro endereo da memria de dados interna, utilizando a seguinte sintaxe: MOV <destino>, <fonte> O contedo do operando <fonte> copiado para o operando <destino>, sendo possvel utilizar todos os modos de endereamento (imediato, direto, indireto e registro). MOV A, #dado Carrega no acumulador o valor da constante de 8 bits (dado). O valor da constante pode estar em decimal (sem sufixo), hexadecimal (sufixo H) ou binrio (sufixo B). Exemplo: MOV A, #01010101B MOV A, direto Carrega no acumulador o contedo do endereo da memria de dados interna (direto). Exemplo: MOV A, 12H MOV A, @Ri Carrega no acumulador o contedo do endereo da memria de dados interna apontado pelo registro R0 ou R1 (@Ri). Exemplo: MOV A, @R0 MOV A, Rn Carrega no acumulador o contedo do registro R0, R1, R2, R3, R4, R5, R6 ou R7 (Rn) do banco de registros em uso. Exemplo: MOV A, R0 MOV DPTR, #dado16 Carrega no registro DPTR o valor da constante de 16 bits (dado16). Exemplo: MOV DPTR, #1234H
26
A instruo MOVC copia o contedo da memria de programa (interna ou externa) para o acumulador, utilizando a seguinte sintaxe: MOVC A, <fonte> O operando <fonte> sempre ir empregar o modo de endereamento indireto atravs de ponteiros. Trata-se da nica forma de leitura de constantes gravadas na memria de programa, como por exemplo, tabelas de dados (lookup tables). MOVC A, @A+DPTR Adiciona o valor contido no acumulador ao valor contido no registro de DPTR, utilizando o resultado como ponteiro para enderear uma posio da memria de programa e carrega o seu contedo no acumulador. A instruo MOVX copia o contedo de uma posio da memria de dados externa para o acumulador ou vice-versa, utilizando as seguintes sintaxes: MOVX A, <fonte> MOVX <destino>, A Os operandos <fonte> e <destino> sempre iro utilizar o modo de endereamento indireto atravs de ponteiros. Trata-se da nica forma de leitura ou escrita na memria de dados externa e de perifricos externos mapeados em memria. MOVX A, @DPTR Carrega o acumulador com o contedo da posio de memria de dados externa apontada pelo registro DPTR. MOVX @DPTR, A Carrega a posio de memria de dados externa apontada pelo registro DPTR com o contedo do acumulador. As instrues PUSH e POP trabalham com o armazenamento temporrio de dados, utilizando a seguinte sintaxe: PUSH <fonte> POP <destino> possvel utilizar apenas o modo de endereamento direto. PUSH direto O registro SP incrementado e em seguida o contedo do endereo da memria de dados interna (direto) carregado no topo da pilha. Exemplo: PUSH ACC
27
POP direto O topo da pilha carregado no endereo da memria de dados interna (direto). Em seguida o registro SP decrementado. Exemplo: POP ACC A instruo XCH efetua a troca de contedos entre o acumulador e um segundo operando, utilizando a seguinte sintaxe: XCH A, <operando> possvel utilizar todos os modos de endereamento (imediato, direto, indireto e registro). XCH A, direto Troca os contedos do acumulador e do endereo da memria de dados interna (direto). Exemplo: XCH A, 34H A instruo XCHD efetua a troca dos nibbles menos significativos entre o acumulador e um segundo operando, utilizando a seguinte sintaxe: XCHD A, <operando> possvel utilizar apenas o modo de endereamento indireto com ponteiros de 8 bits (R0 ou R1). XCHD A, @Ri Troca apenas o nibble menos significativo dos contedos do acumulador e do endereo da memria de dados interna apontada pelo registro R0 ou R1 (@Ri). Exemplo: XCHD A, @R0 Para se ter noo de todas as instrues de transferncia de dados existentes para a famlia MCS51 deve-se consultar a tabela de instrues completa que se encontra nos anexos.
Exerccios
1) Sabendo que a instruo MOVC envolve o acesso memria de programa do microcontrolador 8051, explique o que ocorre com os barramentos externos durante a execuo da instruo MOVC A, @A+DPTR. Leve em considerao os casos de acesso a endereos existentes na memria de programa interna e externa. 2) Sabendo que a instruo MOVX envolve o acesso memria de dados externa do microcontrolador 8051, explique o que ocorre com os barramentos externos durante a execuo das instrues MOVX A, @DPTR e MOVX @DPTR, A. Qual instruo realiza uma escrita e qual instruo realiza uma leitura na memria de dados externa?
28
3) Execute o programa dado a seguir no simulador do ambiente Proview e tire concluses sobre o efeito de cada instruo executada. Para uma melhor noo do que ocorre, sugere-se que o programa seja executado passo a passo, visualizando-se as janelas Main Registers e Data View. INICIO: MOV MOV MOV MOV MOV MOV PUSH PUSH PUSH PUSH MOV MOV MOV MOV POP POP POP POP LJMP SP, #20H DPTR, #1234H A, #56 01H, #02H R0, A @R1, A DPH DPL ACC PSW PSW, #00011000B A, #78 R0, A @R1, A DPL DPH PSW ACC INICIO
4) Implemente programas em Assembly da famlia MCS51 para realizar as tarefas a seguir. Sugere-se que os programas implementados sejam simulados no ambiente Proview. a) Defina o banco de registros 1, carregue o registro R0 com o valor 32H e o registro R1 com o valor E5H. Depois efetue a troca dos contedos de R0 e R1 utilizando apenas instrues MOV. b) Refaa o programa anterior utilizando as instrues POP e PUSH para efetuar a troca dos contedos de R0 e R1. c) Carregue no acumulador o contedo do endereo 36H da memria de dados interna utilizando endereamento direto. Depois carregue o endereo 7FH da memria de dados interna com o valor armazenado no acumulador utilizando endereamento direto. d) Refaa o programa anterior utilizando endereamento indireto. e) Leia o contedo do endereo 0000H da memria de programa no acumulador e depois carregue os endereos 2000H e 3000H da memria de dados externa com o valor armazenado no acumulador.
29
Operaes Lgicas
Fazem parte do grupo de operaes lgicas as instrues CLR, CPL, ANL, ORL, XRL, RL, RLC, RR, RRC e SWAP. A instruo CLR zera o contedo do acumulador, possuindo uma nica sintaxe: CLR A CLR A Zera o contedo do acumulador.
A instruo CPL complementa o contedo do acumulador bit a bit, possuindo uma nica sintaxe: CPL A CPL A Complementa o contedo do acumulador bit a bit.
As instrues ANL, ORL e XRL realizam as operaes lgicas E, OU e OU-EXCLUSIVO, respectivamente, utilizando as seguintes sintaxes: ANL <operando1>, <operando2> ORL <operando1>, <operando2> XRL <operando1>, <operando2> O resultado da operao armazenado no <operando1>, que pode ser o acumulador ou uma posio da memria de dados interna endereada diretamente. O <operando2> pode utilizar todos os modos de endereamento (imediato, direto, indireto e registro). ANL A, #dado Efetua a operao lgica E entre o contedo do acumulador e a constante (dado) bit a bit. O resultado armazenado no acumulador. Exemplo: ANL A, #0FH ORL A, direto Efetua a operao lgica OU entre o contedo do acumulador e o endereo da memria de dados interna (direto) bit a bit. O resultado armazenado no acumulador. Exemplo: ORL A, 3FH XRL A, Rn Efetua a operao lgica OU-EXCLUSIVO entre o contedo do acumulador e o contedo do registro R0, R1, R2, R3, R4, R5, R6 ou R7 (Rn). O resultado armazenado no acumulador. Exemplo: XRL A, R1
30
As instrues RL e RLC deslocam o contedo do acumulador um bit esquerda, passando ou no pelo flag de carry. Possuem as seguintes sintaxes nicas: RL A RLC A RL A Desloca o contedo do acumulador 1 bit esquerda. O valor do bit 0 vai para o bit 1, o valor do bit 1 vai para o bit 2 e assim sucessivamente. O valor do bit 7 vai para o bit 0 e nenhum flag afetado. RLC A Desloca o contedo do acumulador 1 bit esquerda passando pelo flag de carry. O valor do bit 0 vai para o bit 1, o valor do bit 1 vai para o bit 2 e assim sucessivamente. valor do bit 7 vai para o flag de carry e o valor do flag de carry vai para o bit 0. As instrues RR e RRC deslocam o contedo do acumulador um bit esquerda, passando ou no pelo flag de carry. Possuem as seguintes sintaxes nicas: RR A RRC A RR A Desloca o contedo do acumulador 1 bit direita. O valor do bit 7 vai para o bit 6, o valor do bit 6 vai para o bit 5 e assim sucessivamente. O valor do bit 0 vai para o bit 7 e nenhum flag afetado. RRC A Desloca o contedo do acumulador 1 bit direita passando pelo flag de carry. O valor do bit 7 vai para o bit 6, o valor do bit 6 vai para o bit 5 e assim sucessivamente. valor do bit 0 vai para o flag de carry e o valor do flag de carry vai para o bit 7. A instruo SWAP troca o nibble mais significativo pelo nibble menos significativo do acumulador, possuindo a seguinte sintaxe nica: SWAP A SWAP A Troca o nibble mais significativo pelo nibble menos significativo do acumulador. Para se ter noo de todas as operaes lgicas existentes para a famlia MCS51 deve-se consultar a tabela de instrues completa que se encontra nos anexos.
31
Exerccios
1) Analise o programa em Assembly da famlia MCS51 dado a seguir e fornea a equao lgica do resultado final armazenado no acumulador em funo dos registros utilizados: LOGICA: MOV CPL ANL MOV MOV ANL CPL XRL ORL LJMP A, R0 A R1 B, A A, R2 A, R3 A R4 A, B LOGICA
2) Implemente um programa em Assembly da famlia MCS51 que realize a seguinte equao lgica: ACC= [(R0+R1).R3]R4\ 3) Apresente 2 formas de se zerar o contedo do acumulador utilizando instrues lgicas do Assembly da famlia MCS51. 4) Apresente 2 formas de se complementar o contedo do acumulador utilizando instrues lgicas do Assembly da famlia MCS51. 5) Implemente um programa em Assembly da famlia MCS51 que seja capaz de setar apenas o bit 7 e de zerar apenas o bit 0 do registro de funo especial B, sem alterar o estado dos seus demais bits. 6) Qual o significado aritmtico de uma rotao esquerda do acumulador? 7) Qual o significado aritmtico de uma rotao direita do acumulador?
Operaes Aritmticas
Fazem parte do grupo de operaes aritmticas as instrues ADD, ADDC, SUBB, INC, DEC, MUL, DIV e DA. A instruo ADD realiza a adio entre o contedo do acumulador e o contedo de um endereo da memria de dados interna (ou uma constante), utilizando a seguinte sintaxe: ADD A, <operando> O resultado da adio armazenado no acumulador, sendo possvel utilizar para o <operando> todos os modos de endereamento (imediato, direto, indireto e registro). O flag de carry afetado conforme o resultado da operao.
32
ADD A, Rn Adiciona o contedo do acumulador ao contedo do registro R0, R1, R2, R3, R4, R5, R6 ou R7 (Rn). O resultado armazenado no acumulador e o flag de carry afetado conforme o resultado da operao. Exemplo: ADD A, R2 A instruo ADDC realiza a adio entre o contedo do acumulador, o contedo de uma posio da memria de dados interna (ou uma constante) e o flag de carry, utilizando a seguinte sintaxe: ADDC A, <operando> O resultado da adio armazenado no acumulador, sendo possvel utilizar para o <operando> todos os modos de endereamento (imediato, direto, indireto e registro). O flag de carry afetado conforme o resultado da operao. Esta instruo permite que adies com mais de 8 bits possam ser implementadas graas ao aproveitamento do flag de carry da operao anterior. ADDC A, @Ri Adiciona o contedo do acumulador ao contedo do endereo da memria de dados interna apontado por R0 ou R1 (@Ri) e ao flag de carry. O resultado armazenado no acumulador e o flag de carry afetado conforme o resultado da operao. Exemplo: ADDC A, @R0 A instruo SUBB realiza a subtrao entre o contedo do acumulador, o contedo de uma posio da memria de dados interna (ou uma constante) e o flag de carry (borrow), utilizando a seguinte sintaxe: SUBB A, <operando> O resultado da subtrao armazenado no acumulador, sendo possvel utilizar para o <operando> todos os modos de endereamento (imediato, direto, indireto e registro). O flag de carry (borrow) afetado conforme o resultado da operao. Esta instruo permite que subtraes com mais de 8 bits possam ser implementadas graas ao aproveitamento do flag de carry (borrow) da operao anterior. SUBB A, @Ri Subtrai do contedo do acumulador o contedo do endereo da memria de dados interna apontado por R0 ou R1 (@Ri) e o flag de carry (borrow). O resultado armazenado no acumulador e o flag de carry (borrow) afetado conforme o resultado da operao. Exemplo: SUBB A, @R1
33
A instruo INC incrementa o operando de uma unidade, utilizando a seguinte sintaxe: INC <operando> possvel utilizar todos os modos de endereamento (imediato, direto, indireto e registro) e ainda o registro de 16 bits DPTR. INC DPTR Incrementa o valor do registro de 16 bits DPTR.
A instruo DEC decrementa o operando de uma unidade, utilizando a seguinte sintaxe: DEC <operando> possvel utilizar todos os modos de endereamento (imediato, direto, indireto e registro). DEC A Decrementa o valor do acumulador.
A instruo MUL realiza a multiplicao entre o acumulador e o registro de funo especial B, possuindo uma nica sintaxe: MUL AB MUL AB Multiplica o contedo do acumulador pelo contedo do registro de funo especial B, armazenando a parte mais significativa do resultado em B e a parte menos significativa no acumulador. A instruo DIV realiza a diviso entre o acumulador e o registro de funo especial B, possuindo uma nica sintaxe: DIV AB DIV AB Divide o contedo do acumulador pelo contedo do registro de funo especial B, armazenando o quociente no acumulador e o resto em B. Se B for nulo o resultado da operao ser indefinido. A instruo DA realiza o ajuste decimal do acumulador aps operaes de adio em BCD, possuindo uma nica sintaxe: DA A
34
DA A Realiza o ajuste decimal do acumulador. Deve ser utilizada apenas aps operaes de adio cujos operandos estejam codificados em BCD. O flag de carry afetado conforme o resultado do ajuste. Para se ter noo de todas as operaes aritmticas existentes para a famlia MCS51 deve-se consultar a tabela de instrues completa que se encontra nos anexos.
Exerccios
1) Execute os programas dados a seguir no simulador do ambiente Proview e tire concluses sobre o efeito de cada instruo executada. Para uma melhor noo do que ocorre, sugere-se que os programas sejam executados passo a passo, visualizando-se as janelas Main Registers e Data View. a) SOMA1: MOV MOV MOV MOV MOV MOV ADD MOV MOV ADDC MOV LJMP b) SOMA2: MOV MOV MOV MOV MOV MOV ADD DA MOV MOV ADDC DA MOV LJMP c) SUBT: MOV MOV MOV MOV PSW, #00H R0, #23H R1, #90H R2, #14H R3, #59H A, R1 A, R3 R5, A A, R0 A, R2 R4, A SOMA1 PSW, #00H R0, #23H R1, #90H R2, #14H R3, #59H A, R1 A, R3 A R5, A A, R0 A, R2 A R4, A SOMA2 PSW, #00H R0, #23H R1, #90H R2, #14H ;adicao de 16 bits: ; R0R1 ;+R2R3 ;----; R4R5
35
MOV MOV SUBB MOV MOV SUBB MOV LJMP d) MULT: MOV MOV MOV MOV MOV MOV MOV MUL MOV MOV MOV MOV MUL ADD MOV MOV ADDC MOV MOV MOV MUL ADD MOV MOV ADDC MOV MOV MOV MUL ADD MOV MOV ADDC MOV LJMP
R3, #59H A, R1 A, R3 R5, A A, R0 A, R2 R4, A SUBT PSW, #00H R0, #23H R1, #90H R2, #14H R3, #59H A, R1 B, R3 AB R7, A R6, B A, R1 B, R2 AB A, R6 R6, A A, B A, #00H R5, A A, R0 B, R3 AB A, R6 R6, A A, B A, R5 R5, A A, R0 B, R2 AB A, R5 R5, A A, B A, #00H R4, A MULT
; R4R5
;MSB em R5
;MSB em R4
36
A instruo SETB seta uma varivel booleana, possuindo a seguinte sintaxe: SETB <operando> O <operando> corresponde ao endereo individual do bit que deseja-se setar (da regio da memria interna de dados enderevel bit-a-bit ou de um registro de funo especial enderevel bit-a-bit). SETB bit Seta o valor da varivel booleana endereada (bit). Exemplo: SETB TR0
A instruo CPL complementa uma varivel booleana, possuindo a seguinte sintaxe: CPL <operando> O <operando> corresponde ao endereo individual do bit que deseja-se complementar (da regio da memria interna de dados enderevel bit-a-bit ou de um registro de funo especial enderevel bit-a-bit). CPL bit Complementa o valor da varivel booleana endereada (bit). Exemplo: CPL C
As instrues ANL, e ORL realizam as operaes lgicas E e OU com o flag de carry, respectivamente, utilizando as seguintes sintaxes: ANL C, <operando> ORL C, <operando>
37
O resultado da operao armazenado no flag de carry e o <operando> pode ser o endereo individual do bit (da regio da memria interna de dados enderevel bit-a-bit ou de um registro de funo especial enderevel bit-a-bit) ou seu complemento. ANL C, bit Efetua a operao lgica E entre o flag de carry e a varivel booleana endereada (bit). Exemplo: ANL C, 08H ORL C, /bit Efetua a operao lgica OU entre o flag de carry e o complemento da varivel booleana endereada (bit). Exemplo: ORL C, /EA A instruo MOV copia o estado de uma varivel booleana para o flag de carry ou vice-versa, utilizando as seguintes sintaxes: MOV C, <fonte> MOV <destino>, C Os operandos <fonte> e <destino> deve ser o endereo individual do bit (dever fazer parte da regio da memria interna de dados enderevel bit-a-bit ou de um registro de funo especial enderevel bit-a-bit). MOV C, bit Copia o estado da varivel booleana endereada (bit) para o flag de carry. Exemplo: MOV C, 90H Para se ter noo de todas as instrues de manipulao de variveis booleanas existentes para a famlia MCS51 deve-se consultar a tabela de instrues completa que se encontra nos anexos.
Exerccios
1) Apresente 2 formas de setar o estado do flag de carry utilizando instrues de manipulao de variveis boolenas e operaes lgicas do Assembly da famlia MCS51. 2) De que maneira voc acredita que o microcontrolador identifica se os operandos das instrues ANL, ORL e MOV so registros ou bits? (Sugesto: analise a tabela de instrues completa existente nos anexos.) 3) Supondo que as variveis booleanas X e Y foram atribudas aos bits de endereo 10H e 20H, implemente um programa em Assembly da famlia MCS51 que realize a seguinte equao lgica: C=XY.
38
Controle de Programa
Fazem parte do grupo de controle de programa as instrues LJMP, AJMP, SJMP, JMP, LCALL, ACALL, RET, RETI, JNZ, JZ, JNC, JC, JNB, JB, JBC, CJNE, DJNZ e NOP. Este grupo de instrues atua em endereos da memria de programa, causando desvios na seqncia natural de execuo do programa (registro de funo especial PC). As instrues LJMP, AJMP e SJMP so instrues de desvio incondicional e possuem as seguintes sintaxes: LJMP <endereo> AJMP <endereo> SJMP <endereo> JMP @A+DPTR O <endereo> da instruo LJMP um endereo de 16 bits da memria de programa. Atravs dessa instruo possvel realizar desvios para qualquer endereo dos 64Kb de memria de programa. LJMP end16 Efetua um desvio incondicional da execuo para o endereo (end16) da memria de programa. Exemplo: LJMP 2000H O <endereo> da instruo AJMP um endereo de 11 bits da memria de programa. Atravs dessa instruo possvel realizar desvios apenas para a mesma pgina de 2Kb da memria de programa onde encontrase a referida instruo. AJMP end11 Efetua um desvio incondicional da execuo na mesma pgina de 2Kb da memria de programa. O endereo de 16 bits do desvio obtido pela CPU completando os 11 bits (end11) com os 5 bits mais significativos do endereo contido no registro de funo especial PC. Exemplo: AJMP DESVIO O <endereo> da instruo SJMP um valor de 8 bits correspondente ao deslocamento relativo desejado em relao ao atual endereo de execuo (registro de funo especial PC). Atravs dessa instruo possvel realizar desvios relativos de 128 a +127 posies na memria de programa, pois o deslocamento dado em complemento de dois. SJMP rel Efetua um desvio incondicional relativo da execuo do programa. O endereo de 16 bits do desvio obtido pela CPU somando-se o valor relativo (rel) ao endereo contido no registro de funo especial PC. Exemplo: SJMP VOLTA
39
As instrues LCALL e ACALL so instrues de chamadas de subrotinas (funes) e possuem as seguintes sintaxes: LCALL <endereo> ACALL <endereo> O <endereo> da instruo LCALL um endereo de 16 bits da memria de programa. Atravs dessa instruo possvel realizar chamadas de subrotinas em qualquer endereo dos 64Kb de memria de programa. LCALL end16 Salva o contedo do registro de funo especial PC na pilha (o registro SP incrementado 2 vezes, pois trata-se de um registro de 16 bits). Em seguida efetua um desvio para o endereo da subrotina (end16). O valor salvo na pilha constitui o endereo de retorno a ser restaurado pela instruo RET ao final da subrotina. Exemplo: LCALL 3000H O <endereo> da instruo ACALL um endereo de 11 bits da memria de programa. Atravs dessa instruo possvel realizar chamadas de subrotinas apenas para a mesma pgina de 2Kb da memria de programa onde encontra-se a referida instruo. ACALL end11 Salva o contedo do registro de funo especial PC na pilha (o registro SP incrementado 2 vezes, pois trata-se de um registro de 16 bits). Em seguida efetua um desvio para o endereo da subrotina (end11) na mesma pgina de 2KB da memria de programa. O valor salvo na pilha constitui o endereo de retorno a ser restaurado pela instruo RET ao final da subrotina. Exemplo: ACALL TEMPO As instrues RET e RETI so instrues que realizam o retorno de chamadas de subrotinas e interrupes, respectivamente, possuindo as seguintes sintaxes: RET RETI As instrues de retorno recuperam o endereo original contido no registro de funo especial PC no momento da chamada da subrotina ou interrupo. RET Retorna de uma subrotina. O endereo de retorno recuperado da pilha e armazenado no registro de funo especial PC (o registro SP decrementado 2 vezes, pois trata-se de um registro de 16 bits). Exemplo: RET
40
RETI Retorna de uma subrotina. O endereo de retorno recuperado da pilha e armazenado no registro de funo especial PC (o registro SP decrementado 2 vezes, pois trata-se de um registro de 16 bits). A diferena em relao instruo RET que a instruo RETI habilita novamente interrupes de menor ou igual prioridade, anteriormente desabilitadas na ocorrncia da interrupo. Exemplo: RETI As instrues JNZ, JZ, JNC e JC so instrues de desvio condicional e possuem as seguintes sintaxes: JNZ JZ JNC JC <endereo> <endereo> <endereo> <endereo>
A condio de desvio dada pelo mnemnico da instruo utilizada: JNZ efetua um desvio se o contedo do acumulador for diferente de zero, JZ efetua um desvio se o contedo do acumulador for igual de zero, JNC efetua um desvio se o estado do flag de carry for igual a zero e JC efetua um desvio se o estado do flag de carry for igual a um. O <endereo> de todas essas instrues sempre um valor de 8 bits correspondente ao deslocamento do desvio relativo desejado em relao ao atual endereo de execuo (registro de funo especial PC). Atravs dessa instruo possvel realizar desvios relativos de 128 a +127 posies na memria de programa, pois o deslocamento dado em complemento de dois. JNZ rel Testa o contedo do acumulador e efetua um desvio relativo no programa se for diferente de zero. O endereo de 16 bits do desvio obtido pela CPU somando-se o valor relativo (rel) ao endereo contido no registro de funo especial PC, se o resultado do teste for verdadeiro. Exemplo: JNZ VOLTA JZ rel Testa o contedo do acumulador e efetua um desvio relativo no programa se for igual a zero. O endereo de 16 bits do desvio obtido pela CPU somando-se o valor relativo (rel) ao endereo contido no registro de funo especial PC, se o resultado do teste for verdadeiro. Exemplo: JZ ZERO JNC rel Testa o flag de carry e efetua um desvio relativo no programa se for igual a zero. O endereo de 16 bits do desvio obtido pela CPU somando-se o valor relativo (rel) ao endereo contido no registro de funo especial PC, se o resultado do teste for verdadeiro. Exemplo: JNC SEM
41
JC rel Testa o flag de carry e efetua um desvio relativo no programa se for igual a um. O endereo de 16 bits do desvio obtido pela CPU somando-se o valor relativo (rel) ao endereo contido no registro de funo especial PC, se o resultado do teste for verdadeiro. Exemplo: JC CARRY As instrues JNB, JB e JBC tambm so instrues de desvio condicional, porm utilizando variveis booleanas genricas para o teste da condio. Possuem as seguintes sintaxes: JNB <operando>, <endereo> JB <operando>, <endereo> JBC <operando>, <endereo> A condio de desvio dada pelo mnemnico da instruo utilizada: JNB efetua um desvio se o estado da varivel booleana for igual a zero, JB efetua um desvio se o estado da varivel booleana for igual a um e JBC efetua um desvio se o estado da varivel booleana for igual a um, posteriormente resetando-a. Em todas essas instrues o <operando> sempre o endereo individual de um bit (da regio da memria interna de dados enderevel bit-abit ou de um registro de funo especial enderevel bit-a-bit) e o <endereo> sempre um valor de 8 bits correspondente ao deslocamento do desvio relativo desejado em relao ao atual endereo de execuo (registro de funo especial PC). O deslocamento dado em complemento de dois. JNB bit, rel Testa a varivel booleana endereada (bit) e efetua um desvio relativo no programa se for igual a zero. O endereo de 16 bits do desvio obtido pela CPU somando-se o valor relativo (rel) ao endereo contido no registro de funo especial PC, se o resultado do teste for verdadeiro. Exemplo: JNB EA, INTERR JB bit, rel Testa a varivel booleana endereada (bit) e efetua um desvio relativo no programa se for igual a um. O endereo de 16 bits do desvio obtido pela CPU somando-se o valor relativo (rel) ao endereo contido no registro de funo especial PC, se o resultado do teste for verdadeiro. Exemplo: JB TF1, TIME JBC bit, rel Testa a varivel booleana endereada (bit) e efetua um desvio relativo no programa se for igual a um, posteriormente resetando-a. O endereo de 16 bits do desvio obtido pela CPU somando-se o valor relativo (rel) ao endereo contido no registro de funo especial PC, se o resultado do teste for verdadeiro. Exemplo: JBC 20H, SINAL
42
A instruo CJNE realiza uma comparao entre 2 operandos e, caso no sejam iguais, efetua um desvio na execuo do programa. Possui a seguinte sintaxe: CJNE <operando1>, <operando2>, <endereo> O <operando1> pode ser o acumulador, um registro do banco de registros em uso ou um ponteiro, o <operando2> pode ser um endereo da memria de dados interna ou uma constante e o <endereo> sempre um valor de 8 bits correspondente ao deslocamento do desvio relativo desejado, a ser efetuado no caso do <operando1> e do <operando2> serem diferentes. O deslocamento dado em complemento de dois. CJNE A, direto, rel Compara o contedo do acumulador com o contedo da posio de memria de dados interna (direto). Se os valores forem iguais, o programa prossegue normalmente para a prxima instruo. Caso contrrio, um desvio realizado pela CPU somando-se o valor relativo (rel) ao endereo contido no registro de funo especial PC. Exemplo: CJNE A, 1FH, TECLA A instruo DJNZ realiza uma decremento e, caso o resultado seja diferente de zero, efetua um desvio na execuo do programa. Possui a seguinte sintaxe: DJNZ <operando>, <endereo> O <operando> pode ser um registro do banco de registros em uso ou um endereo da memria de dados interna ou uma constante e o <endereo> sempre um valor de 8 bits correspondente ao deslocamento do desvio relativo desejado, a ser efetuado no caso do <operando1> ser diferente de zero. O deslocamento dado em complemento de dois. DJNZ Rn, rel Decrementa o contedo do registro R0 a R7 (Rn) do banco de registros em uso, ocorrendo um desvio no programa caso o resultado seja diferente de zero. Se o resultado aps o decremento for nulo o programa prossegue para a prxima instruo. Caso ocorra um desvio, o endereo de desvio calculado pela CPU somando-se o valor relativo (rel) ao endereo contido no registro de funo especial PC. Exemplo: DJNZ R0, LOOP A instruo NOP aguarda o tempo de um ciclo de mquina da CPU sem efetuar nenhuma operao. Possui a seguinte sintaxe: NOP
43
NOP Sem operao, apenas aguarda o tempo relativo a um ciclo de mquina. Exemplo: NOP
Para se ter noo de todas as instrues de manipulao de variveis booleanas existentes para a famlia MCS51 deve-se consultar a tabela de instrues completa que se encontra nos anexos.
Exerccios
1) Implemente uma subrotina que receba um valor no registro R0 como entrada e retorne esse valor elevado ao quadrado nos registros R1 e R2 (R1 dever conter o byte mais significativo e R2 o menos significativo). 2) Implemente uma subrotina que receba um valor no acumulador e retorne um valor no registro B, seguindo a correspondncia dada na tabela a seguir: A B 10H 98H 20H 76H 30H 54H 40H 23H
3) A instruo NOP bastante utilizada em laos de repetio para gerar temporizaes atravs de software, como mostrado na subrotina a seguir. Consultando a tabela de instrues completa para obter os tempos de execuo de cada instruo e supondo uma freqncia de clock de 6MHz, calcule o tempo gerado pela subrotina ATRASO. ;********************************************************** ; ATRASO gera um tempo de atraso por software ; ENTRADA: nada ; SAIDA: tempo de atraso ; DESTROI: R1 e R2 do banco de registros em uso ;********************************************************** ATRASO: MOV R1, #80H A1: MOV R2, #90H A2: NOP NOP DJNZ R2, A2 DJNZ R1, A1 RET 4) Como a instruo DA A somente pode ser usada para o ajuste decimal do acumulador aps operaes de adio, foi desenvolvida uma subrotina para o ajuste decimal do acumulador aps operaes de subtrao. Analise o funcionamento da subrotina DAASUB, cuja listagem mostrada a seguir e tire concluses sobre o seu funcionamento. ;********************************************************** ; DAASUB - ajuste decimal do acumulador apos subtracoes ; ENTRADA: A ; SAIDA: A ;**********************************************************
Microcontroladores MCS51 Hugo Vieira Neto, M.Sc Curitiba, 2002 44
DAASUB:
SEM0:
SEM1:
PUSH PSW PUSH A ANL A, #0FH CLR C SUBB A, #0AH JC SEM0 POP A CLR C SUBB A, #06H PUSH A CPL C POP A PUSH A ANL A, #F0H CLR C SUBB A, #A0H JC SEM1 POP A CLR C SUBB A, #60H PUSH A CPL C POP A POP PSW RET
5) A subrotina mostrada em seguida realiza a comparao de valores de 24 bits. As variveis de entrada so ponteiros para os bytes mais significativos dos valores a serem comparados. Analise o funcionamento da subrotina COMP3 e determine como o programador deve modific-la caso queira ampliar o nmero de bytes dos valores a serem comparados. ;********************************************************** ; COMP3 compara valores de 3 bytes apontados por R0 e R1 ; ENTRADA: R0 e R1 = ponteiros para MSB ; SADA: se Z = 1 -> R0=R1 ; se CY = 0 -> R0>R1 ; se CY = 1 -> R0<R1 ; DESTROI: A, C, R0, R1 e R2 do banco de registros em uso ;********************************************************** COMP3: MOV R2, #03H DENTRO: CLR C MOV A, @R0 SUBB A, @R1 JC FORA JNZ FORA INC R0 INC R1 DJNZ R2, DENTRO FORA: RET
45
Exerccios Prticos
Elabore os seguintes programas em Assembly da famlia MCS51, verificando o seu funcionamento utilizando o monitor PaulMon e a placa P51: 1) Preencha a faixa de 3000h a 3030h da memria de dados externa com a constante CDh. 2) Carregue 50 bytes a partir da posio 20h da memria de dados interna com valores crescentes de 05h a 20h. 3) Copie os contedos das posies 40h a 5Fh da memria de dados interna para as posies 4000h a 401Fh da memria de dados externa. 4) Conte o total de bytes iguais a 02h existentes nas primeiras 128 posies da memria de programa (PaulMon). Apresente o resultado em decimal atravs das subrotinas disponveis no PaulMon. 5) Conte o total de bytes mpares existentes nas primeiras 1024 posies da memria de programa (PaulMon). Apresente o resultado em hexadecimal atravs das subrotinas disponveis no PaulMon. 6) Encontre o byte de maior valor existente nas primeiras 256 posies da memria de programa (PaulMon). Apresente o resultado em hexadecimal atravs das subrotinas disponveis no PaulMon.
46
LINGUAGEM ASSEMBLY
A linguagem Assembly consiste a grosso modo numa seqncia de mnemnicos que sero posteriormente traduzidos pelo montador (assembler) para os cdigos das instrues do microcontrolador. O assembler possui algumas caractersticas interessantes em termos de facilidade no desenvolvimento de programas:
Pseudo-instrues
Trata-se de declaraes no programa semelhantes s instrues do microcontrolador, mas que no fazem parte do seu conjunto de instrues. Na verdade so diretivas de montagem do prprio montador. Algumas das pseudoinstrues mais importantes so: ORG end Define a origem (endereo) subrotina, tabela, etc. do programa,
DB
dado, [...]
Definies
So declaraes que atribuem nomes a constantes, permitindo referncias ao longo do programa. rtulo EQU valor Atribui o nome do rtulo constante especificada (valor).
Rtulos
So nomes atribudos aos endereos de rotinas de tratamento de interrupes, subrotinas, tabelas ou simplesmente locais de desvio do fluxo do programa utilizados em estruturas de programao (decises e repeties), facilitando referncias ao longo do programa.
Comentrios
Qualquer texto digitado aps ponto-e-vrgula (;) desprezado pelo assembler durante a montagem do programa. Dessa forma, pode-se fazer uso de comentrios teis para a documentao e melhor entendimento do programa.
47
RESET:
INICIO: REPETE:
FINAL:
020100
RESET:
INICIO: REPETE:
FINAL:
48
Exemplo
PUSH ACC PUSH PSW PUSH DPL PUSH DPH {...} POP DPH POP DPL POP PSW POP ACC
Subrotinas
Trata-se de um recurso de programao muito til quando uma seqncia de aes bastante utilizada dentro de um programa. Comportamse de modo semelhante ao das interrupes. A diferena que as subrotinas so solicitadas por software e no possuem endereos de desvio fixos.
Exemplo
INICIO: MOV CALL MOV CALL MOV CALL SJMP ANL ORL MOV RET R0, #11H ENVIA R0, #22H ENVIA R0, #33H ENVIA INICIO R0, #0FH R0, #30H SBUF, R0
ENVIA:
49
Decises
IF-ELSE (SE-SENO) So estruturas de programao que permitem desviar o fluxo de execuo de um programa conforme o estado (falso ou verdadeiro) de determinadas condies. Tais estados so reportados ao software atravs dos flags existentes no registro PSW do 8051. O flas mais importante existente no 8051 o C (carry).
Exemplo
CLR SUBB JZ JC MOV SJMP MOV SJMP MOV SJMP C A, R0 IGUAL MAIOR R1, #2 FIM R1, #1 FIM R1, #0 FIM
Repeties
FOR (DE-AT) WHILE (ENQUANTO) DO-WHILE (FAA-ENQUANTO) So estruturas de programao que permitem a repetio (loop) de um conjunto de aes enquanto determinada condio for verdadeira. Essas estruturas podem verificar a condio antes da execuo das aes ou depois de j terem executado pelo menos uma vez as aes dentro do loop.
Exemplo
REPETE: MOV A, #10H {...} DEC A JNZ REPETE
50
LINGUAGEM C
A programao do 8051 na linguagem C normalmente mais inteligvel ao programador pouco acostumado ao Assembly, por se tratar de uma linguagem estruturada de alto nvel. Entretanto o bom conhecimento e entendimento do Assembly do microcontrolador com que se est trabalhando permanece essencial quando se trata de encontrar erros de programao (bugs) e implementar rotinas de alta eficincia, seja em termos de velocidade ou de tamanho. O papel executado pelo compilador o de traduzir o programa em C para o Assembly, de modo que este possa ser montado em cdigo de mquina. A grande vantagem de uma linguagem de alto nvel que o programador poupado de algumas tarefas trabalhosas, como a alocao de memria para variveis, a passagem de parmetros para funes, entre outras. A linguagem C oferece ainda a possibilidade de utilizao de bibliotecas de funes e tambm a possibilidade de se portar programas com maior facilidade para outras famlias de microcontrolador.
51
Q\
Terminal
Escrita
CK
Q\
Leitura do Terminal
No caso de leitura, cada bit comporta-se como um buffer tri-state e no caso de escrita comporta-se como um flip-flop D. Quando um bit escrito no Port, este trafega pelo barramento de dados interno do microcontrolador at a entrada do flip-flop D e, aps um pulso na entrada de clock, levado sada do mesmo. O restante do circuito eletrnico encarrega-se de levar o nvel lgico adequado ao terminal externo. No caso de leitura do Port, algumas das instrues lem o estado dos terminais, enquanto outras lem o estado dos flip-flops internos. As instrues que lem o estado dos flip-flops so aquelas que alteram e escrevem novamente o valor dos bits (INC, DEC, CPL, JBC, DJNZ, ANL, ORL e XRL). As demais instrues lem o estado presente nos terminais externos.
52
Os Ports 1, 2 e 3 possuem resistores de pull-up internos e so chamados de "quase bidirecionais". Tal caracterstica faz com que possuam sempre estados lgicos definidos, de forma que, mesmo ao serem utilizados como entradas e em aberto, pode-se sempre medir seus nveis lgicos. O Port 0 no possui essa caracterstica e seus terminais quando em aberto ficaro flutuando. O Port 0 possui condies eltricas de alimentar duas cargas TTL e os Ports 1, 2 e 3 apenas uma carga TTL quando operam como sada. importante notar que, para que seja possvel determinado bit atuar como entrada, necessrio que o seu respectivo flip-flop esteja armazenando nvel lgico 1. Nessa situao o transistor de sada no estar conduzindo, permitindo que o circuito externo seja capaz de apresentar tanto nvel lgico 0 quanto nvel lgico 1 ao microcontrolador. Entretanto, se o flip-flop estiver armazenando nvel lgico 0, o transistor de sada estar conduzindo e forando nvel lgico 0 no respectivo terminal, impossibilitando dessa forma, o seu uso como entrada.
Acionamentos de LED
Uma das formas mais simples de sada em um sistema microcontrolado o acionamento de um LED. Essa aplicao pode ser til para indicadores visuais e para acionamentos de potncia atravs de opto-acopladores. Como os Ports dos microcontroladores da famlia MCS51 so capazes de fornecer uma corrente muito pequena, devido aos resistores de pull-up internos (com exceo do Port 0), para acender um LED pode-se fazer uso dos circuitos mostrados abaixo.
Os circuitos acima podem ser implementados graas aos transistores de sada dos Ports, que so capazes de conduzir uma corrente razovel, da ordem de 20 a 25 mA (o manual do componente dever ser consultado para informaes mais precisas). Caso a capacidade de conduo dos transistores de sada dos Ports do componente no seja suficiente, deve-se recorrer a transistores externos, como mostram os circuitos a seguir.
53
Acionamentos de Potncia DC
Para acionamentos de potncia DC recomendvel o uso de optoacopladores para isolamento do sistema microcontrolado. O principal objetivo evitar que um possvel defeito na parte de potncia acabe aplicando tenses e correntes elevadas na parte digital do circuito. A figura abaixo mostra uma possvel configurao de circuito para o acionamento de um motor DC atravs do bit P1.0 do 8031.
Acionamentos de Potncia AC
Para acionamentos de potncia AC torna-se imprescindvel o uso de opto-acopladores para proteo do sistema, pois as tenses e correntes envolvidas tendem a ser elevadas. A figura a seguir apresenta uma possvel configurao de circuito para o acionamento de uma lmpada AC atravs do bit P1.0 do 8031.
54
Outras Aplicaes
Pode-se utilizar os ports de entrada e sada do 8031 para a conexo com perifricos com interface serial. Existem diferentes padres de interface serial para perifricos, entre eles o padro I2C da Philips e o Microwire da National. Podemos citar como exemplo de aplicao o interfaceamento de um conversor A/D serial ADC0832 com o port P1 do 8031.
O software envolvido nesta aplicao necessita gerar sinais adequados para o funcionamento do perifrico, conforme informaes do manual do fabricante. O conversor ADC0832 possui resoluo de 8 bits, 2 canais de entrada e interface serial Microwire. O programa dever controlar 4 dos terminais do port P1 do 8031 para gerar os sinais CLK, CS e DI e para ler o sinal da converso DO, conforme o diagrama de tempo fornecido abaixo.
CLK
ADDRESS IN DATA OUT
CS
SGL/ DIF
DI
START BIT ODD/ SIGN MSB FIRST LSB FIRST
DO
TRI-STATE
7 6 (MSB)
0 1 (LSB)
7 (MSB)
55
SGL/DIF ODD/SIGN CANAL 0 0 CH0-CH1 (diferencial) 0 1 CH1-CH0 (diferencial) 1 0 CH0 (entrada simples) 1 1 CH1 (entrada simples) Abaixo seguem exemplos de subrotinas para a leitura dos canais do conversor ADC0832: ;********************************************************** ; Descrio dos terminais ;********************************************************** DO EQU 90H ;DO = P1.0 DI EQU 91H ;DI = P1.1 CK EQU 92H ;CK = P1.2 CS EQU 93H ;CS = P1.3 ;********************************************************** ; PULSE pulso de clock para o conversor A/D ADC0832 ;********************************************************** PULSE: SETB CK ;CLK em nivel alto NOP CLR CK ;CLK em nivel baixo RET ;********************************************************** ; CONVAD leitura do conversor A/D ADC0832 ; ENTRADA: A = endereco do mux ; SAIDA: A = valor da conversao ; DESTROI: B ;********************************************************** CONVAD: CLR CK CLR CS ;habilita o ADC0832 MOV B, #3 ;3 bits a enviar LOOPA: RLC A MOV DI, C ;envia bit para DI CALL PULSE ;pulso de clock DJNZ B, LOOPA CALL PULSE MOV B, #8 ;8 bits a receber LOOP2: MOV C, DO ;recebe bit de DO RLC A CALL PULSE ;pulso de clock DJNZ B, LOOP2 SETB CS ;desabilita o ADC0832 RET
56
Nas pginas a seguir so apresentados alguns diagramas esquemticos de outros sistemas de hardware conectados aos ports de entrada e sada do 8031. O primeiro diagrama esquemtico mostra a implementao de um conversor A/D discreto controlado por software. O circuito consiste em um conversor D/A do tipo R2R cujas entradas encontram-se conectadas aos bits do port P1 do 8031 e cuja sada encontra-se conectada entrada inversora de um comparador. O conversor R2R apresenta em sua sada uma tenso analgica proporcional ao valor digital presente no port P1, de maneira que esta pode ser comparada com a tenso analgica da entrada no-inversora. O sistema ento realimentado atravs do bit 3 do port 3, onde encontra-se conectada a sada do comparador. O programa a seguir realiza uma converso A/D por rampa escalonada decrescente: ;********************************************************** ; Descrio dos terminais ;********************************************************** CMP EQU 0B3H ;P3.3 = saida do comparador ;********************************************************** ; CAD realiza uma conversao A/D por rampa escalonada ; ENTRADA: tenso analgica ; SAIDA: A ; DESTROI: R0 ;********************************************************** RAMPA: MOV R0, #0FFH ;tensao maxima para comparacao REPETE: MOV P1, R0 ;atualiza a rede R2R NOP ;aguarda estabilizacao JNB CMP, FINAL ;verifica se igualou com entrada DJNZ R0, REPETE ;diminui a tensao e repete MOV A, R0 ;A contem o valor da conversao RET O outro diagrama esquemtico apresentado mostra a implementao de um teclado matricial conectado ao port P1 do 8031. Para o funcionamento desta configurao de teclado, o programa deve realizar uma varredura das colunas em nvel lgico 0, verificando nas linhas se existe alguma tecla acionada. Os diodos presentes no circuito asseguram que no exista interferncia caso teclas em diferentes colunas sejam acionadas ao mesmo tempo. A seguir apresentado um exemplo de subrotina de controle para este teclado matricial: ;********************************************************** ; ESQUEMA DE LIGACAO DO TECLADO ;********************************************************** ; P1.3 P1.2 P1.1 P1.0 ; 1 2 3 4 P1.4 ; 5 6 7 8 P1.5 ; 9 0 A B P1.6 ; C D E F P1.7 ;**********************************************************
Microcontroladores MCS51 Hugo Vieira Neto, M.Sc Curitiba, 2002 57
A
VCC
1
R1 7 4 k7
VIN 7 P3 .3 6 -
5 +
LM3 9 3 JA
R1 2 0 .0 k R3 2 0 .0 k R5 2 0 .0 k R7 2 0 .0 k R9 2 0 .0 k R1 1 2 0 .0 k R1 3 2 0 .0 k R1 5 2 0 .0 k 1 0 .0 k R1 6 2 0 .0 k GND
Tit le Size
R2 1 0 .0 k R4 1 0 .0 k R6 1 0 .0 k R8 1 0 .0 k R1 0 1 0 .0 k R1 2 1 0 .0 k R1 4
U1 :B
P1 .7
P1 .6
P1 .5
P1 .4
P1 .3
P1 .2
P1 .1
CONVERSOR A/ D ( R2 R)
P1 .0
Nu m b er
Rev
A4
03/ 2002 Da t e Filen a m e ADR2 R5 1 .S0 1
1 .0
Dr a wn b y Sh eet 1
HUGO of 1
P1 .0
P1 .1
P1 .2
P1 .3
S1 D1
C1 C2 C1 C2 C1 C2
S2 D2 1 N4 1 4 8 R1 2 1 N4 1 4 8 VCC 1 N4 1 4 8 3 D3 D4 1
S3
S4
C1
C2
0 1 N4 1 4 8
P1 .4
2
S6 D5
C1 C2 C1 C2 C1 C2
2
D8
S5 D6 1 N4 1 4 8 R2 6 1 N4 1 4 8 7 D7 5
S7
10k S8
C1
C2
4 1 N4 1 4 8
VCC 1 N4 1 4 8
P1 .5
S9 D9
C1 C2 C1 C2
S1 0 D1 0 1 N4 1 4 8 A 1 N4 1 4 8 D1 1
C1
S1 1
10k S1 2
C2
C1
C2
D1 2 B R3 VCC 1 N4 1 4 8
8 1 N4 1 4 8
P1 .6
S1 3 D1 3
C1 C2 C1
S1 4 D1 4 1 N4 1 4 8 E
C2
S1 5 D1 5 1 N4 1 4 8
C1
10k S1 6
C2
3
1 N4 1 4 8 D
C1
C2
D1 6 F R4 10k VCC 1 N4 1 4 8
P1 .7
4
Tit le Size Nu m b er
TECLADO MATRICIAL
4
Rev
A3
03/ 2002 Da t e Filen a m e TECMAT5 1 .S0 1
1 .0
Dr a wn b y Sh eet 1
HUGO of 1
;********************************************************** ; TECLA varre colunas e verifica linhas do teclado ; ENTRADA: nada ; SAIDA: A = codigo ASCII da tecla pressionada ; DESTROI: nada ;********************************************************** TECLA: COL0: MOV P1, #11110111B ;coluna 0 MOV A, P1 CJNE A, #11110111B, CL00 COL1: MOV P1, #11111011B ;coluna 1 MOV A, P1 CJNE A, #11111011B, CL10 COL2: MOV P1, #11111101B ;coluna 2 MOV A, P1 CJNE A, #11111101B, CL20 COL3: MOV P1, #11111110B ;coluna 3 MOV A, P1 CJNE A, #11111110B, CL30 RET CL00: CJNE MOV RET CJNE MOV RET CJNE MOV RET CJNE MOV RET CJNE MOV RET CJNE MOV RET CJNE MOV RET CJNE MOV RET A, #11100111B, CL01 ;coluna 0, linha 0 A, #'1' A, #11010111B, CL02 ;coluna 0, linha 1 A, #'5' A, #10110111B, CL03 ;coluna 0, linha 2 A, #'9' A, #01110111B, VT03 ;coluna 0, linha 3 A, #'C'
CL01:
CL02:
A, #11101011B, CL11 ;coluna 1, linha 0 A, #'2' A, #11011011B, CL12 ;coluna 1, linha 1 A, #'6' A, #10111011B, CL13 ;coluna 1, linha 2 A, #'0' A, #01111011B, VT13 ;coluna 1, linha 3 A, #'D'
CL11:
CL12:
58
CL21:
CL22:
CJNE MOV RET CJNE MOV RET CJNE MOV RET CJNE MOV RET CJNE MOV RET CJNE MOV RET CJNE MOV RET
A, #11011101B, CL22 ;coluna 2, linha 1 A, #'7' A, #10111101B, CL23 ;coluna 2, linha 2 A, #'A' A, #01111101B, VT23 ;coluna 2, linha 3 A, #'E'
A, #11101110B, CL31 ;coluna 3, linha 0 A, #'4' A, #11011110B, CL32 ;coluna 3, linha 1 A, #'8' A, #10111110B, CL33 ;coluna 3, linha 2 A, #'B' A, #01111110B, VT33 ;coluna 3, linha 3 A, #'F'
CL31:
CL32:
CL33: VT33:
Exerccios
1) Determinado sensor fornece dois sinais analgicos A e B, que variam de 0 a 5V. Deseja-se utilizar o conversor A/D ADC0832 para realizar a aquisio destes sinais por um microcontrolador 89C51, conforme o diagrama em blocos mostrado a seguir. Implemente um programa em Assembly MCS51 capaz de gerar e ler os sinais necessrios ao funcionamento adequado do conversor A/D, armazenando o valor da converso do canal CH0 no registro R0 e o valor da converso do canal CH1 no registro R1.
CLK A Amp. CH0 CS Conversor A/D ACD0832 B CH1 DO Microcontrolador 89C52
DI
Sensor
Amp.
2) Dado o diagrama esquemtico do conversor A/D (R2R) mostrado anteriormente, implemente um programa que realize uma converso A/D por aproximao sucessiva. 3) O programa de controle do teclado matricial apresentado trata apenas os casos em que apenas uma tecla pressionada a cada instante de tempo. Implemente um programa de controle que tenha uma tecla shift, que quando pressionada simultaneamente com outra das 15 teclas capaz de alterar o seu significado.
59
4) O sensor de temperatura LM74 da National Semiconductor um perifrico que possui interface serial para se comunicar com microcontroladores. Consulte o manual do LM74 e idealize um sistema de hardware e software para o 8031 capaz de ler valores de temperatura fornecidos por este sensor atravs do port P1. 5) Alguns mdulos LCD inteligentes oferecem a possibilidade de operar com um barramento de dados de 4 bits. Consulte o manual de mdulos LCD inteligentes (circuito integrado controlador HD44780) e idealize um sistema de hardware e software para o 8031 capaz de acionar este dispositivo atravs de um barramento de dados de 4 bits e demais sinais de controle necessrios, todos implementados no port P1.
60
INTERRUPES
Os sinais de interrupo possibilitam a parada da execuo do processamento em andamento para o atendimento imediato a eventos internos ou externos de maior prioridade. Para que uma interrupo seja atendida, a mesma dever estar devidamente habilitada pelo software e na possibilidade de ocorrncia de mais de uma interrupo simultaneamente, existe uma hierarquia de prioridade de atendimento. So cinco as fontes de interrupo do 8051, sendo duas externas e trs internas: Interrupo INT0\ (externa) Interrupo INT1\ (externa) Temporizador / contador de eventos T0 (interna) Temporizador / contador de eventos T1 (interna) Interface serial (interna) No Port 3 existem quatro terminais relacionados a interrupes: P3.0 recepo serial RXD P3.1 transmisso serial TXD P3.2 entrada da interrupo externa INT0\ P3.3 entrada da interrupo externa INT1\
Se forem usadas quaisquer das funes especiais do Port 3, o mesmo dever ser acessado apenas atravs dos seus bits individuais. No 8051 pode-se habilitar individualmente cada interrupo, cada qual com dois nveis de prioridade definidos por software. Existe um mecanismo interno de prioridade que define a seguinte ordem de atendimento, na remota possibilidade de ocorrncia simultnea: Interrupo externa 0 Temporizador / contador de eventos 0 Interrupo externa 1 Temporizador / contador de eventos 1 Interface serial (menor prioridade) (maior prioridade)
Quando uma interrupo atendida, o valor do registrador PC salvo na pilha, de forma a possibilitar o posterior retorno do programa ao ponto em que havia parado. Deve-se atentar para o fato de nenhum outro registro ser salvo na pilha, nem mesmo o acumulador ou o PSW. Fica por conta da rotina de atendimento da interrupo o salvamento dos registros que no podem ser perdidos.
61
Vetores de Interrupo
Interrupo Interrupo externa 0 Temporizador/contador de eventos 0 Interrupo externa 1 Temporizador/contador de eventos 1 Interface serial Vetor 0003H 000BH 0013H 001BH 0023H
62
EA Enable All Nvel lgico 0 - desabilita todas as interrupes, independentemente de qualquer outro bit de controle. Nvel lgico 1 - permite a habilitao particular de cada interrupo, se o estado do seu respectivo bit de controle individual for igual a 1. ES Enable Serial; ET1 Enable Timer 1; EX1 Enable External 1; ET0 Enable Timer 0; EX1 Enable External 0 Nvel lgico 0 - desabilitam as interrupes correspondentes, independente do estado do bit de controle EA. Nvel lgico 1 - habilitam as interrupes correspondentes, se o estado do bit de controle EA tambm for igual a 1. Registro IP Interrupt Priority: Esse registro tem a funo de alterar a prioridade de atendimento das interrupes do 8051.
bit 7 PS PT1 PX1 PT0 bit 0 PX0
PS Priority Serial; PT1 Priority Timer 1; PX1 Priority External 1; PT0 Priority Timer 0; PX1 Priority External 0 Nvel lgico 0 prioridade baixa para a interrupo correspondente. Nvel lgico 1 prioridade alta para a interrupo da interrupo correspondente. Registro TCON Timer Control: Os quatro bits menos significativos desse registro permitem a programao da maneira como as interrupes externas 1 e 0 sero reconhecidas (borda ou nvel lgico).
bit 7 IE1 IT1 IE0 bit 0 IT0
IE1, IE0 Sinalizam internamente as requisies das interrupes externas 1 e 0, respectivamente. So setados quando ocorrem as respectivas interrupes e so zerados por hardware assim que as mesmas so atendidas.
63
IT1 Interrupt Transition 1; IT0 Interrupt Transition 0 Indicam quais os processos de chamada das interrupes externas 1 e 0, respectivamente. Se em nvel lgico 1, as interrupes sero aceitas quando ocorrer uma borda de descida nos terminais INT1\ ou INT0\. Se em nvel lgico 0, as interrupes sero aceitas apenas pelo nvel lgico 0 presente nos terminais INT1\ ou INT0\. Quando sensveis a transio, os terminais de interrupo INT1\ e INT0\ so amostrados duas vezes, sendo o perodo entre as amostragens de 12 ciclos de clock. A requisio de interrupo ocorre quando for detectada uma mudana de nvel lgico 1 para nvel lgico 0 entre duas amostragens consecutivas. Quando sensveis a nvel lgico, a amostragem dos terminais de interrupo INT1\ e INT0\ ocorre ao final de cada instruo executada. Uma vez detectado nvel lgico 0, este poder permanecer durante a execuo da rotina de atendimento da interrupo, mas dever retornar a nvel lgico 1 ao final desta, caso contrrio o sistema atender novamente interrupo. Essa caracterstica permite artifcios para se conseguir a execuo de programas passo-a-passo. possvel a utilizao dos bits sinalizadores de interrupo sem que as mesmas estejam habilitadas. Para tanto basta a monitorao do estado desses bits pelo software. essa tcnica de monitorao sem a ocorrncia de interrupes d-se o nome de polling.
EXT1:
As rotinas de tratamento de interrupo so bastante similares s subrotinas. No entanto, no devemos nos esquecer que as rotinas de tratamento de interrupo devem ser terminadas com a instruo RETI e que
64
so chamadas por hardware, enquanto as subrotinas devem ser terminadas com a instruo RET e so chamadas por software.
Exerccios
1) Determinado sistema de controle baseado no 80C31 necessita de duas fontes de interrupo: a interrupo da interface serial e a interrupo externa 0. Elabore um trecho de programa em Assembly que habilite essas interrupes, determinando a interrupo da interface serial como mais prioritria. Programe tambm a interrupo externa 0 para sensibilidade a borda de descida. 2) Dado o seguinte trecho de programa em Assembly para um sistema microcontrolado baseado no 80C32, responda as questes abaixo: ORG PUSH SETB MOV MOV POP RETI ORG PUSH MOV MOV POP RETI ORG CLR MOV MOV MOV MOV MOV ADD JMP 0003H PSW RS0 A, #20H R0, #40H PSW
EXT0:
EXT1:
0013H ACC A, #20H R0, #10H ACC 0100H RS0 TCON, #00000101B IP, #00000100B IE, #10000001B R0, #50H A, #05H A, R0 FINAL
PROG:
FINAL:
a) Supondo que ocorre uma borda de descida no sinal aplicado ao terminal P3.2 (INT0) durante a execuo da instruo X, qual ser o valor contido no acumulador ao final do programa? b) Supondo que ocorre uma borda de descida no sinal aplicado ao terminal P3.2 (INT0) durante a execuo da instruo Y, qual ser o valor contido no acumulador ao final do programa? c) Supondo que ocorrem bordas de descida nos sinais aplicados aos terminais P3.2 (INT0) e P3.3 (INT1) simultaneamente durante a execuo da instruo Z, qual ser o valor contido no acumulador ao final do programa?
65
3) Dado o diagrama esquemtico do conversor A/D (R2R) mostrado anteriormente, implemente um programa que realize uma converso A/D por rampa escalonada decrescente, utilizando a interrupo externa 0 como critrio de parada.
66
TR1 Timer Release 1, TR0 Timer Release 0 Nvel lgico 0 desliga a contagem do T/C correspondente. Nvel lgico 1 dispara a contagem do T/C correspondente. TF1 Timer Flag 1, TF0 Timer Flag 0 Sempre que ocorrer um estouro da capacidade de contagem (overflow) de um T/C, o bit correspondente ser setado, requisitando um pedido de interrupo e sendo zerado novamente ao final da rotina de atendimento. Registro TMOD Timer Mode: Esse registro tem a funo de programar o comportamento dos T/C do 8051.
bit 7
GATE1
C/T0
M1.0
M0.0
GATE1; GATE0 Nvel lgico 0 a contagem do T/C ser habilitada se apenas o bit de controle correspondente (TR1 ou TR0) no registro TCON estiver em nvel lgico 1. Nvel lgico 1 a contagem do T/C ser habilitada se o bit de controle correspondente (TR1 ou TR0) no registro TCON estiver em nvel lgico 1 e o terminal de interrupo correspondente (INT1\ ou INT0\) tambm estiver em nvel lgico 1.
67
Esses bits de controle so teis para realizar a medio de largura de pulsos externos, colocando-se os sinais de interesse nos terminais de interrupo do 8051. Desse modo, a contagem ocorrer somente quando o nvel lgico do sinal externo for 1. C/T1 Counter / Timer 1; C/T0 Counter / Timer 0 Nvel lgico 0 o T/C correspondente funciona como temporizador (sinal de contagem interno freqncia de clock dividida por 12). Nvel lgico 1 o T/C correspondente funciona como contador (sinal de contagem externo terminal T1 ou T0 do Port3). M1.1/M0.1 Mode T/C1; M0.1/M0.0 Mode T/C0 Permitem a obteno de quatro modos de operao distintos para cada T/C.
Operao no Modo 0
OSC. 12 C/T0=0 C/T0=1 Controle TL0 (5 bits) TH0 (8 bits) TF0 Interrupo
Terminal T0
&
Modo 1 (M1.=0 e M0.=1): Temporizador / Contador de 16 bits. Nesse modo de funcionamento uma contagem de 16 bits realizada nos pares de registros TH1/TL1 ou TH0/TL0. De maneira anloga ao Modo 0, o valor inicial da contagem tambm pode ser programado por software e ao ocorrer estouro na contagem (passagem de FFFFH para 0000H) tambm ocorre um pedido de interrupo.
68
Nesse caso tambm cabe rotina de atendimento da interrupo fazer a recarga dos registros TH1/TL1 ou TH0/TL0 com os valores adequados para o reincio da contagem.
Operao no Modo 1
OSC. 12 C/T0=0 C/T0=1 Controle TH0 (8 bits) TL0 (8 bits) TF0 Interrupo
Terminal T0
&
Modo 2 (M1.=1 e M0.=0): Temporizador / Contador de 8 bits com recarga automtica. A contagem ocorre nos registros TL1 ou TL0, sendo os registros TH1 ou TH0 utilizados para armazenar os valores de recarga automtica de TL1 ou TL0 ao ocorrer estouro na contagem e a conseqente requisio de interrupo. Nessa forma de operao no h necessidade de rescrever o valor inicial da contagem como no Modo 0. O T/C1 quando programado no Modo 2 serve para gerar a taxa de transmisso e recepo da interface serial.
Operao no Modo 2
OSC. 12 C/T0=0 C/T0=1 Controle Recarga & 1 TL0 (8 bits) TH0 (8 bits) TF0 Interrupo
Terminal T0
Modo 3 (M1.=1 e M0.=1): Duplo Temporizador / Contador de 8 bits. Esse modo de funcionamento til somente para o T/C0. Se o T/C1 for programado nesse modo ficar inerte. No Modo 3 tem-se dois temporizadores / contadores independentes de 8 bits nos registros TH0 e TL0. O controle da contagem em TH0 feito pelos bits TR1 e TF1, enquanto que o controle da contagem em TL0 feito pelos bits TR0 e TF0 do registro TCON. Uma vez programado o T/C0 no Modo 3, pode-se programar o T/C1 em qualquer um dos outros modos, mas este no ir gerar pedidos de interrupo,
69
pois o bit TF1 estar sendo utilizado pelo contador em TH0. Entretanto, mesmo assim o T/C1 poder ser utilizado para a gerao da taxa de transmisso e recepo da interface serial do 8051.
Operao no Modo 3
OSC. 12 Controle TR1 C/T0=0 C/T0=1 Controle TL0 (8 bits) TF0 Interrupo TH0 (8 bits) TF1 Interrupo
Terminal T0
&
A seguir apresentado um programa completo em Assembly da famlia MCS51, capaz de gerar um sinal modulado em largura de pulso no bit 0 do port P1 do 8031. A subrotina SETPWM a responsvel pela determinao do ciclo
70
de trabalho do sinal gerado, que no caso do exemplo a seguir fixo em 25%, pois o registro R0 possui o valor 40H. ;********************************************************** ; Descricao dos terminais ;********************************************************** PWM EQU 090H ;P1.0 = sinal PWM CMP EQU 0B3H ;P3.3 = saida do comparador ;********************************************************** ; Declaracoes de constantes ;********************************************************** PRESC EQU 00001000B ;prescaler do temporizador 0 ;determina a frequencia do PWM ;********************************************************** ; Declaracoes de variaveis ;********************************************************** TALTO EQU 020H ;tempo alto do sinal PWM TBAIXO EQU 021H ;tempo baixo do sinal PWM STACK EQU 021H ;topo da pilha ;********************************************************** ; Vetores das interrupcoes ;********************************************************** ORG 0003H EX0: RETI ORG 000BH TC0: JMP LARG ;geracao do sinal PWM ORG 0013H EX1: RETI ORG 001BH TC1: RETI ORG 0023H SER: RETI ORG 002BH TC2: RETI ;********************************************************** ; Programa principal ;********************************************************** ORG 0100H INICIO: MOV SP, #STACK ;muda o topo da pilha SETB SETB CLR MOV MOV MOV CMP PWM TR0 TMOD, #11110000B TL0, #PRESC IE, #10000010B ;CMP = entrada ;desliga T/C0
71
MOV R0, #40H CALL SETPWM VOLTA: JMP VOLTA ;laco infinito
;********************************************************** ; Rotinas de tratamento de interrupcao ;********************************************************** ;********************************************************** ; LARG - geracao do sinal PWM ;********************************************************** LARG: JNB PWM, ALTO ;verifica estado do bit PWM MOV TH0, TALTO ;se alto carrega TALTO CLR PWM ;bit PWM = 0 RETI ALTO: MOV TH0, TBAIXO SETB PWM RETI ;se baixo carrega TBAIXO ;bit PWM = 1
;********************************************************** ; Subrotinas ;********************************************************** ;********************************************************** ; SETPWM - define a largura do sinal PWM ;********************************************************** SETPWM: CLR C MOV A, #0FFH SUBB A, R0 ;obtem TBAIXO de TALTO JNB WAIT0: WAIT1: SINC: JB JNB TR0, SINC PWM, WAIT0 PWM, WAIT1 ;verifica se T/C0 esta ligado
;aguarda borda de subida ;se R0 = maximo ... ;... desliga T/C0 e ... ;... mantem PWM = 1
CJNE R0, #0FFH, NMAX CLR TR0 SETB PWM RET CJNE R0, #00H, NMIN CLR TR0 CLR PWM RET MOV TALTO, R0 MOV TBAIXO, A SETB TR0 RET
NMAX:
;se R0 = minimo ... ;... desliga T/C0 e ... ;... mantem PWM = 0
NMIN:
72
;********************************************************** ; ATRASO - Gera atraso de tempo (R1) ; T = (R0 * (36 + R1 * 48)) / CLOCK ;********************************************************** ATRASO: MOV R2, #230 ;12 ciclos de maquina LOOP: NOP ;12 ciclos de maquina NOP ;12 ciclos de maquina DJNZ R2, LOOP ;24 ciclos de maquina DJNZ R1, ATRASO ;24 ciclos de maquina RET
;********************************************************** ; Declaracoes de constantes (CLOCK = 11.0592 MHz) ;********************************************************** NITC EQU 15 ;numero de ints para 1 seg ;NITC=INT(CLOCK/(12*65536))+1 TEMPO EQU 61440 ;tempo de 1/NITC segundos ;TEMPO = CLOCK/(12*NITC) VARRE EQU 1200H ;tempo de varredura dos disp
73
A
VCC
1
VCC BC3 2 8 VCC BC3 2 8 Q4
R9
P3 .2
2 k7
R1 0 Q3
P3 .3
2 k7 BC3 2 8
VCC
2
Q2
R1 1
P3 .4
2 k7
R1 2
BC3 2 8
P3 .5
2 k7
Q1
A B C D E F G P
R1 - R8
Tit le Size
P1 .0 P1 .1 P1 .2 P1 .3 P1 .4 P1 .5 P1 .6 P1 .7
1 2 3 4 5 6 7 8
16 15 14 13 12 11 10 9
Nu m b er
Rev
180R
A4
Da t e 03/ 2002 Filen a m e DISMUL5 1 .S0 1 Dr a wn b y Sh eet 1
1 .0 HUGO of 1
;********************************************************** ; Declaracoes de variaveis ;********************************************************** BUFF0 EQU 020H ;buffer do display 0 BUFF1 EQU 021H ;buffer do display 1 BUFF2 EQU 022H ;buffer do display 2 BUFF3 EQU 023H ;buffer do display 3 VARDS EQU 024H ;estado da varredura dos disp MIN EQU 025H ;contagem dos minutos SEG EQU 026H ;contagem dos segundos FRAC EQU 027H ;contagem das frac de segundo STACK EQU 028H ;topo da pilha ;********************************************************** ; Vetores das interrupcoes ;********************************************************** ORG 0003H EX0: RETI ORG 000BH TC0: JMP SCAND ;varredura dos displays ORG 0013H EX1: RETI ORG 001BH TC1: JMP COUNT ;contagem regressiva ORG 0023H SER: RETI ORG 002BH TC2: RETI ;********************************************************** ; Programa principal ;********************************************************** ORG 0100H INICIO: MOV SP, #STACK ;muda o topo da pilha MOV PSW, #00000000B ;banco de registros 0 MOV MOV MOV MOV VARDS, #11011101B MIN, #02H SEG, #30H FRAC, #NITC ;inicializa varredura ;inicializa minutos ;inicializa segundos ;inicializa frac de seg ;atualiza displays de min ;atualiza displays de seg
CALL DISPM CALL DISPS MOV MOV MOV MOV MOV MOV
TCON, #00000000B ;desliga temporizadores TMOD, #00010001B ;T/C0 e T/C1 no modo 1 TH0, #HIGH(65536-VARRE) TL0, #LOW (65536-VARRE) TH1, #HIGH(65536-TEMPO) TL1, #LOW (65536-TEMPO)
74
;********************************************************** ; Rotinas de tratamento de interrupcao ;********************************************************** ;********************************************************** ; Temporizador 0 - varredura dos displays multiplexados ;********************************************************** SCAND: PUSH ACC PUSH PSW MOV PSW, #00001000B ;banco de registros 1 MOV MOV RL MOV JB SETB MOV CLR MOV JMP PROX0: JB SETB MOV CLR MOV JMP JB SETB MOV CLR MOV JMP SETB MOV CLR MOV TH0, #HIGH(65536-VARRE) ;recarrega TH0 A, VARDS A VARDS, A ACC.2, PROX0 DS3 P1, #0FFH DS0 P1, BUFF0 FIMT0 ACC.3, PROX1 DS0 P1, #0FFH DS1 P1, BUFF1 FIMT0 ACC.4, PROX2 DS1 P1, #0FFH DS2 P1, BUFF2 FIMT0 DS2 P1, #0FFH DS3 P1, BUFF3
PROX1:
PROX2:
FIMT0:
75
;********************************************************** ; Temporizador 1 - contagem regressiva ;********************************************************** COUNT: PUSH ACC PUSH PSW MOV PSW, #00010000B ;banco de registros 2 MOV DEC MOV CJNE MOV MOV DEC CALL MOV CJNE MOV TH1, #HIGH(65536-TEMPO) ;recarrega TH1 FRAC A, FRAC A, #00H, FIMT1 FRAC, #NITC A, SEG A DAASUB SEG, A A, #99H, ATSEG SEG, #59H
;decrementa segundos ;faz o ajuste decimal ;se chegou a 99 ... ;... corrige para 59
MOV A, MIN CJNE A, #00H, MINUTO MOV CLR JMP MINUTO: SEG, #00H TR1 FIMT1
DEC A CALL DAASUB MOV MIN, A CALL DISPM CALL DISPS POP PSW POP ACC RETI
ATSEG: FIMT1:
;********************************************************** ; Subrotinas ;********************************************************** ;********************************************************** ; DAASUB - ajuste decimal do acumulador apos subtracoes ;********************************************************** DAASUB: PUSH PSW PUSH A ANL A, #0FH CLR C SUBB A, #0AH
76
SEM0:
SEM1:
JC SEM0 POP A CLR C SUBB A, #06H PUSH A CPL C POP A PUSH A ANL A, #F0H CLR C SUBB A, #A0H JC SEM1 POP A CLR C SUBB A, #60H PUSH A CPL C POP POP RET A PSW
;********************************************************** ; DISPM - atualiza os displays de minutos ;********************************************************** DISPM: MOV DPTR, #TAB7S ;aponta para a tabela MOV SWAP ANL MOVC MOV MOV ANL MOVC ANL MOV RET ;********************************************************** ; DISPS - atualiza os displays de segundos ;********************************************************** DISPS: MOV DPTR, #TAB7S ;aponta para a tabela MOV SWAP ANL MOVC MOV A, SEG A A, #0FH A, @A+DPTR BUFF2, A ;recupera segundos A, MIN A A, #0FH A, @A+DPTR BUFF0, A A, MIN A, #0FH A, @A+DPTR A, #01111111B BUFF1, A ;recupera minutos
;atualiza dezenas
77
;recupera segundos
;atualiza unidades
;********************************************************** ; Tabela de decodificao para os displays de 7 segmentos ;********************************************************** ; 0 1 2 3 4 5 6 7 8 9 ; P1.0 = segmento b 0 0 0 0 0 1 1 0 0 0 ; P1.1 = segmento a 0 1 0 0 1 0 0 0 0 0 ; P1.2 = segmento f 0 1 1 1 0 0 0 1 0 0 ; P1.3 = segmento g 1 1 0 0 0 0 0 1 0 0 ; P1.4 = segmento e 0 1 0 1 1 1 0 1 0 1 ; P1.5 = segmento d 0 1 0 0 1 0 0 1 0 0 ; P1.6 = segmento c 0 0 1 0 0 0 0 0 0 0 ; P1.7 = ponto decimal 1 1 1 1 1 1 1 1 1 1 ;********************************************************** ; pcdegfab TAB7S: DB 10001000B ;algarismo 0 DB 10111110B ;algarismo 1 DB 11000100B ;algarismo 2 DB 10010100B ;algarismo 3 DB 10110010B ;algarismo 4 DB 10010001B ;algarismo 5 DB 10000001B ;algarismo 6 DB 10111100B ;algarismo 7 DB 10000000B ;algarismo 8 DB 10010000B ;algarismo 9
Exerccios
1) Seguindo a idia de converso A/D por filtragem de sinal PWM apresentada anteriormente, implemente um programa em Assembly da famlia MCS51 que utilize a subrotina SETPWM para realizar uma converso A/D por rampa escalonada decrescente. 2) Implemente um programa em Assembly da famlia MCS51 que simule um freqencmetro. Isto dever ser feito atravs da contagem de pulsos que o sinal digital de entrada possui em um intervalo de um segundo. Utilize os temporizadores internos do 8031 para temporizao e contagem e utilize um dos bits do port P1 como entrada do sinal digital cuja freqncia desejase medir. 3) A subrotina dada a seguir gera um tempo de atraso fazendo uso do T/C0 de um 8031. Supondo que a freqncia de clock do microcontrolador de 12MHz, calcule o tempo de atraso gerado.
78
;********************************************************* ; ATRASO gera um tempo de atraso por hardware ; ENTRADA: nada ; SAIDA: tempo de atraso ; DESTROI: nada ;********************************************************** ATRASO: MOV TCON, #00000000B MOV TMOD, #00000001B ;T/C0 no modo 1 MOV TH0, #HIGH(1000H);MSB da constante de tempo MOV TL0, #LOW (1000H);LSB da constante de tempo SETB TR0 ;dispara contagem do T/C0 ESPERA: JNB TF0, ESPERA ;aguarda estouro CLR TF0 ;para contagem do T/C0 CLR TR0 ;reseta estouro RET 4) Suponha que determinada aplicao empregando o microcontrolador 89C51 exija interrupes peridicas para realizar a varredura de displays de 7 segmentos. Escreva um trecho de programa em Assembly que apenas programe o temporizador 0 no modo 2, de maneira que sejam geradas interrupes a cada 1ms. Esse trecho de programa deve prever tambm a habilitao da interrupo correspondente e o disparo da contagem do temporizador. A freqncia de clock do microcontrolador de 6MHz.
79
INTERFACE SERIAL
No 8051 pode-se programar a interface serial para operar em modo sncrono half-duplex ou no modo assncrono full-duplex.
Clock
A escrita no registro SBUF provoca a transmisso automtica do dado escrito atravs do terminal de transmisso serial (TXD). Por outro lado, dados recebidos atravs do terminal de recepo serial (RXD) so armazenados no registro SBUF, podendo posteriormente serem lidos pelo software. Na realidade existem dois registros com o mesmo nome SBUF, sendo um para a transmisso e outro para a recepo. A diferenciao entre eles feita pelo sistema atravs das instrues de escrita e leitura (transmisso e recepo, respectivamente) do registro.
SM0/SM1 Serial Mode Esses bits de controle permitem a obteno de quatro modos de funcionamento distintos para a interface serial. SM0 0 0 1 1 SM1 0 1 0 1 Modo 0 1 2 3 Taxa de Transmisso e Recepo Freqncia de clock dividida por 12 Programvel Freqncia de clock dividida por 32 ou 64 Programvel
80
SM2 Serial Mode Possui diferentes funes em cada modo de funcionamento: Modo 0: no altera em nada o funcionamento, devendo permanecer no nvel lgico 0. Modo 1: quando em nvel lgico 1 desabilita o pedido de interrupo se for recebido um stop bit invlido. Modos 2 e 3: quando em nvel lgico 1 habilita a comunicao serial entre vrios microcontroladores e desabilita o pedido de interrupo se for recebido um nono bit de dado igual a 0.
REN Reception Enable Nvel lgico 0 desabilita a recepo serial. Nvel lgico 1 habilita a recepo serial. TB8 Transmit Bit 8 Nos Modos 2 e 3 indica o estado do nono bit a ser transmitido, programado por software. RB8 Receive Bit 8 No utilizado no Modo 0 e no Modo 1 indica o estado do stop bit recebido, se o bit SM2 estiver em nvel lgico 0. Nos Modos 2 e 3 indica o estado do nono bit recebido. TI Transmit interrupt o bit de requisio de interrupo da transmisso de dados, sendo setado por hardware aps a transmisso do oitavo bit de dados quando no Modo 0 ou ao incio do stop bit nos Modos 1,2 e 3. Deve ser zerado por software durante a execuo da rotina de atendimento para permitir novas interrupes. RI Receive Interrupt o bit de requisio de interrupo da recepo de dados, sendo setado por hardware aps a recepo do oitavo bit de dados quando no Modo 0 ou a meio tempo da recepo do stop bit nos Modos 1,2 e 3. Deve ser zerado por software durante a execuo da rotina de atendimento para permitir novas interrupes.
81
Modo 1 (SM0=0, SM1=1) Nesse modo de operao e nos dois modos seguintes ocorre comunicao de dados assncrona full-duplex com taxa de transmisso e recepo programvel. A recepo dos dados feita pelo terminal RXD e a transmisso pelo terminal TXD. No Modo 1 cada pacote de dados transmitido ou recebido possui 10 bits, sendo um start bit seguido de 8 bits de dados e um stop bit. Na recepo o stop bit vai para o bit RB8 do registro SCON. Modo 2 (SM0=1, SM1=0) No Modo 2 cada pacote de dados transmitido ou recebido possui 11 bits, sendo um start bit seguido de 8 bits de dados, um nono bit e um stop bit. Na transmisso o nono bit a ser transmitido dever estar no bit TB8 do registro SCON. Na recepo o nono bit vai para o bit RB8. A taxa de transmisso e recepo pode ser programada para 1/32 ou 1/64 da freqncia de clock do microcontrolador. Modo 3 (SM0=1, SM1=1) O Modo 3 possui funcionamento idntico ao do Modo 2, exceto pela taxa de transmisso que programvel.
O clculo da taxa de transmisso e recepo da interface serial com o T/C1 no Modo 2 pode ser feito pela seguinte frmula:
82
O diagrama esquemtico a seguir mostra como possvel implementar uma interface serial assncrona padro RS-232, utilizando o circuito integrado MAX232 (conversor de nvel TTL/RS232).
Exerccios
1) Deseja-se programar a interface serial de um microcontrolador 80C31 com clock de 7,3728MHz para operar com comunicao serial assncrona a 4800 bps. Escreva um programa em Assembly que inicialize a interface serial e o temporizador responsvel pela taxa de transmisso e recepo de modo a satisfazer esses requisitos. Uma vez programados os registros especiais necessrios, envie o valor B2H pela interface serial. 2) Examine o cdigo-fonte do monitor Paulmon no que diz respeito forma de implementao das subrotinas CIN, COUT, PHEX, GHEX e PSTRING. Tire suas concluses a respeito da forma de utilizao do registro de funo especial SBUF e dos flags TI e RI.
83
SMOD Serial Mode Nos Modos 1,2 e 3 da interface serial a taxa de transmisso e recepo dobrada quando esse bit est em nvel lgico 1. GF1 General Flag 1; GF0 General Flag 0 So bits sinalizadores de uso geral do software. PD Power Down; IDL Idle Quando em nvel lgico alto ativam respectivamente o modo "power down" e o modo "idle". O modo "power down" prioritrio sobre o modo "idle".
84
85
BIBLIOGRAFIA
BARBACENA, I. L., FLEURY, C. A., Kit Didtico para Estudo dos Microcontroladores 8051, Revista Saber Eletrnica: dezembro/1997, janeiro/1998, fevereiro/1998, maro/1998 e abril/1998. HALL, D. V., Microprocessors and Interfacing, McGraw-Hill,1986. INTEL, Embedded Controller Handbook. MARQUES, L. C., WISINTAINER, M. A., MATIAS JR., R., MAIA, L. F. J., ALVES, J. B. M., Microcontrolador 8051: Laboratrio de Experimentao Remota via Internet, Revista Saber Eletrnica: no 306 julho/1998. NICOLOSI, D. E. C., Laboratrio de Microcontroladores Famlia 8051: Treino de Instrues, Hardware e Software, 1 ed., So Paulo: rica, 2002. NICOLOSI, D. E. C., Microcontrolador 8051 Detalhado, 2. ed., So Paulo: rica: 2001. SILVA JNIOR., V. P., Aplicaes Prticas do Microcontrolador 8051, 5 ed. So Paulo: rica, 1994. SOUZA, D. J., Desbravando o PIC: Baseado no Microcontrolador PIC16F84, So Paulo: rica, 2000. __________, Debugging the 8031 Series, Elektor Electronics Magazine: november 1994. __________, Microcontroller Survey: News from the World of Bit Crunchers, Elektor Electronics Magazine: february, 1999.
86
87