Académique Documents
Professionnel Documents
Culture Documents
Es c o la T c n ic a Es t a d u a l G e t lio Va rg a s
So Paulo 2006
ii
Apostila sobre Microcontroladores famlia 8051, apresentada aos cursos de Eletrnica, Telecomunicaes e Automao Industrial da Escola Tcnica Estadual Getlio Vargas, com o propsito de auxiliar nas aulas tericas e prticas.
So Paulo 2006
Milton Barreiro Junior ETE Getlio Vargas
iii
SUMRIO
1 INTRODUO........................................................................................... 1 2 ARQUITETURA BSICA DE UM MICROCONTROLADOR GENRICO.. 2 3 A FAMLIA 8051......................................................................................... 3 3.1 Organizao de Memria................................................................ 4 3.2 Memria de Programa..................................................................... 6 3.3 Memria de Dados.......................................................................... 8 3.4 Conjunto de Instrues da Famlia 8051....................................... 10 3.5 Registrador da palavra de controle (Program Status Word)......... 10 3.6 Modos de Endereamento............................................................ 11 3.7 Instrues Aritmticas................................................................... 12 3.8 Instrues Lgicas........................................................................ 14 3.9 Transferncia de Dados Interna e Externa................................... 15 3.10 Instrues Booleanas.................................................................. 17 3.11 Instrues de Salto..................................................................... 18 3.12 Oscilador Interno......................................................................... 20 3.13 Estrutura de Interrupes............................................................ 21 4 DESCRIO DO HARDWARE................................................................ 24 4.1 Registradores de funo especial (SFR)...................................... 24 4.2 Acumulador (ACC)......................................................................... 25 4.3 Registrador B (B)............................................................................ 25 4.4 Registrador da palavra de controle (PSW).................................... 25
Milton Barreiro Junior ETE Getlio Vargas
iv
4.5 Stack Pointer (SP) e Data Pointer (DPTR)..................................... 26 4.6 Buffer Serial (SBUF)....................................................................... 26 4.7 Ports de I/O (P0, P1, P2, P3)........................................................ 28 4.8 Registradores de Timer e de Controle........................................... 29 4.9 Estrutura e operao dos ports de I/O........................................... 32 4.10 Acesso memria externa.......................................................... 35 4.11 Temporizadores e Contadores..................................................... 35 4.12 Modos de operao..................................................................... 36 4.13 Interface Serial............................................................................. 38 4.14 Modos de Operao..................................................................... 38 4. 15 Registrador de Controle.............................................................. 43 4.16 Baud Rates................................................................................... 43 4.17 Interrupes................................................................................. 44 4.18 Estrutura de prioridades............................................................... 46 4.19 Interrupes externas.................................................................. 46 4.20 Circuitos de Controle.................................................................... 47 4.21 Reset............................................................................................ 47 4.22 Clock............................................................................................ 48 4.23 Operao passo a passo............................................................. 49 4.24 Descrio da pinagem................................................................. 50 5 PROGRAMAO E SIMULAO............................................................ 52 5.1 Compilao E Linkagem............................................................ 52
5.2 Diretivas (Ou Pseudo-Instrues).................................................. 53 5.3 Uso Do Compilador E Do Linker (Passo A Passo)........................ 54 5.4 Simulador dos Microcontroladores da famlia 8051....................... 55 5.5 Operao bsica do simulador...................................................... 56 6 TABELA DE INSTRUES COMPLETA................................................. 58 7 ESQUEMA DA CPU MNIMA PARA TESTE E CARREGAMENTO DE PROGRAMA.............................................................................................................. 70 8 PROGRAMA TESTE DO SISTEMA MNIMO........................................... 71 9 REFERNCIAS BIBLIOGRFICAS......................................................... 72 APNDICE A............................................................................................................. 73 APNDICE B............................................................................................................. 80 ANEXO 1................................................................................................................... 84
1 Introduo
Podemos considerar os microcontroladores, como sendo uma CPU dedicada e incorporada em um s chip, ou seja, todos os perifricos que nos microprocessadores se encontravam em chips independentes, assim como memrias, temporizadores, portas de comunicao serial, dispositivos de entrada/sada, esto presentes em um nico componente. Isso torna o projeto mais compacto, mais dinmico e com o custo final reduzido, devido aos dispositivos integrados em um s chip. O chip a ser apresentado nessa apostila ser o microcontrolador da famlia 8051, o qual ser estudado com mais detalhes nos captulos a seguir.
Um microcontrolador genrico composto pelos seguintes blocos: Unidade Central de Processamento (CPU); Memria de Programa (ROM ou EPROM); Memria de dados (RAM); Linhas de I/O (PORTs); Controle de interrupes; Gerador de clock; Temporizadores (Timers) e Contadores (counters).
representada na figura abaixo constituio clssica de um microcontrolador contendo os blocos citados e suas respectivas interligaes. As diferenas bsicas entre os diversos tipos de microcontroladores disponveis no mercado so relacionadas capacidade e tipos de memrias, na quantidade de ports disponveis, velocidade de operao, e alguns recursos especficos como por exemplo, portas seriais, maior nmero de contadores, opo de baixo consumo, entre outros. Existem tambm, os componentes chamados derivativos que, como o prprio nome diz, so microcontroladores derivados dos tipos mais comuns (8048 e 8051), ou seja, a clula bsica o microcontrolador e este acrescido de outros componentes de acordo com as necessidades.
External Interrupt Timer 1 Interrupt Control 4K ROM 128 Bytes RAM Timer 0
Counter Inputs
BUS
CPU
OSC
BUS Control
4 I/O Ports
Serial Port
TXD P0 P1 P2 P3
RXD
Address / Data
3 A Famlia 8051
Quando temos vrios microcontroladores utilizando uma mesma clula, chamamos esse conjunto de componentes de famlia. Desta forma temos vrias famlias como, por exemplo, a famlia do 8048, do 8051, do 8096, entre outras. Vamos tratar aqui da famlia do 8051, que ser utilizado em nossas aplicaes. A tabela abaixo descreve os principais componentes dessa famlia: Nome do Chip 8051 80C51 80CL51 8052 80C52 83C528 83C652 83C751 83C452 80C452 8032 80C32 80C528 80C652 87C52 87C528 87C652 87C751 87C452 Verso sem ROM 8031 80C31 Verso EPRO M 8751 87C51 Bytes de ROM 4K 4K 4K 8K 8K 32K 8K 2K 8K Bytes de RAM 128 128 128 256 256 512 256 64 256 Timers 16 Bits 2 2 2 3 3 3+1 2 1 2 Tipo de Circuito NMOS HMOS SACMOS NMOS CMOS CMOS CMOS CMOS CMOS
O elemento bsico desta famlia o chip 8051, cujo diagrama interno serviu como ilustrao quando falamos sobre um microcontrolador genrico. Os outros componentes desta famlia esto descritos nos manuais dos fabricantes. Atualmente, a tendncia mundial no uso de componentes de baixo consumo, torna sensvel o desenvolvimento de projetos baseados na tecnologia CMOS, facilitando assim a interligao de seus blocos. Todos os componentes que apresentarem um C em seu cdigo (80C31, 87C452, etc) pertencem a esta famlia, a qual representa o que existe de mais avanado em microcontroladores de 8 bits, permitindo a continuidade de sua linha de produo por um longo perodo. As caractersticas desta famlia so:
CPU de 8 bits com conjunto de instrues otimizado para aplicaes de controle de processos;
Capacidade de processamento Booleano (manipulao de bit individualmente); 32 linhas de I/O bidirecionais e individualmente endereveis; 128 bytes de RAM on-chip (mnimo); Dois contadores / temporizadores programveis de 16 bits; Interface serial full-duplex; Estrutura de interrupes com at 5 entradas permitindo 2 nveis de prioridade; Gerador de clock; Mnimo de 4Kbytes de memria de programa (ROM ou EPROM); Capacidade de endereamento externo de at 64Kbytes.
O 8051 possui intervalos de endereos separados para a memria de programa e para a memria de dados. Esta separao lgica permite que os dados acessados pelos endereos de 8 bits sejam armazenados e manipulados mais rapidamente. possvel tambm enderear 16 bits, utilizando para isso, o registrador DPTR, que ser estudado posteriormente. A figura abaixo ilustra a estrutura de memria utilizada num microcontrolador 8051:
Nota: a RAM externa no endereada diretamente pela CPU. O endereo de acesso deve estar em um registrador usado pela CPU como ndice.
Milton Barreiro Junior ETE Getlio Vargas
A memria de programa do tipo ROM e no podemos escrever dados nela. Podemos ter at 64Kbytes de memria, e normalmente encontramos pelo menos 4K de memria interna no chip em forma de ROM, EPROM ou OTP (One Time Program). Os tipos OTP representam uma opo economicamente atraente, pois so mais baratos comparados aos do modelo EPROM, e podem ser programados pelo usurio. Nas verses ROMLESS, esta memria encontra-se externa ao microcontrolador. O pulso de leitura para a memria externa o sinal PSEN (Program Store Enable). A memria de dados ocupa um espao de endereamento separado da memria de programa. At 64Kbytes de memria externa podem ser endereados, e a CPU gera sinais de read e write, necessrios durante o acesso memria externa. 3.2 Memria de Programa
A figura abaixo mostra o mapa da parte inferior da memria de programa. Aps o reset, a CPU comea a executar as instrues a partir do endereo 0000H.
(0033H) 002BH 0023H Interrupt Locations 001BH 0013H 000BH RESET 0003H 0000H 8 Bytes
Como pode ser visto na figura, cada interrupo alocada num endereo fixo da memria de programa. A interrupo direciona o contador de programa da CPU para o seu respectivo endereo, onde se encontra a rotina de interrupo, conforme controle proporcionado pelo vetor de interrupes. Os primeiros 4Kbytes de memria podem estar localizados no chip, ou num chip (ROM ou EPROM) externo. O controle de acesso interno/externo feito pelo
Milton Barreiro Junior ETE Getlio Vargas
sinal EA (External Access). O sinal de strobe para acesso memria externa o sinal PSEN, ativo apenas quando da ocorrncia de acessos externos (EA ligado a terra), no sendo, portanto utilizado quando se utiliza apenas a rea de memria interna. A configurao de hardware necessria para acesso memria externa ilustrada a seguir. Note que 16 linhas de I/O (port 0 e port 2) so dedicadas transio de sinais durante buscas memria externa. O port 0 opera como um barramento de dados endereo multiplexado, emitindo o byte low do program counter como endereo e aguarda o recebimento do byte de cdigo da memria de programa. Durante o tempo em que o byte low est vlido no port 0, o sinal ALE coloca este byte no latch de endereos, enquanto o port 2 emite o byte alto de endereos. O sinal PSEN pulsa, e o cdigo de byte lido pelo microcontrolador.
EPROM Instr.
Address
___ OE
O endereo de memria de programa sempre de 16 bits, mesmo quando a quantidade de memria externa inferior 64Kbytes. Desta forma, sempre que utilizarmos memria externa, dois ports (port 0 e port 2) sero sacrificados em funo do endereamento das mesmas. possvel utilizarmos tambm os portos que foram sacrificados, porm, no uma operao to confortvel.
A figura abaixo mostra o hardware necessrio para o acesso memria RAM externa.
___ WE
___ OE
A CPU, neste caso est executando um programa a partir da ROM interna. O port 0 serve como um barramento multiplexado de dados/endereo para a RAM, e 3 linhas do port 2 so utilizadas para as pginas da RAM. Os sinais de RD e WR so gerados pela CPU para comandar as operaes. Podemos enderear at 64Kbytes de memria RAM, em endereos de 1 ou 2 bytes. Os endereos de 1 byte so geralmente utilizados em conjunto com 1 ou mais linhas de I/O, para definir a pgina que est sendo utilizada na RAM. Endereos de 2 bytes, quando utilizados demandam que o port 2 gere o byte alto de endereos. A memria de dados interna est mapeada como indica a figura a seguir. O espao de memria est dividido em 3 blocos, normalmente denominados, Lower 128, Upper 128 e SFR (Special Function Register). A memria de dados interna tem sempre 1 byte de endereamento apenas, o que significa que temos um mximo de 256 bytes de memria interna.
FFH Upper 128 80H 7FH Lower 128 0 Accessible By indirect Addressing Only Accessible By direct Addressing Only
FFH
Ports, Status and Control bits Timer, Registers Stack Pointer Accumulator, etc...
Entretanto, os modos de endereamento permitem o uso de at 384 bytes utilizando um truque simples. Atravs de endereamento direto, acessamos um
espao de memria e atravs de endereamento indireto, acessamos um espao de memria diferente. Desta forma, os registradores de funo especial (SFR) e os ltimos 128 bytes (Upper Space) so acessados nos mesmos endereos (de 80H at FFH) apesar de serem fisicamente separados. Nas clulas bsicas 8051, a rea de memria alta no existe no chip, desta forma, consideramos apenas a rea de memria baixa (Lower Space) para as nossas experincias (melhores referencias a estas reas altas podem ser encontradas nos manuais dos fabricantes). Os primeiros 128 bytes de memria interna esto mapeados como indica a figura abaixo:
7FH
30H Bank select bits em PSW 11 10 01 00 2FH 20H 18H 10H 08H 0 1FH 17H 0FH 07H Reset value of stack pointer 4 Banks of 8 registers R0 R7 Bit-Addressable Space (Bit Addresses 0 7F)
10
Os primeiros 32 bytes esto agrupados em 4 bancos de 8 registradores, chamados R0 at R7. Dois bits no registrador da palavra de controle (PSW) selecionam qual o banco de registradores est em uso. Este recurso permite um uso mais eficiente do espao de cdigo. Os prximos 16 bytes acima do banco de registradores formam o bloco conhecido como memria enderevel por bit (bit addressable space). O conjunto de instrues do 8051 inclui vrios tipos de instrues de um s bit, e os 128 bits presentes nessa rea podem ser diretamente endereados por estas instrues. Todos os bytes nos primeiros 128 bytes de memria podem ser endereados direta ou indiretamente. Os prximos 128 bytes s podem ser acessados indiretamente nos dispositivos que os possuem. A rea de memria acima de 128 bytes constitui o registrador de funes especiais (SFR) cuja descrio detalhada faremos posteriormente. 3.4 Conjunto de Instrues da famlia 8051
Todos os membros da famlia 8051 executam o mesmo conjunto de instrues. Este conjunto composto por instrues otimizadas para aplicaes de controle, facilitando as operaes de dados atravs de vrios modos de endereamento. Capacita ainda a operao de variveis de um bit, permitindo operao em sistemas que demandam processamento booleano. Vamos descrever rapidamente o modo de operao de vrias das instrues contidas neste conjunto. Maiores informaes podem ser encontradas nos manuais dos fabricantes, os quais descrevem detalhadamente o conjunto de instrues. 3.5 Registrador da palavra de controle (Program Status Word)
O registrador da palavra de controle (PSW) contm vrios bits de status que indicam o estado atual da CPU. A tabela a seguir indica a posio dos bits dentro do registrador. CY AC F0 RS1 RS0 OV P CY (PSW7): Carry flag, indica vai um nas operaes aritmticas. AC (PSW6): Auxiliary carry flag, auxilia nas operaes de adio.
Milton Barreiro Junior ETE Getlio Vargas
11
Flag de uso geral. Seleo do banco de registradores. Seleo do banco de registradores. Overflow em operaes aritmticas. Flag definvel pelo usurio. Flag de paridade
O bit de carry, entre outras funes serve como vai um em operaes ari tmticas, e tambm como acumulador para um nmero de operao booleana. Os bits RS0 e RS1 so utilizados para selecionar um entre quatro bancos de registradores, disponveis nos primeiros 128 bytes de RAM. O bit de paridade indica a quantidade de bits em um no acumulador: se P=1, o acumulador contm um nmero mpar de uns; se P=0, o nmero de uns no acumulador par. Dois bits do PSW esto disponveis e podem ser utilizados como flags de uso geral. O PSW encontra-se localizado na rea denominada SFR, no endereo D0H. 3.6 Modos de endereamento
Podemos ter seis modos distintos de endereamento no 8051. Estes modos so adequados s operaes de controle.
Endereamento direto: Neste modo, o operando especificado por 8 bits de endereo na instruo. Somente a RAM interna e os SFRs podem ser ace ssados diretamente.
Endereamento indireto: No modo indireto, a instruo especifica um registrador que contm o endereo do operando. Ambas as memrias, interna e externa podem ser acessadas desta forma. O registrador de endereo, para operaes de 8 bits, pode ser R0 ou R1, ou ainda o Stack Pointer. Endereos de 16 bits podem ser acessados somente pelo Data Pointer.
Instrues de registrador: Os bancos de registradores contm os registradores de R0 at R7, que podem ser acessados por certas instrues que levam a especificao do registrador junto com o opcode da instruo. As instrues que acessam os registradores dessa forma so eficientes, pois eliminam o byte de endereo. Quando a instruo executada, um dos oito regis-
12
tradores do banco selecionado acessado e a seleo do banco feita por dois bits (RS0 e RS1) no PSW.
Instrues de registrador especfico: Algumas instrues so especificadas para certos registradores, por exemplo, as instrues que operam com acumulador ou Data Pointer no necessitam um byte de endereo para apontlas, pois o prprio opcode faz isso.
Constantes imediatas: Podemos carregar um registrador com uma constante, diretamente por um simples comando, como por exemplo, mov A, #100, que coloca no acumulador o valor 100 (decimal).
Endereamento indexado: Somente a memria de programa (ROM) pode ser acessada desta forma e somente pode ser lida. Este modo de endereamento destinado leitura de tabelas. Um registrador de 16 bits (DPTR ou PC) indica o endereo de base da tabela e o acumulador carregado com o valor da tabela.
O conjunto de instrues aritmticas listado na tabela a seguir. A tabela indica o modo de endereamento que pode ser utilizado com cada instruo, para acessar o byte operando. Por exemplo, a instruo Add A, <byte>; pode ser escrita como:
13
Mnemnico ADD A, <byte> ADDC A, <byte> SUBB A, <byte> INC A INC <byte> INC DPTR DEC A DEC <byte> MUL AB DIV AB DA A
Operao A = A + <byte> A = A + <byte> + C A = A - <byte> - C A=A+1 <byte> = <byte> + 1 DPTR = DPTR + 1 A=A-1 <byte> = <byte> - 1 BeA=BxA A = INT [A/B] B = MOD [A/B] Ajuste decimal
Modo de Endereamento Dir / Ind / Reg / Imm Dir / Ind / Reg / Imm Dir / Ind / Reg / Imm Acumulador Dir / Ind / Reg Data Pointer Acumulador Dir / Ind / Reg Acumulador e B Acumulador e B Acumulador
Tempo de Execuo 1 1 1 1 1 2 1 1 4 4 1
Os tempos de execuo indicados consideram um clock de 12MHz. Todas as instrues aritmticas so executadas num tempo de 1 s com exceo da instruo INC DPTR que consome 2s, e as instrues de multiplicao e diviso que so efetuadas em 4s. Perceba que qualquer byte no espao de memria interno pode ser incrementado ou decrementado sem o uso do acumulador. Inclusive o registrador de 16 bits DPTR pode ser incrementado desta forma. A instruo MUL AB opera com os registradores A e B e pe o resultado (16 bits) nos registradores B (byte high) e A (byte low) concatenados. A instruo DIV AB divide A por B e coloca o quociente (resultado da diviso inteiro em 8 bits) no acumulador e o resto (8 bits) no registrador B. Devido s suas caractersticas, a operao de diviso mais utilizada em converses de radicais e operaes de deslocamento programveis, do que na diviso aritmtica propriamente dita. A instruo de ajuste decimal DA A utilizada na aritmtica BCD, quando utilizamos esta aritmtica, as operaes ADD e ADDC devem, obrigatoriamente, ser seguidas por uma operao de ajuste decimal, para que os resultados continuem em
14
BCD. Note que o ajuste decimal no converte o nmero binrio em BCD, mas corrige os erros de aproximao ocorridos nos registradores. 3.8 Instrues lgicas A tabela a seguir mostra uma lista de instrues lgicas do 8051. Modos de Operao Dir / Ind / Reg / Imm Direto Direto Dir / Ind / Reg / Imm Direto Direto Dir / Ind / Reg / Imm Direto Direto Acumulador Acumulador Acumulador Acumulador Acumulador Acumulador Acumulador Tempo de Execuo 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 1
Mnemnico ANL A, <byte> ANL <byte>, A ANL <byte>, #DATA ORL A, <byte> ORL <byte>, A ORL <byte>, #DATA XRL A, <byte> XRL <byte>, A XRL <byte>, #DATA CLR A CPL A RL A RLC A RR A RRC A SWAP A
Operao A = A and <byte> <byte> = <byte> and A <byte> = <byte> and #DATA A = A or <byte> <byte> = <byte> or A <byte> = <byte> or #DATA A = A xor <byte> <byte> = <byte> xor A <byte> = <byte> xor #DATA A = 00H A = not A Roda Acum. esquerda 1 bit Roda Acum. esquerda c/ carry Roda Acum. direita 1 bit Roda Acum. direita c/ carry Swap nibbles in A
Todos os modos de endereamento podem ser utilizados e as instrues so executadas em tempo de 1 a 2 s. Estas instrues podem ser executadas em qualquer byte de memria interna ou na rea de SFR. O conjunto de instrues permite que sejam realizadas todas as operaes lgicas e ainda a instruo SWAP A, que inverte os nibbles alto e baixo do acumulador, operao til quando operamos com o cdigo BCD.
Milton Barreiro Junior ETE Getlio Vargas
15
A tabela a seguir mostra as instrues disponveis para movimentao de dados entre os espaos de memria interna. Mnemnico MOV A, <fonte> MOV <dest>, A MOV <dest>, <fonte> MOV DPTR, #DATA PUSH <fonte> POP <dest> XCH A, <byte> XCHD A, @RI Operao A = <fonte> <dest> = A <dest> = <fonte> DPTR = 16 bit Const INC SP: MOV @SP, <fonte> MOV <dest>, @SP: DEC SP Acc e <byte> trocam os dados Acc e <byte> trocam os nibbles baixos Modo de Endereamento Dir / Ind / Reg / Imm Dir / Ind / Reg Dir / Ind / Reg / Imm Constante imediata Direto Direto Dir / Ind / Reg Indireto Tempo de Execuo 1 1 2 2 2 2 1 1
A instruo MOV <dest>, <fonte> permite que os dados sejam transferidos entre quaisquer dos registradores da RAM interna ou dos SFR, sem o uso do acumulador, lembrando que os 128 bytes superiores podem ser acessados apenas por endereamento indireto e os SFR apenas por endereamento direto. A rea de stack reside na prpria RAM interna e as instrues de PUSH primeiro incrementam o stack pointer, ento copia o byte no stack. As instrues de PUSH e POP usam apenas o endereamento direto para identificar o byte que est sendo manipulado, enquanto que o stack acessado por endereamento indireto atravs do registrador SP. Isto significa que o stack vai para os 128 bytes altos (se existirem) mas no para a rea de SFR. Nos dispositivos onde no est implementado a rea alta, os bytes PUSHed so perdidos e os bytes POPed so indete rminados.
16
As transferncias de dados incluem movimentaes em 16 bits, que podem ser utilizadas para inicializar o Data Pointer (DPTR), para o uso de tabelas na memria de programa, ou para acesso memria de dados externa. A instruo XCH A, <byte> resulta na troca dos dados entre o acumulador e o byte endereado. A instruo XCHD A, @RI similar, com a diferena que apenas os nibbles baixos esto envolvidos na operao. Esta instruo facilita a manipulao de dados, de forma a economizar instrues nos programas. A memria externa pode ser acessada por endereamento indireto, utilizando 8 ou 16 bits de endereo. A escolha recai no uso de endereamento de um byte, atravs de @Ri, onde Ri pode ser R0 ou R1 do banco de registradores selecionado, ou um endereo de 2 bytes (16 bits) colocado no Data Pointer (DPTR). A desvantagem do uso do endereamento de 16 bits est no fato de que, se utilizarmos um pequeno espao de memria, ainda assim o port 2 ser inteiramente indisponibilizado para uso. No endereamento de 8 bits, sacrificamos apenas algumas linhas do port 2. A tabela abaixo indica as instrues de movimentao de dados em memria externa. Todas as instrues so executadas em 2s, com um clock de 12MHz. Largura do Endereo 8 Bits 8 Bits 16 Bits 16 Bits Mnemnico MOVX A, @Ri MOVX @Ri, A MOVX A, @DPTR MOVX @DPTR, A Operao L RAM Externa (Ri) Escreve RAM Externa (Ri) L RAM Externa (DPTR) Escreve RAM Externa (DPTR)
Em todos os acessos RAM externa, utilizamos sempre o acumulador como registrador intermedirio. Os pulsos de READ ou WRITE so ativos somente durante a execuo da instruo MOVX. Normalmente estes sinais esto inativos e se no forem utilizados, podem ser configurados como linhas de I/O extra. Existem ainda duas instrues que esto disponveis para leitura de tabelas na memria de programa. Estas instrues permitem apenas a leitura de dados na memria de programa (ROM), no permitindo a atualizao dos mesmos. O mnemnico MOVC (mov constant), e pode se apresentar de duas formas:
17
A diferena est no registrador auxiliar utilizado durante a leitura, que pode ser o DPTR ou o PC. A primeira instruo permite o acesso a tabelas de at 256 itens, sendo que o DPTR indica o incio da tabela, e o acumulador indica o off-set do endereo desejado. Com a variao (incremento) do acumulador, podemos ler a tabela inteira mantendo o DPTR fixo. A outra instruo, utiliza o acumulador como base de endereamento e o PC como off-set, de forma que a leitura de tabelas deve ser feita por sub-rotinas como a que se segue:
MOV A, valor inicial CALL tabela A rotina tabela seria: tabela: MOVC A, @A + PC RET Este tipo de tabela pode conter at 255 itens, lembrando que neste caso, no podemos utilizar o valor 0 da tabela, que variar entre 1 e 255. Um valor colocado no off-set 0 no ser lido.
A famlia 8051 contm um processador booleano completo. Um processador booleano consiste num elemento que permite a manipulao direta de um nico bit dentro da palavra que pode ser de 8 ou mais bits (byte). A RAM interna contm 128 bits endereveis e o espao SFR contm mais 128. Todos os ports so bits end ereveis, e cada um pode ser tratado como um port separado. As instrues que acessam esses bits no so apenas seqncias de desvios condicionais, mas um completo conjunto de instrues como indicado na tabela abaixo:
18
Mnemnico ANL C, bit ANL C, /bit ORL C, bit ORL C, /bit MOV C, bit MOV bit, C CLR C CLR bit SETB C SETB bit CPL C CPL bit JC REL JNC REL JB bit, REL JNB bit, REL JBC bit, REL
Operao C = C and bit C = C and not bit C = C or bit C = C or not bit C = bit bit = C C=0 bit = 0 C=1 bit =1 C = not C bit = not bit Jump If C = 1 Jump If C = 0 Jump If bit = 1 Jump If bit = 0 Jump If bit = 1 : CLR bit
Tempo de Execuo 2 2 2 2 1 2 1 1 1 1 1 1 2 2 2 2 2
Este tipo de operao de bit no facilmente obtido em arquiteturas de microprocessador. Todos os bits so acessados diretamente nos endereos 00H at 7FH na rea dos 128 bytes inferiores e de 80H at FFH no espao SFR. Desta forma podemos com as instrues de programa, implementar circuitos lgicos dentro do microcontrolador, evitando o uso de circuitos discretos ou PALs. 3.11 Instrues de Salto
Podemos utilizar 3 tipos de instrues de desvio, quando endereamos um programa no microcontrolador. Estas instrues diferem entre si no formato do endereo de destino. A instruo SJMP (Short Jump) composta por dois bytes, constituindo um byte de opcode e um byte de off-set. Este fato limita o espao de endereamento em valores de -127 at +127 bytes em torno da instruo seguinte ao SJMP.
19
Quando utilizamos a instruo LJMP (Long Jump) temos um comprimento de 3 bytes, que consiste de dois bytes de endereo e um byte de opcode, permitindo o endereamento de 64Kbytes de memria de programa. A instruo AJMP (Absolute Jump) codificada em 2 bytes sendo que o endereo formado por 11 bits e os 5 bits restantes utilizados no opcode. A tabela abaixo indica as instrues de salto disponveis. Mnemnico JMP end JMP @A + DPTR CALL end RET RETI NOP Operao Salto para end Salto para A + DPTR Chama subrotina no endereo end Retorno de subrotina Retorno de interrupo Sem operao Tempo de Execuo 2 2 2 2 2 1
Em todos os casos, o programador especifica o endereo de destino para o assembler da mesma forma, por um label ou uma constante de 16 bits. O assembler colocar o endereo de destino no formato correto para cada instruo, e se o formato no comportar o valor, aparecer a mensagem Destination out of range. Temos ainda as instrues LCALL, que permite a chamada de subrotinas em qualquer posio dos 64Kbytes de memria, e ACALL, que se utiliza do mesmo formato de endereamento de 11 bits utilizado no AJMP. As subrotinas devem ser finalizadas com o comando RET, e deve-se lembrar que cada chamada necessita de um RET, sem o qual o programa se perde. A instruo RETI utilizada como retorno da rotina de interrupo. A nica diferena entre a instruo RET e a RETI, que a RETI informa ao sistema de controle de interrupo que a interrupo em progresso foi atendida. Os saltos acima listados so chamados de saltos incondicionais, pois no dependem de nenhuma verificao de condies anteriores. Os chamados saltos condicionais, dependentes da verificao de certos bits de controle, e esto listados a seguir:
20
Mnemnico
Operao
Modo de Endereamento
Tempo de Execuo 2 2 2 2 2
JZ rel JNZ rel DJNZ <byte>, rel CJNE A, <byte>, rel CJNE <byte>, #DATA, rel
Salto se A=0 Salto se A no 0 Decrementa e salta se no 0 Salta se A diferente de <byte> Salta se <byte> diferente de #DATA
No existe bit de zero no registrador PSW, portanto as instrues JZ e JNZ devem testar o dado do acumulador para estas condies. A instruo DJNZ adequada para controle de loops, pois sua configurao de dupla funo (decrementa e testa) torna fcil a execuo de loops. A instruo CJNE pode ser utilizada para controle de loops ou para teste condicional de bytes, na forma de maior que ou menor que, pois existe a indica o de maior ou menor pelo bit de CARRY, localizado no PSW. 3.12 Oscilador Interno
Todos os membros da famlia 8051 possuem um oscilador interno que pode ser utilizado como fonte de clock para a CPU, bastando para isso que se implemente a configurao abaixo:
MCS-51 HMOS or CHMOS XTAL2 Quartz Cristal or ceramic ressonator C1 C2 XTAL1 VSS
21
Se ao invs de utilizarmos o oscilador interno, utilizamos outro gerador qualquer (para sincronizar com outros circuitos, por exemplo) devemos ter o cuidado de interligar a entrada no pino certo. Este fato importante, pois este pino muda conforme o tipo de chip utilizado, por exemplo, com chips HMOS (8051) devemos ligar a entrada de clock ao pino XTAL2, enquanto que em circuitos CMOS (80C51), o clock deve ser colocado no pino XTAL1. A figura abaixo indica a correta
XTAL1 VSS
XTAL1 VSS
XTAL1 VSS
A famlia 8051 atende a cinco entradas de interrupes distintas, duas externas, duas relativas aos dois timers, e uma relativa ao canal serial interno. Cada interrupo pode ser habilitada ou desabilitada individualmente, setando ou resetando um bit no registrador denominado IE (Interrupt Enable) dentro do SFR. Este registrador contm ainda um bit que habilita todas as interrupes, e sua estrutura completa mostrada abaixo. O bit em 0 desabilita a interrupo e o bit em 1 habilita a interrupo. EA ES ET1 EX1 ET0 EX0
EA (IE.7) Habilita todas as interrupes globais quando em 1; ES (IE.4) Interrupo do port serial; ET1 (IE.3) Interrupo do timer 1; EX1 (IE.2) Interrupo externa 1; ET0 (IE.1) Interrupo do timer 0; EX0 (IE.0) Interrupo externa 0.
22
Cada fonte de interrupo pode ser programada quanto sua prioridade de atendimento, por um outro registrador localizado na rea de SFR e denominado IP (Interrupt Priority). A rotina de prioridade de interrupo determina que se uma interrupo de baixo nvel estiver sendo executada, esta pode ser interrompida por uma interrupo de alto nvel, sendo continuada aps o trmino da mesma. O contrrio no verdadeiro, ou seja, uma interrupo de alto nvel no interrompida por uma interrupo de nvel inferior, nem igual ao dela. Se duas interrupes de mesmo nvel so recebidas simultaneamente, uma sequncia de pool interna determina qual ser atendida em primeiro lugar. A figura abaixo ilustra o contedo do registrador IP. O Bit em 0 desabilita a interrupo e o bit em 1 habilita a interrupo. PS PT1 PX1 PT0 PX0
PS (IP.4) Prioridade de interrupo do canal serial; PT1 (IP.3) Prioridade de interrupo timer 1; PX1 (IP.2) Prioridade de interrupo externa 1; PT0 (IP.1) Prioridade de interrupo do timer 0; PX0 (IP.0) Prioridade de interrupo externa 0. Quando em operao, todos os flags de interrupo esto retidos no sistema de controle de interrupo durante o estado de cada ciclo de mquina. As amostras so pooladas durante o ciclo seguinte, e se uma delas se encontrar setada, o sistema de interrupo gera um LCALL para o endereo apropriado na memria de programa, a menos que outra condio bloqueie a interrupo. Esta LCALL gerada por hardware resulta na transferncia do contedo do registrador PC para o Stack e recarrega o PC com o primeiro endereo da rotina de interrupo. Cada rotina de uma dada interrupo comea num endereo fixo. Somente o PC transferido automaticamente para o stack, ento devemos nos lembrar de salvar os registradores importantes em cada rotina de interrupo. Salvando apenas o PC, torna-se mais simples a aplicao destas rotinas nas funes mais comuns de controle, onde no necessitamos grandes recursos de software, pois precisamos apenas setar um pino, ou recarregar um timer, ou ler um canal serial, por exemplo.
Milton Barreiro Junior ETE Getlio Vargas
23
IP Register
TF0
____ INT1
0 IT1 1 IE1
TF1
Individual Enables
Global Disables
24
4 Descrio do Hardware
A descrio a seguir mostra as caractersticas construtivas do microcontrolador 8051. 4.1 Registradores de funo especial (Special Function Register SFR)
A figura abaixo indica a disposio do registrador de funes especiais (SFR). Na rea de SFR, nem todos os endereos esto ocupados, de forma que estes endereos no esto implantados no chip. Estes espaos destinam-se a acessrios que encontramos em outros componentes da famlia.
F0H B E8H
F1H
F2H
F3H
F4H
F5H
F6H
F7H
E9H
EAH
EBH
ECH
EDH
EEH
EFH
E1H
E2H
E3H
E4H
E5H
E6H
E7H
D9H
DAH
DBH
DCH
DDH
DEH
DFH
D1H
D2H
D3H
D4H
D5H
D6H
D7H
C9H
CEH
CFH
C1H
C6H
C7H
B8H IP B0H P3
B9H
BAH
BBH
BCH
BDH
BEH
BFH
B1H
B2H
B3H
B4H
B5H
B6H
B7H
25
Endereo Funo Endereo Funo Endereo Funo Endereo Funo Endereo Funo Endereo Funo
A9H
AAH
ABH
ACH
ADH
AEH
AFH
A1H
A2H
A3H
A4H
A5H
A6H
A7H
9AH
9BH
9CH
9DH
9EH
9FH
92H
93H
94H
95H
96H
97H
8EH
8FH
86H
87H PCON
O acumulador o registrador onde se processam a maioria das operaes de um processador, comumente encontradas num microprocessador de 8 bits.
um registrador utilizado durante as operaes de multiplicao e diviso, podendo ser utilizado como registrador de uso geral em outras operaes.
chamado de Program Status Word e contm basicamente, os flags de controle de fluxo do programa. Por isso utilizado em desvios e saltos condicionais, sendo tambm alterado na maioria das instrues. Seu contedo indicado na figura abaixo.
26
CY
AC
F0
RS1
RS0
OV
CY (PSW7): Carry flag, indica vai um nas operaes aritmticas. AC (PSW6): Auxiliary carry flag, auxilia nas operaes de adio. F0 (PSW5): Flag de uso geral. RS1 (PSW4): Seleo do banco de registradores em uso. RS0 (PSW3): Seleo do banco de registradores em uso. OV (PSW2): Overflow em operaes aritmticas. (PSW1): Flag definvel pelo usurio. P (PSW0): Flag de paridade, indica o nmero de bits em 1 no acumulador. RS0 0 0 1 1 RS1 0 1 0 1 Banco Selecionado Banco 0 Banco 1 Banco 2 Banco 3 Endereo 00H at 07H 08H at 0FH 10H at 17H 18H at 1FH
O Stack Pointer (ponteiro de pilha) incrementado antes do armazenamento dos dados em uma instruo PUSH ou CALL. Observe que o Stack pode ser alocado em qualquer regio da memria RAM, o ponteiro sempre inicializado no endereo 07H, e o Stack comea no endereo 08H. O Data Pointer consiste em dois registradores de 8 bits (DPH byte alto, e DPL byte baixo), que podem ser manipulados tanto como dois registradores separados de 8 bits como um nico de 16 bits. 4.6 Buffer Serial (SBUF)
O Buffer de dados serial (Serial data BUFfer) consiste de dois registradores separados, o buffer de transmisso e o buffer de recepo. Quando um dado colocado no buffer serial, ele vai diretamente para o buffer de transmisso serial, e quando ele chega ao buffer de recepo, ele colocado diretamente no SBUF.
27
Existe um registrador que controla todas as operaes da interface serial chamado SCON (Serial CONtrol). Seu contedo descrito a seguir. SM0 SM1 SM2 REN TB8 RB8 TI RI
SM0 (SCON.7): Modo de operao da interface serial. SM1 (SCON.6): Modo de operao da interface serial. SM2 (SCON.5): Modo de operao da interface serial. REN (SCON.4): Habilitao de recepo. TB8 (SCON.3): o nono bit transmitido (stop bit). RB8 (SCON.2): o nono bit recebido. TI (SCON.1): Flag indicando fim de transmisso. RI (SCON.0): Flag indicando buffer de recepo cheio.
SM0 0 0 1 1
SM1 0 1 0 1
Modo 0 1 2 3
28
Os portos P0, P1, P2 e P3 so latches dos seus respectivos portos fsicos. Escrevendo um bit 1 no SFR, o pino de sada do porto respectivo ir para 1 imediatamente. Quando este port for acessado para leitura, o estado do pino externo armazenado no registrador correspondente. A estrutura dos ports ilustrada aba ixo.
Addr/Data Control Read Latc h Int. BUS Write To Latch Read PIN
VCC Read Latc h Int. BUS Write To Latch Read PIN Address Control
Port 0 Bit
Read Latc h Int. BUS Write To Latch Read PIN
Port 1 Bit
DP2.XQ Latch_ CL Q
MU X
Port 2 Bit
VCC Alternate Output Function DP3.XQ Latch_ CL Q Interna l P3.X Pull-up PIN
Port 3 Bit
Alternate Input Function
Todos os 4 ports so bidirecionais e consistem num latch (que o prprio SFR), num driver de sada e num driver de entrada. Os drivers de sada dos ports P0 e P2 e o driver de entrada do port P0, so utilizados durante o acesso memria externa.
29
Os pares de registradores (TH0, TL0, e TH1, TL1) so registradores de contagem de 16 bits, nos quais programamos os valores de contagem/temporizao dos respectivos contadores. Existem outros registradores de funes especficas de controle de alguns mdulos do microcontrolador. Vamos descrever cada um desses registradores. O registrador IP (Interrupt Priority), define um dos dois nveis possveis para cada interrupo, de acordo com a descrio abaixo.
PT2
PS
PT1
PX1
PT0
PX0
PT2 (IP5): Define nvel de prioridade do timer 2 (somente no 8052). PS (IP4): Define o nvel de prioridade do port serial. PT1 (IP3): Define o nvel de prioridade do timer 1. PX1 (IP2): Define o nvel de prioridade da interrupo externa 1. PT0 (IP1): Define o nvel de prioridade do timer 0. PX0 (IP0): Define o nvel de prioridade da interrupo externa 0.
J o registrador IE (Interrupt Enable), permite a habilitao ou desabilitao individual de cada uma das fontes de interrupo. Atravs de um bit neste mesmo registrador podemos atuar sobre todas as interrupes de maneira global. EA ET2 ES ET1 EX1 ET0 EX0
EA (IE7): Desabilita todas as interrupes quando em 0. ET2 (IE5): Habilita ou desabilita a interrupo do timer 2 (somente 8052). ES (IE4): Habilita ou desabilita a interrupo do port serial. ET1 (IE3): Habilita ou desabilita a interrupo do timer 1. EX1 (IE2): Habilita ou desabilita a interrupo externa 1. ET0 (IE1): Habilita ou desabilita a interrupo do timer 0. EX0 (IE0): Habilita ou desabilita a interrupo externa 0.
30
O registrador TMOD (Timer MODe), permite o controle do modo de operao dos timers existentes no microcontrolador, bem como a definio quanto operao como timer ou como contador. Gate (1) C/T (1) M1 (1) M0 (1) Gate (0) C/T (0) M1 (0) M0 (0) Gate: Permite o disparo do timer por hardware (gate=1), ou por software (gate=0), via registrador TCON. C/T: Em 0 opera como timer, em 1 opera como contador. M1: Modo de operao. M0: Modo de operao. M1 0 0 1 1 M0 0 1 0 1 Modo de Operao 0 Timer de 13 bits compatvel com o 8048. 1 Timer/counter de 16 bits. 2 Timer/counter de 8 bits auto reload. 3 No timer 0, TL0 define um contador de 8 bits e TH0 controlado pelos bits de controle do timer 1. O timer 1 est parado.
A operao dos timers/counters dependem tambm de um registrador denominado TCON (Timer CONtrol), utilizado para configur-lo e monitorar suas condies de funcionamento. Neste mesmo registrador encontramos os flags de interrupes externas, os quais esto ativos quando da ocorrncia da interrupo. TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
TF1 (TCON.7): Flag de overflow do timer 1. Seta quando overflow. TR1 (TCON.6): Bit de disparo do timer 1. TF0 (TCON.5): Flag de overflow do timer 0. Seta quando overflow. TR0 (TCON.4): Bit de disparo do timer 0. IE1 (TCON.3): Flag da interrupo externa 1. IT1 (TCON.2): Seleciona o tipo de interrupo 1 (borda ou nvel). IE0 (TCON.1): Flag da interrupo externa 0. IT0 (TCON.0): Seleciona o tipo de interrupo 0 (borda ou nvel). O registrador de controle da interface serial SCON (Serial CONtrol), permite a programao das caractersticas funcionais da interface serial do microcontrolador. Normalmente devemos utilizar este registrador para definir que tipo de UART vamos
Milton Barreiro Junior ETE Getlio Vargas
31
utilizar, e verificar o status da transmisso pelos bits de controle, presentes neste mesmo registrador. SM0 SM1 SM2 REN TB8 RB8 TI RI
SM0 (SCON.7): Modo de operao do port serial. SM1 (SCON.6): Modo de operao do port serial. SM2 (SCON.5): Usado nos modos 2 e 3 para multiprocessamento. REN (SCON.4): Habilita ou desabilita a recepo definido por soft. TB8 (SCON.3): o nono bit transmitido (stop bit) definido por soft. RB8 (SCON.2): o stop bit recebido do hardware para sinalizao. TI (SCON.1): Setado pelo hardware no fim da transmisso. RI (SCON.0): Setado pelo hardware no fim da recepo.
SM0 SM1 Modo Descrio Frequncia
0 0 1 1
0 1 0 1
0 1 2 3
Existe ainda um registrador para controle genrico das funes de alimentao do microcontrolador. O registrador PCON (Power CONtrol) bastante utilizado quando optamos pela utilizao da tecnologia CHMOS (80C51 por exemplo), para garantir baixo consumo em circuitos alimentados por bateria, ou ainda que permaneam um grande perodo em stand-by. SMOD GF1 GF0 PD IDL
SMOD: Dobra o baud rate quando utilizamos o timer 1. GF1: Flag de uso geral. GF0: Flag de uso geral. PD: Ativa o modo de operao Power Down (s nos CHMOS). IDL: Ativa o modo de operao IDLE (s nos CHMOS).
32
Os quatro ports presentes no 8051 so bidirecionais, consistindo cada um de um latch (que o prprio registrador Px no SFR), em um driver de sada e em um buffer de entrada. Para acessar a memria externa, utilizamos os ports P0 e P2, sendo que o port P0 leva os dados e endereos multiplexados, enquanto que o port P2 leva memria o restante dos endereos. Fica claro que quando utilizamos os microcontroladores sem memria interna (80C31 por exemplo) o port P2 tem seu uso restrito para endereamento. O port P3 um port multifuncional, ou seja, seus pinos no so apenas pinos de entrada e sada, mas tem diversas funes especficas, que esto listadas abaixo: P3.0 RXD entrada do port serial P3.1 TXD sada do port serial P3.2 INT0 entrada da interrupo externa 0 P3.3 INT1 entrada da interrupo externa 1 P3.4 T0 entrada do Timer/counter 0 P3.5 T1 entrada do Timer/counter 1 P3.6 WR sinal de escrita para memria externa P3.7 RD sinal de leitura para memria externa
Os portos 1, 2 e 3 so providos de resistores pull-up internos, enquanto que o port 0 apresenta sadas em open drain. Qualquer uma das linhas pode ser usada independentemente como entrada ou sada, uma vez que os ports so endereveis por bit (bit addressable). Para utilizarmos os ports como entradas, devemos colocar nvel lgico 1 no latch de entrada, para que o pino fique em nvel alto pelo resistor de pullup, mas possa ser colocado em nvel baixo pela ao de um sinal externo. No port 0, no existe o resistor de pull-up interno, de forma que torna-se obrigatrio o uso de pull-ups externos. Quando ocorre o endereamento, a estrutura do port permite que sejam colocados 1s ou 0s conforme a necessidade. A estrutura dos ports est representada a seguir, ilustrando o funcionamento dos mesmos. Para escrever um dado em um dispositivo atravs de um dos ports, devemos simplesmente mover o dado para o registrador respectivo no SFR. Devemos lembrar sempre que os valores de corrente fornecidos pelos ports so da ordem de mil iMilton Barreiro Junior ETE Getlio Vargas
33
ampres, de forma que precisamos de drivers de corrente na maioria dos casos. Os resistores pull-up internos fornecem baixos valores de corrente e na maioria dos projetos determinamos a ativao dos dispositivos de sada em nveis baixos, pois neste caso a corrente pode ser significativamente maior. Os buffers de sada dos ports 1, 2 e 3 fornecem corrente suficiente para 4 cargas TTL cada um, enquanto que o port 0 pode fornecer corrente para at 8 cargas TTL. Algumas instrues de leitura no port, realizam uma leitura no latch (registrador), enquanto outras realizam a leitura diretamente no pino do CI. As instrues que realizam a leitura no latch, lem este valor, processam, e depois se for necessrio rescrevem-no no latch. So chamadas de read-modify-write, e esto listadas a seguir: ANL E lgico ORL Ou lgico XRL Ou Exclusivo lgico JBC Jump se bit =1 e limpa o bit CPL Complementa o bit INC Incremento DEC Decremento DJNZ Decrementa e salta se no zero MOV, Px,y, C Move carry bit para o bit y do port x CLR Px,y Limpa bit y do port x SETB Px,y Seta bit y do port x
A razo pela qual as instrues acima so direcionadas preferencialmente ao latch evitar uma m interpretao do nvel lgico no pino. Um exemplo disso quando utilizamos transistores na sada dos microcontroladores, e escrevemos nvel 1 na base do mesmo. A tenso neste pino pode ser confundida com nvel 0 facilmente, enquanto que se a mesma for lida no latch, representar o valor real do sinal no pino.
34
Addr/Data Control Read Latch Int. BUS Write To Latch Read PIN
VCC Read Latch P0.X PIN Int. BUS Write To Latch Read PIN
D P0.X Q Latch _ CL Q
MUX
Port 0 Bit
Address Control Read Latch Int. BUS Write To Latch Read PIN
Port 1 Bit
D P2.X Q Latch _ CL Q
MUX
Port 2 Bit
VCC Alternate Output Function Internal Pull-up P3.X PIN
D P3.X Q Latch _ CL Q
Port 3 Bit
Read PIN
35
Podemos ter dois tipos de acesso memria externa, acesso memria de programa externa (ROM, EPROM) e acesso memria de dados externa (RAM). Acessos ROM externa utilizam o sinal PSEN como strobe de leitura, enquanto que utilizamos o sinal RD ou WR como strobe quando acessamos a memria RAM. Buscas memria externa de programa utilizam sempre endereos de 16 bits, e os acessos memria de dados podem utilizar 8 ou 16 bits de endereo. Quando utilizamos acessos de 16 bits, o byte alto de endereo exibido pelo porto 2, que fica indisponvel como port de I/O genrico. Quando utilizamos acessos em 8 bits, o valor do port 2 existente no latch do seu respectivo SFR mantido de forma que podemos implementar um sistema de gerenciamento com facilidade. Em qualquer dos casos, o port 0 contm o byte baixo de endereos multiplexado com os dados, e nesta funo utilizamos um dos FETs internos com pull-up de forma que no se orna necessria a adio de pull-up externo (se forem realizadas apenas operaes de busca na memria, o que no muito comum). O sinal de ALE deve ser utilizado para capturar o endereo vlido no latch externo. Durante qualquer acesso memria externa, escrito o byte 0FFH no latch do port 0 (SFR), destruindo a informao presente neste port, portanto, devemos salvar qualquer informao til existente no port 0 antes de acessar a memria externa. A memria de programa externa acessada sempre em duas condies: quando o sinal EA estiver ativo (nvel baixo), ou o contador de programa PC apresentar um nmero maior do que 0FFFH.
O microcontrolador 8051 tem 2 temporizadores/contadores de 16 bits, timer 0 e timer 1. Os dois podem ser programados para operar como temporizadores ou contadores independentemente. Na funo de timer, o registrador incrementado a cada ciclo de mquina, de forma que podemos imaginar o timer como um contador de ciclos de mquina. Como um ciclo de mquina consiste de 12 perodos do oscilador, podemos calcular facilmente a frequncia do nosso timer.
Milton Barreiro Junior ETE Getlio Vargas
36
Na funo de contador, o registrador incrementado a cada transio de 1 para 0 no correspondente pino de entrada. Desta forma, cada leitura toma o tempo de dois ciclos de mquina, limitando a frequncia mxima de amostragem a 1/24 da frequncia de clock. 4.12 Modos de operao Podemos ter quatro modos distintos de operao dos timers selecionados pelo registrador TMOD.
Modo 0: No modo 0, o timer um contador de 8 bits com um divisor por 32, executando na realidade, um timer de 13 bits, compatvel com o timer do 8048, como indicado na figura abaixo:
Osc 12 C/T = 0 TL1 TH1 (5 bits) (8 bits) T1 Pin TR1 C/T = 1 Control TF1 Interrupt
Neste modo, quando o contador passa de todos os bits em 0, o flag respectivo TFx setado no registrador TCON. O disparo do timer feito por outro bit no
registrador TCON, o bit TRx (Timer Run). O bit Gate, presente no registrador TMOD permite o uso de uma interrupo conjuntamente com o timer. Devemos lembrar
sempre de programar TMOD antes de programar TCON para disparo do timer. O registrador de 13 bits consiste nos 8 bits de THx e nos 5 bits mais baixos de TLx, sendo os 3 bits restantes do registrador TLx ignorados.
Modo 1: No modo 1, os timer se comportam da mesma forma que no modo 0, exceto pelo fato de que os registradores agora utilizam a totalidade dos 16 bits disponveis para cada um dos contadores.
Milton Barreiro Junior ETE Getlio Vargas
37
Modo 2: O modo 2 configura o registrador do timer como um contador de 8 bits (TLx) com recarga automtica, como mostrado na figura abaixo:
Osc 12 C/T = 0 TL1 (8 bits) T1 Pin TR1 C/T = 1 Control Reload TF1 Interrupt
TH1 (8 bits)
Quando ocorre o overflow de TLx, o flag TLx setado e o contedo de TLx recarregado com o valor de THx, que deve ser anteriormente carregado por software. O valor de THx permanece inalterado.
Modo 3: O modo 3 deve ser utilizado quando necessitamos de um outro contador no 8051. Quando ativamos o modo 3, estabelecemos dois contadores separados, um para o THx e outro para o TLx. O timer procedente de TLx utiliza para seu controle, os bits C/T, Gate, TR0, INTx e TFx, relativos ao timer 0, enquanto que o timer relativo ao registrador THx, utiliza os bits de controle relativos ao timer 1. A figura abaixo ilustra a lgica de atuao deste modo.
Osc 12 1/12 Freq. Osc
1/12 Freq. Osc C/T = 0 TL0 (8 bits) T0 Pin TR0 C/T = 1 Control TF0 Interrupt
Gate ___ Int0 Pin 1/12 Freq. Osc Control TH0 (8 bits) TR1 TF1 Interrupt
38
A interface serial presente no microcontrolador do tipo full-duplex, pode transmitir e receber dados simultaneamente, com buffer de recepo, ou seja, pode comear a receber um segundo byte antes de ler o primeiro byte do buffer. Os buffers de transmisso e recepo so comandados pelo registrador SBUF no SFR. Escrita no SBUF carrega o buffer de transmisso, enquanto que leituras no SBUF acessam um registrador de recepo separado fisicamente. A interface serial pode operar em 4 modos distintos, e em qualquer dos modos a transmisso iniciada por qualquer instruo que utilize o SBUF como registrador de destino. A recepo se d quando chega um dado no SBUF. 4.14 Modos de Operao
Podemos operar com a interface serial interna do microcontrolador, de quatro modos diferentes:
Modo 0: Neste modo, os dados manipulados entram pelo pino RXD, enquanto que o pino TXD utilizado como sada. Temos ento a transmisso de 8 bits, sendo que o primeiro bit o LSB, e a frequncia de baud rate fixa em 1/12 da frequncia do oscilador. A transmisso iniciada por qualquer instruo que utilize o SBUF como registrador de destino. Imediatamente aps esta instruo, colocado um bit 1 na nona posio do shift register e o bloco de controle de transmisso comea a transmisso. Os bits de dados so deslocados para a direita e so colocados zeros nas posies desocupadas, at que se chegue no MSB. Esta condio avisa para o bloco de controle que deve ser efetuado um deslocamento, e em seguida setada a flag TI. Todo este processo ocorre no tempo de 10 ciclos de mquina. A recepo comea quando a condio REN igual a 1 e o flag RI igual a 0. Os dados recebidos so deslocados e aps a chegada do ltimo bit, o flag de r ecepo RI setado, indicando que existem dados no buffer de recepo. A figura abaixo ilustra o processo.
39
8051 Internal BUS TB8 Write to SBUF D S Q CL SBUF RXD P3.0 ALT Output Function Shift
Zero Detector
TX Control
TI
RI
Receive
RX Control
Load SBUF
SBUF
Read SBUF
40
Send Shift
Write to SCON (Clear RI) RI Receive Receive Shift RXD (Data In) TXD (Shift Clock) D0 S5P2 D1 D2 D3 D4 D5 D6 D7
Modo 1: Dez bits so recebidos pelo pino RXD, ou transmitidos pelo pino TXD; um start bit (0), 8 bits de dados (LSB primeiro), e um stop bit. Na recepo, o stop bit vai para a posio RB8 no registrador SCON, e o baud rate determinado pelo timer 1, na maioria dos casos (podem ser utilizados tambm o timer 2 ou ambos no 8052). A transmisso ocorre da mesma forma que no modo anterior, exceto ao fato de que no existe uma linha de clock sincronizando os dois circuitos. Este sincronismo funo de bits de start e stop, presentes em cada transmisso. Aps a transmisso do ltimo bit (stop bit) o flag TI setado no registrador SCON. A recepo iniciada com a deteco da transio de 1 para 0 na linha RXD, indicando a presena do start bit na linha. Para esta funo, a linha RXD amostrada a uma taxa de 16 vezes a frequncia determinada para o baud rate. Aps esta deteco, o sinal comea a ser deslocado a partir da frequncia gerada pelo timer 1. Quando for recebido o ltimo bit (stop bit), este colocado em RB8, e o flag TI setado. A figura a seguir ilustra o diagrama de sinais da recepo do modo 1.
41
Timer 1 Overflow
Zero Detector
TX Control
TI
RX Clock RI Start
RX Control
Bit Detector
SBUF
Read SBUF
TX Clock Write to SBUF ____ Send S1P1 Data Shift TXD TI RX Clock RXD Bit detector sample times Shift RI +16 Reset Start bit D0 D1 D2 D3 D4 D5 D6 D7 Stop bit
Transmit
Start bit D0 D1 D2 D3 D4 D5 D6 D7
Stop bit
Receive
42
Modos 2 e 3: Nestes dois modos so transmitidos 11 bits pelo pino TXD, ou recebemos 11 bits atravs do pino RXD: um start bit 0, 8 bits de dados (LSB primeiro), um nono bit pr ogramvel e um stop bit 1. A diferena entre os modos 2 e 3 que no modo 3 a fr equncia de baud rate varivel, enquanto que no modo 2 a frequncia fixa em 1/32 ou 1/64 da frequncia do oscilador. Os processos de transmisso e recepo dos dados so semelhantes aos outros modos anteriormente mostrados. A figura abaixo ilustra o processo.
8051 Internal BUS TB8 Write to SBUF Phase 2 Clock (1/2 freq. osc.) D S Q CL SBUF TXD Shift
Zero Detector Mode 2 Start Smod = 1 2 Smod = 0 (Smod is PCON.7) 16 Sample 1 to 0 Transition Detector RX Clock RI Start 16
TX Control
TX Clock
RX Control
Bit Detector
SBUF
Read SBUF
43
TX Clock Write to SBUF ____ Send S1P1 Data Shift TXD TI Stop bit gen RX Clock RXD Bit detector sample times Shift RI +16 Reset Start bit D0 D1 D2 D3 D4 D5 D6 D7 TB8 Stop bit
Transmit
Stop bit
Receive
4. 15 Registrador de Controle
O controle da interface serial feito pelo j descrito registrador SCON, com a atuao do registrador PCON, (utilizando o bit SMOD). Por este registrador podemos monitorar o funcionamento da interface serial pelos bits TI, RI, TB8 e RB8, que indicam o estado da interface serial nas operaes de transmisso ou recepo. 4.16 Baud Rates
A taxa de transmisso (baud rate), tem seus valores definidos de acordo com o modo de operao estabelecido para o interface serial. No modo 0, o baud rate fixo e tem seu valor estabelecido como sendo 1/12 da frequncia do oscilador. No modo 2, a frequncia pode ter dois valores distintos, dependendo do valor do bit SMOD no registrador PCON. Se SMOD for igual a 0, o baud rate igual a 1/64 da frequncia do oscilador, se o SMOD for igual a 1, o baud rate passa a ser 1/32 da frequncia do oscilador. Quando utilizamos o timer 1 como gerador de baud rate, o baud rate nos modos 1 e 3 tem seu valor determinado pela taxa de overflow do prprio timer 1, obedecendo a frmula: Baud rate = [(2Smod)/32] x (timer 1 overflow rate)
Milton Barreiro Junior ETE Getlio Vargas
44
A interrupo do timer 1 deve ser desabilitada neste caso para evitar sinalizao indevida. O timer pode ser configurado para operao como timer ou como contador em qualquer um dos trs modos. O modo mais comumente utilizado o modo de operao como timer de auto-recarga. A frmula para se obter diretamente a frequncia do baud rate a seguinte: Baud Rate = {[(2Smod)/32] x [Fosc./[12 x (256 - TH1)]]} A tabela abaixo indica os valores mais utilizados a partir de uma dada frequncia de cristal, e os valores de recarga dos timers para facilitar a programao.
Baud Rate 19,2K 9,6K 4,8K 2,4K 1,2K 137,5 110 110 Freq. Osc. 11,059 MHz 11,059 MHz 11,059 MHz 11,059 MHz 11,059 MHz 11,968 MHz 6 MHz 12 MHz SMOD 1 0 0 0 0 0 0 0 Modo 2 2 2 2 2 2 2 1 Valor de Recarga FDH FDH FAH F4H E8H 1DH 72H FEEBH
Devemos observar os valores de mxima frequncia para cada um dos modos, e respeit-los, pois o uso de frequncias acima destes valores acarretariam perdas de informao na comunicao serial. A tabela abaixo indica estas frequncias:
Modo 0 1e3 2 Frequncia Mxima 1 MHz 62,5 KHz 375 KHz
4.17 Interrupes
Os microcontroladores da famlia 8051 so providos de 5 fontes de interrupo, como mostradas na figura a seguir. As interrupes externa INT0 e INT1 podem ser ativadas por nvel lgico ou por transio (borda), dependendo para isto, dos bits IT0 e IT1 no registrador TCON. Os flags que indicam a presena da interrupo nos pinos
Milton Barreiro Junior ETE Getlio Vargas
45
externos so IE0 e IE1 no mesmo registrador TCON. Quando uma interrupo externa recebida, o respectivo flag limpo quando a rotina de servio vetorada para o endereo da interrupo, somente se a interrupo for do tipo ativa por transio. Se a interrupo for ativa por nvel , o dispositivo externo que solicitou a interrupo se encarrega do seu controle.
____ INT0
0 IT0 1 IE0
TF0
____ INT1
TF1
RI TI
TF2 EXF2
8052 only
As interrupes dos timers so geradas quando houver overflow dos mesmos, e so reestabelecidas ao seu estado inativo por hardware quando a interrupo j se encontrar devidamente vetorada. A interrupo da interface serial gerada por um OU lgico entre os flags de RI e TI, e estes flags no so limpos aps o vetoramento da interrupo, devendo ser feito este procedimento por software, aps o recebimento ou transmisso do dado. Todos os bits que geram interrupo podem ser habilitados ou no pelo registrador de habilitao de interrupo IE. Os vetores de endereo das interrupes, ou seja, os endereos para qual o PC direcionado quando ocorre uma interrupo so fixos e seus valores so indicados a seguir:
46
Cada uma das fontes de interrupo pode ser individualmente programada para atender a um dos dois possveis nveis de interrupo, mediante um bit especfico no registrador IP. Colocando um valor 0 no bit correspondente, definimos esta interrupo como de menor prioridade, e vice-versa. Quando temos duas interrupes de mesma prioridade, no mesmo instante, elas sero atendidas pelo pool select que realizado na seguinte ordem: IE0 TF0 IE1 TF1 Serial 4.19 Interrupes externas
As fontes externas de interrupo podem ser programadas para serem ativadas por nvel ou por borda, desde que os pinos de interrupo externa sejam amostrados uma vez a cada ciclo de mquina, a entrada de interrupo deve manter-se estvel por pelo menos 12 perodos do oscilador para que a interrupo seja reconhecida. No caso da interrupo ser ativa por transio, deve-se manter em um nvel por um ciclo de mquina e mudar para outro nvel, mantendo-se nele por outro ciclo de mquina. Aps o reconhecimento, o flag IEx setado no registrador TCON sendo automaticamente resetado pela CPU quando a rotina de servio da interrupo chamada. Se a interrupo ativa por nvel, este nvel deve ser mantido pelo tempo necessrio para que seja reconhecida a interrupo, e depois deve ser desativada antes que a rotina de tratamento da interrupo se complete, para evitar que outro pedido de interrupo seja gerado.
47
Existem outros circuitos que devem ser considerados quando da elaborao do hardware de um microcontrolador. Alm dos j citados circuitos de decodificao de dados/endereos, utilizado para acesso a memria externa, pull-ups e buffers nas linhas de dados e endereos, alguns merecem especial cuidado e ateno na construo. 4.21 Circuito de Reset
A entrada do reset se d pelo pino RST, quando este mantido em nvel alto por pelo menos dois ciclos de mquina, aps o circuito do oscilador comear a funcionar. Logo aps o reset, os valores colocados nos registradores so os indicados abaixo:
Fonte PC Acc B PSW SP DPTR P0-P3 IP IE TMOD TCON TH0 TL0 TH1 TL1 SCON SBUF PCON (HMOS) PCON (CHMOS) Endereo 0000H 00H 00H 00H 07H 0000H FFH XXX00000b 0XX00000b 00H 00H 00H 00H 00H 00H 00H Indeterminado 0XXXXXXXb 0XXX0000b
Normalmente utilizamos um circuito conhecido como Power On Reset, para que o microcontrolador seja inicializado ao ligarmos o equipamento. O circuito abaixo ilustra um exemplo tpico de circuito para uma tenso de 5Vcc, e frequncia de 10MHz. Devemos notar que para os circuitos CHMOS, devido caractersticas construtivas do
48
dispositivo, no se faz necessrio o uso do resistor externo, simplificando ainda mais o circuito.
8K2
805 1
Vss
Podemos utilizar o oscilador interno ao microcontrolador como indicado anteriormente neste mesmo manual. Devemos utilizar um cristal com as seguintes caractersticas: Co (Shunt Capacitance) mx. 7pF Cl (Load Capacitance) 30 pF (10%) Potncia 1mW
A resistncia equivalente em srie depende da frequncia do cristal, tendo seus valores prticos demarcados no grfico a seguir:
600
ESR in Ohms
49
Este modo de operao muito til durante a construo de programas, e desenvolvimento do hardware, para solucionar eventuais problemas surgidos no decorrer destes processos. Podemos entender esta operao, lembrando o funcionamento da j conhecida estrutura das interrupes do microcontrolador. Quando uma interrupo est em progresso, outra interrupo de mesmo nvel no pode ser ativada simultaneamente. O fato que a prxima interrupo s ocorre aps a execuo de pelo menos uma instruo do programa interrompido, de forma que, colocando a interrupo INT0 (por exemplo) em nvel baixo e acrescentando algumas linhas de programa nas rotinas de tratamento da interrupo. As linhas so as seguintes:
JNB P3.2,$ ; aguarda at que a interrupo v para alto JB P3.2,$ ; aguarda at que a interrupo v para baixo RETI ; volta e executa uma instruo
Desta forma, quando a INT0 ativada em nvel baixo, a CPU vai para a rotina de tratamento da interrupo e fica at que o sinal INT0 pulse (de baixo para alto e novamente para baixo). Desta forma ela executa o comando de retorno da interrupo, executa uma instruo e imediatamente retorna a rotina de interrupo, permanecendo nesta at que o sinal INT0 pulse novamente. Esta uma forma simples de acompanhar a execuo das rotinas de um programa passo a passo, mas normalmente vamos executar estas rotinas atravs de um software de simulao apropriado, onde sero detectadas as principais falhas na programao.
50
A figura abaixo ilustra a pinagem do controlador 8051 nas duas formas de encapsulamento mais comuns:
43 P0.0 AD0
42 P0.1 AD1
41 P0.2 AD2
P1.4
P1.3
P1.2
4 5 6 7 8 9 Pin (DIP)
37 P0.2 AD2
6 5 4 3 2
36 P0.3 AD3 35 P0.4 AD4 34 P0.5 AD5 33 P0.6 AD6 32 P0.7 AD7 31 EA / Vpp* 30 ALE /Prog 29 PSE * N A15 28 P2.7 27 P2.6 A14 26 P2.5 A13 25 P2.4 A12 24 P2.3 A11 23 P2.2 A10 22 P2.1 A9 21 P2.0 A8 P1.5 P1.6 7 8
NC
38 P0.1 AD1
44 Vcc
39 P0.0 AD0
40 P0.3 AD3
** T2 P1.0
40 Vcc
Index Corner
39 P0.4 AD4 38 P0.5 AD5 37 P0.6 AD6 36 P0.7 AD7 Pad (LCC, PLCC) 35 EA / Vpp* 34 NC 33 ALE / Prog 32 PSE * N A15 31 P2.7 30 P2.6 A14 29 P2.5 A13
WR P3.6 18 RD P3.7 19 XTAL2 20 XTAL1 21 Vss 22 NC 23 P2.0 A8 24 P2.1 A9 25 P2.2 A10 26 P2.3 A11 27 P2.4 A12 28
P1.7 9 Rst 10 RXD P3.0 11 NC 12 TXD P3.1 13 INT0 P3.2 14 INT1 P3.3 15 T0 P3.4 16 T1 P3.5 17
RXD P3.0 10 TXD P3.1 11 INT0 P3.2 12 INT1 P3.3 13 T0 P3.4 14 T1 P3.5 15 WR P3.6 16 RD P3.7 17 XTAL2 18 XTAL1 19 Vss 20 * EPROM Only ** 8052/8032 Only
51
Pino 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
Descrio Port 1, Dado 0 Port 1, Dado 1 Port 1, Dado 2 Port 1, Dado 3 Port 1, Dado 4 Port 1, Dado 5 Port 1, Dado 6 Port 1, Dado 7 Entrada de Reset Port 3, Dado 0 (RXD da interface serial interna) Port 3, Dado 1 (TXD da interface serial interna) Port 3, Dado 2 (Interrupo externa INT0) Port 3, Dado 3 (Interrupo externa INT1) Port 3, Dado 4 (Entrada do Timer 0) Port 3, Dado 5 (Entrada do Timer 1) Port 3, Dado 6 (Sinal de escrita para memria exemploterna) Port 3, Dado 7 (Sinal de leitura para memria externa) Entrada do cristal do oscilador Entrada do cristal do oscilador Alimentao Terra Port 2, Bit0 (Endereo A8) Port 2, Bit1 (Endereo A9) Port 2, Bit2 (Endereo A10) Port 2, Bit3 (Endereo A11) Port 2, Bit4 (Endereo A12) Port 2, Bit5 (Endereo A13) Port 2, Bit6 (Endereo A14) Port 2, Bit7 (Endereo A15) Sinal PSEN (Program Search Enable) Sinal ALE (Address Latch Enable) *Prog no 8751 Sinal EA (External Access) *Tenso de Prog no 8751 Port 0, Bit 7 (Dado 7) Port 0, Bit 6 (Dado 6) Port 0, Bit 5 (Dado 5) Port 0, Bit 4 (Dado 4) Port 0, Bit 3 (Dado 3) Port 0, Bit 2 (Dado 2) Port 0, Bit 1 (Dado 1) Port 0, Bit 0 (Dado 0) Alimentao de +5V
52
5 PROGRAMAO E SIMULAO 5.1 COMPILAO E LINKAGEM Um programa escrito em linguagem assembly (PROGRAMA FONTE), no pode ser diretamente processado pelo microcontrolador do sistema, devendo primeiramente ser traduzido para a sua linguagem de mquina, com o uso de tabelas ou por meio de um programa destinado para tal tarefa chamado de COMPILADOR, que fornece ento como sada o PROGRAMA OBJETO. Define-se COMPILADOR como um programa aplicativo que transforma um arquivo constitudo por cdigos ASCII (PROGRAMA FONTE: obrigatoriamente com extenso .ASM), gerado normalmente por um editor de textos, em um arquivo bin rio que contm os bytes correspondentes s instrues (cdigos de mquina) do microcontrolador. Como resultado da compilao so criados dois arquivos: - Arquivo de mesmo nome, porm com a extenso .OBJ (PROGRAMA OBJETO). - Arquivo de mesmo nome, porm com a extenso .LIST, que corresponde a um arquivo texto que mostra o resultado da compilao, contendo para cada linha de programa, o cdigo de mquina correspondente instruo, sendo muito til na depurao de erros de compilao. A linkagem tem a finalidade de reunir, em um nico arquivo, todos as rotinas escrita em um ou vrios arquivos diferentes. Aps a linkagem so gerados dois arquivos: - Arquivo de mesmo nome, sem extenso, usado pelo programa simulador. - Arquivo de mesmo nome, porm com a extenso .HEX, usado por gravadores de memrias e microcontroladores e tambm pelo programa simulador. PROGRAMA COMPILADOR PROGRAMA LINKER PROGRAMA FONTE .ASM
Milton Barreiro Junior ETE Getlio Vargas
OBJETO .OBJ
EXECUTVEL .HEX
53
5.2 DIRETIVAS (ou PSEUDO-INSTRUES) de Compilao Alm das instrues pertencentes ao microcontrolador em questo, a linguagem assembly possui ainda algumas instrues especiais, pseudo-instrues ou diretivas, que so usadas apenas para a estruturao do programa. Estas instrues especiais, que no so traduzidas para o cdigo de mquina por no pertencerem ao conjunto de instrues do microcontrolador escolhido, possuem apenas funes especiais no programa como: definir smbolos, estabelecer o endereo inicial do programa, reservar rea de memria etc, no sendo, portanto, processadas. PSEUDO-INSTRUES MAIS USADAS ORG (ORIGIN) Formato: Pseudo-instruo operando ORG endereo Funo: Usado para o endereo inicial de memria, no qual o programa ou um trecho de programa ser armazenado. Exemplo: ORG 0100H Assim o programa objeto ser carregado na memria a partir do endereo 0100H DB (DEFINE BYTE) Formato: Pseudo-instruo operando DB byte Funo:
Milton Barreiro Junior ETE Getlio Vargas
54
O byte do operando carregado diretamente na posio de memria escolhida pelo ORG. Exemplo: ORG 0050H DB 3FH DB 1AH Assim os bytes 3FH e 1AH foram armazenados nas posies de memria 0050H e 0051H respectivamente. END Formato: Pseudo-instruo END Funo: Indica o final do programa.
5.3 USO DO COMPILADOR E DO LINKER (PASSO A PASSO) OBS: Comandos digitados na linha de prompt do DOS. 1. Com o NE ou EDIT escrever um programa em assembly nomeado obrigatoriamente com a extenso .ASM (criando assim programa fonte). OBS: No editor de textos deve-se obrigatoriamente reservar as colunas de 1 a 6 para os labels ou tags que representam os endereos do programa, de entrada de loops, chamada de sub-rotinas etc. 2. Com o X8051 (compilador) obter os arquivos com extenso .OBJ (progr ama objeto) e .LST (listagem) da seguinte forma:
X8051 [ENTER] Listing Destination (..........): D [ENTER] Generate cross reference [ENTER] Input file name:.........nome do arquivo.ASM [ENTER]
Milton Barreiro Junior ETE Getlio Vargas
55
LINK [ENTER] Input file name: ........ .OBJ [ENTER] Enter offset for ....... [ENTER] Input file name: [ENTER] Output file name: [ENTER] Options (..........): H [ENTER]
4. No simulador:
56
Para uma rpida ambientao com o programa simulador, apresentada uma seqncia de testes para as principais teclas e/ou comandos: Visualizao geral da tela, visando reconhecer os seus principais campos (coloridos) e funes correspondentes. Teclas: ESC CTRL C Comandos: Help Commands Display Simulation Avocet Registration Load Avocet Quit Exit setUp Cursor Yes No View Memory-map
Milton Barreiro Junior ETE Getlio Vargas
57
Symbols Alpha Registers Data Bit SFR eXecute Seqncia para carregar um arquivo no simulador e informaes sobre a simulao: Load Avocet ... .OBJ Help Simulation Teclas para a simulao F1: executa o programa inteiro. F10: executa um programa instruo por instruo. F9: volta para a condio anterior, aps a execuo de uma instruo.
58
Temos na tabela a seguir o set de instrues do 8051, indicando o seu opcode, conforme j explicado, o nmero de bytes da instruo, os perodos de clock necessrios e os flags afetados. Temos a seguinte codificao na tabela: @ significa endereado pelo valor de ...; #Dado indica valor constante de 8 bits; #Dado 16 indica valor constante de 16 bits; Direto indica um endereamento de memria de 8 bits (primeiras 256 rel indica que o endereamento relativo; ? indica depende do resultado ou da operao; - indica no afetado; 1 indica setado; 0 indica zerado.
Flags afetados CY AC 0V -
Opcode 00
Mnemnico NOP
Funo Nenhuma operao Desvia para outro endereo numa fai-xa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) Desvia para qualquer posio da memria de programa. Desloca acumulador direita
b7 b0
Bytes 1
Pulsos 12
01
AJMP End11
24
02
LJMP End16
24
03
RR A
12
04 05 06 07 08 09 0A 0B
INC A INC Direto INC @R0 INC @R1 INC R0 INC R1 INC R2 INC R3
Soma 1 ao acumulador Soma 1 posio de memria Soma 1 RAM endereada por R0 Soma 1 RAM endereada por R1 Soma 1 ao contedo de R0 Soma 1 ao contedo de R1 Soma 1 ao contedo de R2 Soma 1 ao contedo de R3
1 2 1 1 1 1 1 1
12 12 12 12 12 12 12 12
59
Opcode 0C 0D 0E 0F 10
Funo Soma 1 ao contedo de R4 Soma 1 ao contedo de R5 Soma 1 ao contedo de R6 Soma 1 ao contedo de R7 Desvia se o bit endereado estiver setado e depois zera o bit Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) Chama sub-rotina em qualquer posio da memria de programa Desloca o acumulador direita atravs do carry
b7 b0 Cy
Bytes 1 1 1 1 3
Pulsos 12 12 12 12 24
Flags afetados CY AC 0V -
11
ACALL End11
24
12
LCALL End16
24
13
RRC A
12
14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20
DEC A DEC Direto DEC @R0 DEC @R1 DEC R0 DEC R1 DEC R2 DEC R3 DEC R4 DEC R5 DEC R6 DEC R7 JB bit, rel
21
AJMP End11
22
RET
Subtrai 1 do acumulador Subtrai 1 da posio de memria Subtrai 1 da RAM endereada por R0 Subtrai 1 da RAM endereada por R1 Subtrai 1 do contedo de R0 Subtrai 1 do contedo de R1 Subtrai 1 do contedo de R2 Subtrai 1 do contedo de R3 Subtrai 1 do contedo de R4 Subtrai 1 do contedo de R5 Subtrai 1 do contedo de R6 Subtrai 1 do contedo de R7 Desvio se o bit endereado estiver setado Desvia para outro endereo numa fai-xa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) Retorne da sub-rotina Desloca o acumulador esquerda
b7 b0
1 2 1 1 1 1 1 1 1 1 1 1 3
12 12 12 12 12 12 12 12 12 12 12 12 24
24
24
23
RL A
12
24 25
2 2
12 12
? ?
? ?
? ?
60
Opcode 26
Funo Soma o contedo da RAM endereada por R0 ao acumulador Soma o contedo da RAM endereada por R1 ao acumulador Soma o contedo de R0 ao acumulador Soma o contedo de R1 ao acumulador Soma o contedo de R2 ao acumulador Soma o contedo de R3 ao acumulador Soma o contedo de R4 ao acumulador Soma o contedo de R5 ao acumulador Soma o contedo de R6 ao acumulador Soma o contedo de R7 ao acumulador Desvia se o bit endereado estiver zerado Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) Retorne da interrupo Desloca o acumulador esquerda atravs do carry
Cy b7 b0
Bytes 1
Pulsos 12
Flags afetados CY AC 0V ? ? ?
27 28 29 2A 2B 2C 2D 2E 2F 30
ADD A, @R1 ADD A, R0 ADD A, R1 ADD A, R2 ADD A, R3 ADD A, R4 ADD A, R5 ADD A, R6 ADD A, R7 JNB bit, rel
1 1 1 1 1 1 1 1 1 3
12 12 12 12 12 12 12 12 12 24
? ? ? ? ? ? ? ? ? -
? ? ? ? ? ? ? ? ? -
? ? ? ? ? ? ? ? ? -
31 32
2 1
24 24
33
RLC A
12
34 35
36
ADDC A, @R0
37 38 39 3A
Soma o dado e o carry ao acumulador Soma o contedo da posio de memria e o carry ao acumulador Soma o contedo da RAM endereada por R0 e o carry ao acumulador Soma o contedo da RAM endereada por R1 e o carry ao acumulador Soma o contedo de R0 e o carry ao acumulador Soma o contedo de R1 e o carry ao acumulador Soma o contedo de R2 e o carry ao acumulador
2 2
12 12
? ?
? ?
? ?
12
1 1 1 1
12 12 12 12
? ? ? ?
? ? ? ?
? ? ? ?
61
Opcode 3B 3C 3D 3E 3F 40
Funo Soma o contedo de R3 e o carry ao acumulador Soma o contedo de R4 e o carry ao acumulador Soma o contedo de R5 e o carry ao acumulador Soma o contedo de R6 e o carry ao acumulador Soma o contedo de R7 e o carry ao acumulador Desvia se o carry estiver setado Desvia para outro endereo numa fai-xa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) Ou entre acumulador e m emria; resultado na memria Ou entre dado e memria
Bytes 1 1 1 1 1 2
Pulsos 12 12 12 12 12 24
Flags afetados CY AC 0V ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -
41
AJMP End11
24
42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50
2 3 2 2 1 1 1 1 1 1 1 1 1 1 2
12 24 12 12 12 12 12 12 12 12 12 12 12 12 24
51
52 53
Ou entre dado e acumulador Ou entre memria e acum uORL A, Direto lador Ou entre a RAM endereada ORL A, @R0 por R0 e o acumulador Ou entre a RAM endereada ORL A, @R1 por R1 e o acumulador Ou entre o contedo de R0 e ORL A, R0 o acumulador Ou entre o contedo de R1 e ORL A, R1 o acumulador Ou entre o contedo de R2 e ORL A, R2 o acumulador Ou entre o contedo de R3 e ORL A, R3 o acumulador Ou entre o contedo de R4 e ORL A, R4 o acumulador Ou entre o contedo de R5 e ORL A, R5 o acumulador Ou entre o contedo de R6 e ORL A, R6 o acumulador Ou entre o contedo de R7 e ORL A, R7 o acumulador Desvia se o carry estiver zeraJNC rel do Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 ACALL End11 primeiros bits MSB do OpCode so os bits MSB do endereo) E entre acumulador e mem ANL Direto, A ria; resultado na memria ANL Direto, #dado E entre dado e memria
24
2 3
12 24
62
Opcode 54
Funo
Bytes 2 2 1 1 1 1 1 1 1 1 1 1 2
Pulsos 12 12 12 12 12 12 12 12 12 12 12 12 24
Flags afetados CY AC 0V -
E entre dado e acumulador E entre memria e acumula55 ANL A, Direto dor E entre RAM endereada por 56 ANL A, @R0 R0 e acumulador E entre RAM endereada por 57 ANL A, @R1 R1 e acumulador E entre o contedo de R0 e o 58 ANL A, R0 acumulador E entre o contedo de R1 e o 59 ANL A, R1 acumulador E entre o contedo de R2 e o 5A ANL A, R2 acumulador E entre o contedo de R3 e o 5B ANL A, R3 acumulador E entre o contedo de R4 e o 5C ANL A, R4 acumulador E entre o contedo de R5 e o 5D ANL A, R5 acumulador E entre o contedo de R6 e o 5E ANL A, R6 acumulador E entre o contedo de R7 e o 5F ANL A, R7 acumulador Desvia se o acumulador for 60 JZ rel zero Desvia para outro endereo numa fai-xa de 2Kbytes da atual posio (3 primeiros bits 61 AJMP End11 MSB do OpCode so os bits MSB do endereo) Ou exclusivo entre acumulador e memria; resultado na 62 XRL Direto, A memria XRL Direto, #Da- Ou exclusivo entre dado e 63 do memria Ou exclusivo entre dado e 64 XRL A, #Dado acumulador Ou exclusivo entre memria 65 XRL A, Direto e acumulador Ou exclusivo entre RAM en66 XRL A, @R0 dereada por R0 e acumulador Ou exclusivo entre RAM en67 XRL A, @R1 dereada por R1 e acumulador Ou exclusivo entre contedo 68 XRL A, R0 de R0 e acumulador Ou exclusivo entre contedo 69 XRL A, R1 de R1 e acumulador Ou exclusivo entre contedo 6A XRL A, R2 de R2 e acumulador Ou exclusivo entre contedo 6B XRL A, R3 de R3 e acumulador Ou exclusivo entre contedo 6C XRL A, R4 de R4 e acumulador Milton Barreiro Junior ETE Getlio Vargas
24
2 3 2 2 1 1 1 1 1 1 1
12 24 12 12 12 12 12 12 12 12 12
63
Opcode 6D 6E 6F 70
Funo Ou exclusivo entre contedo de R5 e acumulador Ou exclusivo entre contedo de R6 e acumulador Ou exclusivo entre contedo de R7 e acumulador Desvia se o acumulador no for zero Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) Ou entre o bit endereado e o carry Desvia para o endereo obtido da soma do acumulador e do DPTR Mova o dado para o acumulador Mova o dado para a memria
Bytes 1 1 1 2
Pulsos 12 12 12 24
Flags afetados CY AC 0V -
71
ACALL End11
24
72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80
ORL C, bit JMP @A+DPTR MOV A, #Dado MOV Direto, #Dado MOV @R0, #Dado MOV @R1, #Dado
2 1 2 3 2 2 2 2 2 2 2 2 2 2 2
24 24 12 24 12 12 24 24 24 24 24 24 24 24 24
? -
81
82
83
Mova dado para RAM endereada indiretamente por R0 Mova dado para RAM endereada indiretamente por R1 Mova o dado para o registro MOV R0, #Dado R0 Mova o dado para o registro MOV R1, #Dado R1 Mova o dado para o registro MOV R2, #Dado R2 Mova o dado para o registro MOV R3, #Dado R3 Mova o dado para o registro MOV R4, #Dado R4 Mova o dado para o registro MOV R5, #Dado R5 Mova o dado para o registro MOV R6, #Dado R6 Mova o dado para o registro MOV R7, #Dado R7 SJMP rel Desvio curto relativo Desvia para outro endereo numa fai-xa de 2Kbytes da AJMP End11 atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) E entre o bit endereado e o ANL C, bit carry Soma A + PC obtendo um endereo de 16 bits na memria MOVC A, @A+PC de programa; carrega o acumulador com esta memria
24
24
24
64
Opcode 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90
Mnemnico DIV AB MOV Direto1, Direto2 MOV Direto, @R0 MOV Direto, @R1 MOV Direto, R0 MOV Direto, R1 MOV Direto, R2 MOV Direto, R3 MOV Direto, R4 MOV Direto, R5 MOV Direto, R6 MOV Direto, R7 MOV DPTR, #Dado 16 ACALL End11
Funo Divide A e B; resultado: A inteiro e B resto Mova o contedo da memria direta2 para a memria direta1 Mova RAM endereada por R0 para memria Mova RAM endereada por R1 para memria Mova registro R0 para memria Mova registro R1 para memria Mova registro R2 para memria Mova registro R3 para memria Mova registro R4 para memria Mova registro R5 para memria Mova registro R6 para memria Mova registro R7 para memria Mova dado de 16 bits para o DPTR Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) Mova o carry para o bit endereado Soma A + DPTR obtendo um endereo de 16 bits na memria de programa; carrega o acumulador com esta memria Subtrai o dado e o borrow do acumulador Subtrai o contedo da posio de memria e o borrow do acumulador Subtrai o contedo da RAM endereada por R0 e o borrow do acumulador Subtrai o contedo da RAM endereada por R1 e o borrow do acumulador Subtrai o contedo de R0 e o borrow do acumulador Subtrai o contedo de R1 e o borrow do acumulador Subtrai o contedo de R2 e o borrow do acumulador
Bytes 1 3 2 2 2 2 2 2 2 2 2 2 3
Pulsos 48 24 24 24 24 24 24 24 24 24 24 24 24
Flags afetados CY AC 0V 0 ? 0 -
91
24
92
24
93
24
94 95
2 2
12 12
? ?
? ?
? ?
96
SUBB A, @R0
12
97 98 99 9A
1 1 1 1
12 12 12 12
? ? ? ?
? ? ? ?
? ? ? ?
65
Opcode 9B 9C 9D 9E 9F A0
Funo Subtrai o contedo de R3 e o borrow do acumulador Subtrai o contedo de R4 e o borrow do acumulador Subtrai o contedo de R5 e o borrow do acumulador Subtrai o contedo de R6 e o borrow do acumulador Subtrai o contedo de R7 e o borrow do acumulador Ou entre o complemento do bit endereado e o carry Desvia para outro endereo numa fai-xa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) Mova o bit endereado para o carry Soma 1 ao registro DPTR Multiplica A e B; resultado: BA Mova a memria para a RAM endereada por R0 Mova a memria para a RAM endereada por R1 Mova memria para o registro R0 Mova memria para o registro R1 Mova memria para o registro R2 Mova memria para o registro R3 Mova memria para o registro R4 Mova memria para o registro R5 Mova memria para o registro R6 Mova memria para o registro R7 E entre o complemento do bit endereado e o carry Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) Inverte o estado do bit endereado Inverte o estado do carry
Bytes 1 1 1 1 1 2
Pulsos 12 12 12 12 12 24
Flags afetados CY AC 0V ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -
A1
AJMP End11
24
A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0
2 1 1
12 24 48
? 0
MOV @R0, Direto MOV @R1, Direto MOV R0, Direto MOV R1, Direto MOV R2, Direto MOV R3, Direto MOV R4, Direto MOV R5, Direto MOV R6, Direto MOV R7, Direto ANL C, /bit
2 2 2 2 2 2 2 2 2 2 2
24 24 24 24 24 24 24 24 24 24 24
B1
ACALL End11
24
B2 B3
2 1
12 12
66
Opcode B4 B5
Mnemnico CJNE A, #Dado rel CJNE A, Direto rel CJNE @R0, #Dado rel CJNE @R1, #Dado rel CJNE R0, #Dado rel CJNE R1, #Dado rel CJNE R2, #Dado rel CJNE R3, #Dado rel CJNE R4, #Dado rel CJNE R5, #Dado rel CJNE R6, #Dado rel CJNE R7, #Dado rel PUSH Direto
Funo Compara e desvia se o acumulador for diferente do dado Compara e desvia se o acumulador for diferente da memria endereada Compara e desvia se a RAM endereada por R0 for diferente do dado Compara e desvia se a RAM endereada por R1 for diferente do dado Compara e desvia se o registro R0 for diferente do dado Compara e desvia se o registro R1 for diferente do dado Compara e desvia se o registro R2 for diferente do dado Compara e desvia se o registro R3 for diferente do dado Compara e desvia se o registro R4 for diferente do dado Compara e desvia se o registro R5 for diferente do dado Compara e desvia se o registro R6 for diferente do dado Compara e desvia se o registro R7 for diferente do dado Incrementa o SP e ento coloca a memria no Stack Desvia para outro endereo numa fai-xa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) Zera o bit endereado Zera o carry Troca os nibbles do acumulador. Equivale a 4 RR A ou 4 RL A
b7 b6 b5 b4 b3 b2 b1 b0 b3 b2 b1 b0 b7 b6 b5 b4
Bytes 3 3
Pulsos 24 24
Flags afetados CY AC 0V ? ? -
B6
24
B7 B8 B9 BA BB BC BD BE BF C0
3 3 3 3 3 3 3 3 3 2
24 24 24 24 24 24 24 24 24 24
? ? ? ? ? ? ? ? ? -
C1
AJMP End11
24
C2 C3
2 1
12 12
C4
SWAP A
12
C5 C6
C7
XCH A, @R1
Troca memria com o acumulador Troca a RAM indiretamente endereada por R0 com o acumulador Troca a RAM indiretamente endereada por R1 com o acumulador
2 1
12 12
12
67
Opcode C8 C9 CA CB CC CD CE CF D0
Mnemnico XCH A, R0 XCH A, R1 XCH A, R2 XCH A, R3 XCH A, R4 XCH A, R5 XCH A, R6 XCH A, R7 POP Direto
Funo Troca entre si o contedo do acumulador e o registro R0 Troca entre si o contedo do acumulador e o registro R1 Troca entre si o contedo do acumulador e o registro R2 Troca entre si o contedo do acumulador e o registro R3 Troca entre si o contedo do acumulador e o registro R4 Troca entre si o contedo do acumulador e o registro R5 Troca entre si o contedo do acumulador e o registro R6 Troca entre si o contedo do acumulador e o registro R7 Retira dado do stack e coloca na memria, depois decrementa SP Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) Seta o bit endereado Seta o carry Ajuste decimal do acumulador Decrementa a memria e desvia se for diferente de zero Troca nibble menos significativo do acumulador com a RAM endereada indiretamente por R0 entre si Troca nibble menos significativo do acumulador com a RAM endereada indiretamente por R1 entre si Decrementa o registro R0 e desvia se for diferente de zero Decrementa o registro R1 e desvia se for diferente de zero Decrementa o registro R2 e desvia se for diferente de zero Decrementa o registro R3 e desvia se for diferente de zero Decrementa o registro R4 e desvia se for diferente de zero Decrementa o registro R5 e desvia se for diferente de zero Decrementa o registro R6 e desvia se for diferente de zero Decrementa o registro R7 e desvia se for diferente de zero
Bytes 1 1 1 1 1 1 1 1 2
Pulsos 12 12 12 12 12 12 12 12 24
Flags afetados CY AC 0V -
D1 D2 D3 D4 D5
2 2 1 1 3
24 12 12 12 24
1 ? -
? -
D6
XCHD A, @R0
12
D7
XCHD A, @R1
12
D8 D9 DA DB DC DD DE DF
DJNZ R0, rel DJNZ R1, rel DJNZ R2, rel DJNZ R3, rel DJNZ R4, rel DJNZ R5, rel DJNZ R6, rel DJNZ R7, rel
2 2 2 2 2 2 2 2
24 24 24 24 24 24 24 24
68
Opcode E0
Mnemnico
Funo
Bytes 1
Pulsos 24
Flags afetados CY AC 0V -
E1
E2
E3 E4 E5 E6
E7 E8 E9 EA EB EC ED EE EF
F0
F1
F2
F3
Mova RAM externa indiretaMOVX A, @DPTR mente endereada pelo DPTR (16 bits) para o acumulador Desvia para outro endereo numa fai-xa de 2Kbytes da atual posio (3 primeiros bits AJMP End11 MSB do OpCode so os bits MSB do endereo) Mova RAM endereada indiretamente por R0 (8 bits) para o MOVX A, @R0 acumulador Mova RAM endereada indireMOVX A, @R1 tamente por R1 (8 bits) para o acumulador CLR A Faz o acumulador = zero Mova memria para o acumuMOV A, Direto lador Mova RAM endereada indiretamente por R0 para o acumuMOV A, @R0 lador Mova RAM endereada indireMOV A, @R1 tamente por R1 para o acumulador Mova registro R0 para o acuMOV A, R0 mulador Mova registro R1 para o acuMOV A, R1 mulador Mova registro R2 para o acuMOV A, R2 mulador Mova registro R3 para o acuMOV A, R3 mulador Mova registro R4 para o acuMOV A, R4 mulador Mova registro R5 para o acuMOV A, R5 mulador Mova registro R6 para o acuMOV A, R6 mulador Mova registro R7 para o acuMOV A, R7 mulador Mova o acumulador para a RAM externa indiretamente MOVX @DPTR, A endereada pelo DPTR (16 bits) Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 ACALL End11 primeiros bits MSB do OpCode so os bits MSB do endereo) Mova acumulador para RAM externa indiretamente endereMOVX @R0, A ada por R0 (endereo 8 bits) Mova acumulador para RAM MOVX @R1, A externa indiretamente endereada por R1 (endereo 8 bits)
24
24
1 1 2 1
24 12 12 12
1 1 1 1 1 1 1 1 1
12 12 12 12 12 12 12 12 12
24
24
24
24
69
Opcode F4 F5 F6
Funo Inverte o estado dos bits do acumulador Mova acumulador para memria Mova o acumulador para a RAM indiretamente endereada por R0 Mova o acumulador para a RAM indiretamente endereada por R1 Mova o acumulador para o registro R0 Mova o acumulador para o registro R1 Mova o acumulador para o registro R2 Mova o acumulador para o registro R3 Mova o acumulador para o registro R4 Mova o acumulador para o registro R5 Mova o acumulador para o registro R6 Mova o acumulador para o registro R7
Bytes 1 2 1
Pulsos 12 12 12
Flags afetados CY AC 0V -
F7 F8 F9 FA FB FC FD FE FF
MOV @R1, A MOV R0, A MOV R1, A MOV R2, A MOV R3, A MOV R4, A MOV R5, A MOV R6, A MOV R7, A
1 1 1 1 1 1 1 1 1
12 12 12 12 12 12 12 12 12
70
71
;************************************************************** ; PROGRAMA TESTE ;************************************************************** ORG 0000H LJMP INICIO ORG 0050H INICIO: MOV MOV MOV MOV MOV MOV MOV RR TMOD,#11H TCON,#00H A,#11111110B P0, A P1, A P2, A P3, A A DELAY ;Define endereo de incio
;Define endereo de incio de execuo ;Configura T0 e T1 no modo 1 ;Configura TCON ;Carrega ACC com 11111110 (binrio) ;Carrega ACC nos PORTS ;P0, P1, P2 e P3
VOLTA:
ACALL DE 12MHz)
LJMP VOLTA ;************************************************************** ; Rotina de Tempo de 1s ;************************************************************** DELAY: REP: MOV MOV MOV SETB JNB CLR DJNZ CLR RET END R0, #20 TH1, #3CH TL1, #0AFH TR1 TF1, $ TF1 R0, REP TR1 ;Carrega valor 20 (decimal) em R0 ;Carrega Timer 1 ;Com 3CAF (hexa) para contagem de 50ms ;Incio de contagem ;Testa se houve overflow em Timer 1 ;Reseta flag de overflow ;Repete temporizao se necessrio ;Desliga contagem
72
9 Referncias Bibliogrficas
- Aplicaes Prticas do Microcontrolador 8051 (Teoria Geral Detalhada) Vidal Pereira da Silva Junior Editora rica - Apostila de Microcontroladores Famlia MCS 51 (Conceitos, Aplicaes e Projetos) Professor Wilson Ruiz Centro Federal de Educao Tecnolgica de So Paulo (CEFET SP) - Apostila CURSO de MICROCONTROLADORES 8051 KIT STATION51 (Apostila Terica) Professor Elmo Dutra da Silveira Filho Centro Tecnolgico de Mecatrnica SENAI - Apontamentos de aulas - Laboratrio de Microcontroladores Famlia 8051 Denys E. C. Nicolosi Editora rica - Manuais de Microcontoladores Famlia 8051 dos fabricantes: INTEL ATMEL - The 8051 Microcontroller Architecture, Programming and Applications Kenneth J. Ayala Western Carolina University
73
APNDICE A
EXERCCIO / EXEMPLO 1 Projetar um sistema de controle de um elevador para 3 nveis, baseado no microcontrolador 8051, com as seguintes caractersticas: Entradas do sistema: P0 e INT0
Sadas do Sistema: P1
Nota: 1 S e desejvel possvel associar-se o primeiro andar da tabela anterior ao andar trreo de um edifcio, deslocando-se tambm os outros nveis, sem alteraes no funcionamento da soluo fornecida como exemplo a seguir.
Milton Barreiro Junior ETE Getlio Vargas
74
2 Assim que o sistema iniciado o elevador desloca-se para o primeiro andar com a porta fechada e l chegando abre a porta. 3 O elevador somente desloca-se com a porta fechada. 4 Quando a cabine est parada, sua porta conecta-se mecanicamente com a porta do respectivo andar e assim ambas tero o mesmo movimento. 5 Os botes de comando do elevador esto no interior da cabine, no existindo botes externos ao lado da porta de entrada, assim o usurio s pode entrar no elevador se este estiver parado no andar, sendo o destino escolhido pelo mesmo dentro da cabine (limitao inicialmente adotada para a simplificao do exemplo). 6 O LED aceso indica a presena da cabine no respectivo andar. 7 Normalmente no recomendvel uma freqncia de clock infer ior a 3MHz para aplicaes reais, ms nesse problema, onde um dos objetivos a determinao de um intervalo de tempo e a visualizao do funcionamento de um dos TEMPORIZADORES atravs do simulador, esta freqncia fica estabelecida em 120KHz. (valor escolhido em funo da aplicao). 8 O tempo gasto pela porta no movimento de abrir e fechar deve ser de 5 segundos e determinado pelo TIMER0 (vide descrio do clculo no cabealho do programa).
75
;Freqncia Do Timer = (Freqncia Do Clock) / 12 = 120k / 12 = 10k Hz E O Seu Perodo = 0,1x10-3 Segundos ; assim para um tempo de 5 segundos temos: 5 / 0,1x10-3 = valor da contagem = 50000 ; 65535 50000 + 1 = 15536 = 3cb0h = Valor A Ser Carregado Inicialmente No Contador / Temporizador ;************************************************************************************************ ORG 0000H LJMP INICIO ORG 0003H LJMP INT0 ORG 000BH LJMP TIMER0 ORG 0050H INICIO: MOV SP, #0030H ;estabelece o ponteiro da pilha MOV IE, #10000011B ;habilita INT0 e TIMER0 MOV IP, #00000001B ;define prioridade alta p/ INT0 e baixa p/ TIMER0 MOV TCON, #00000000B ;INT0 ativa por nvel 0 e TIMER0 desligado MOV TMOD, #00000001B ;funo de temporizao com controle do TIMER0 feito pelo bit TR0 ;modo 1 de operao CLR P1.1 ;para o elevador CLR P1.0 MOV TH0, #3CH ;valor inicial para a contagem / temporizao MOV TL0, #0B0H CLR 00 ;inicializa um bit enderevel para ser a FLAG DO TIMER0
76
;************************************************************************************************** JB P0.4, L25 ;verifica se o elevador j estava no 1o andar. ACALL DESCER ;leva o elevador inicialmente para o trreo. L1: JNB P0.4, L1 ;espera chegar no 1o andar ACALL PARAR L25: SETB P1.4 ;acende led indicador de 1o andar CLR P1.5 ;apaga led indidador de 2o andar CLR P1.6 ;apaga led indicador de 3o andar ;************************************************************************************************** ; O elevador est no 1o andar
;************************************************************************************************** ANDAR_1: JB P0.1, L2 ;testa chamada para o 2o andar JB P0.2, L3 ;testa chamada para o 3o andar AJMP ANDAR_1 ;volta para esperar uma chamada L2: L4: ACALL SUBIR ;movimenta o elevador para o 2o andar JNB P0.5, L4 ;espera chegar no 2o andar ACALL PARAR SETB P1.5 ;acende o led indicador de 2o andar LJMP ANDAR_2 L3: L5: ACALL SUBIR ;movimenta o elevador para o 3o andar JNB P0.6, L5 ;espera chegar no 3o andar ACALL PARAR SETB P1.6 ;acende o led indicador de 3o andar LJMP ANDAR_3 ;************************************************************************************************ Milton Barreiro Junior ETE Getlio Vargas
77
;************************************************************************************************ ANDAR_2: JB P0.0, L6 ;testa chamada para o 1o andar JB P0.2, L7 ;testa chamada para o 3o andar AJMP ANDAR_2 ;volta para esperar uma chamada L6: L8: ACALL DESCER ;movimenta o elevador para o 1o andar JNB P0.4, L8 ;espera chegar no 1o andar ACALL PARAR SETB P1.4 ;acende o led indicador de 1o andar LJMP ANDAR_1 L7: L9: ACALL SUBIR ;movimenta o elevador para o 3o andar JNB P0.6, L9 ;espera chegar no 3o andar ACALL PARAR SETB P1.6 ;acende o led indicador de 3o andar LJMP ANDAR_3 ;************************************************************************************************ ; O elevador est no 3o andar
;************************************************************************************************ ANDAR_3: JB P0.0, L10 ;testa chamada para o 1o andar JB P0.1, L11 ;testa chamada para o 2o andar AJMP ANDAR_3 ;volta para esperar uma chamada L10: L12: ACALL DESCER ;movimenta o elevador para o 1o andar JNB P0.4, L12 ;espera chegar no 1o andar ACALL PARAR SETB P1.4 ;acende o led indicador de 1o andar LJMP ANDAR_1 Milton Barreiro Junior ETE Getlio Vargas
78
L11: L13:
ACALL DESCER ;movimenta o elevador para o 2o andar JNB P0.5, L13 ;espera chegar no 2o andar ACALL PARAR SETB P1.5 ;acende o led indicador de 2o andar LJMP ANDAR_2
;************************************************************************************************ SUBIR: CLR P1.4 ;apaga todos os leds CLR P1.5 CLR P1.6 CLR P1.2 ;fecha a porta SETB TR0 ;liga o timer0 L20: JNB 00, L20 ;espera o trmino da temporizao CLR 00 ;reseta a FLAG DO TIMER0 SETB P1.1 ;sobe o elevador CLR P1.0 RET ;************************************************************************************************ ; sub-rotina: DESCER
;************************************************************************************************ DESCER: CLR P1.4 ;apaga todos os leds CLR P1.5 CLR P1.6 CLR P1.2 ;fecha a porta SETB TR0 ;liga o timer0 Milton Barreiro Junior ETE Getlio Vargas
79
L21:
JNB 00, L21 ;espera o trmino da temporizao CLR 00 ;reseta a FLAG DO TIMER0 CLR P1.1 ;desce o elevador SETB P1.0 RET
;************************************************************************************************ PARAR: CLR P1.1 ;para o elevador CLR P1.0 SETB P1.2 ;abre a porta SETB TR0 ;liga o timer0 L22: JNB 00, L22 ;espera o trmino da temporizao CLR 00 ;reseta a FLAG DO TIMER0 RET TIMER0: CLR TR0 ;desliga o timer0 MOV TH0, #3CH ;valor inicial para a contagem / temporizao MOV TL0, #0B0H SETB 00 ;seta a FLAG DO TIMER0 RETI ;retorna para o programa INT0: CLR P1.1 ;para o elevador CLR P1.0 SETB P1.2 ;abre a porta L23: JNB P3.2, L23 ;espera o trmino da situao de emergncia RETI END Milton Barreiro Junior ETE Getlio Vargas
80
APNDICE B
1 C ONSIDERAES INICIAIS
Este gravador s funciona para os microcontroladores, baseados no microcontrolador 8051, da srie AT89SXX. Os microcontroladores suportados pelo software de gravao so: AT89S51: 4Kbytes de memria flash AT89S52: 8Kbytes de memria flash AT89S53: 12Kbytes de memria flash AT89S8252
2 MATERIAIS NECESSRIOS
3 OBTENO DO SOFTWARE
O software utilizado se chama AEC_ISP v3.0 e pode ser obtido gratuitamente (mediante cadastro) no site do fornecedor: www.aec-electronics.co.nz
81
4 UTILIZAO DO SOFTWARE
Este programa baseado no estilo dos programas DOS, mas roda perfeitamente em ambiente Windows (at mesmo no XP). Ao executar o programa AEC_ISP.EXE, a seguinte tela ir abrir:
Sua funo gravar o arquivo .hex gerado por qualquer compilador para 8051 no microcontrolador, conforme os passos descritos a seguir: a) Aps ter o programa simulado e funcionando deve-se carregar o arquivo .hex o qual foi compilado conforme descrio em captulo anterior; b) Aps compilar o programa, copie o arquivo .hex criado para pasta onde est localizado o programa AEC_ISP.EXE; c) Execute o programa e selecionar a opo (J) Setup para configur-lo. Configure-o de acordo com a prxima tela. Lembre-se de modificar a opo (9)device onde voc deve selecionar o tipo de microcontrolador a ser programado. A etapa de configurao s deve ser feita uma vez. Para as prximas gravaes, pode-se pular este passo, desde que o microcontrolador a ser programado seja o mesmo (possua o mesmo cdigo), e ao terminar de configurar, aperte (S) Save setup para salvar as definies;
82
d) Coloque o microcontrolador no soquete, conecte o gravador na porta paralela, e ligue a fonte de alimentao; e) Na tela de opes selecione (A) Load hex file to flash buffer;
f) Digite o nome do arquivo que voc copiou para a pasta do programa; g) Finalmente selecione (E) Program. O software ir iniciar a gravao e verificao do programa, conforme a tela a seguir. Ao terminar saia do software e desconecte todos os equipamentos;
83
84
ANEXO 1 DISPLAY LCD 01 INTRODUO Os mdulos LCD so interfaces de sada muito til em sistemas microprocessados. Estes mdulos podem ser grficos e a caracter. Os mdulos LCD grficos so encontrados com resulues de 122x32, 128x64, 240x64 e 240x128 dots pixel, e geralmente esto disponveis com 20 pinos para conexo. Os LCD comuns (tipo caracter) so especificados em nmero de linhas por colunas e so encontrados nas configuraes previstas na Tabela 1.
Tabela 1 - Mdulos LCD disponveis Os mdulos podem ser encontrados com LED backlight (com uma iluminao de fundo) para facilitar as leituras durante a noite. Neste caso, a alimentao deste led faz se normalmente pelos pinos 15 e 16 para os mdulos comuns e 19 e 20 para os mdulos grficos, sendo os pinos 15 e 19 para ligao ao anodo e os pinos 16 e 20 para o catodo. A corrente de alimentao deste led varia de 100 a 200mA, dependendo do modelo. Estes mdulos utilizam um controlador prprio, permitindo sua interligao com com outras placas atravs de seus pinos, onde deve ser alimentado o mdulo e interligado o barramento de dados e controle do mdulo com a placa do usurio.
85
Naturalmente que alm de alimentar e conectar os pinos do mdulo com a placa do usurio dever haver um protocolo de comunicao entre as partes, que envolve o envio de bytes de instrues e bytes de dados pelo sistema do usurio. A Tabela 2 descreve cada pino do mdulo ou do display para conexo deste a outras placas:
Assim como em um rdio relgio todo mdulo LCD permite um ajuste na intensidade da luz emitida ou ajuste de contraste, isto possvel variando-se a tenso no pino 3. A Figura 1 mostra um circuito tpico e recomendado pela maioria dos fabricantes para efetuar este ajuste. Alguns fabricantes recomenda o uso de um resistor de 4K7 em srie com o potencimetro de 10K.
86
2 INTERFACE COM CPU Os mdulos LCD so projetados para conectar-se com a maioria das CPUs disponveis no mercado, bastando para isso que esta CPU atenda as temporizaes de leitura e escrita de instrues e dados, fornecido pelo fabricante do mdulo. A Figura 2 mostra um exemplo de diagrama de tempos tpico requeridos para operao de escrita no mdulo LCD, estes tempos variam em funo do clock da CPU do usurio.
Figura 2 - (a) Escrita no LCD (b) Ciclo de Escrita da CPU 8051 A Tabela 3 a seguir mostra a relao entre a freqncia da CPU e a temporizao de leitura/escrita da maioria dos mdulos LCD. Em geral, podemos conectar o barramento de dados da CPU ao barramento do mdulo, mapeando-o convenientemente na placa de usurio, e efetuarmos uma operao normal de leitura/escrita sem mais problemas.
87
A Figura 3 mostra um exemplo de conexo de uma placa baseada nos microcontroladores da linha Intel de 8 bits (8051), ao mdulo LCD. Neste caso como os sinais A0 e A1 esto conectados aos pinos 4 e 5, teremos ento 04 (quatro) endereos distintos para comunicao entre a CPU e o mdulo LCD. A Tabela 4 mostra estes endereos.
88
O exemplo apresentado na Figura 3 refere-se conexo do mdulo LCD com comunicao/transmisso de 8 bits, mas podemos conectar o mdulo com transmisso a cada 4 bits, conforme mostrado na Figura 4. Neste caso no utilizamos os pinos 7, 8, 9 e 10. Isto muito til quando a CPU do usurio possui poucos pinos de I/O, caso tpico da linha de microprocessadores PIC, como por exemplo o Basic Stamp. Agora surge a dvida, um mesmo mdulo pode conectar-se com 8 ou 4 bits? como isto possvel? Ocorre que o mdulo LCD quando alimentado necessita de algumas instrues de inicializao que identificar qual a forma de transmisso de dados que ser estabelecida entre a CPU e o mdulo.
89
03 PROGRAMAO / INSTRUES
Tabela 5 - Conjunto de instrues do mdulo LCD A Tabela 5 apresenta o conjunto de instrues, levando-se em considerao que a comunicao com o mdulo seja com barramento de 8 bits (fixado durante a inicializao)
Milton Barreiro Junior ETE Getlio Vargas
90
. Para o caso desta comunicao ocorrer com apenas 4 bits (nible), os 8 dados ou instrues sero enviados por nible. sendo enviado o nible mais significativo primeiro. Por exemplo para limpar o display, escreve-se o nible 0000 e depois 0001. A Tabela 6 traz um resumo das instrues mais usadas na comunicao com os mdulos LCD.
Esta instruo escreve o caracter ASCII 32 que corresponde ao branco ou barra de espao em todos os endereos da DDRAM apagando a mensagem que estiver es-
91
crita. O cursor retorna ao endereo zero, ou seja, posio mais a esquerda da primeira linha. 3.1.2 Cursor Home
Faz retornar o cursor para a posio mais a esquerda da primeira linha e faz voltar posio original mensagens previamente deslocadas. O contedo da DDRAM permanece inalterado. 3.1.3 Fixa o modo de operao
Esta instruo tem efeito somente durante a leitura ou escrita de dados, portanto, deve ser ativada na inicializao. -Estabelece o sentido de deslocamento do cursor (X=0 p/ esquerda, X=1 p/ direita) -Estabelece se a mensagem deve ou no ser deslocada com a entrada de um novo caracter S=1 SIM, S=0 NO. Exemplo: X=1 e S=1 => mensagem desloca p/ direita. 3.1.4 Controle do Display
A mensagem fica aparente quando D=1 e desaparece quando D=0, porm o contedo da DDRAM fica inalterado. O cursor fica aparente quando C=1 e desaparece quando C=0, porm as propriedades de escritas vigentes permanecem inalteradas. O cursor quando aparente liga a ltima linha que compem o caracter, exceto quando B=1, que apresenta em alternncia com uma matriz com todos os pontos negros em inMilton Barreiro Junior ETE Getlio Vargas
92
tervalos de 0,4 segundos. Quando B=1 e C=0, obteremos a ativao intermitente de uma matriz completa (todos os pontos da matriz). 3.1.5 Deslocamento do Cursor ou da Mensagem
Desloca o cursor ou a mensagem sem que para isso tenha que escrever ou ler dados do display. Utilizado para posicionamento dos dados no display.
Y estabelece o modo de comunicao. Se Y=1 estabelece 8 bits e quando Y=0 ser 4 bits, enviados em duas operaes, com os 4 bits (Nible) mais significativos sendo enviados primeiro. N fixa o nmero de linhas: N=0 para uma linha e N=1 para duas ou mais linhas. F fixa o tipo da matriz: F=0 para matriz 7x5 ou 8x5 e F=1 para matriz 10x5 (somente possvel quando apresentando em uma linha). 3.1.7 Endereamento da CGRAM CGRAM uma regio da memria RAM destinada para criao de caracteres especiais, como por exemplo: , , etc.
93
Estabelece o endereo da CGRAM no contador de endereos (AC) como um nmero binrio AAAAAA e aps isto os dados sero escritos ou lidos pela CPU neste endereo. Cada caracter especial ocupa 8 endereos na CGRAM. 3.1.8 Endereamento da DDRAM
Estabelece o endereo da DDRAM no contador de endereos (AC) como um nmero binrio AAAAAAA e aps isto os dados sero escritos ou lidos pela CPU neste endereo. Para os display de uma linha AAAAAAA varia de 80H a CFH. J para todos os display de duas linhas varia de 80H a A7H para a primeira linha e de C0H a E7H para a segunda linha. 3.1.9 Busy Flag (BF)
Busy Flag ou o bit 7 indica ao sistema onde est conectado o mdulo LCD, se o controlador do mdulo est ocupado com alguma operao interna (BF=1), e neste caso, no aceita nenhuma instruo at que BF volte para 0. Alm disso, permite a leitura do contedo do contador de endereos (AC) expressa por AAAAAAA. O contador de endereos pode conter tanto endereo da CGRAM como da DDRAM, depende neste caso, da instruo anterior. 3.1.10 Escrita de dados na DDRAM ou CGRAM
Escreve o byte AAAAAAAA tanto na CGRAM como na DDRAM, dependendo da instruo anterior (que define o endereo). Aps a escrita, o endereo automatica-
94
mente incrementado ou decrementado de uma unidade dependendo do modo escolhido (ver item 3.1.3). 3.1.11 Leitura de dados na DDRAM ou CGRAM
Faz uma leitura na CGRAM ou na DDRAM, dependendo da instruo anterior (que define o endereo). importante que precedendo a esta leitura seja executado a instruo de estabelecimento do endereo da CGRAM ou DDRAM, pois caso contrrio o dado lido invlido.
95
3.2 TABELAS DE ENDEREOS DOS CARCTERES NA DDRAM A seguir resumiremos os endereos da DDRAM (em hexadecimal) dos caracteres da maioria dos mdulos LCD disponveis no mercado.
96
OBS: Para os mdulos de 04 linhas estamos considerando que existe um outro pino de habilitao (como o pino 6) para as duas ltimas linhas, portando outros endereos de hardware. Antes de enviar uma instruo para escrita de dados no display, enviar antes uma de endereamento na DDRAM, com o endereo onde deve ser escrito o caracter, tipo um gotoxy(). 3.3 TABELAS DE ENDEREOS DOS CARCTERES NA CGRAM Os caracteres especiais previamente programado, durante a inicializao, podem ser utilizados a qualquer tempo como se fossem caracteres normais, lembrando que os endereos bases em hexadecimal para gravao dos caracteres especiais, na maioria dos mdulos LCD, so respectivamente: 40, 48, 50, 58, 60, 68, 70 e 78. Cada caracter especial ocupa 8 (oito) endreos.
Tabela 7 - Caracter especial {} na CGRAM Isto significa que para utilizarmos o caracter gravado no endereo base 50, durante a inicializao ou reset do sistema, teremos que escrevermos 8 bytes entre os endereos 50 e 57, para construirmos o caracter. Para ilustrar este procedimento, supor que queiramos construir o caracter {} no endereo base 50. Neste caso, devemos construir o mapa deste caracter especial como mostrado na Tabela 7 (supondo estar trabalhando com matriz 7x5 e com auto incremento de endereo a cada escrita). Observe que o ltimo endereo sempre ser 00, pois esta posio sempre ocupada pelo cursor.
97
4 INICIALIZAO DOS MDULOS LCD Toda vez que alimentamos o mdulo LCD deve ser executado o procedimento de inicializao, que consiste no envio de uma seqncia de instrues para configurar o modo de operao para execuo de um dado programa de interfaceamento. Em muitos display este procedimento ocorre automaticamente, dentro de condies especficas que envolve temporizaes mnimas referente a transio do nvel lgico 0 para 1, ao ligarmos a fonte. Em caso de dvidas, recomendamos o envio destas instrues aps o reset do sistema.
a) Inicializao para sistemas 8 bits de dados (5 instrues) Entre as duas primeiras instrues recomendamos um delay de 15 mS. As demais instrues podem ser escritas aps checar o Busy Flag.
b) Inicializao para sistemas 4 bits de dados (5 instrues) Entre as quatro primeiras instrues recomendamos um delay de 15 mS. As demais instrues podem ser escritas aps checar o Busy Flag. Estes bits (nible) devem estar conectados aos pinos 11, 12.13 e 14.
98
5 ROTEIRO PARA PROGRAMAO A seguir passaremos a descrever um resumo dos procedimentos para utilizao de um mdulo ou display LCD: 1_ Ao energizar o mdulo ajuste o potencimetro de controle do brilho ou contraste at obter a visualizao da matriciao na primeira linha para mdulo de duas linhas ou at a matriciao de meia linha para mdulos de uma linha. 2_ Alguns mdulos de uma linha s funcionam com a instruo 38 ao invs de 30, conforme instrues de inicializao. 3_ O sinal de Enable (pino 6) dever ser gerado conforme a temporizao mostrada na Figura 2. Os cdigos de dados ou de instrues s sero processados pelo processador do mdulo aps a descida do sinal do Enable. 4_ Para ajustar a velocidade de comunicao entre a CPU do usurio e o mdulo LCD existem duas possibilidades: Intercalar uma rotina de atraso de aproximadamente 15 mS entre as instrues. Fazer a leitura do Busy Flag antes do envio de cada instruo e s enviar quando o mesmo for 0. Neste caso, a nica exceo ser durante a inicializao. 1_ Durante a inicializao enviar a seqncia correta das instrues de inicializao conforme item 3.4 2_ Para programar caracteres na CGRAM, faa inicialmente o endereamento da mesma. 3_ Aps a escrita de dados na CGRAM envie a instruo 01, para posicionar o cursor. 4_ Para escrever os caracteres especiais previamente gravados na CGRAM, utilize os cdigos de 00 at 07 correspondente aos endereos bases de 40, 48 at 78 em hexa.
99
6 COMANDOS TEIS
100
Obs: Aps o endereamento da CGRAM, o cursor se desloca para a primeira posio da segunda linha (ou metade), portanto recomendado enviar a instruo 01 ou limpa display e cursor home.
101
7 CUIDADOS ESPECIAIS COM MDULOS LCD a ) MANUSEIO Somente retire o mdulo de sua embalagem protetora imediatamente antes de sua instalao No guarde os mdulos em recintos de alta temperatura e alta umidade. A temperatura de armazenamento dever estar compreendida entre 5 e 30 oC. O LCD coberto por uma lmina plstica polarizada a qual no pode ser riscada. Cuidado em seu manuseio. Para a limpeza da lmina utilize cotonetes embebido em benzina. No utilize outros tipos de solventes. Observe cuidadosamente os procedimentos de controle anti-esttico quando manusear os mdulos. Eles incorporam circuitos integrados CMOS LSI os quais so sensveis descarga eletrosttica. No toque nos terminais do conector, trilhas do circuito impresso e/ou terminais do CI. b) INSTALAO Nunca desmonte o mdulo Use uma estao de solda aterrada para soldagem de conectores ou terminais. montador dever tambm ser convenientemente aterrado. Sempre que o projeto o permita, instale o mdulo atrs de uma janela protetora de plstico ou vidro. Somente retire a fita adesiva que protege a lmina plstica frontal imediatamente antes de seu uso.
102
8 OPERAO Nunca instale ou desconecte o mdulo com sua alimentao ligada. Sempre opere os mdulos respeitando sua gama de temperatura de operao. Observe cuidadosamente os valores das tenses de alimentao e os nveis dos sinais de controle. Ajuste a tenso no pino 3 (V0) para obter o contraste mais conveniente para uma dada aplicao.
103
;****************** Programa de Escrita em LCD ******************* ;* ;* ;* POR: MILTON BARREIRO JUNIOR DATA: JUNHO DE 2006 * * *
;************************************************************************
;************************************************************************ DISPLAY RS RW EN EQU EQU QUE EQU P2 P3.5 P3.6 P3.7 ;Define port P2 como bits de dados do LCD ;Define P3.5 como bit RS do LCD ;Define P3.6 como bit RW do LCD ;Define P3.7 como bit EN do LCD
ORG
0000H
LJMP START
;**************************************************************************** CLR CLR CLR MOV EN RS RW A, #38H ;Bit EN=0 ;Bit RS=0 ;Bit RW=0 ;Define LCD como matriz 7x5 pixels e 8 bits de dados ;Escreve comando no LCD #0EH ;Liga LCD e ativa cursor ;Escreve comando no LCD #06H ;Cursor deslocando para a direita
104
LCALL CMD
;*********************************************************************************** WRITE: MOV A, #80H ;Posiciona LCD no primeiro caractere na primeira linha ;Escreve comando ;Movimenta inicio da tabela da primeira mensagem para ;Escreve primeira mensagem #0C0H ;Posiciona LCD no primeiro caractere da segunda linha ;Escreve comando ;Movimenta inicio da tabela da segunda mensagem para ;Escreve segunda mensagem
LCALL CMD MOV o DPTR LCALL MSG LJMP WRITE DPTR, #MSG2
;*********************************************************************************** CMD: SETB EN CLR MOV RS DISPLAY,A ;Esse bloco de instrues ;responsvel pela escrita de ;comandos e dados no LCD
MSG: WRCHAR:
MOV
R1, MOV
#00H A, R1
INC
105
NEXTCHAR:
LCALL DELAY LJMP WRCHAR ;******************************** Rotina de Delay ******************************** ;* ROTINA QUE CONTA TEMPO DE 10mS PARA ESCRITA NO LCD * ;*********************************************************************************** DELAY: MOV MOV MOV CLR MOV TMOD, #11H ;Essa rotina tem como objetivo ;contar tempo de 10mS de atrazo ;para que o LCD seja capaz de ;ler comandos e dados
;****************************** Tabela de Mensagens ************************** ;* ;* MENSAGENS A SEREM ESCRITAS NO LCD DEVEM SER ESCRITAS NO FINAL DO PROGRAMA * *
;*********************************************************************************** MSG1: MSG2: DB DB END " " TESTE DO LCD OK $" $" ;Tabela da primeira mensagem ;Tabela da segunda mensagem ;Fim de programa
106
; ROTINA DE LEITURA DE TECLADO MATRICIAL 4X3, KIT ETE JORGE STREET ; CONFIGURAO DO TECLADO ; P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 ; L4 L3 L2 L1 C3 C2 C1 -
TECLADO MARCTEC
EQU EQU
P1 23H
MOV SP,#40H ; ********************** EXEMPLO DE ROTINA DE LEITURA DE TECLADO ******************** VOLTA: LCALL VETEC CJNE A, LJMP VOLTA ESC: MOV P3, A #0FH, ESC
LJMP VOLTA ;********************************************************************************************************* ;*********** SUBROTINAS DO TECLADO (COLOCAR NO FINAL DO PROGRAMA) ********** ; RETORNO TECLA ACIONADA OU OFH SEM TECLA VETEC: MOV NOP NOP MOV A, TECLADO #0FH, VETEC1 TECLADO, #0FH
CJNE A, RET VETEC1: LCALL DETEC PUSH ACC LCALL ESTEC POP RET ACC
107
DETEC: DETEC1:
MARCTEC, TECLADO,
#7FH MARCTEC
A,
MARCTEC,
#0F7H, DETEC1
MARCTEC,
LCALL AT50R0 VESTEC: MOV NOP NOP MOV A, TECLADO #0FH, VESTEC TECLADO, #0FH
CJNE A, RET
108
;****************************** SUBROTINA DE ATRASO 50MS X R0 ****************************** AT50R0: MOV MOV MOV TH0, TL0, #3CH #0B0H
TMOD, #11H
;********************************************************************************************************* ;**************** TABELA DE TECLAS (COLOCAR NO FINAL DO PROGRAMA) *************** TABTEC: DB 7BH,0EDH,0EBH,0E7H,0DDH,0DBH,0D7H,0BDH,0BBH,0B7H,7DH,77H ;********************************************************************************************************* END
;******************************** Programa de Transmisso Serial ********************************** ;* ;* POR: MILTON BARREIRO JUNIOR DATA: OUTUBRO DE 2006 * *
;********************************************************************************************************* ;************************************* Declarao de Variveis *************************************** ;* CONFIGURAO DO CANAL SERIAL E TAXA DE TRANSMISSO *
LJMP START
0050H SP, #40H ;Ajusta Stack Pointer ;Zera Flags dos Timers
TCON, #00H
109
;Define PCON.7 como ZERO (SMOD = 0 ;Configura Timer 1 no modo 2 e Timer 0 ;Carrega TH1 e TL1 com 152d ;para 300bps de Taxa ;Configura Canal Serial no modo 1
SCON, #40H
SETB TR1 ;*************************************** Rotina de Transmisso ************************************** DENOVO: PROXIMO: MOV CLR DPTR, #MSG A @A+DPTR #'$', ENVIA
MOVC A, CJNE A,
LJMP DENOVO ENVIA: MOV JNB CLR INC SBUF, A TI, TI DPTR $
LJMP PROXIMO ;********************************************************************************************************* ;*********************************** Tabela de String a Transmitir *********************************** MSG: DB " Teste de Transmisso Serial $" ;Tabela da primeira mensagem
110
;**************** PROGRAMA CONVERSO BCD PARA 7 SEGMENTOS ****************** ;* POR: MILTON BARREIRO JUNIOR EM: JUNHO DE 2006 *
;***************************************************************************************************** CONVERTE: ANL MOV A, #00001111B ;ACC Recebe o valor BCD ;a ser convertido de ;para 7 Segmentos
MOVC A, RET
;***************************************************************************************************** TABDISP: DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB END Milton Barreiro Junior ETE Getlio Vargas 11000000B 11111001B 10100100B 10110000B 10011001B 10010010B 10000010B 11111000B 10000000B 10011000B 11001000B 10000011B 11000110B 10100001B 10000110B 11000000B ;Tabela ;de ;valores ;para ;display ;7 segmentos ;anodo ;comum ;que ;vai ;de ;zero a nove em decimal, ;at ;F ;em ;Hexadecimal ;Indica fim de programa ao compilador
111
;*********************** PROGRAMA FREQUENCMETRO ************************* ;* ;* ESSE FREQUENCMETRO MEDE E INDICA VALORES AT 999Hz POR: MILTON BARREIRO JUNIOR EM: NOVEMBRO DE 2006 * *
;****************************************************************************************** ;UFREQ ;DFREQ ;CFREQ EQU EQU EQU R1 R2 R3 ;Incremento de unidade ;Incremento de dezena ;Incremento de centena
LJMP INTE1
;******************************************************************************************* ORG INICIO: MOV 0050H IP, #00000010B ;Prioriza Int T0 ;Habilita Int T0 ;Habilita Int EX1 ;Habilita Int Global #40H ;Ajusta Stack Pointer ;Configura T0 e T1 no Modo 1 ;Modo de atuao das Interrupes ;Carrega inicio de contagem para ;timer 0 contar 50mS
SETB ET0 SETB EX1 SETB EA MOV MOV MOV MOV MOV SP,
SETB TR0
112
;***************************************************************************************** MOV MOV MOV MOV MOV MOV MOV R0, R1, R2, R3, R4, R5, R6, #00H #00H #00H #00H #00H #00H #00H
;***************************************************************************************** DISPLAY: MOV A, R4 ;Carrega no ACC valor de Unidade de Segundos ;Converte Decimal para 7 Segmentos ;Desliga Displays no utilizados A ;Mostra Unidade de Segundos ;Liga Digito Unidade de Segundos ;Tempo Display ativo ;Carrega no ACC valor de Dezena de Segundos ;Converte Decimal para 7 Segmentos ;Desliga Displays no utilizados A ;Mostra Dezena de Segundos ;Liga Digito Dezena de Segundos ;Tempo Display ativo ;Carrega no ACC valor dos Minutos ;Converte Decimal para 7 Segmentos ;Desliga Displays no utilizados A ;Mostra Minutos ;Liga Digito Minutos ;Tempo Display ativo
ACALL TEMPO LJMP DISPLAY Milton Barreiro Junior ETE Getlio Vargas
113
;****************************************************************************************** INTT0: CLR MOV MOV TR0 TH0, TL0, #3CH #0B0H ;Trata interrupo Int T0 ;para base de tempo de 1s
CJNE R0, MOV MOV MOV MOV MOV MOV A, R4, A, R5, A, R6,
#20, R1 A R2 A R3 A
SAI
SAI:
RETI
#10, #00
ESC
114
#10, #00
ESC
;****************************************************************************************** CONVERTE: ANL MOV A, #00001111B ;Rotina de ;Converso ;Decimal para 7 Segmentos
MOVC A, RET
;****************************************************************************************** TEMPO: MOV MOV CLR TH1, TL1, TF1 #0D8H #0F0H ;Carrega inicio de contagem para ;timer 1 contar 10mS
SETB TR1 JNB RET ;****************************************************************************************** ;* TABELA DE CONVERSO DECIMAL E HEXADECIMAL PARA 7 SEGMENTOS * ;****************************************************************************************** TABDISP: DB DB DB DB DB DB DB DB DB DB DB 11000000B 11111001B 10100100B 10110000B 10011001B 10010010B 10000010B 11111000B 10000000B 10011000B 11001000B ;Tabela ;de ;valores ;para ;display ;7 segmentos ;anodo ;comum ;que ;vai ;de TF1, $
115
DB DB DB DB DB
END
116
;************************ Programa de Teclado Matricial ************************ ;* ;* ;* POR: MILTON BARREIRO JUNIOR DATA: OUTUBRO DE 2006 FONTE: www.8052.com * *
;************************************************************************************ ;******************** CONFIGURAO DO TECLADO (MATRIZ 4X4) ********************* ; ;P1.0 ---------------------------\ ; ;P1.1 -----------------------\ ; ;P1.2 -------------------\ ; ;P1.3 ---------------\ ; ; ;P1.7 -------------- 1 - 2 - 3 - A --; ;P1.6 -------------- 4 - 5 - 6 - B --; ;P1.5 -------------- 7 - 8 - 9 - C --; ;P1.4 -------------- * - 0 - # - D --; ; ;************************************************************************************* ;********************** Define o Port e Memoria das Teclas ********************* KBOARD MEMKEY EQU EQU P1 R1 ;Teclado Matricial em P1 ;Memria de tecla pressionada | | | | | | | | | | | | | |
117
;******************* Loop de Leitura do Teclado Matricial ********************** KEY_B: LCALL BUSCA CJNE A, LJMP START SAIDA: MOV P3, A #0FH, SAIDA
LJMP KEY_B ;************************************************************************************* ;************************ SUBROTINAS DO TECLADO ************************* ; ; devem ser inserida no final do programa RETORNA TECLA ACIONADA OU OFH SEM TECLA ACIONADA
;************************************************************************************* BUSCA: MOV NOP NOP NOP NOP MOV tura RET A, KBOARD #0FH, SELECT ;Le teclado e salva no Acumulador ;Se valor lido igual 0Fh, retorna para loop de leiKBOARD, #0FH ;Carrega P1 com 0FH
CJNE A,
SELECT:
LOOP: LOOP1:
MEMKEY, KBOARD,
#7FH MEMKEY
118
MEMKEY,
CJNE A, RET
#0F7H, LOOP1
PROCURA:
MEMKEY,
NOVO:
MOV
PROXIMA:
INC
R7
LJMP NOVO ;******************************************************************************* ;************************** DEBOUNCE DE 50mS ************************** DEBOU: MOV MOV MOV TH0, TL0, #3CH #0B0H
TMOD, #11H
SETB TR0 CLR JNB CLR CLR RET ;****************************************************************************** TF0 TF0, TF0 TR0 $
119
;************************** TABELA DE TECLAS *************************** TABKEY: DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB 0EBH 77H 7BH 7DH 0B7H 0BBH 0BDH 0D7H 0DBH 0DDH 0E7H 0EDH 7EH 0BEH 0DEH 0EEH ;Tecla 0 ;Tecla 1 ;Tecla 2 ;Tecla 3 ;Tecla 4 ;Tecla 5 ;Tecla 6 ;Tecla 7 ;Tecla 8 ;Tecla 9 ;Tecla * ;Tecla # ;Tecla A ;Tecla B ;Tecla C ;Tecla D
120
;**************************************************** ; ; ; ; ; ; ; ; Autores: Alessander Martins Leite Flvio Roberto dos Santos Marcio Litwin Camargo Controle digital de temperatura Software implementado por alunos do curso de Automao Industrial do CEFET (2006)
;**************************************************** ORG MOV MOV 0000H PSW, #10H R1, #3CH ;Temperatura=60 Graus Celsius ;Inicio do programa
COMECO:
#40H
LCALL INIC_LCD LCALL CLEAR_LCD LCALL TEXTOS LCALL LINHA2 LCALL TESTOC LCALL POS0 LCALL SET_TEMP LCALL VER_TEMP
121
LCALL ESPERA_LCD
LCALL ESPERA_LCD
LCALL ESPERA_LCD
RET
122
LCALL ESPERA_LCD
RET
LCALL ESPERA_LCD
RET
;**************************************************** POS0: PUSH A SETB P2.5 CLR MOV P2.7 P0, #8CH
RET
123
;**************************************************** POS1: PUSH A SETB P2.5 CLR MOV P2.7 P0, #0CCH
RET
TMOD, #01H
NAO_AC0:
MOV MOV
TH0, TL0,
#0FFH #0FAH
SETB TR0
ESP0:
ESP0
NAO_AC0
PSW, #10H
124
;****************************************************
MOV R0,
TMOD, #01H
NAO_AC1:
MOV MOV
TH0, TL0,
#0FFH #0FAH
SETB TR0
ESP1:
ESP1
DJNZ R0,
NAO_AC1
MOV
PSW, #10H
RET
;****************************************************
MOV A,
MOVC A, JZ FIMS
125
FIMS:
RET
;****************************************************
MOV A,
MOVC A, JZ FIMC
FIMC:
RET
;****************************************************
AU_TS: AT:
MOV MOV
MOVC A, JZ AFIM
AFIM:
RET
126
SET_TEMP:
RET
ESCR:
MOV MOV
ESCRV:
SETB P2.5 SETB P2.7 MOV ADD MOV A, A, P0, @R0 #30H A
CJNE R0,
LCALL TEMPO0
RET
;****************************************************
ESCRT:
127
CLR
P2.5
LCALL ESPERA_LCD
RET
;****************************************************
ESPERA_LCD: SETB P2.5 SETB P2.6 CLR MOV ESP: P2.7 P0, #0FFH
LCALL TEMPO1 JB CLR CLR CLR P0.7, P2.5 P2.7 P2.6 ESP
RET
;****************************************************
VER_TEMP:
MOV MOV
A,
P3
PSW, #10H
LCALL VER_C LCALL ASCI LCALL POS1 LCALL ESCR LCALL M_T_S
128
JMP
VER_TEMP
;****************************************************
M_T_S:
JNB
P2.0,
AU_T
RET
AU_T:
LCALL INIC_LCD LCALL CLEAR_LCD LCALL AU_TS LCALL POS0 LCALL I_D
;****************************************************
I_D:
MOV JNB
V_V:
JB JNB
MAI_T:
CJNE R1,
#0FFH, MAI_TN
RET
MAI_TN:
INC
R1
129
RET
D_TS:
JB JNB
P2.2, P2.2,
S_TS $
LCALL MEI_T LCALL SET_TEMP LJMP I_D S_TS: JB JNB P2.0, P2.0, V_V $
LCALL COMECO
MEI_T:
CJNE R1,
#00H, MEI_TN
RET
MEI_TN:
DEC
R1
RET
;****************************************************
ASCI:
COMPA: RET
CJNE A,
#00H, UND
UND:
DEC
130
INC
R5 #0AH, COMPA
#00H
LJMP COMPA
;****************************************************
VER_C:
MOV PUSH A PUSH 11H CJNE A, CLR POP POP P1.0 11H A
PSW, #10H
11H,
RET
N:
JZ
X #00H, DIF
RET
X:
131
POP
RET
DIF:
DEC DEC JZ
A R1 X #00H, DIF
RET
;****************************************************
TEMPERATURAS:
DB
"Temp_Setada:",00H
TEMPERATURAC:
DB
"Temp_Contr.:",00H
ATEMPERATURA:
DB
"Mudar_Temp.:",00H
END