






















Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Descricao de hardware e software do microcontrolador 8051.
Tipologia: Notas de estudo
1 / 30
Esta página não é visível na pré-visualização
Não perca as partes importantes!























Um microcontrolador é um componente que tem, num único chip, além de uma CPU, elementos tais como memórias ROM e RAM, temporizadores, contadores, canais de comunicação e conversores analógico-digitais. Esta característica diferencia os sistemas baseados em microcontroladores daqueles baseados em microprocessadores, onde normalmente se utilizam vários componentes para implementar essas funções. Com isso, os microcontroladores permitem a implementação de sistemas mais compactos e baratos do que aqueles baseados em microprocessadores.
Em contrapartida, as CPUs dos microcontroladores são, em geral, menos poderosas do que os microprocessadores. Seu conjunto de instruções costuma se limitar às instruções mais simples encontradas nestes, sua freqüência de clock é mais baixa e o espaço de memória endereçável costuma ser bem menor. Vê-se daí que o campo de aplicação dos microcontroladores é diferente daquele dos microprocessadores, e que um sistema que possa ser controlado por um microcontrolador tende a ter menor complexidade e menor custo do que um sistema que exija a capacidade de processamento de um microprocessador.
Exemplos de sistemas onde os microcontroladores encontram aplicação incluem controle de semáforos, balanças eletrônicas, microterminais, telefones públicos, controle de veiculação de comerciais de TV, controle de carregadores de baterias, inversores, controles de acesso, taxímetros, sistemas de aquisição de dados de manufatura e eletrodomésticos em geral.
A programação dos microcontroladores é, em geral, mais simples do que a dos microprocessadores, ao menos no que diz respeito às exigências de conhecimento dos componentes periféricos. Isto acontece porque os periféricos on-chip dos microcontroladores são acessados de uma forma padronizada e integrada na própria linguagem de programação, dispensando o conhecimento de detalhes externos. Não se deve pensar, porém, que isto simplifique a tarefa do programador em todos os níveis: é necessário que ele conheça bem o hardware conectado ao microcontrolador para poder produzir programas que funcionem corretamente.
Cabe citar ainda uma vantagem particular dos microcontroladores que possuem memória ROM, que é a possibilidade de armazenar programas internamente, dificultando sensivelmente a cópia ilícita do código.
Diversos fabricantes produzem microcontroladores da família 8051 (Intel, AMD, Atmel, Dallas, OKI, Matra, Philips, Siemens, SMC, SSI). A Intel iniciou a produção do 8051 em 1981. Em 1982 foram produzidos 2 milhões de unidades, em 1985 foram 18 milhões e em 1993, 126 milhões. A tendência atual é uma participação crescente dos microprocessadores de 8 bits e uma diminuição da fatia de mercado dos microcontroladores de 4 bits.
Além do 8051 propriamente dito, existem variantes como o 8031 (sem memória ROM interna e com apenas 128 bytes de memória RAM), o 8751 (4 kB de memória EPROM) e o 8052 (8 kB de memória ROM, um terceiro timer e 256 bytes de memória RAM). A menos dessas diferenças, os modelos
citados são idênticos, e o texto utilizará o termo “8051” de forma genérica, citando as outras versões apenas onde for necessário. Informações complementares podem ser obtidas em [Inte89], [Siem90] e [Silv94].
As características citadas são básicas e formam o núcleo da família 8051, que pode ser acrescido de uma ou mais das características, conforme a figura 1.2.
80C NÚCLEO EEPROM DERIVATIVES
MEMÓRIA 1k - 32k
EPROM & OTP
CLOCK I²C & CAN
FUNÇÕES
de até 40 MHz SERIAL BUS
ESPECIAIS
I/O ESTENDIDAS
ENCAPSULAMENTO MINIMIZADO
CONVERSOR AD (^) LOW VOLTAGELOW POWER
Fig. 1.2 - Características especiais da família 8051
A título de exemplo, a tabela 1.2 apresenta as características de alguns componentes da família 8051 com a indicação de seus fabricantes. O número total de variantes é muito maior. A Philips, por exemplo, produz mais de 40 tipos diferentes.
Tipo Pinos Fabr. RAM CODE Notes (LV - low voltage) MCS251 40 Intel 1K 16K 16 Bit 80x51FX! Preliminar 80C517A 84 Siemens 256 64Kx ALU;8PWM;CC;2UART;10bA/D 80C537A 84 Siemens 256 32K ALU;8PWM;CC;2UART;10bA/D 80537 84 Siemens 256 64Kx ALU;8PWM;CC;2UART;8bA/D 80517 84 Siemens 256 8K ALU;8PWM;CC;2UART;8bA/D 80C535A 68 Siemens 256 64Kx 515+10bA/D;1K XRAM;BRG;OWD 80C515A 68 Siemens 256 32K 515+10bA/D;1K XRAM;BRG;OWD 80535 68 Siemens 256 64Kx Timer2CaptComp 6ports 8/10bA/D 80515 68 Siemens 256 8K Timer2 CaptComp 4 ports 8b A/D 80C535 68 Siemens 256 64Kx Timer2 CaptComp 5 ports 8b A/D 80C51GB 68 Intel 256 64Kx 8051FA+PCA; 8b A/D; SPI 87C51GB 68 Intel 256 8K 8051FA+PCA; 8b A/D; SPI 80C592 68 Philips 256 64Kx 552-I2C+CAN+XRAM 87C592 68 Philips 256 16K 552-I2C+CAN+XRAM 87C598 80 Philips 256 32K 552-I2C+CAN+XRAM 80C552 68 Philips 256 64Kx 10b A/D; I2C; CaptComp; PWM
O registrador A é o acumulador que, como no 8085, é responsável pelas principais operações, sobretudo as lógicas e aritméticas. B é um registrador de caráter geral, assim como os oito registradores R0 a R7. DH e DL também são de uso geral, mas podem ser utilizados como um registrador de 16 bits, que se denomina DPTR. Este registrador é o único que pode conter valores de 16 bits e por isso é freqüentemente utilizado no endereçamento da memória externa, que é sempre indireto. PC contém o endereço da próxima instrução executável e SP aponta para o topo da pilha.
15 0 7 0 PC SP 15 8 7 0 A DH DL DPTR B 7 0 7 0 7 0 7 0 R0 R1 R2 R R4 R5 R6 R
7 6 5 4 3 2 1 0 CY AC F0 RS1 RS0 OV F1 P PSW Fig. 1.6 - Modelo de programação simplificado para o 8051
O 8051 conta com quatro flags de sistema (carry, auxiliary carry, overflow e parity) e dois flags de usuário (F0 e F1), que o programador pode utilizar como desejar. Os flags estão todos reunidos no registrador PSW (program status word), que contém ainda os bits de seleção de banco de registradores, RS0 e RS1. Estes últimos são descritos na seção 1.12.6, que também apresenta mais detalhes sobre os registradores R0 a R7.
Os registradores de controle dos periféricos on-chip, que não aparecem no modelo acima, serão detalhados nas seções subseqüentes.
1.5 Organização da memória de programa
A memória de programa do 8051 pode ocupar até 64 kB. Aqui há duas opções: se a memória ROM interna do controlador for utilizada, então esta será mapeada nos primeiros 4 kB deste espaço de endereçamento (endereços 0000H a 0FFFH), e os demais 60 kB (1000H a FFFFH) serão externos. Caso não se deseje utilizar a ROM interna, então toda a memória será externa.
A escolha, conforme mencionado na seção 1.6, é feita por hardware, de acordo com o nível de tensão aplicado ao pino EA. Nível lógico zero seleciona memória de programa externa para todos os endereços; com nível 1, as instruções são lidas da memória interna se seu endereço for menor do que 1000H (primeiros 4 kB).
1.6 Organização da memória de dados
A memória interna é dividida em três blocos fisicamente distintos, conforme ilustra a figura 1.8. Há dois blocos de RAM, de 128 bytes cada, mapeados nos endereços 00H-7FH e 80H-FFH, e mais cerca de 20 registradores de funções especiais, espalhados em endereços da faixa 80H-FFH. A distinção entre os dois blocos cujos endereços coincidem é feita pelos modos de endereçamento, também indicados na figura.
Bloco superior de 128 bytes
FFH Registradores de funções especiais
MOV com endereçamento indireto
80H MOV com endereçamento direto
Bloco inferior de 128 bytes
MOV com endereçamento direto ou indireto
Fig. 1.8 - Organização da memória de dados interna do 8051
A memória de dados externa pode ocupar até 64 kB. Portanto, há coincidências de endereços com toda a faixa de memória de programa e com os endereços 00H a FFH da memória de dados interna. Estes conflitos são resolvidos por dois mecanismos distintos:
Os primeiros 48 bytes da RAM interna (00H a 2FH) apresentam ainda algumas particularidades, conforme mostra a figura 1.10. Os endereços 00H a 1FH compreendem quatro bancos de oito registradores cada. Em cada banco, os registradores são denominados R0, R1, ... R7 (os nomes são repetidos). Estes podem ser endereçados por seus nomes nas instruções (como em MOV A,R0), ou então diretamente através dos seus endereços (MOV A,00H). No primeiro caso, o processador precisa decidir ainda a qual banco a instrução se refere, por causa da repetição dos nomes. Esta seleção de banco é feita configurando os bits RS1 e RS0 do registrador PSW de acordo com a tabela 1.4.
1.7 Modos de endereçamento
O conjunto de instruções oferece diversos modos de endereçamento, projetados de modo a agilizar o acesso à RAM interna e também para facilitar as operações de manipulação de bits e bytes.
O valor do operando faz parte do corpo da instrução e segue o opcode na memória de programa. O operando deve ser precedido do símbolo ‘#’, a fim de evitar a confusão com o modo direto. Exemplo: MOV B,#255 - faz o registrador B igual a FFH.
Neste modo, a instrução especifica o endereço do operando, que deve ser um número de 8 bits. Conforme a seção 1.12, somente dados dos primeiros 128 bytes da memória RAM interna e dos registradores de funções especiais são endereçados deste modo. Exemplo: MOV A,25H - traz para o acumulador o conteúdo do byte 25H da RAM interna.
As instruções que manipulam bits individuais especificam este bit de forma direta, quer sob a forma de um número (os endereços dos bits individualmente endereçáveis da figura 1.10), quer sob a forma de uma abreviatura, como no caso das portas de E/S ou de outros bits dos registradores de funções especiais. Exemplos: SETB 0FH - seta o bit mais significativo do byte 21H da memória interna; CLR P1.0 - zera o bit menos significativo da porta 1.
A instrução especifica um registrador, cujo conteúdo é o endereço do operando. Este modo pode ser utilizado para endereçar tanto a memória interna quanto a memória externa. Se o endereço do operando for de 8 bits, os registradores que podem ser especificados no corpo da instruções são R0, R1 ou SP. Caso o endereço seja de 16 bits, o registrador a ser utilizado tem que ser DPTR. Exemplos: MOV @R1,#15H - coloca o valor 15H no byte endereçado por R1; MOV @DPTR,A - copia o valor do acumulador para o byte endereçado por DPTR.
Este modo serve apenas para endereçar a memória de programa (instrução MOVC). Nesse tipo de acesso, o endereço do operando é dado pela soma do conteúdo de um registrador de base, que pode ser DPTR ou PC, com o conteúdo do acumulador. Dessa forma, DPTR ou PC apontam para a base de uma tabela enquanto o acumulador seleciona um elemento dentro da tabela. Exemplos: MOVC A,@A+DPTR - o acumulador indica o offset de um byte dentro da tabela que inicia em DPTR e que deve ser copiado para o acumulador; MOVC B,@A+PC - o registrador B recebe uma cópia do valor do byte que está A posições à frente do PC.
Os opcodes das instruções de acesso aos registradores R0 a R7 utilizam três dos seus oito bits para especificar o registrador endereçado. Desta forma, este modo consegue instruções mais curtas do que o modo direto, por dispensar byte com o endereço. O banco de registradores referenciado é aquele que está selecionado pelos bits RS1 e RS0 no instante em que a instrução é executada. Exemplo: MOV A,R3 - copia R3 para A.
Algumas instruções trabalham sempre com um certo registradores, e portanto nenhum byte é necessário para endereçar o operando. Exemplo: a instrução DA A atua sempre sobre o acumulador, e por isso não se pode especificar um registrador diferente de A.
1.8 Funcionamento da pilha
É importante notar que SP é um registrador de 8 bits, e que por isso o tamanho da pilha do 8051 é bem menor do que o das pilhas normalmente usadas com outros microprocessadores. Além disso, SP endereça somente a RAM interna.
O funcionamento da pilha também é diferente, pois aqui o armazenamento se faz no sentido dos endereços crescentes e os bytes são empilhados um a um, de acordo com as seguintes regras:
Desta forma, o registrador SP aponta sempre para o topo da pilha.
O valor de SP após um reset é 07H, de modo que a pilha começa, por default, no byte de memória interna 08H, onde inicia também o banco de registradores 1. Portanto, se o programa precisar trabalhar com mais de um banco de registradores, deve escolher outro local para a pilha.
1.9 As interrupções
O 8051 tem cinco fontes de interrupção: duas entradas externas (INT0 e INT1), dois temporizadores/contadores (Timer 0 e Timer 1) e o canal de comunicação serial. Conforme descrito na seção 1.6, as entradas das interrupções externas e o canal serial ocupam pinos da porta P3.
Os endereços de desvio das interrupções são fixos e dados pela tabela 1.6.
O 8051 permite habilitar ou desabilitar cada interrupção individualmente através dos bits EX0, ET0, EX1, ET1 e ES do registrador IE (Interrupt Enable), que aparece na figura 1.12. Esses bits controlam as interrupções externa 0, do timer 0, externa 1, do timer 1 e do canal serial, respectivamente. O bit EA (Enable All) permite habilitar (1) ou desabilitar (0) todas as interrupções de uma só vez. Para que uma interrupção esteja habilitada, tanto o bit correspondente quanto EA precisam estar setados.
Interrupção Endereço Interrupção externa 0 0003H Timer 0 000BH Interrupção externa 1 0013H Timer 1 001BH Canal serial 0023H
Tab. 1.6 - Endereços de desvio das interrupções
7 6 5 4 3 2 1 0 EA ... ... ES ET1 EX1 ET0 EX Fig. 1.12 - O registrador IE
As condições de habilitação de um timer são as seguintes:
Satisfeitas estas condições, a contagem avançará de acordo com a configuração do timer:
A possibilidade de se habilitar um timer externamente através do pino INT.x permite medir a largura de pulsos externos. Para tanto, conecta-se o sinal cuja largura se deseja medir ao pino INT.x, com o timer correspondente configurado como temporizador (C/T.x = 0) e com o bit GATE.x = 1. Desta forma, a contagem avançará enquanto o sinal externo estiver em nível alto, obtendo-se uma contagem proporcional à duração do pulso. A largura do pulso pode então ser calculada a partir do período do sinal de clock.
É possível também contar pulsos externos. Para tanto, conecta-se o sinal a medir ao pino T.x, com o contador configurado como contador (C/T.x = 1) e com o bit GATE.x = 0. Desta forma, a contagem avançará a cada pulso do sinal externo.
Os dois mecanismos acima podem ainda ser combinados para contar pulsos de um sinal externo somente durante um intervalo de tempo determinado por outro sinal externo. Para tanto, configura-se o timer como contador (bit C/T.x = 1) com o bit GATE.x = 1. Desta forma, a contagem avançará de acordo com os pulsos recebidos no pino T.x, mas somente enquanto o nível no pino INT.x estiver em
Cada timer pode operar em um de quatro modos de operação diferentes. O modo de operação é definido pelos valores dos bits M0.x e M1.x do registrador TMOD.
Neste modo, os registradores TLx e THx são vistos como um contador de 13 bits, formado por THx e pelos 5 bits menos significativos de TLx. Os 3 bits mais significativos de TLx são indeterminados e devem ser ignorados. O registrador THx pode ser visto como um contador de 8 bits, cuja freqüência de contagem é igual a 1/32 da freqüência de clock. Este modo existe por razões de compatibilidade com a família MCS48, mais antiga.
O funcionamento deste modo é semelhante ao do modo 0. A única diferença é que o par de registradores TLxTHx é visto como um contador de 16 bits.
A figura 1.20 representa o funcionamento dos timers nos modos 0 e 1. Note a representação do bit C/T.x, em forma de uma chave que seleciona a fonte de pulsos de clock para o timer e também a saída “overflow”, que gera o pedido de interrupção associado. Essa figura mostra ainda o mecanismo de habilitação da contagem, descrito no início desta seção.
GATE
INTx PIN
TRx
OSC / C/T=
C/T= CONTROL
(5 bits)TLx THx (8 bits) (8 bits)^ TFx INTERRUPT
Tx PIN overflow
Fig. 1.20 - Funcionamento dos timers nos modos 0 e 1
Neste modo , o registrador TLx funciona como um contador recarregável de 8 bits, conforme a figura 1.22. O registrador THx contém o valor que é recarregado automaticamente em TLx sempre que a contagem deste sofre um overflow (passagem de FFH para 00). O overflow faz também com que o flag TFx seja setado e portanto gera um pedido de interrupção, que será atendido de acordo com as regras de habilitação das interrupções. O valor de THx não sofre qualquer alteração e TLx retoma a contagem a partir do valor carregado.
GATE
INTx PIN
TRx
OSC / C/T=
C/T= CONTROL
TLx
THx (8 bits)
TFx INTERRUPT
(8 bits)
Tx PIN overflow
Fig. 1.22 - Funcionamento dos timers no modo 2
TL0 e TH0 funcionam como dois contadores independentes de 8 bits, conforme a figura 1.24. Note que TR1 e TF1 são desviados do Timer 1 e utilizados para controlar TH0.
O par de registradores TL1TH1 continua funcionando como um contador de 16 bits. Contudo, não se pode desabilitar sua contagem através de TR1, e TF1 não reage quando ocorre overflow da contagem em TL1TH1. Para desabilitar a contagem de TL1TH1 quando TL0TH0 estiver no modo 3, deve-se colocar TL1TH1 também no modo 3. Então, se o Timer 0 estiver no modo 3 e o Timer 1 for colocado no modo 3, o par TL1TH1 pára de contar e preserva seu valor até que outro modo de funcionamento seja escolhido para o Timer 1.
sincronismo é enviado pelo pino TxD. A taxa de transmissão é fixa e igual a 1/12 da freqüência do clock do sistema.
Nos demais modos, os dados são enviados através do pino TxD e recebidos através do pino RxD. Assim, esses modos permitem comunicação full-duplex (FD, transmissão simultânea nos dois sentidos).
A palavra transmitida é composta por 10 bits: um start bit (nível lógico 0), oito bits de dados, e um stop bit (nível lógico 1). A taxa de transmissão é dada pela equação
Tx
f TH
SMOD = × clock −
onde SMOD é o bit 7 do registrador PCON (figura 1.28b) e TH1 é o registrador mais significativo da contagem do timer 1.
Cada palavra de dados é composta de 11 bits. O bit adicional enviado é o bit TB8 de SCON. Na recepção, é este bit que se lê em RB8. A taxa de transmissão pode ser escolhida entre 1/64 (SMOD =
Igual ao modo 2 exceto pela taxa de transmissão, dada também pela equação 1.2.
O bit SM2 do registrador SCON tem diferentes interpretações, dependendo do modo de operação selecionado:
REN (Reception ENable) habilita a recepção. Quando está em 1, o primeiro start bit em RxD implica recepção de um dado em SBUF.
TI é o bit de requisição de interrupção da transmissão. É setado pelo hardware após a transmissão do oitavo bit de dados quando no modo 0, e no início da transmissão do stop bit nos outros modos.
O bit RI é o bit de requisição de interrupção na recepção. É setado pelo hardware no momento da recepção do oitavo bit de dados no modo 0, ou durante a recepção de um stop bit nos outros modos. TI e RI devem ser reinicializados pelas rotinas de tratamento das respectivas interrupções de modo a habilitar novas interrupções.
1.12 Sistema de desenvolvimento Avocet
Um sistema de desenvolvimento é um sistema que permite fazer a edição, depuração e teste de programas para um determinado tipo de processador. A maioria dos sistemas de desenvolvimento para microprocessadores e microcontroladores se baseiam no PC. Normalmente são necessários um editor de programas, um cross-assembler e/ou um compilador e um linker, além de simuladores ou emuladores.
Muitos cross-assemblers permitem a inclusão de macros, que são trechos de programas fontes aos quais é atribuído um nome. Este nome pode então ser usado em qualquer parte do programa como se fosse uma instrução.
1.12.1 Sistema de desenvolvimento Avocet
Dentre as diversas ferramentas de software para o desenvolvimento de programas para a família 8051, uma das mais conhecidas é o conjunto da Avocet, ilustrado na figura 1.30. Praticamente todos os fornecedores de software para este tipo de desenvolvimento apresentam o mesmo elenco de programas utilitários.
Fig. 1.30 - Conjunto de ferramentas de desenvolvimento
1.12.2 Roteiro de elaboração de um programa
Esta seção apresenta os passos a serem seguidos para a elaboração de um programa para microcontroladores da família 8051, utilizando as ferramentas da Avocet.
Utilizando um editor de texto simples, que permita gravar arquivos em formato ASCII, criar o programa-fonte. O nome do arquivo deve ter no máximo oito letras e extensão .ASM.
A sintaxe para chamar o assembler é, no caso do exemplo acima: AVMAC51
Nesta etapa, são gerados os arquivos
A sintaxe para chamar o linker é, no caso do exemplo acima: AVLINK51
Nesta etapa, são gerados os arquivos
Controle de execução e exibição Movimentação do cursor
F1 RUN Esc Regs. / linha de comando F10 Single Step (passo a passo) F7 Cursor - Hex, Bin, ASCII F9 UNDO - volta um comando Ctrl Pg Up Scroll lock F2 Move Breakpoint UP Ctrl A / B Registradores A / B F3 Set breakpoint Ctrl D Data Pointer F4 Move Breakpoint DOWN Ctrl CXFO Flags C/AC/FO/OV F5 Velocidade de simulação Ctrl I Interrupções Alt F5 Alternar apresentação de símbolos / valores hexadecimais
Ctrl P PC
F6 Atualizar todas as janelas / somente janelas com trace ligado
Ctrl R Banco de Registradores
Alt F6 Liga / desliga trace das janelas Ctrl S SP F8 Liga / desliga skip Ctrl T Timers / counters Alt 0-7 R0 - R Alt A, B Janelas de dados Alt P,Q Porta 0, porta 2 Alt SC Serial BUF/COM Alt Y Contador de ciclos
Tab. 1.10 - Comandos do simulador AVSIM
A representação de constantes na tela do simulador se dá segundo a convenção da tabela 1.12.
Sistema de numeração Notação Decimal 255 Hexadecimal $FF ou 0FFH Binário %111 ou 111B
Tab. 1.12 - Representação de constantes no AVSIM
1.13 Exercícios
As portas P0 e P2, bem como os pinos P3.6 e P3.7, são usados para acessar a memória externa. Os bits P3.0 e P3.1 e o bit 7 do registrador PCON são utilizados na transmissão de dados pelo canal serial e portanto só podem ser utilizados por programas que, depois de carregados no kit, não façam mais uso da comunicação com o PC. Além disso, o timer 1 é utilizado para determinar a taxa de transmissão do canal serial e portanto também só pode ser usado em outras aplicações se não houver necessidade de comunicação através do canal serial.
É preciso tomar muito cuidado com instruções que manipulem os registradores SCON, PCON, TMOD e TCON para evitar que as configurações do timer 1 e do canal serial não sejam alteradas involuntariamente. Se isto acontecer, a comunicação com o PC pode apresentar problemas.
2.3 Sub-rotinas de serviço
Na EPROM existem diversas sub-rotinas que dão suporte à execução de tarefas tais como a entrada e saída de dados via terminal do PC e a apresentação de mensagens no LCD. Estas sub-rotinas estão listadas na tabela 2.4. A chamada dessas subrotinas é feita mediante a instrução LCALL
Nome Endereço Descrição tempo APAGA 0089H^ Apaga display APAGAT 0196H Apaga terminal de vídeo LEBYTE 00D0H Lê numero digitado no teclado (byte fica em a ) NUMTER 0164H^ Imprime numero no terminal, (valor de a) NUMLCD 013EH Imprime numero no display (valor de a) CARLCD 0071H Imprime caracter no display (valor de a) AREA1 00A4H^ Posiciona cursor do display na área 1, (coluna em A) AREA2 00ADH^ Posiciona cursor do display na área 2, (coluna em A) MENLCD 00B6H Imprime mensagem no display (inicio=DPTR, 0 =fim) APACUR 009BH Apaga cursor do LCD ACECUR 01BDH^ Acende cursor do LCD HOMCUR 0092H Home cursor do LCD OUTLCD 0059H Comando para LCD CARTER 01AAH Imprime caracter no terminal de vídeo (dado de A) MENTER 0118H^ Imprime mensagem n terminal de vídeo, inicio=DPTR LENUM 00DDH Lê numero digitado no terminal,(numero em A) LEMENS 00F3H Lê mensagem digitada no terminal, (DPTR=endereço) TECPRES 01C6H^ Faz CY = 1 se alguma tecla foi pressionada CODTECL 01DAH^ Lê o código da tecla pressionada, (valor em A)
Tab. 2.4 - Sub-rotinas de serviço do kit WF
2.4 Alguns endereços importantes
Além dos endereços das sub-rotinas apresentadas acima, são importantes os endereços listados na tabela 2.6.
Descrição Endereço
Início da RAM 2000H
Redirecionamento da interrupção externa 0 (P3.2) 2003H
Redirecionamento da interrupção do timer 0 200BH
Redirecionamento da interrupção externa 1 (P3.3) 2013H
Redirecionamento da interrupção do timer 1 201BH
Tab. 2.6 - Endereços da RAM e desvios das interrupções
Tanto os endereços da tabela 2.4 quanto os da tabela 2.6 encontram-se definidos como sinônimos no arquivo ENDERECO.ASM. Convém incluir este arquivo no início de todos os programas desenvolvidos para o kit WF com a seguinte diretiva %INCLUDE ENDERECO.ASM
colocada no início do arquivo-fonte.
O redirecionamento das interrupções, no simulador, é conseguido através das linhas finais do arquivo ENDERECO.ASM, reproduzidas abaixo. No KIT isto está gravado na EPROM. ORG 0003H ; INT 0 LJMP RAM+0003H ; INT 0 redirecionada ORG 000BH ; T LJMP RAM+000BH ; T0 redirecionada ORG 0013H ; INT 1 LJMP RAM+0013H ; INT 1 redirecionada ORG 001BH ; T LJMP RAM+001BH ; T1 redirecionada ORG RAM
Note que estas linhas não têm efeito sobre programas transferidos para o kit, pois este tem EPROM nos endereços modificados. A utilidade deste redirecionamento está em permitir a execução de programas no simulador. Por isso, programas que utilizem tratadores de interrupção devem seguir a estrutura dada abaixo: ORG RAM SJMP INICIO ORG 2003H ... ; tratador da interrupção externa 0 ORG 200BH ... ; tratador da interrupção do timer 0 INICIO: ... ; instruções do programa END Um outro problema que aparece no desenvolvimento de programas para o kit WF é que o simulador AVSIM51 não possui as sub-rotinas de serviço e portanto não pode simulá-las. Então, se um programa escrito para chamar sub-rotinas da tabela 2.4 for executado no simulador, é preciso tomar cuidado para que o programa não se perca quando saltar para uma dessas sub-rotinas. A solução adotada aqui consiste em incluir, no início do programa, o arquivo RET.ASM, que coloca instruções RET em todos os endereços listados na tabela 2.4. Desta forma, as chamadas das sub-rotinas são ignoradas durante a simulação e não atrapalham. Mais uma vez, este arquivo só tem efeito no simulador, pois o kit tem EPROM nesses endereços.
2.5 Desenvolvimento de programas
Para fazer o desenvolvimento de programas para o 8031 são necessários: