You are on page 1of 79

Wilson Ruiz

CEFET-SP

Microcontroladores Famlia MCS-51


Conceitos, Aplicaes e Projetos
2004 verso 6.0 Wilson Ruiz

Harpia harpyja

Harpia ou guia Real

Brasil 1

Wilson Ruiz

CAPTULO 1:
1.1

HARDWARE DOS MICROCONTROLADORES DA FAMLIA INTEL 8051 (MCS-51)

CARACTERSTICAS PRINCIPAIS COMUNS AOS MICROCONTROLADORES DA FAMLA INTEL MCS-51:


Famlia de microcontroladores mais usada atualmente. CPU de 8 bits otimizada para aplicaes de controle. Clock tpico de 12MHz (valor usado em aplicaes gerais existindo tambm verses mais rpidas). Capacidade de 64 Kbytes de memria de programa (ROM) e 64 Kbytes de memria de dados (RAM). 4 Kbytes de memria de programa interna (ROM interna). RAM interna com 128 bytes (h verses com capacidades superiores). 4 portas de I/O de 8 bits cada, com bits individualmente endereveis. Interrupes mascarveis em dois nveis de prioridades (trs internas e duas externas). 2 temporizadores / contadores internos de 16 bits programveis. Oscilador de clock interno. Canal de comunicao serial. Capacidade de execuo de complexas operaes aritmticas e lgicas (multiplicao, diviso, permuta e deslocamento de bits etc). Famlia com grande variedade de CPUs, com verses diferenciando-se na especializao, porm apresentando mesma arquitetura interna bsica. Fornecido por diferentes fabricantes que personalizam o seu produto mantendo a compatibilidade com as verses originais.

Wilson Ruiz

1.2 QUADRO COMPARATIVO ENTRE ALGUMAS VERSES DA FAMLIA 8051 E OUTRAS SIMILARES DA INTEL:
Cdigo do dispositivo 8048AH 8049AH 8050AH 8051 8051AH 80C51BH 8052AH 80C52 83C51FA 83C51FB 83C152JA 83C152JC 83C452 Verso sem ROM 8035AHL 8039AHL 8040AHL 8031 8031AH 80C31BH 8032AH 80C32 80C51FA 80C51FB 80C152JA 80C152JB 80C152JC 80C152JD 80C452 Verso com EPROM 8748H 8749H 8751AH 87C51 8752BH 87C51FA 87C51FB 87C452P RAM Interna bytes 64 128 256 128 128 128 256 256 256 256 256 256 256 256 256 ROM Interna bytes 1K 2K 4K 4K 4K 4K 8K 8K 8K 16K 8K 8K 8K Portas E/S de 8 bits LiModos nhas Timers Canais de baixo de /Conta UART de consumo I/O -dores DMA e Idle 27 1 27 1 27 1 32 2 sim 32 2 sim 32 2 sim sim 32 3 sim sim 32 3 sim sim 32 3 sim sim 32 3 sim sim 40 2 sim 2 sim 56 2 sim 2 sim 40 2 sim 2 sim 56 2 sim 2 sim 40 2 Sim sim

4 4 4 4 4 4 4 5 7 5 7 5

OBSERVAES: A letra C usada em alguns cdigos indica que a tecnologia usada no projeto a CHMOS, que apresenta um menor consumo de potncia que o da tecnologia HMOS (dispositivos sem letra nos cdigos). Dispositivos HMOS e CHMOS so intercambiveis. O par de letras BH refere-se ao projeto interno do chip. Os modos Idle (preguioso, ocioso) e de baixa potncia so programados por software e tem o objetivo de reduzir o consumo, neles a CPU desligada, enquanto a RAM e outros perifricos internos continuam a operar.

Wilson Ruiz

1.3 ARQUITETURA INTERNA DA FAMLIA 8051


4

Wilson Ruiz

1.4 DESCRIO DA PINAGEM DO 8051


Nmero dos Nome Descrio resumida de sua funo Pinos 1a8 P1.0 a Porta de I/O nmero 1 P1.7 Port 1 9 RST/ Reset do sistema ( necessrio a aplicao de um nvel alto TTL, durante 2 ou VPD mais ciclos de mquina) 10 a 17 P3.0 a Porta de I/O nmero 3 P3.7 Possibilita tambm funes especiais relacionadas ao Canal Serial, Interrupes e Port 3 Timer/Counter 18 XTAL Ligao do cristal oscilador 2 19 XTAL Ligao do cristal oscilador 1 20 Vss Terra 21 a 28 P2.0 a Porta de I/O nmero 2 P2.7 Sada do byte mais significativo do endereo, para memria externa. Port 2 ou A8 a A15 29 PSEN Program Store Enable Strobe da memria de programa externa. Quando o sistema l instrues ou operandos na memria externa, vai para nvel zero e no ativado (nvel 1) durante busca na memria interna de programa. 30 ALE / Address Latch Enable PROG Sada para habilitar o latch de endereos. Serve para separar, a parte menos significativa do endereo, dos dados, na aplicao de memria externa. Entrada do pulso de programao durante a gravao da EPROM. 31 EA / External Access Enable Programming Supply Voltage Vpp Entrada de seleo da memria de programa. Quando em nvel zero, a CPU trabalha apenas com a memria de programa externa.. Se em nvel lgico 1, a CPU executa instrues da memria de programa interna, desde que o PC seja menor que 4096. Este pino recebe +21 volts durante a programao da ROM interna. Recebe +21V durante a programao da EPROM 32 a 39 P0.0 a Porta de I/O nmero 0 P0.7 Fornece o byte menos significativo de endere o multiplexado com os dados. ou AD0 a AD7 40 Vcc + 5 volts 5

Wilson Ruiz

FUNES ESPECIAIS DOS PINOS DA PORTA 3


Nomes do Pino P3.0 = RXD/data Descrio resumida de sua funo Receptor da porta serial assncrona ou entrada e sada de dados sncronos (expanso de I/O pela porta serial). Sada de transmisso da porta serial assncrona, ou sada de clock para os registradores de deslocamento externos (expanso de I/O pela porta serial). Interrupo externa nmero 0, ou Bit de controle para o timer/counter 0. Interrupo externa nmero 1, ou Bit de controle para o timer/counter 1. Entrada externa para o timer/counter 0. Entrada externa para o timer/counter 1. Strobe (sincronismo) de escrita na memria de dados externa (escrita na memria RAM). Strobe (sincronismo) de leitura da memria de dados externa (leitura da memria RAM).

P3.1 = TXD/ clock

P3.2 = INT0

P3.3 = INT1

P3.4 = T0 P3.5 = T1 P3.6 = WR

P3.7 = RD

Wilson Ruiz

1.5 ORGANIZAO DA MEMRIA DA FAMLIA 8051 (e equivalentes)


MAPA DA MEMRIA DE PROGRAMA (ROM) 65535 = FFFFh ROM externa 60 Kbytes expanso 65535 = FFFFh ROM Externa 64 Kbytes

60K bytes 64K bytes

4096 = 1000h 4095 = 0FFFh ROM Interna do 4K bytes chip contedo inviolvel 0 = 0000h 4 Kbytes Para o 8051: pino EA=1

Modo mnimo

0 = 0000h OU Para o 8031: pino EA = 0

MAPA DA MEMRIA DE DADOS (RAM) 255 = FFh 128 bytes superiores 128 = 80h 64K bytes 127 = 7Fh RAM 128 bytes Interna inferiores uso geral e stack 0 = 0000h 0 = 00h 128 bytes RAM interna E RAM externa ***** A RAM externa no endereada diretamente pela CPU. O endereo de acesso deve estar em um registrador usado pela CPU como ndice. Registros de funes especiais 128 bytes 65535 = FFFFh RAM Externa Uso geral

Wilson Ruiz

ESTRUTURA DA MEMRIA RAM INTERNA

Wilson Ruiz

1.6 LIGAO COM A MEMRIA EXTERNA

EXECUO A PARTIR DE MEMRIA EXTERNA

ACESSO MEMRIA DE DADOS EXTERNA

Wilson Ruiz

1.7 PROGRAM STATUS WORD (PSW) - endereo D0h


Este byte, localizado no espao SFR (Special Status Word RAM interna de 80h a FFh), possui alguns bits de status que refletem o estado da CPU. Mostrado na figura abaixo, contm as flags: Carry, Auxiliay Carry, Overflow, Paridade, dois bits (RS1 e RS0) de seleo de banco de registradores e dois bits de status definidos pelo usurio.

Registrador PSW ( Program Status Word )

C = PSW.7 AC = PSW.6 F0 = PSW.5 RS1 = PSW.4 RS0 = PSW.3 OV = PSW.2

Flag Flag carry Flag auxiliar carry Flag de uso geral Seleo do banco de registradores Flag de overflow

P = PSW.0 Flag de paridade

Descrio C = 1 indica o transporte no bit 7 (vai 1 ou vem 1), C = 0 caso contrrio C = 1 indica o transporte entre os bits 3 e 4 (vai 1 ou vem 1), C = 0 caso contr. Pode-se setar ou resetar esta flag, indicando o status da condio escolhida RS1 RS0 = 00 banco 0 RS1 RS0 = 10 banco 2 RS1 RS0 = 01 banco 1 RS1 RS0 = 11 banco 3 OV = 1 indica uma condio de erro, o resultado no pode ser representado como um no sinalizado (ex. soma de no s negativos resultando em positivo) P = 0 p/ paridade par do acumulador e P = 1 p/ paridade impar do acumulador

10

Wilson Ruiz

1.8

RESET principais caractersticas:

Ativo quando o pino RST (9) permanecer em nvel 1 por 2 ou mais ciclos de mquina. RESET interno: PC, Acumulador, B, Flags, DPTR, registros dos temporizadores / contadores so zerados. SP 07h SBUF (buffer serial) estar com contedo indeterminado e o registro de controle da porta serial (SCON) ser zerado. PCON ter apenas o seu bit +significativo zerado. IE e IP (registros de controle de interrupo) tero xxx00000. As portas P0 a P3 tero o valor FFh. (durante o RESET, o nvel nos pinos indeterminado, indo a nvel 1 aps a execuo da rotina interna de RESET assim, o hardware externo, dependendo da aplicao, deve prever essa situao, evitando o acionamento indesejado de algum perifrico. A RAM interna no afetada pelo RESET forado, sendo que aps o power-up seu valor aleatrio.

11

Wilson Ruiz

1.9 INTERRUPO
Existem trs fontes de interrupo: A interrupo por software (instruo) A interrupo solicitada por um perifrico externo A interrupo solicitada por um perifrico interno (Timer/Counter Serial)

ou Porta

Vantagem da interrupo: Simplificao do hardware, pois o sistema no necessita ficar monitorando o funcionamento de alguns dispositivos externos. Caractersticas das Interrupes: Mascaramento: Possibilidade do sistema atender ou no uma solicitao de interrupo (mascarveis). Existem sistemas com interrupes no mascarveis. Prioridades: Para um sistema que tenha mais de uma interrupo, existe uma tabela de prioridades, que determina qual deve ser atendida primeiramente no caso de solicitaes coincidentes. Interrupo vetorada: Possuem o Vetor de Interrupo (endereo de incio da interrupo) fixo, no sendo definido pelo usurio ( famlia 8051). Interrupo no vetorada: Os endereos de tratamento da interrupo so escolhidos pelo programador (outras famlias). OBS: O significado das expresses interrupo vetorada e interrupo no vetorada pode ser exatamente contrrio ao descrito, dependendo da conveno do fabricante da famlia de microcontroladores usada. Reconhecimento da interrupo: Pelo nvel (1 ou 0). Pela borda de subida ou de descida. Pela soma de borda (subida ou descida) e um nvel correspondente.

12

Wilson Ruiz

AS INTERRUPES DA FAMLIA 8051 (e equivalentes) Essa famlia de microcontroladores apresenta 5 / 6 formas de ser interrompido: Pela interrupo externa INT0 ______(maior prioridade) Pelo timer/counter interno TIMER 0 Pela interrupo externa INT1 Pelo timer/counter interno TIMER 1 Pelo canal de comunicao serial_____ (menor prioridade) Pelo timer/counter interno TIMER 2 (somente para o 8032 / 52) OBSERVAES: Todas as interrupes podem ser habilitadas ou no (exceto o RESET). Se o pedido da interrupo que ocorrer for de nvel menor ou igual (mesmo nmero) ao da que j est sendo atendida, este ficar aguardando o trmino da mesma para ser executado. No caso de uma interrupo de prioridade menor estar em andamento, esta poder ser interrompida por uma de prioridade maior, que ao seu trmino possibilita que a primeira seja concluda.

13

Wilson Ruiz

ENDEREOS DE DESVIO DAS INTERRUPES


Mapa da memria de programa ENDEREO NOME DA INTERRUPO 0000h Reset ... 0002h 0003h INT0 ... 000Ah 000Bh Timer/Counter 0 ... 0012h 0013h INT1 ... 001Ah 001Bh Timer/Counter 1 ... 0022h 0023h Canal Serial ... 002Ah 002Bh Timer/Counter 2 Somente para 8032 / 52 ... 0032h 0033h Intervalo 3 bytes

8 bytes

8 bytes

8 bytes

8 bytes

8 bytes

8 bytes

14

Wilson Ruiz

REGISTRADORES DE CONTROLE DAS INTERRUPES O 8051 possui dois registradores, na Regio conhecida como SFR (Registradores de Funes Especiais) para controle das interrupes. IE (Interrupt Enable) Endereo A8h Tem por funo indicar quais interrupes esto habilitadas. Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 EA X X ES ET1 EX1 ET0 EX0 EA (Enable All): p/ = 0, desabilita todas as interrupes p/ = 1, permite selecionar qual interrupo ser habilitada, em funo dos bits de controle individuais (abaixo). ES (Enable Serial): p/ = 0, inibe a interrupo solicitada pelo canal serial, independentemente do valor de EA. p/ = 1, libera a interrupo solicitada pelo canal serial, se EA = 1. ET1 (Enable Timer 1): p/ = 0, inibe a interrupo solicitada pelo Timer/Counter independentemente do valor de EA. p/ = 1, libera a interrupo solicitada pelo Timer/Counter 1, se EA = 1. ET0 (Enable Timer 0): p/ = 0, inibe a interrupo solicitada pelo Timer/Counter independentemente do valor de EA. p/ = 1, libera a interrupo solicitada pelo Timer/Counter 0, se EA = 1. 1,

0,

EX1 (Enable External 1): p/ = 0, inibe a interrupo solicitada pelo dispositivo externo ligado no pino INT1, independentemente do valor de EA. p/ = 1, libera a interrupo solicitada pelo dispositivo externo ligado no pino INT1, se EA = 1. EX0 (Enable External 0): p/ = 0, inibe a interrupo solicitada pelo dispositivo externo ligado no pino INT0, independentemente do valor de EA. p/ = 1, libera a interrupo solicitada pelo dispositivo externo ligado no pino INT0, se EA = 1.
15

Wilson Ruiz

IP (Interrupt Priority) Endereo B8h Tem por funo fixar qual nvel de prioridade das interrupes, sendo assim possvel alterar a prioridade de atendimento de uma interrupo durante o processamento. Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 X X X PS PT1 PX1 PT0 PX0

PS (Priority Serial): p/ = 0, indica prioridade baixa para a interrupo solicitada pelo canal serial. p/ = 1, indica prioridade alta para esta interrupo, se a mesma estiver habilitada. PT1 (Priority Timer 1): p/ = 0, indica prioridade baixa para a interrupo solicitada pelo Temporizador/Contador 1. p/ = 1, indica prioridade alta para esta interrupo, se a mesma estiver habilitada. PT0 (Priority Timer 0): p/ = 0, indica prioridade baixa para a interrupo solicitada pelo Temporizador/Contador 0. p/ = 1, indica prioridade alta para esta interrupo, se a mesma estiver habilitada. PX1 (Priority External 1): p/ = 0, indica prioridade baixa para a interrupo solicitada pelo dispositivo externo ligado no pino INT1. p/ = 1, indica prioridade alta para esta interrupo, se a mesma estiver habilitada. PX0 (Priority External 0): p/ = 0, indica prioridade baixa para a interrupo solicitada pelo dispositivo externo ligado no pino INT0. p/ = 1, indica prioridade alta para esta interrupo, se a mesma estiver habilitada.

16

Wilson Ruiz

AJUSTE DA EXTERNAS

FORMA

DE

RECONHECIMENTO DAS INTERRUPES

possvel ajustar as interrupes externas para serem detectadas pela transio de 1 para 0 ou pelo nvel 0. TCON (Timer Control) Endereo 88h Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 IE1 IT1 IE0 IT0 IT1: Bit para a escolha da forma de reconhecimento do INT1 p/ = 0, indica que ser aceita a interrupo apenas pelo nvel 0 presente no pino INT1. p/ = 1, indica que ser aceita a interrupo na transio de 1 para 0 no nvel desse pino. IT0: Bit para a escolha da forma de reconhecimento do INT0

p/ = 0, indica que ser aceita a interrupo apenas pelo nvel 0 presente no pino INT0. p/ = 1, indica que ser aceita a interrupo na transio de 1 para 0 no nvel desse pino. IE1: Bit para o hardware de controle da interrupo INT1 setado pelo hardware interno quando for detectada uma transio de 1 para 0 no pino INT1. Tem por funo sinalizar internamente o pedido da interrupo. resetado logo que a interrupo atendida. IE0: Bit para o hardware de controle da interrupo INT0 setado pelo hardware interno quando for detectada uma transio de 1 para 0 no pino INT0. Tem por funo sinalizar internamente o pedido da interrupo. resetado logo que a interrupo atendida.

17

Wilson Ruiz

1.10 TEMPORIZADORES E CONTADORES O 8051 possui 2 Temporizadores / Contadores, controlveis por programa, que podem operar de maneira totalmente independente dos demais sistemas do chip, podendo ser habilitados ou no por software ou hardware (pelos registros de controle ou pinos de interrupo). TCON (Timer Control) Endereo 88h Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

OBS: Os bits IE1, IT1, IE0 e ITO so usados no controle das interrupes externas, sendo referentes ao ajuste da forma de reconhecimento destas (vide item 1.8). TF1:

Sempre que ocorrer um overflow no T/C 1, este bit ser setado, gerando um pedido de interrupo do T/C 1. resetado pelo hardware interno ao final da rotina de interrupo. Setado pelo software para ligar T/C 1. Resetado para desligar o T/C (parar contagem). Sempre que ocorrer um overflow no T/C 0, este bit ser setado, gerando um pedido de interrupo do T/C 0 . resetado pelo hardware interno ao final da rotina de interrupo. Setado pelo software para ligar T/C 0. Resetado para desligar o T/C (parar contagem).

TR1:

TF0:

TR0:

18

Wilson Ruiz

TMOD (Timer Mode) Endereo 89h Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Gate.1 C/T .1 M 1 .1 M 0.1 Gate .0 C/T.0 Bit 1 Bit 0 M 1.0 M 0.0

Gate.1 e Gate.0: Escolha da forma de como os T/C sero habilitados. Exemplo: p/ Gate.0 = 0 T/C 0, ser habilitado (contando) fazendo-se TR0 = 1 ( no registrador TCON). p/ Gate.0 = 1 T/C 0, ser habilitado (contando) somente p/ TR0 = 1 e o pino INT 0 = 0. Exemplo de aplicao: Determinao da largura de um pulso, colocando-se a entrada do sinal externo no pino de interupo correspondente e fazendo com que T/C funcione com sinal interno. Desta maneira somente haver contagem quando o sinal externo for = 1. O software calcular o tempo decorrido entre dois pulsos do sinal aplicado. C/T.1 e C/T.0 : Selecionam a funo de cada T/C individualmente C/T.0 =1 =0 C/T.1 =1 =0 OBS: Para qualquer um dos T/C, se o sinal for interno (timer), a freqncia ser a de clock dividida por 12 e o pino de entrada correspondente fica disponvel. Funo escolhida para Timer / Counter 0 Contagem (para sinal externo) Temporizao (sinal ser interno) Funo escolhida para Timer / Counter 1 Contagem (para sinal externo) Temporizao (sinal ser interno)

19

Wilson Ruiz

M1.1 e M0.1 : M1.0 e M0.0 : Escolha de um dos possveis modos de operao para cada T/C. MODOS DE OPERAO DOS T/Cs. MODO 0 Contador ou Temporizador de 8 bits, com divisor de freqncia de at (freqclock / 32). Selecionado fazendo-se: M1.x = 0 e M0.x = 0 Os registradores TL0 e TL1 servem como divisores de 5 bits (at 32). TH0 ou TH1 Contagem (bits 15...8) 8 | TL0 ou TL1 | | ignorar (bits 7...5) Prescaler (bits 4...0) 7 6 5 4 3 2 1 0

32

15 14 13 12 11 10 9

Registrador TH0 (endereo 8Ch) ou registrador TH1 (endereo 8Dh) recebe o valor inicial da contagem (valor escrito pelo software, at FFh). Ao ocorre um overflow nesse registrador, o T/C em uso gera um pedido de interrupo interno, que poder ser ou no aceito pela CPU. O valor presente nesse registrador pode ser lido pelo software a qualquer momento. O sinal de contagem (interno ou externo) ser dividido pelo valor binrio presente nos bits 0 a 4 do registrador TL0 (endereo 8Ah) ou TL1 (endereo 8Bh), no T/C usado. Os bits 5a 7 devem ser ignorados em caso de leitura. Exemplo: desejada uma contagem com as seguintes caractersticas: De 9Bh at FFh e que a cada 20 pulsos aplicados na entrada externa do T/C 0 (pino T0), este incremente seu registro de uma unidade. Assim temos: 9Bh FFh = 64h = 100 contagens em decimal, sendo desejado ento que a cada 100 contagens internas uma interrupo seja gerada e, possibilitar assim que um determinado controle do sistema seja feito pela CPU. Dessa forma temos uma interrupo a cada 2000 sinais externos. Isso conseguido programando-se T/C 0 como contador no modo 0, carregando-se TH0 com 9Bh e TL0 com 14h (20 decimal). A rotina de interrupo, alm do tratamento desta, dever escrever o valor inicial em TH0 (mx. contagem = 255 x 32)
20

Wilson Ruiz

MODO 1 Contador ou Temporizador de 16 bits. Selecionado fazendo-se: M1.x = 0 e M0.x = 1 Temos um par de registradores TH0 e TL0 ou TH1 e TL1 escolhido para efetuar a contagem. possvel contagens de at FFFFh (65535 em decimal) com o valor inicial programvel por software. Ao correr um overflow, o sistema recebe um pedido de interrupo interna que poder ou no ser aceito.

TH0 ou TH1

| |

TL0 ou TL1

15 14 13 12 11 10 9

MODO 2 Contador ou Temporizador de 8 bits com recarga automtica. Selecionado fazendo-se: M1.x = 1 e M0.x = 0 Nos registradores TL0 e TL1 ocorre a contagem. Nos registradores TH0 e TH1 temos os valores que sero carregados automaticamente nos registradores TL0 e TL1, sempre que ocorrer um overflow (interrupo), prosseguindo o sistema sob o comando do sinal externo (contador) ou interno (temporizador). Com este modo, temos um sistema no qual no necessrio escrever novamente via software o valor a ser contado. Todos os registradores podem ser alterados a qualquer momento pelo software, resultando em uma grande flexibilidade no trabalho com temporizaes e contagens. O pedido de interrupo interna poder ou no ser aceito pela CPU. | TH0 ou TH1 | TL0 ou TL1 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

21

Wilson Ruiz

MODO 3 Contador de eventos de 8 bits e temporizador de 8 bits. Selecionado fazendo-se: M1.x = 1 e M0.x = 1 Neste modo T/C 1 para sua operao e fica inerte, sem receber pulsos de contagem. Para T/C 0 temos dois sistemas de 8 bits, um em TH0 e outro em TL0. O T/C agora formado por TL0 ser controlado pelos bits TR0 e TF0 do registrador TCON. O T/C agora formado em TH0 ser controlado pelos bits TR1 e TF1 do registrador TCON. O T/C 0 ser habilitado pelo bit de controle do T/C1 (TR1) e ao ocorrer um overflow de TH0, o bit TF1, que ser setado e no o TF0. Neste modo, o overflow em TH0 acionar o flag de requisio de interrupo referente ao T/C 1 e o overflow de TL0 acionar o flag de requisio de interrupo de T/C 0. Os pedidos de interrupes internas podero ou no serem aceitos pela CPU.

| TH0 ou TH1 15 14 13 12 11 10 9 8 | 7 6 TL0 ou TL1 5 4 3 2 1 0

Apenas temporizador de 8 bits | Temporizador / contador de 8 bits Ativa a interrupo do T/C 1 | ativa interrupo do T/C 0 |

22

Wilson Ruiz

1.11 A COMUNICAO SERIAL:


MODO SNCRONO DE COMUNICAO Necessita de um sincronismo entre os sistemas de comunicao. Sincronismo obtido atravs de um conjunto de bits, denominado bits de sincronismo, que ao serem recebidos pelo elemento receptor, ajustam o seu relgio interno para possibilitar o recebimento de outro conjunto de bits referentes aos dados. O transmissor envia um outro conjunto de bits chamado bits de parada. Esses bits de parada podem conter ou no, informaes sobre a confirmao do recebimento dos dados.

Caractere de sincronismo
6 0 5 0 4 1 3 0 2 1 1 1 0 0

| bits de dados |
6 x 5 x 4 x 3 x 2 x 1 x 0 x

| bits de dados |
6 x 5 x 4 x 3 X 2 x 1 x 0 x

| caractere | de final de transmisso


6 0 5 0 4 0 3 0 2 1 1 0 0 0

OBS: 16h = SYN = SYNcronism idle ( Cdigo ASCII ) 04h = EOT = End Of Transmission ( Cdigo ASCII )

23

Wilson Ruiz

MODO ASSNCRONO DE COMUNICAO No existe a necessidade de caracteres de sincronismo Para cada conjunto de bits de dados transmitidos temos tambm transmitidos um bit de incio de transmisso (start bit) e um bit de final de transmisso (stop bit). O start bit reconhecido pela transio de 1 para 0, na linha. Aps o start bit, o sistema efetua periodicamente uma varredura na linha, associando os nveis lgicos encontrados aos bits dos dados de entrada. Ao reconhecer o stimo bit, o sistema fica esperando o stop bit. O stop bit a transio de 0 para 1, ou a permanncia em 1 se a linha j se encontrava assim. Deve-se garantir que o transmissor e o receptor operem com a mesma taxa de comunicao.

Bits de dados d d 0 1 ... d 6

Bits de dados d d 0 1 ... d 6

Start bit

stop bit

start bit

stop bit

OBS: Os sinais de temporizao e controle, utilizados em cada modo so gerados por um hardware especfico para comunicao serial, sendo transparentes para o usurio.

24

Wilson Ruiz

CANAIS SIMPLEX, HALF-DUPLEX E FULL-DUPLEX

Canal SIMPLEX Este modo constitudo pela interligao de dispositivos no qual temos um elemento que apenas transmite e outro que apenas recebe.

Canal HALF-DUPLEX, ou SEMIDUPLEX Neste modo de comunicao, temos elementos que recebem e transmitem dados, embora as duas operaes no possam ocorrer simultaneamente.

Canal FULL-DUPLEX ou simplesmente DUPLEX Consiste em um modo pelo qual os sistemas podem transmitir e receber dados simultaneamente.

25

Wilson Ruiz

A COMUNICAO SERIAL NO 8051


No 8051, a interface serial do tipo Full-Duplex. O controle da transmisso e recepo de dados feito por um registro denominado SBUF (serial Buffer Endereo 99h). Uma escrita no SBUF implica em automtica transmisso deste dado. Um dado ao chegar no pino correspondente ser automaticamente recebido pelo sistema independentemente do usurio (p/ o canal serial habilitado e ajustado). Existem dois registradores SBUF, um destinado para a recepo e outro para a transmisso de dados. O reconhecimento feito pelo sistema atravs das instrues que acessaro o mesmo, assim para uma instruo de escrita o registro de transmisso ser alterado e para uma instruo de leitura o registro de recepo ser acessado. A transmisso inicia-se assim que o dado escrito no SBUF. A recepo controlada pelo registro SCON. SCON (Serial Control) Endereo 98h Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 SM0 SM1 SM2 REN TB8 RB8 T1 R1

SM0 e SM1 (Serial Mode): Estes dois bits controlam o funcionamento do canal serial. SM0 SM1 Modo de Funcionamento 0 0 0 0 1 1 0 0 2 1 1 3 Taxa de transmisso Fclock/12 Varivel Fclock/32 ou Fclock/64 Varivel

SM2 No modo 0, no impe qualquer efeito no funcionamento do canal serial, devendo permanecer em 0. No modo 1, no produzir pedido de interrupo se estiver setado e se o stop bit recebido for ilegal. Nos modos 2 e 3, habilita a comunicao entre vrias cpus 8051 p/=1.

26

Wilson Ruiz

REN (Reception Enable): Se estiver setado (=1), habilita a recepo to logo um start bit seja detectado. Se estiver resetado (=0), desabilita a recepo, e o pino RXD pode ser usado como I/O. TB8 Nos modos 2 e 3, indica o estado do nono bit a ser transmitido. Pode ser setado ou resetado por software. RB8 No usado no modo 0. No modo 1 indica o estado do stop bit recebido, desde que SM2 seja igual a 0. Nos modos 2 e 3, indica o estado do nono bit de dados que foi recebido. TI Flag de requisio de interrupo de transmisso. setado pelo hardware aps a transmisso do oitavo bit de dados quando no modo 0 e nos outros no incio do stop bit. Permite que o programa de transmisso seja independente do programa principal, pois a cada final de transmisso a interrupo do canal serial pode gerenciar todo o processo, evitando assim os processos de varredura de alguns sistemas. Deve ser resetado pelo software da rotina de interrupo para permitir novas interrupes. RI Flag de requisio de interrupo da recepo. setado pelo hardware aps a recepo do oitavo bit de dados quando no modo 0 e nos outros modos, ao moio do tempo de recpo do stop bit. Deve ser resetado pelo software da rotina de interrupo para permitir novas interrupes.

27

Wilson Ruiz

CAPTULO 2: SOFTWARE
2.1 MODOS DE ENDEREAMENTO
A famlia 8051 possui os seguintes modos de endereamento: OBS: Para diferenciar os modos de endereamento e o tratamento dado a variveis, constantes e endereos utilizada a seguinte notao: @ indica Indireto # indica valor Constante H indica que o valor expresso em Hexadecimal B indica que o valor expresso em Binrio MODO IMEDIATO Neste modo , temos um endereo de 8 bits logo aps a instruo, no qual ser efetuada a operao, dessa forma com ele podemos acessar apenas as primeiras 256 posies de memria (RAM interna e SFR). Exemplos: MOV A, 85H MOV 86H, A A (85H) (86H) A

MODO REGISTRADOR Neste modo, o nome do registrador a ser acessado est includo no mnemnico (economia de um byte na memria de programa). O registrador afetado (R0, R1, R2, R3, R4, R5, R6 ou R7) ser o do banco de registradores selecionado no momento (RB0, RB1, RB2 ou RB3). O endereamento do banco de registradores feito pelos bits RS2 e RS1, no registrador PSW, no instante de execuo da instruo. Exemplos: MOV (98H), R5 MOV R2, (88H) (98H) R5 R2 (88H)

28

Wilson Ruiz

MODO INDIRETO Neste modo, o endereo sobre o qual a instruo atuar est indicado de forma indireta pelos registradores R0 ou R1, de qualquer um dos bancos de registradores, para endereos de 8 bits, ou indicado pelo registrador DPTR (Data Pointer, formado por DPH endereo 83H e DPL endereo 82H), para endereos de 16 bits. Por esse modo de endereamento possvel acessar a memria RAM interna ou externa. Exemplos: MOV @R1, 43H (R1) (43H) MOVX A, @DPTR A (DPTR/RAM ext.) MODO ESPECFICO A REGISTRO Neste modo, o registrador em questo, j faz parte do mnemnico da instruo. Exemplos: DA A ajuste decimal de A CRL A A 00H MODO CONSTANTE IMEDIATA Este modo permite trabalhar com uma constante de forma direta. Exemplos: MOV A, #44H A 44H MOV R7, #63H R7 63H MODO INDEXADO Neste modo, o endereo efetivo a soma do Acumulador e de um registrador de 16 bits, que poder ser o PC ou o DPTR. Esse modo de endereamento tem como principal aplicao a leitura de tabelas presentes na memria ROM, transferindo-as para a memria RAM e/ou realizando processamento sobre esses dados. Exemplos: MOVC A, @A+DPTR A (A+DPTR) JMP @A+DPTR PC A+DPTR

MODO DESVIO INDEXADO Esse modo usado por instrues de desvio condicionais, que somam ao valor do PC j ajustado, o dado de 8 bits presente no final da instruo. Exemplo: JZ 15H Desvio relativo se A=00

29

Wilson Ruiz

EXEMPLOS DA ESCRITA DE ALGUMAS INSTRUES


Mnemnico ADD A, @R1 ADDC A, #58 SUBB A, R0 INC DPTR MUL AB DIV AB ANL 58, #66 XRL A, @R1 RL A RRC A SWAP A MOV A, 1Fh MOV A, #3Ch MOV A, #10101110b MOV A, #78 MOV @R0, #0F2h MOV DPTR, #2000h MOVC A, @A+DPTR MOVX A, @R0 MOVX @DPTR, A XCH A, 28 XCHD A, @R0 POP 70 PUSH 70 CLR EX1 CLR ABh CPL A ORL C, 1Ah JNB P1.1, 2Ch Descrio A A + (R1) A A + 58 + carry A A R0 carry DPTR DPTR + 1 BA AxB A A/B B resto (58) (58) [and] #66 A A [exclusive or] (R1) d7d6d5d4d3d2d1d0d7 cyd7d6d5d4d3d2d1d0cy em A: d7 d6 d5 d4 d3 d2 d1 d0 A (1Fh) A #3Ch ;hexadecimal A #10101110b ;binrio A 78 ;decimal (R0) F2h { ateno para o caractere 0 } DPTR 2000h A (A + DPTR) ;nica forma de ler uma constante na memria de programa A (R0) ;leitura da RAM externa (DPTR) A ;escrita na RAM externa A (28) Para: A = 21h e (R0) = 4Dh, aps a instruo temos: A = 2Dh e (R0) = 41h (70) (SP) SP SP + 1 SP SP 1 (SP) (70) bit EX1 0 Bit ABh 0 A complemento de A cy (or) (bit 1Ah) se P1.1 = 0 ;PC PC + 2Ch o programa desvia se P1.1 =1 ;programa prossegue

30

Wilson Ruiz

2.2 TABELAS DE INSTRUES DA FAMLIA 8051


Para diferenciar os modos de endereamento, o tratamento dado a variveis, constantes e endereos, registradores e seus contedos, alm de valores numricos genricos de diferentes formatos e para diversas aplicaes, utilizada por alguns fabricantes a seguinte notao: Rn Ri @ #dado8 #dado16 direto rel end2k end16 bit Indica registrador R0 a R7 genericamente, dependendo de n. Indica o registrador R0 ou R1 genericamente, dependendo de i. Significa endereado pelo valor de ... Indica valor constante de 8 bits. Indica valor constante d 16 bits. Indica um endereo de memria de 8 bits (primeiras 256 posies internas ou externas). Indica que o endereo relativo. Indica endereo dentro de uma faixa de 2Kbytes. Indica um endereo de 16 bits. Indica um bit individualmente endereado. CICLOS DE MQUINA Corresponde a um perodo de tempo equivalente a 12 perodos do clock, portanto para um microcontrolador com um cristal de 12M Hz, um ciclo de mquina tem a durao de 1 x 10-6 s. Todas as instrues sempre so executadas em um nmero inteiro de ciclos de mquina, que na famlia 8051 so de 1, 2 ou 4 ciclos.

31

Wilson Ruiz

INSTRUES PARA TRANSFERNCIA DE DADOS Mnemnico Descrio No de bytes 1 2 1 2 1 2 2 2 2 3 2 3 1 2 2 3 1 No de pulsos de clock 12 12 12 12 12 12 12 12 24 24 24 24 12 24 12 24 24

MOV A, Rn MOV A, direto MOV A, @Ri MOV A, #dado8 MOV Rn, A MOV Rn, direto MOV Rn, #dado8 MOV direto, A MOV direto, Rn MOV direto1, direto2 MOV direto, @Ri MOV direto, #dado8 MOV @Ri, A MOV @Ri, direto MOV @Ri, #dado8 MOV DPTR, #dado16 MOVC A, @A + DPTR

MOVC A, @A + PC MOVX A, @Ri MOVX A, @DPTR MOVX @Ri, A MOVX @DPTR, A PUSH direto POP direto XCH A, Rn XCH A, direto XCH A, @Ri XCHD A, @Ri

Move o registrador para o acumulador Move a memria para o acumulador Move RAM endereada por Ri para o acumulador Move o dado para o acumulador Move o acumulador para o registrador Move a memria para o registrador Move o dado para o registrador Move o acumulador para a memria Move o registrador para a memria Move o contedo da memria direta2 para a memria direta1 Move RAM endereada por Ri para a me mria Move o dado para a memria Move o acumulador para a RAM endereada por Ri Move a memria para a RAM endereada por Ri Move o dado para a RAM indireta Move dado de 16 bits para o DPTR Soma: A + DPTR obtendo um endereo de 16 bits na memria de programa e carrega acumulador com esta memria Idem a anterior mas soma A + PC Move RAM externa (endereo de 8 bits) para o acumulador Move RAM externa (endereo de 16 bits) para o acumulador Move acumulador para a RAM externa (endereo de 16 bits) Move acumulador para a RAM externa (endereo de 16 bits) Incrementa o SP e ento coloca a memria no stack Retira o dado do stack e o coloca na memria, depois decrementa o SP Troca os contedos do acumulador e do registrador Troca a memria com o contedo do acumulador Troca RAM indireta com o contedo do acumulador Troca o nibble menos significativo do acumulador e da RAM indireta entre si

1 1 1 1 1 2 2 1 2 1 1

24 24 24 24 24 24 24 12 12 12 12

32

Wilson Ruiz

INSTRUES ARITMTICAS Mnemnico Descrio No de bytes 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 1 2 1 1 1 1 1 No de pulsos de clock 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 24 48 48 12

ADD A, Rn ADD A, direto ADD A, @Ri ADD A, #dado8 ADDC A, Rn ADDC A, direto ADDC A, @Ri ADDC A, #dado8 SUBB A, Rn SUBB A, direto SUBB A, @Ri SUBB A, #dado8 INC A INC Rn INC direto INC @Ri DEC A DEC Rn DEC direto DEC @Ri INC DPTR MUL AB DIV AB DA A

Soma o contedo de Rn ao acumulador. Resultado em A. Soma o contedo da posio de memria ao acumulador. Resultado em A. Soma o contedo da RAM endereada por Ri ao acumulador. Resultado em A. Soma o dado ao acumulador. Resultado em A. Soma o contedo de Rn e o carry ao acumulador. Resultado em A. Soma o contedo da posio de memria e o carry ao acumulador. Resultado em A. Soma o contedo da RAM endereada por Ri e o carry ao acumulador. Resultado em A. Soma o dado e o carry ao acumulador. Resultado em A. Subtrai o contedo de Rn e o borrow do acumulador. Resultado em A. Subtrai o contedo da posio de memria e o borrow do acumulador. Resultado em A. Subtrai o contedo da RAM endereada por Ri e o borrow do acumulador. Resultado em A. Subtrai o dado e o borrow do acumulador. Resultado em A. Soma 1 ao acumulador. Soma 1 ao contedo de Rn Soma 1 a posio de memria Soma 1 a RAM endereada por Ri Subtrai 1 do acumulador. Subtrai 1 do contedo de Rn Subtrai 1 da posio de memria Subtrai 1 da RAM endereada por Ri Soma 1 ao registro DPTR Multiplica A e B, resultado em BA Divide A por B, resultado em A, reto em B Ajuste decimal do acumulador.

33

Wilson Ruiz

INSTRUES LGICAS Mnemnico Descrio No de bytes 1 2 1 2 2 3 1 2 1 2 2 3 1 2 1 2 2 3 1 1 1 1 1 1 1 No de pulsos de clock 12 12 12 12 12 24 12 12 12 12 12 24 12 12 12 12 12 24 12 12 12 12 12 12 12

ANL A, Rn ANL A, direto ANL A, @Ri ANL A, #dado8 ANL direto, A ANL direto, #dado8 ORL A, Rn ORL A, direto ORL A, @Ri ORL A, #dado8 ORL direto, A ORL direto, #dado8 XRL A, Rn XRL A, direto XRL A, @Ri XRL A, #dado8 XRL direto, A XRL direto, #dado8 CRL A CPL A RL A RLC A RR A RRC A SWAP A

E entre o registrador e o acumulador. Resultado em A. E entre a memria e o acumulador. Resultado em A. E entre RAM indireta e o acumulador. Resultado em A. E entre o dado e o acumulador. Resultado em A. E entre acumulador e memria. Resultado na memria. E entre dado e memria. Resultado na memria OU entre o registrador e o acumulador. Resultado em A. OU entre a memria e o acumulador. Resultado em A. OU entre RAM indireta e o acumulador. Resultado em A. OU entre o dado e o acumulador. Resultado em A. OU entre acumulador e memria. Resultado na memria OU entre dado e memria. Resultado na memria XOR entre o registrador e o acumulador. Resultado em A. XOR entre a memria e o acumulador. Resultado em A. XOR entre RAM indireta e o acumulador. Resultado em A XORentre o dado e o acumulador.Resultado em A XOR entre acumulador e memria. Resultado na memria XOR entre dado e memria.Resultado na memria Faz A = 0 Inverte o estado de todos os bits do acumulador Desloca o acumulador um bit a esquerda d7d6d5d4d3d2d1d0d7 Desloca o acumulador um bit a esquerda pela carry CYd7d6d5d4d3d2d1d0CY Desloca o acumulador um bit a direita d7d6d5d4d3d2d1d0d7 Desloca o acumulador um bit a direita pela carry d7d6d5d4d3d2d1d0CYd7 Troca os nibbles + e significativos do acumulador

34

Wilson Ruiz

INSTRUES DE DESVIO Mnemnico Descrio No de bytes 2 No de pulsos de clock 24

ACALL end2K

LCALL end16 RET RETI AJMP end2K

LJMP end16 SJMP rel JMP @A + DPTR JZ rel JNZ rel CJNE A, direto, rel CJNE A, #dado8, rel CJNE Rn, #dado8, rel CJNE @Ri, #dado8, rel DJNZ Rn, rel DJNZ direto, rel NOP

Chama sub-rotina numa contida faixa de 2Kbytes da posio atual (dentro do espao de 1024 a +1024 posies de memria). Chama sub-rotina em qualquer posio da memria de programa (at 64K bytes). Retorna da sub-rotina. Retorna da interrupo. Desvia para endereo dentro de uma faixa de 2Kbytes da posio atual (dentro do espao de 1024 a +1024 posies de memria). Desvia para qualquer posio da memria de programa (at 64K bytes). Desvio curto relativo em uma faixa de 255 bytes (dentro do espao 128 a +127 posies de memria). Desvia para o endereo obtido da soma do acumulador com o DPTR. Desvia se o acumulador for zero. Desvia se o acumulador no for zero. Compara e desvia se o acumulador for diferente da memria endereada. Compara e desvia se o acumulador for diferente do dado. Compara e desvia se o registrador for diferente do dado.. Compara e desvia se a RAM indireta for diferente do dado. Decrementa o registrador e desvia se for diferente de zero. Decrementa a memria e desvia se for diferente de zero. Nenhuma operao.

3 1 1 2

24 24 24 24

3 2 1 2 2 3 3 3 3 2 3 1

24 24 24 24 24 24 24 24 24 24 24 12

35

Wilson Ruiz

INSTRUES PARA VARIVEIS BOOLEANAS Mnemnico Descrio No de bytes 1 2 1 2 1 2 2 2 2 2 2 2 2 2 3 3 3 No de pulsos de clock 12 12 12 12 12 12 24 24 24 24 12 24 24 24 24 24 24

CLR C CLR bit SETB C SETB bit CPL C CPL bit ANL C, bit ANL C, /bit ORL C, bit ORL C, /bit MOV C, bit MOV bit, C JC rel JNC rel JB bit, rel JNB bit, rel JBC bit, rel

Zera o carry flag Zera o bit endereado Seta o carry flag Seta o bit endereado Inverte o estado do carry flag Inverte o estado do bit endereado E entre o carry flag e o bit endereado. Resultado no carry flag. E entre o carry flag e o complemento do bit endereado. Resultado no carry flag. OU entre o carry flag e o bit endereado. Resultado no carry flag. OU entre o carry flag e o complemento do bit endereado. Resultado no carry flag. Move o bit endereado para o carry flag. Move o carry flag para o bit endereado. Desvia se o carry flag estiver setado. Desvia se o carry flag estiver zerado. Desvia se o bit endereado estiver setado. Desvia se o bit endereado estiver zerado. Desvia se o bit endereado estiver setado e depois zera o bit.

36

Wilson Ruiz

CAPTULO 3: PROGRAMAO E SIMULAO


3.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 atravs 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 binrio 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 .PRN, 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 OBJETO EXECUTVEL .ASM .OBJ .HEX O compilador, o Linker e o Simulador usados no laboratrio so produzidos pela AVOCET.

37

Wilson Ruiz

3.2 DIRETIVAS (ou PSEUDO-INSTRUES) 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 (DEFINE BYTE) Formato: Pseudo-instruo operando DB byte Funo: 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. Formato: Pseudo-instruo
END

DB

END Funo: Indica o final do programa.


38

Wilson Ruiz

3.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 (programa objeto) e .LST (listagem) da seguinte forma: X8051 Listing Destination (..........): D Generate cross reference Input file name:.........nome do arquivo.ASM Output file name: ...... nome do arquivo [ENTER] [ENTER] [ENTER] [ENTER] [ENTER]

3.

Com o LINK ligar o arquivo .OBJ, gerando um arquivo .HEX da seguinte forma: LINK Input file name: ........ .OBJ Enter offset for ....... Input file name: Output file name: Options (..........): H [ENTER] [ENTER] [ENTER] [ENTER] [ENTER] [ENTER]

4.

No simulador: Load Avocet .... .HEX Simulation F1 (total) F10 (passo a passo)

39

Wilson Ruiz

3.4

SIMULADOR DOS MICROCONTROLADORES DA FAMLIA 8051 ****** TELA DE ENTRADA DO SIMULADOR: ******

_______________________________________________________________

AVSIM 8051 Simulator/Debugger Licensed by Avocet Systems, Inc. To receive updates, see 'Help Registration' Copyright (C) 1985-1992 by Ken Anderson Software Inc All Rights Reserved

Intel 8051 Family Microcomputers HMOS ROM A: 8051/8751 B: 8052/8752 HMOS ROMless C: 8031 D: 8032 CMOS ROM E: 80C51 F: 80C31

Choose a CPU for simulation:

______________________________________________________________ ****** DEVE-SE SELECIONAR UMA OPO EM FUNO ****** ******DA CPU ESCOLHIDA PARA O PROJETO ******

40

Wilson Ruiz

****** TELA DE SIMULAO: ******


_________________________________________________________________________

LABEL OPERATION 8051/8751 AVSIM 8051 Simulator/Debugger V1.6 0000H no memory CPUREGISTERS FLAGS SCL SPD DSP SKPCURSOR 0001H no memory C Accumulator AC F0 OV P OFF HI ON OFF MENU 0002H no memory 0 00000000:00:_ 0 0 0 0 Cycles: 0003H no memory EA: 0004H no memory PC:0000 FF FF FF FF TimersTH/TL TF /TR G/T/M1/M0 0005H no memory SP: 07 00 00 00 00 T0: 00 00 0 0 0 0 0 0 0006H no memory 00 00 00 00 T1: 00 00 0 0 0 0 0 0 0007H no memory DP:0000 FF FF FF FF 0008H no memory R0:00:_ 00:_ RB:00 Ints A S T1 X1 T0 X0 Edg IT IE 0009H no memory R1:00:_ 00:_ B:00 En 0 0 0 0 0 0 X0: 0 0 000AH no memory R2:00 R4:00 R6:00 Pr 0 0 0 0 0 X1: 0 0 000BH no memory R3:00 R5:00 R7:00 SBUF: In Out PCON:0xxxxxxx 000CH no memory Data S pace 00:_ 00:_ SCON:00000000 000DH no memory 00 00 00 00 00 00 00 00 00 _____________ Ports 000EH no memory 08 00 00 00 00 00 00 00 00 _____________ P0 11111111 000FH no memory 10 00 00 00 00 00 00 00 00 _____________ FF:_:11111111 0010H no memory 18 00 00 00 00 00 00 00 00 _____________ P1 11111111 0011H no memory Data Space FF:_:11111111 0012H no memory 20 00 00 00 00 00 00 00 00 _____________ P2 11111111 0013H no memory 28 00 00 00 00 00 00 00 00 _____________ FF:_:11111111 0014H no memory 30 00 00 00 00 00 00 00 00 _____________ P3 11111111 0015H no memory 38 00 00 00 00 00 00 00 00 _____________ FF:_:11111111 >Select Command - or use arrow keys Dump Expression commandFile Help IO Load --space-- ESC to screen

41

Wilson Ruiz

OPERAO BSICA DO SIMULADOR Para uma rpida ambientao com o programa simulador, apresentada uma seqncia de testes para as principais teclas e/ou comandos: Visualizao geral da tela, tentando reconhecer os seus principais campos (coloridos) e funes correspondentes. Teclas: ESC CTRL C Comandos: Help Commands Display Simulation Avocet Registration Avocet Exit Cursor Yes No

Load Quit setUp View

Memory-map 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.

42

Wilson Ruiz
3.5 EXERCCIOS / EXEMPLOS DE PROGRAMAO - APLICAES PARA O SIMULADOR AVSIM 8051 OBJETIVOS: 1. Praticar o uso do programa simulador da famlia de microcontroladores estudada. 2. Ampliar o conjunto de instrues e pseudo-instrues (diretivas) conhecido pelos alunos. 3. Explorar recursos do microcontrolador como: interrupes, contadores etc. 4. Obter respostas com estruturas prximas as empregadas em sistemas reais microcontrolados, equivalendo ao FIRMWARE destes (SOFTWARE armazenado exclusivamente em memria no volatil, e com a funo de controlar o HARDWARE ). 5. Em todos os enunciados (dos exerccios seguintes) fica subentendido a seguinte frase: Escrever, compilar e simular um programa em linguagem assembly do microcontrolador 8751 para.... EXEMPLO / EXERCCIO 1 Escrever e simular um programa para o microcontrolador 8751 que execute as seguintes tarefas: A. Inicialmente carregue os registradores R0, R1, R2, R3, R4, R5, R6 e R7 com os valores: 00H, 10H, 20H, 30H, 40H, 50H, 60H e 70H respectivamente. B. Envie os bytes 00H para P0, FFH para P1, 0FH para P2 e AAH para P3. C. Incremente o contedo dos registradores R0, R1, R2, R3, R4, R5, R6 e R7. D. Envie os bytes FFH para P0, 00H para P1, F0H para P2 e 55H para P3. E. Volte ao passo C (entrando em loop). OBS: Ateno com o uso das diretivas ORG e END e dos label L1. Para facilitar o entendimento e a depurao, procure sempre manter uma boa esttica na digitao do programa. Testar a soluo apresentada procurando ambientar-se com a operao do simulador: ;**************************************************************************** ; EXEMPLO / EXERCCIO 1 ESCRITA EM REGISTRADORES E NAS PORTAS ;**************************************************************************** ORG 0000H LJMP INICIO ;desvia dos endereos reservados p/ as interrupes ORG MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV INC INC INC INC INC INC INC INC MOV MOV MOV MOV LJMP END 0050H R0, #00H R1, #10H R2, #20H R3, #30H R4, #40H R5, #50H R6, #60H R7, #70H P0, #00H P1, #0FFH P2, #0FH P3, #0AAH R0 R1 R2 R3 R4 R5 R6 R7 P0, #0FFH P1, #00H P2, #0F0H P3, #055H L1

INICIO:

;carrega o registrador R0 ;carrega o registrador R1 ;carrega o registrador R2 ;carrega o registrador R3 ;carrega o registrador R4 ;carrega o registrador R5 ;carrega o registrador R6 ;carrega o registrador R7 ;envia byte para a porta P0 ;envia byte para a porta P1 ;envia byte para a porta P2 ;envia byte para a porta P3 ;incrementa o contedo do registrador R0 ;incrementa o contedo do registrador R1 ;incrementa o contedo do registrador R2 ;incrementa o contedo do registrador R3 ;incrementa o contedo do registrador R4 ;incrementa o contedo do registrador R5 ;incrementa o contedo do registrador R6 ;incrementa o contedo do registrador R7 ;envia byte para a porta P0 ;envia byte para a porta P1 ;envia byte para a porta P2 ;envia byte para a porta P3

L1:

43

Wilson Ruiz
EXEMPLO / EXERCCIO 2 Escrever e simular um programa para o microcontrolador 8751 com o objetivo de controlar os bytes fornecidos para as portas P0 e P1 (sadas do sistema) atravs do status do bit P3.7 (entrada do sistema), da seguinte forma: Enquanto a entrada P3.7 for = 0 Enviar para a porta P0 alternadamente os bytes 00h e FFh, separados de um pequeno delay. Deixa a porta P1 inalterada. OBS: Ateno com o uso das diretivas ORG e END e dos labels L1, L2 e DELAY. Verifique o uso da instruo de teste de bit e de chamada e retorno de sub-rotina. Para facilitar o entendimento e a depurao, procure sempre manter uma boa esttica na digitao do programa. Testar a soluo apresentada procurando ambientar-se com a operao do simulador: Enquanto a entrada P3.7 for = 1 Enviar para a porta P1 alternadamente os bytes 55h e AAh, separados de um pequeno delay. Deixa a porta P0 inalterada.

;************************************************************** ; EXEMPLO / EXERCCIO 2 TESTE DE BITS ;************************************************************** ORG 0000H LJMP INICIO ;desvia dos endereos ;reservados p/ as interrupes ORG 0050H INICIO: JNB P3.7, L1 ;desvia se bit de controle = 0 MOV ACALL MOV ACALL LJMP L1: MOV ACALL MOV ACALL LJMP MOV DEC JNZ RET END P1, #55H DELAY P1, #0AAH DELAY INICIO P0, #00H DELAY P0, #0FFH DELAY INICIO A, #0FH A L2 ;controla a porta P1

;controla a porta P0

DELAY: L2:

;estabelece um pequeno ;atraso (para facilitar a ;visualizao no simulador. ;se necessrio alterar o atraso.

EXERCCIO 3 Escrever um programa para controlar o reservatrio da figura a seguir, com o objetivo de manter o nvel do lquido deste, que consumido pelo sistema, entre a posio dos sensores 0 e 1. Definio das variveis de entrada e sada: sensor 0 = 1 lquido detectado sensor 1 = 1 lquido detectado bomba = 1 acionada vlvula = 1 aberta OBS: Para a resoluo deste problema recomenda-se inicialmente a elaborao de um fluxograma ou algoritmo e aps, a sua codificao em assembly. O enunciado propositadamente aberto, assim qualquer dado ou condio adicional pode ser adotada pelo programador. caso contrrio caso contrrio desligada fechada

sensor 0 = 0 sensor 1 = 0 bomba = 0 vlvula = 0

44

Wilson Ruiz

EXERCCIO 4 Escrever um programa para controlar a operao das duas esteiras da figura, com os seguintes passos: A. Posicionar a caixa na esteira 2. B. Acionar a esteira 1 para encher a caixa com um total de 20 peas. C. Retirar a caixa cheia e posicionar uma nova. Definio das variveis de entrada e sada: sensor 0 = 1 pea detectada sensor 1 = 1 caixa detectada sensor 2 = 1 caixa detectada motor 1 = 1 motor ligado motor 2 = 1 motor ligado OBS: O emprego dos sensores 1 e 2 evita que uma eventual posio intermediria da caixa seja aceita como correta (por exemplo, no momento em que o sistema ligado). Pela diferena de dimenses entre o objeto e a rea ativa do sensor, deve-se evitar que uma pea seja contada mais de uma vez, ao passar na frente do sensor 0. O enunciado propositadamente aberto, assim qualquer dado ou condio adicional pode ser adotada pelo programador. caso contrrio caso contrrio caso contrrio motor desligado motor desligado

sensor 0 = 0 sensor 1 = 0 sensor 2 = 0 motor 1 = 0 motor 2 = 0

45

Wilson Ruiz

EXERCCIO 5 Escrever um programa que execute os seguintes passos: A. Inicie o sistema carregando: R0 00h , R1 01h , R2 02h , R3 03h , R4 04h , R5 05h , R6 06h , R7 07h B. Reset a carry flag. C. Faa uma leitura de uma porta de entrada (P1) e atravs da anlise deste byte possibilite a escolha de uma das funes descritas na tabela a seguir. D. Programa entra em loop e volta ao passo C . Bit P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 =0 -----------------------------------------------------------------------------------------------------------------------------------------------------------------Escolha do sentido de Rotao: p/ esquerda =1 Envia p/ P2 o contedo de R0, R1,...R7 Separados por um pequeno delay Incrementar o contedo de todos Rn Decrementar o contedo de todos Rn Rotacionar todos Rn de 4 bits ou Trocar os seus respectivos nibbles Rotacionar todos Rn de 3 bits Rotacionar todos Rn de 2 bits Rotacionar todos Rn de 1 bit Escolha do sentido de rotao: p/ direita OBS: p/ os bits 4 ou 3 ou 2 ou 1 = 1

OBS:

Admitir que o sistema nunca fornecer 2 bits iguais a 1 simultaneamente nos pinos: P1.7, P1.6, P1.5, P1.4 P1.3, P1.2 e P1.1. Antes de iniciar a simulao fazer P1 = 00h (condio inicial). Simular passo a passo o programa observando sua execuo.

46

Wilson Ruiz
SUGESTES: Usar as instrues: RL A ; RR A ; SWAP A ; CLR C ; JNB bit, rel ; LJMP end Executar cada uma das tarefas solicitadas em sub-rotinas especializadas e selecionadas pelo programa principal como mostrado no fragmento de programa a seguir: . . . JNB P1.7, L1 ACALL SUB_7 L1: JNB P1.6, L2 ACALL SUB_6 JNB P1.5, L3 ACALL SUB_5 JNB P1.4, L4 ACALL SUB_4 JNB P1.3, L5 ACALL SUB_3 JNB P1.2, L6 ACALL SUB_2 JNB P1.1, L7 ACALL SUB_1 . . .

L2:

L3:

L4:

L5:

L6:

L7:

EXERCCIO / EXEMPLO 6 Escrever um programa que realize as seguintes operaes: A. Inicialmente leia o byte presente na porta P0. B. Depois atualize o display ligado na porta P1 com o valor em hexadecimal correspondente. ao nmero binrio formado pelos bits presentes nos pinos: P0.3 P0.2 P0.1 P0.0 . C. O programa deve entrar em loop. Caractersticas do display e da conexo: Display de LEDs, catodo comum e de 7 segmentos + ponto decimal

Ligao dos segmentos (atravs de um resistor de 220 ohms): P1.7 h P1.6 g P1.5 f P1.4 e P1.3 d P1.2 c P1.1 b P1.0 a

pinos da porta 1: segmentos:

47

Wilson Ruiz
Tabela de cdigos de acendimento: Caractere 0 1 2 3 4 5 6 7 8 9 A B C D E F h g f e d c b a P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 0 0 1 1 1 1 1 1 0 0 0 0 0 1 1 0 0 1 0 1 1 0 1 1 0 1 0 0 1 1 1 1 0 1 1 0 0 1 1 0 0 1 1 0 1 1 0 1 0 1 1 1 1 1 0 1 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 1 0 0 0 0 1 1 1 0 0 1 0 1 0 1 1 1 1 0 0 1 1 1 1 0 0 1 0 1 1 1 0 0 0 1 Cdigo 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH 77H 7CH 39H 5EH 79H 71H

;*********************************************************************** ; EXERCCIO / EXEMPLO 6 DISPLAY & USO DE UMA TABELA ;*********************************************************************** ORG 0000H LJMP INICIO ;tabela de cdigos de acendimento ORG 0040H DB 3FH DB 06H DB 5BH DB 4FH DB 66H DB 6DH DB 7DH DB 07H DB 7FH DB 6FH DB 77H DB 7CH DB 39H DB 5EH DB 79H DB 71H ORG 0060H MOV MOV ANL MOVC MOV AJMP END

;cdigo de acendimento do caractere "0" ;cdigo de acendimento do caractere "1" ;cdigo de acendimento do caractere "2" ;cdigo de acendimento do caractere "3" ;cdigo de acendimento do caractere "4" ;cdigo de acendimento do caractere "5" ;cdigo de acendimento do caractere "6" ;cdigo de acendimento do caractere "7" ;cdigo de acendimento do caractere "8" ;cdigo de acendimento do caractere "9" ;cdigo de acendimento do caractere "A" ;cdigo de acendimento do caractere "B" ;cdigo de acendimento do caractere "C" ;cdigo de acendimento do caractere "D" ;cdigo de acendimento do caractere "E" ;cdigo de acendimento do caractere "F"

INICIO: L1:

DPTR, #0040H A, P0 A, #0FH A, @A+DPTR P1, A L1

;estabelece ponteiro no inicio da tabela ;l byte da porta P0 ;mascara os 4 bits mais significativos ;l cdigo de acendimento do caractere ;envia para o display

48

Wilson Ruiz
EXERCCIO 7 Alterar o programa anterior para que o nmero binrio presente nos 4 bits mais significativos da porta P0 (P0.7 P0.6 P0.5 P0.4) seja mostrados (em hexadecimal) em um novo display conectado na porta P2, com as mesmas caractersticas em hardware do anterior.

Ligao dos segmentos (atravs de um resistor de 220 ohms): pinos da porta 2: segmentos: P2.7 h P2.6 g P2.5 f P2.4 e P2.3 d P2.2 c P2.1 b P2.0 a

EXERCCIO 8 Escrever um programa que execute os seguintes passos: A. Inicialmente desvie dos endereos reservados aos vetores de interrupo, (Interrupo externa nmero 0 = INT0 = pino P3.2 e Interrupo externa nmero 1 = INT1 = pino P3.3), para uma regio de memria onde estar a rotina de tratamento de cada interrupo. Exemplo: ORG LJMP 0000H INICIO

;Desvia dos vetores de interrupo

ORG LJMP

0003H INT0

;Interrupo externa nmero 0

ORG LJMP

0013H INT1

;Interrupo externa nmero 1

ORG INICIO: MOV . . . B. C. D. E. F. OBS:

0050H IE, #...

Habilita e configura as interrupes externas atravs dos registradores IE, IP e TCON. Posiciona SP (Stack pointer) em 0030H. Envia 00H para as portas P0 e P1. A cada interrupo externa incrementa o contedo da porta P0 (para o INT0) e o da porta P1 (para o INT1) criando dois contadores de interrupes. Entra em loop.

Simular passo a passo o programa observando sua execuo. Durante a simulao, controlar os bits de entrada de cada interrupo, verificando o funcionamento destas.

49

Wilson Ruiz
EXERCCIO 9 Escrever um programa para controlar o reservatrio da figura a seguir, com o objetivo de manter o nvel do lquido deste, que c consumido pelo sistema, entre a posio dos sensores 0 e 1 (sensores 0 e 1), alm de tambm gerar continuamente um sinal indicador de que o sistema est em operao em um LED, ligado no bit P1.7, alternado o status deste entre 0 e 1 , separado por um pequeno delay. Definio das variveis: sensor 0 = 1 lquido detectado sensor 1 = 1 lquido detectado bomba = 1 acionada vlvula = 1 aberta caso contrrio caso contrrio desligada fechada

sensor 0 = 0 sensor 1 = 0 bomba = 0 vlvula = 0

OBS:

Apesar do sistema apresentado ser semelhante ao do exerccio nmero 3 o programa deve ser diferente, pois nessa aplicao so usadas as duas interrupes externas no seu controle (ligao dos sensores). Para que o uso desse recurso seja possvel necessrio que o programa salte os endereos de memria reservados para todas as interrupes (diretiva ORG) e tambm configure aquelas usadas pelo sistema, atravs dos registradores IE, IP e TCON. O uso de interrupes uma das caractersticas mais importantes em aplicaes de controle envolvendo microcontroladores e microprocessadores, pois evita-se que a CPU fique monitorando continuamente os dispositivos de entrada. Assim o sistema proposto no exerccio tem liberdade para ficar alternando o bit de sada da porta P1 (P1.7), entre 0 e 1, enquanto nenhuma interrupo ativada. Para a resoluo deste problema recomenda-se inicialmente a elaborao de um fluxograma ou algoritmo e aps, a sua codificao em assembly, (notar que as rotinas de interrupo possuem fluxogramas separados do principal). O enunciado propositadamente aberto, assim qualquer dado ou condio adicional pode ser adotada pelo programador. Aps a simulao comparar esta soluo com a empregada no exerccio nmero 3.

EXERCCIO / EXEMPLO 10 Dado o seguinte sistema microcontrolado baseado na CPU 8751: Motor de passo ligado nos bits: P1.3 , P1.2 , P1.1 e P1.0 conforme a tabela: Tabela de acionamento do motor B P1.2 A P1.1 B P1.0 0 0 1 0 1 0 1 0 0 0 0 0

A P1.3 0 0 0 1

Passo 1 Passo 2 Passo 3 Passo 4

50

Wilson Ruiz
Escrever um programa que execute o controle do sistema da seguinte forma: Movimente o motor continuamente, com o sentido de rotao selecionado pelo bit de entrada P3.7: P3.7 = 0 sentido horrio P3.7 = 1 sentido anti-horrio ;*********************************************************************************************** ; EXERCCIO / EXEMPLO 10 CONTROLE DE MOTOR DE PASSO ; OBS: Necessrio o ajuste do delay em funo da velocidade do microcomputador usado para a simulao. ;*********************************************************************************************** ORG 0000H LJMP INICIO ORG MOV JNB MOV ACALL RR AJMP L1: MOV ACALL RL AJMP MOV DEC CJNE RET END 0050H A, #00010001B P3.7, L1 P1, A DELAY A L2 P1, A DELAY A L2 R0, #1FH R0 R0, #00H, L3

INICIO: L2:

;estabelece o byte inicial ;para o chaveamento do motor ;testa o bit de controle ;movimenta no sentido anti-horrio ;fornece uma pausa "entre passos" ;desloca um bit para a direita ;retorna para novo teste ;movimenta no sentido horrio ;fornece uma pausa "entre passos" ;desloca um bit para a esquerda ;retorna para novo teste ;pausa (ajustar se necessrio)

DELAY: L3:

EXERCCIO 11 Acrescentar ao sistema anterior uma chave para habilitar o movimento, ligada no pino P3.0 e operando da seguinte forma: para P3.0 = 0 motor parado para P3.0 = 1 motor em movimento (com sentido escolhido por P3.7).

EXERCCIO 12 Acrescentar ao sistema anterior um controle de posio angular (contador de passos) da seguinte forma: O nmero de passos (em binrio) desejado para o movimento do motor lido da porta P2 (at 255 passos ou 11111111b). At o trmino do movimento escolhido (quando habilitado, com sentido de rotao selecionado e nmero de passos definido) o sistema ignora qualquer mudana nas variveis de controle. Uma nova leitura das variveis de controle deve acontecer somente aps o final do movimento anterior.

EXERCCIO 13 Incluir no sistema anterior um controle de velocidade, possibilitando a escolha gradual desta atravs dos bits: P0.3, P0.2, P0.1 e P0.0 da seguinte forma: Bits para a seleo de velocidade dos dois motores: para P0.3 P0.2 P0.1 P0.0 = 1111 temos a menor velocidade para P0.3 P0.2 P0.1 P0.0 = 0000 temos a maior velocidade (Possibilitando 16 valores diferentes de velocidades).

51

Wilson Ruiz
EXERCCIO 14 Alterar o sistema / programa anterior para: Incluir um push-button de controle (sinal de emergncia) ligado no pino de interrupo: P3.2 = INT0 Onde push-button pressionado equivale a 0 lgico. O motor deve ficar parado enquanto o push-button estiver pressionado e em movimento caso contrrio.

EXERCCIO 15 Ampliar o sistema anterior incluindo um outro motor com o seu bit de controle de sentido de rotao e o sinal de parada de emergncia ligado na interrupo, formando o seguinte conjunto: Bits de ligao do motor 1 e motor 2 conforme a tabela: Tabela de acionamento do motor 2 B P1.6 A P1.5 B P1.4 0 0 1 0 1 0 1 0 0 0 0 0 Tabela de acionamento do motor 1 B P1.2 A P1.1 B P1.0 0 0 1 0 1 0 1 0 0 0 0 0

A P1.7 0 0 0 1

Passo 1 Passo 2 Passo 3 Passo 4

A P1.3 0 0 0 1

Passo 1 Passo 2 Passo 3 Passo 4

Bits de controle do sentido de rotao dos motores: P3.7 = 0 motor 1 operando no sentido horrio P3.7 = 1 motor 1 operando no sentido anti-horrio P3.6 = 0 motor 2 operando no sentido horrio P3.6 = 1 motor 2 operando no sentido anti-horrio Bits para habilitao do movimento dos dois motores: P3.1 P3.0 = 00 motor 2 parado e motor 1 parado P3.1 P3.0 = 01 motor 2 parado e motor 1 em movimento P3.1 P3.0 = 10 motor 2 em movimento e motor 1 parado P3.1 P3.0 = 11 motor 2 em movimento e motor 1 em movimento Bits para a determinao do nmero passos dos dois motores: O nmero de passos de lido da porta P2 . Bits para a seleo de velocidade dos dois motores: para P0.3 P0.2 P0.1 P0.0 = 1111 temos a menor velocidade para P0.3 P0.2 P0.1 P0.0 = 0000 temos a maior velocidade (Possibilitando 16 valores diferentes de velocidades). Sinais de emergncia (interrupo) dos motores: P3.2 = INT0 para o motor 1 e 2

EXERCCIO 16 Ampliar o sistema anterior incluindo um push-button (sinal de emergncia) especfico para cada motor formando o seguinte conjunto: Sinais de emergncia (interrupo) dos motores: P3.2 = INT0 para o motor 1 P3.3 = INT1 para o motor 2

EXERCCIO 17 Alterar o sistema anterior para que os motores possam operar com velocidades diferentes, da seguinte forma: Bits para a seleo de velocidade do motor 1: para P0.3 P0.2 P0.1 P0.0 = 1111 temos a menor velocidade para P0.3 P0.2 P0.1 P0.0 = 0000 temos a maior velocidade (Possibilitando 16 valores diferentes de velocidades para o motor 1).

52

Wilson Ruiz
Bits para a seleo de velocidade do motor 2: para P0.7 P0.6 P0.5 P0.4 = 1111 temos a menor velocidade para P0.7 P0.6 P0.5 P0.4 = 0000 temos a maior velocidade (Possibilitando 16 valores diferentes de velocidades para o motor 2).

EXERCCIO 18 Dado o seguinte sistema microcontrolado baseado na CPU 8751: Motor de passo ligado nos bits: P1.3 , P1.2 , P1.1 e P1.0 conforme a tabela: Tabela de acionamento do motor B P1.2 A P1.1 B P1.0 0 0 1 0 1 0 1 0 0 0 0 0

A P1.3 0 0 0 1

Passo 1 Passo 2 Passo 3 Passo 4

Escrever um programa que execute o controle a acelerao do motor da seguinte forma: Movimente o motor continuamente, com a habilitao do movimento dada pelo bit P3.0 e o sentido deste pelo bit P3.7 como descrito a seguir: P3.7 = 0 movimento no sentido horrio P3.7 = 1 movimento no sentido anti-horrio Para P3.0 = 0 motor parado Para P3.0 = 1 motor em movimento (com sentido escolhido por P3.7). Se habilitado, inicie seu movimento em baixa velocidade e gradualmente acelere at estabilizar em uma velocidade adotada como mxima.

EXERCCIO 19 Alterar o sistema anterior para que o motor realize automaticamente o seguinte ciclo de trabalho: A. Se habilitado, inicie seu movimento em baixa velocidade e gradualmente acelere at estabilizar em uma velocidade adotada como mxima. B. Aps um determinado tempo operando nesta situao, diminua gradualmente a velocidade at um valor mnimo. C. A leitura dos bits de controle de sentido de rotao e habilitao, ser feita sempre quando o sistema atingir a menor velocidade, definindo assim o prximo movimento. D. O sistema entra em loop.

EXERCCIO 20 Incluir no sistema anterior um controle adicional de acelerao, feito pelo bit P3.6, da seguinte forma: P3.6 = 0 o motor inicia seu movimento em baixa velocidade e gradualmente acelere at estabilizar em uma velocidade adotada como mxima. P3.6 = 1 o motor inicia seu movimento em um velocidade adotada como mxima e gradualmente diminua esta, at estabilizar em uma velocidade baixa.

EXERCCIO 21 Alterar o sistema / programa anterior para: Incluir um push-button de controle (sinal de emergncia) ligado no pino de interrupo: P3.2 = INT0 Onde push-button pres sionado equivale a 0 lgico. O motor deve ficar parado enquanto o push-button estiver pressionado e em movimento caso contrrio.

53

Wilson Ruiz
EXERCCIO / EXEMPLO 22 Escrever um programa para automatizar um sistema constitudo por um estacionamento de autom veis hipottico com as caractersticas abaixo: ENTRADAS DO SISTEMA: porta Descrio: P3 Push-button para iniciar a operao do sistema (boto de START). Sinal de indicador de falta de energia eltrica. Sinal de contagem de veculos que entram no estacionamento. SADAS DO SISTEMA: porta Descrio: P0 Controle de painel luminoso de propaganda do estacionamento, com 8 lmpadas controladas individualmente e seqencialmente. P1 Controle da portaria de entrada (cancela).

bits / pinos P3.0 P3.2 = INT0 P3.4 = T/C0

nveis lgicos OBS: 0 = para iniciar Acionado uma nica 1 = caso contrrio vez no perodo. 0 = falta de energia Fornecido pelo 1 = caso contrrio gerador. transio de 1 p/ 0 indica Fornecido pelo entrada de um veculo sistema de entrada.

bits / pinos P0.7, P0.6, P0.5, P0.4, P0.3, P0.2, P0.1 e P0.0 P1.7

nveis lgicos 0 = apagada 1 = acesa

0 = abre 1 = fecha

Luz indicadora de estacionamento em funcionamento.

P1.6

0 = apagada 1 = acesa

OBS: Lmpadas piscando durante toda a operao do sistema. Abre no incio e fecha quando as vagas esto esgotadas. Considerar o temp o necessrio para o movimento da cancela. Quando acesa indica estacionamento funcionando e apagada, estacionamento fechado.

Controle da iluminao de emergncia.

P1.0

0 = apagada 1 = acesa

OBS: Neste exemplo s considerado o total de automveis que entram no estacionamento no perodo de funcionamento e para facilitar a simulao adotada uma capacidade mxima de 10 veculos. Quando o nmero de vagas for esgotado o sistema para e s inicia novamente o seu funcionamento atravs do acionamento do boto START. Na simulao, atuar nas variveis de entrada do sistema (bits P3.0, P3.2 e P3.4) e observar que, durante a contagem dos automveis que entram no estacionamento (contedo de TL0 sendo alterado) e na falta de energia eltrica, a porta P0 continua controlando o painel luminoso e a porta P1 atuando em outras sadas de controle. Para a resoluo de um projeto desse porte, recomendvel a utilizao de tabelas como as anteriores, onde so descritas as funes das variveis, os pinos de ligao e a correspondncia dos nveis lgicos. ;************************************************************************* ; EXERCCIO / EXEMPLO 22 - AUTOMAO DE ESTACIONAMENTO ;************************************************************************* ORG 0000H LJMP INICIO ORG LJMP ORG 0003H INT0 000BH

54

Wilson Ruiz
LJMP ORG MOV CLR SETB CLR ACALL JB JNB MOV MOV MOV MOV MOV MOV MOV SETB CLR ACALL JNB CLR MOV RL ACALL AJMP SETB RETI SETB ACALL CLR LJMP RETI MOV DEC CJNE RET MOV DEC CJNE RET END CNT0 0050H P0, #00H P1.0 P1.7 P1.6 DELAY_2 P3.0, L1 P3.0, L2 TL0, #0F6H TH0, #0F6H A, #00000001B IE, #10000011B IP, #00000001B TMOD, #00000110B TCON, #00010001B P1.6 P1.7 DELAY_2 P3.2, L4 P1.0 P0, A A DELAY_1 L3 P1.0

INICIO:

L1: L2:

L3: L4:

;apaga painel luminoso ;apaga iluminao de emergncia ;fecha cancela de entrada ;apaga luz indicadora de funcionamento ;delay para o movimento mecnico ;espera pressionar START ;espera soltar START ;estabelece o valor inicial do contador ;calculo: 255 10 + 1 = 246 = F6H ;estabelece o byte inicial do painel ;habilita INT0 e T/C0 ;prioridades: INT0 alta e T/C0 baixa ;define modo 2 para T/C0 ;INT0 ativa por rampa e liga T/C0 ;acende luz indicadora funcionamento ;abre cancela de entrada ;delay para movimento mecnico ;desvia se energia eltrica OK ;apaga iluminao de emergncia ;controle do painel luminoso ;desloca o bit da lmpada acesa ;delay para as lmpadas

INT0:

;acende iluminao de emergncia ;retorna da interrupo ;fecha cancela de entrada ;delay para movimento mecnico ;apaga luz de funcionamento ;volta para aguardar o START ;esta instruo nunca executada ;fornece delay para as lmpadas

CNT0:

P1.7 DELAY_2 P1.6 L1

DELAY_1: L5:

R7, #0AH R7 R7, #00H, L5

DELAY_2: L6:

R6, #50H R6 R6, #00H, L6

;fornece delay para movimento ;mecnico

EXERCCIO 23 Modificar o sistema anterior incluindo outros sinais de entrada (sensor para os automveis) e de sada (controle de uma cancela de sada), para possibilitar que este considere os automveis que saem do estacionamento, liberando vagas durante o perodo de funcionamento.

55

Wilson Ruiz
ENTRADAS ADICIONAIS AO SISTEMA: porta Descrio: P3 Sinal indicador de sada de veculo bits / pinos P3.6 nveis lgicos 0 = sada de veculo 1 = caso contrrio OBS:

SADAS ADICIONAIS AO SISTEMA: porta Descrio: P1 Controle da portaria de sada (cancela).

bits / pinos P1.5

nveis lgicos 0 = abre 1 = fecha

OBS: Fecha no incio e abre quando detectado um veculo saindo. Considerar o tempo necessrio para o movimento da cancela.

EXERCCIO 24 Sofisticar o sistema anterior, incluindo um contador para controlar o nmero de funcionrios do estacionamento presentes durante o perodo de funcionamento. ENTRADAS ADICIONAIS AO SISTEMA: porta Descrio: P3 Sinal de contagem dos funcionrios que chegam ao trabalho

bits / pinos P3.5 = T/C1

nveis lgicos Transio de 1 p/ 0 indica chegada do funcionrio

OBS: Fornecido pelo sistema de entrada

EXERCCIO 25 Incluir no sistema anterior o controle de uma lmpada indicadora de que o nmero de funcionrios presentes no estacionamento suficiente para o funcionamento do mesmo. OBS: Por razes de segurana, o estacionamento s entrar em funcionamento quando o nmero de funcionrios presentes for maior ou igual a 5. SADAS ADICIONAIS AO SISTEMA: porta Descrio: P1 Controle da lmpada indicadora de nmero de funcionrios suficiente.

bits / pinos P1.4

nveis lgicos 0 = apagada 1 = acesa

OBS: Acende quando o nmero de funcionrios suficiente.

EXERCCIO 26 Incluir no sistema a utilizao da porta P2 como sada, com um display de 7 segmentos conectado (anodo comum), que sempre indica o nmero de vagas disponveis naquele instante no estacionamento (em decimal) da seguinte forma: para nenhuma vaga disponvel manter o display apagado e para 10 vagas acender o nmero zero. OBS: Tomar como referncia a soluo do exerccio 6

56

Wilson Ruiz

Ligao dos segmentos (atravs de um resistor de 220 ohms): pinos da porta 2: P2.7 P2.6 P2.5 P2.4 segmentos: h g f e

P2.3 d

P2.2 c

P2.1 b

P2.0 a

EXERCCIO / EXEMPLO 27 Projetar um sistema de controle de um elevador para 3 nveis, baseado no microcontrolador 8751, com as seguintes caractersticas: Entradas do sistema: P0 e INT0 Sinal Descrio Pino de ligao Nveis lgicos o o CH1 Boto para enviar o elevador ao 1 andar (1 nvel P0.0 1=acionada ou trreo) 0=caso contrrio CH2 CH3 Sensor1 Sensor2 Sensor3 SAFETY Boto para enviar o elevador ao 2o andar Boto para enviar o elevador ao 3o andar Sensor indicador de presena da cabine no 1o andar Sensor indicador de presena da cabine no 2o andar Sensor indicador de presena da cabine no 3o andar Boto de emergncia P0.1 P0.2 P0.4 P0.5 P0.6 P3.2 = INT0 1=acionada 0=caso contrrio 1=acionada 0=caso contrrio 1= h cabine no andar 0=caso contrrio 1= h cabine no andar 0=caso contrrio 1= h cabine no andar 0=caso contrrio 0=acionado 1=caso contrrio

Sadas do sistema: P1 Sinal Motor do elevador

Descrio Bits usados para a movimentao do motor

Pino de ligao P1.1 P1.0

P1.1 0 0 1 1

Porta LED1 LED2 LED3

Bit usado para a movimentao da porta Led para indicar que a cabine est no 1o andar Led para indicar que a cabine est no 2o andar Led para indicar que a cabine est no 3o andar

P1.2 P1.4 P1.5 P1.6

Nveis lgicos P1.0 0 elevador parado 1 elevador desce 0 elevador sobe 1 no usado 0=fecha porta 1=abre porta 0=led apagado 1=led aceso 0=led apagado 1=led aceso 0=led apagado 1=led aceso

OBS: Se desejvel possvel associar-se o 1o 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. Assim que o sistema iniciado o elevador desloca-se para o primeiro andar com a porta fechada e l chegando abre a porta. O elevador somente desloca-se com a porta fechada.

57

Wilson Ruiz
Quando a cabine est parada, sua porta conecta-se mecanicamente com a porta do respectivo andar e assim ambas tero o mesmo movimento. 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). O LED aceso indica a presena da cabine no respectivo andar. Normalmente no recomendvel uma freqncia de clock inferior 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). 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).

;************************************************************************************************** ; EXERCCIO / EXEMPLO 27: CONTROLE DO ELEVADOR 05/11/2002 02:45h ; 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 LJMP ORG LJMP ORG MOV MOV MOV MOV MOV 0003H INT0 000BH TIMER0 0050H SP, #0030H IE, #10000011B IP, #00000001B TCON, #00000000B TMOD, #00000001B

INICIO:

CLR P1.1 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 ;************************************************************************************************** ;O sistema (elevador) est sendo iniciado ;************************************************************************************************** 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: ACALL SUBIR ;movimenta o elevador para o 2o andar L4: JNB P0.5, L4 ;espera chegar no 2o andar

;estabelece o ponteiro da pilha ;habilita INT0 e TIMER0 ;define prioridade alta p/ INT0 e baixa p/ TIMER0 ;INT0 ativa por nvel 0 e TIMER0 desligado ;funo de temporizao com controle do TIMER0 feito pelo bit TR0 ;modo 1 de operao ;para o elevador

58

Wilson Ruiz
ACALL PARAR SETB P1.5 ;acende o led indicador de 2o andar LJMP ANDAR_2 L3: ACALL SUBIR ;movimenta o elevador para o 3o andar L5: JNB P0.6, L5 ;espera chegar no 3o andar ACALL PARAR SETB P1.6 ;acende o led indicador de 3o andar LJMP ANDAR_3 ;************************************************************************************************** ;O elevador est no 2o andar ;************************************************************************************************** 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: ACALL DESCER ;movimenta o elevador para o 1o andar L8: 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: ACALL SUBIR ;movimenta o elevador para o 3o andar L9: 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: ACALL DESCER ;movimenta o elevador para o 1o andar L12: JNB P0.4, L12 ;espera chegar no 1o andar ACALL PARAR SETB P1.4 ;acende o led indicador de 1o andar LJMP ANDAR_1 L11: ACALL DESCER ;movimenta o elevador para o 2o andar L13: JNB P0.5, L13 ;espera chegar no 2o andar ACALL PARAR SETB P1.5 ;acende o led indicador de 2o andar LJMP ANDAR_2 ;************************************************************************************************** ; sub-rotina: SUBIR ;************************************************************************************************** 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

59

Wilson Ruiz
SETB TR0 ;liga o timer0 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 ;************************************************************************************************** ; sub-rotina: PARAR ;************************************************************************************************** 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 L21: EXERCCIO 28: Ampliar o sistema anterior para que este seja aplicado em um edifcio com 4 nveis, adicionando os seguintes recursos: Entradas do sistema: P0 Sinal CH4 Sensor4

Descrio Boto para enviar o elevador ao 4o andar Sensor indicador de presena da cabine no 4o andar

Pino de ligao P0.3 P0.7

Nveis lgicos 1=acionada 0=caso contrrio 1= h cabine no andar 0=caso contrrio

Sadas do sistema: P1 Sinal Descrio LED4 Led para indicar que a cabine est no 4o andar

Pino de ligao P1.7

Nveis lgicos 0=led apagado 1=led aceso

EXERCCIO 29: Melhorar a funo da rotina de tratamento da interrupo INT0 (rotina de emergncia) do sistema anterior, para que ao ser acionada no momento em que o elevador estiver parado em um andar, abra a porta da cabine e para a situao do elevador estar entre andares, leve o mesmo ao andar imediatamente inferior antes de abrir sua porta. Incluir no sistema o recurso de um alarme sonoro, que deve ser disparado caso o elevador demore mais que um tempo determinado para chegar no andar inferior, aps o acionamento deste boto de emergncia, onde: Sadas do sistema: P1 Sinal ALARME

Descrio Alarme sonoro

Pino de ligao P1.3

Nveis lgicos 0=alarme desligado 1=alarme ligado

60

Wilson Ruiz
EXERCCIO 30: Incluir no sistema anterior um teclado fora da cabine e em cada andar do edifcio, com o objetivo de ampliar o controle do elevador, ligado na porta P2 do microcontrolador da seguinte forma: Entradas do sistema: P0 Sinal Descrio o CH1-up Boto no 1 andar, para chamar o elevador para andares superiores. CH2-down Boto no 2o andar, para chamar o elevador para andares inferiores. CH2-up Boto no 2o andar, para chamar o elevador para andares superiores. CH3-down Boto no 3o andar, para chamar o elevador para andares inferiores. CH3-up Boto no 3o andar, para chamar o elevador para andares superiores. CH4-down Boto no 4o andar, para chamar o elevador para andares inferiores.

Pino de ligao P2.0 P2.1 P2.2 P2.3 P2.4 P2.5

Nveis lgicos 1=acionada 0=caso contrrio 1=acionada 0=caso contrrio 1=acionada 0=caso contrrio 1=acionada 0=caso contrrio 1=acionada 0=caso contrrio 1=acionada 0=caso contrrio

OBS: Durante um movimento, o elevador somente deve atender um pedido de chamada, se a cabine estiver no mesmo andar onde foi feito essa chamada ou o chamado ocorrer em um andar que ainda ir ser transposto durante o seu atual movimento.

EXERCCIO 31: Incluir no sistema anterior o recurso de enviar o elevador para o 1o andar e aps abrir a sua porta, se no houver nenhuma chamada durante um tempo determinado.

61

Wilson Ruiz

CAPTULO 4: PROJETOS
4 .1 RECOMENDAES S OBRE PROJ ETOS E MONTAGENS DE S IS TEMAS MICROCONTROLADOS ALIMENTAO: Deve ser externa a placa. Conectar um capacitor de poliester (aproximadamente 10nF) ligado entre os pinos Vcc e GND , ao lado do microcontrolador. Conectar um capacitor eletrolitico (mnimo 10uF) na entrada da alimentao na placa. MONTAGEM: Microcontrolador deve ficar em um soquete de pinos torneados. Usar conectores para os bits das portas envolvidos na aplicao (macho tipo prego) ou fios soldados diretamente na placa.. Usar bornes simples para a alimentao ou fios soldados diretamente na placa. Usar ps de borracha ou outro isolador, para a sustentao da placa. Usar uma placa padro preferencialmente com as trilhas desenhadas como um proto board (evitar as placas com ilhas isoladas que so ideais para montagens em wire-wrap). OSCILADOR: A famlia 8051 trabalha tipicamente com cristais de 8, 10, 12MHz, conforme o tipo da CPU e de no mnimo 3,5MHz (um valor fcil de ser encontrado de 11,0592MHz, usado pelo sinal de croma de televiso). O encapsulamento metlico do cristal deve ser soldado ao GND da placa. As ligaes do circuito oscilador devem ser as mais curtas possveis. RESET: Para o reconhecimento da CPU este sinal deve permanecer em 1 por 2 ou mais ciclos de mquina (clock na freqncia do cristal usado). Aps o Reset: O PC, o Acumulador, o registrador B, os Flags, o DPTR e os registros dos TIMERS so zerados. O SBUF (buffer serial) estar com o contedo indeterminado e o SCON (serial control) ser zerado. Os registradores de controle de interrupo IE (Interrupt Enable) e IP (Interrupt Priority) tero o valor binrio XXX00000. No SP (stack pointer) carregado o valor 07H. As portas P0, P1, P2 e P3 tero o valor FFH. Durante o Reset: O nvel lgico dos pinos das portas indeterminado, indo para 1 aps esse perodo. Deve-se considerar essas caractersticas para evitar o acionamento no desejado de qualquer perifrico externo. A RAM interna no afetada pelo Reset forado ou partida quente (push-botton de Reset) e aps o Power-On ou partida fria, o seu contedo aleatrio. PORTAS: P0: Porta bidirecional de 8 bits. Cada pino desta porta pode suprir / drenar 2 cargas TTL. Quando configurada como entrada, ter o nvel lgico de seus pinos flutuando na ausncia de sinal. P1: Porta bidirecional de 8 bits com pull-ups internos. Cada pino desta porta pode suprir / drenar uma carga TTL ou vrias CMOS sem pull-ups externos. Seus pinos tem sempre um estado definido (1ou 0), possibilitando que o nvel lgico do pino possa ser medido, mesmo quando usado como entrada. P2: Porta bidirecional de 8 bits com pull-ups internos. Cada pino desta porta pode suprir / drenar uma carga TTL ou vrias CMOS sem pull-ups externos. Seus pinos tem sempre um estado definido (1ou 0), possibilitando que o nvel lgico do pino possa ser medido, mesmo quando usado como entrada.

62

Wilson Ruiz
P3: Porta bidirecional de 8 bits com pull-ups internos, servindo tambm para funes especiais. Seus pinos tem sempre um estado definido (1ou 0), possibilitando que o nvel lgico do pino possa ser medido, mesmo quando usado como entrada. Com o uso alguma das funes especiais, a P3 deve ser tratada apenas como porta de I/O de apenas bit enderevel. HARDWARE ADICIONAL: Usar LEDs indicadores de status do sistema, ativos em 0, conforme esquema. No existe a necessidade do uso de foto-acopladores na aplicao. SOFTWARE: Para que o programa ocupe apenas a memria ROM interna deve-se manter o PC < 4096 ou PC < 0FFFH, assim otimize esse espao para alojar o seu programa e cuidado com aplicaes que necessitem de grandes tabelas. Inicie o desenvolvimento do programa com um algoritmo ou fluxograma correspondente, to detalhado quanto for a sua necessidade de compreender todos os passos intermedirios necessrios na aplicao. Durante o desenvolvimento, criar verses intermedirias do software para testar o hardware e rotinas importantes do projeto, jamais deixe para executar os testes na ltima verso do programa. ESCOLHA DA CPU: Recomenda-se o uso de uma das seguintes CPUs: 8751 da intel (modelo com EPROM) AT89S51, AT89S52, AT89S53 ou AT89S8252 da ATMEL (modelos com memria FLASH) A escolha de uma destas deve levar em conta qual o gravador disponvel na instituio. PROGRAMAO: Para modelos com EPROM: O grupo deve usar o apagador de forma segura no expondo-se a radiao ultra-violeta (o tempo de apagamento de aproximadamente 20 min e tende a aumentar com o nmero de operaes). O grupo deve procurar o Professor para receber orientao o sobre correto uso do gravador. O arquivo .HEX pode ser usado para gravao do programa no microcontrolador de duas formas: Usando o software de comunicao PC Gravador (gravao automtica). Digitando-se diretamente o arquivo em hexadecimal no gravador (gravao manual), sendo que para isso deve-se imprimir o arquivo .HEX (formato Hexa Intel) e separar os bytes do programa (que sero digitados) daqueles usados apenas para a comunicao (que devem ser rejeitados) conforme exemplo e descries abaixo: Neste formato temos a seguinte composio: (Quantidade em Hexa) (Endereo do primeiro byte) 00 (Bytes do programa) CS Exemplo :10 00 20 00 23 80 F5 03 80 F2 78 0E 75 8D 07 75 8B 53 D2 8E 81 Neste arquivo temos: Os dois pontos (:); 10, indicando que so 10H (16 em decimal) os bytes na linha; 0020, indicando que o endereo da EPROM, do primeiro byte de programa na linha 0020H; 00 a separao dos campos (sempre ser 00H); os 16 bytes da linha impressa (23 80 F5 03 80 F2 78 0E 75 8D 07 75 8B 53 D2 8E) os nicos que devem ser digitados; CS um byte de Check Sum, usado para a verificao de integridade do arquivo aps a transmisso. Assim possvel a gravao do arquivo sem a comunicao PC gravador, utilizando-se apenas os bytes referentes ao programa, observando-se o endereo inicial. O arquivo .LST tambm pode ser usado para a gravao manual do programa, dispensando a retirada de bytes como no .HEX ms provavelmente necessitando de mais folhas de papel para a impresso. Para modelos com memria FLASH: Usando um simples circuito gravador (com esquema fornecido a seguir), que pode opcionalmente ser montado pelo grupo e um software espefico de comunicao PC Gravador.

63

Wilson Ruiz
PRODUTO FINAL Cpu montada em placa padro, conforme esquema do sistema mnimo mostrado a seguir. Hardware adicional, necessrio para a aplicao escolhida com forma de montagem livre. Documentao tcnica incluindo: Esquema eletrnico do hardware adicional. Fluxograma ou algoritmo geral e listagem do software de controle comentada (arquivo .LST). AVALIAO Trabalho em grupo de no mximo 3 ou 4 alunos (dependendo do Professor). Avaliao individual considerando-se o O funcionamento do projeto. A documentao entregue. A efetiva participao de cada componente do grupo Argio feita pelo Professor individualmente aos alunos na data de apresentao. CALENDRIO Cadastro do grupo e escolha do tema do projeto:_______________________________________

Datas para o desenvolvimento do projeto:_____________________________________________

Data limite para apresentao do projeto:______________________________________________

64

Wilson Ruiz 4.2 CPU PARA UM SISTEMA MNIMO

65

Wilson Ruiz 4.3 CIRCUITO DO GRAVADOR (para as cpus AT89S51, AT89S52, AT89S53 e AT89S8252)

66

Wilson Ruiz

4.4

CPU DO SISTEMA MNIMO E GRAVADOR (para as cpus AT89S51, AT89S52, AT89S53 e AT89S8252)

67

Wilson Ruiz

4.5

AGV VECULO GUIADO AUTOMATICAMENTE (detalhamento do projeto)

4.5.1

Fluxograma de Controle

Tecla Start

Leitura dos Sensores

Sensor SPD

Sensor SDD

Sensor SDE

Sensor SPE

Sensor S1

Desliga M1

VIRA_FRENTE_E

VIRA_FRENTE_D

Desliga M1

Desliga M1

Pausa 10s

Sensor SDD

Sensor SDE

Pausa 10s

Liga M1

MOVE_M0_AH

MOVE_M0_H

Liga M1

DELAY

DELAY

Sensor S0

Sensor S0

MOVE_M0_H

MOVE_M0_AH

DELAY

DELAY

68

Wilson Ruiz

4.5.2

LISTAGEM DO SOFTWARE

2500 A.D. 8051 Macro Assembler - Version 4.00j -----------------------------------------------Input Filename : agv20.asm Output Filename : agv20.obj 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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 ;##################################################################### ;Projeto: AGV - VECULO GUIADO AUTOMATICAMENTE verso: 2.0 ;Autor: Wilson Ruiz 19/11/03 ;Descrio: Prottipo de um veculo transportador (triciclo) ; microcontrolado, com sensores de posicionamento, um motor ; DC responsvel pelo deslocamento longitudinal e um motor ; de passo para a correo da trajetria definida por uma ; linha clara pintada sobre um piso escuro. ;ALGORTMO DE CONTROLE: ;A. RESET ; A1. Desliga motores ; A2. Apaga LEDs de status ; A3. Configuraes internas do microcontrolador (desabilita interrupes) ; A4. Inicializa as variveis do sistema (byte espelho de M0, byte ; status dos sensores, contador de passos e satck pointer) ;B. POSICIONAMENTO AXIAL/FRONTAL ; B1. Espera acionamento da tecla INCIO ; B2. Leitura dos sensores ; B3. Atualiza LEDs status e byte de status ; B4. Verifica sensores ; B4.1 Se SDE ou SDD = V, vai para B2 ; B4.2 Se SPE ou SPD ou S1 = F, vai para B2 ;C. INICIALIZAO DE M0 ; C1. Espera acionamento da tecla INCIO ; C2. Carrega contador de passos (R3) com valor de 40 passos ; C3. Carrega contador de passos (R4) com valor de 80 passos ; C4. Verifica S0 ; C4.1 Se S0 = F vai para C4.13 ; C4.2 Move M0 um passo no sentido horrio e atualiza byte espelho ; C4.3 Verifica S0 ; C4.4 Se S0 = F vai para C4.13 ; C4.5 Decrementa contador R3 ; C4.6 Se contador > 0 volta para C4.2 ; C4.7 Verifica S0 ; C4.8 Se S0 = F vai para C4.13 ; C4.9 Move M0 um passo no sentido anti-horrio e atualiza byte espelho ; C4.10 Decrementa contador R4 ; C4.11 Se contador > 0 volta para C4.9 ; C4.12 Aciona rotina de falha de S0 (LED piscando) ; C4.13 Atualiza LEDs dos sensores e byte status ; C4.14 Zera o contador de passos ;D. OPERAO ; D1. Espera acionamento da tecla INCIO ; D2. Aciona M1 ; D3. Leitura dos sensores ; D4. Atualiza LEDs dos sensores e byte status ; D5. Verifica sensores axiais ; D5.1 Se SDE = V vai para D5.3 ; D5.2 CORREO DIANTEIRA PARA A DIREITA ; D5.3 Se SDD = V vai para D6.1 ; D5.4 CORREO DIANTEIRA PARA A ESQUERDA ; D6. Verifica sensores frontais ; D6.1 Se SPE = F vai para D6.3 ; D6.2 Parada de 30 segundos ; D6.3 Se SPD = F vai para D6.5 ; D6.4 Parada de 1 minuto ; D6.5 Se S1 = F vai para D6.8 ; D6.6 Desliga M1 ; D6.7 Leitura da tecla INVCIO ; D6.7.1 Se tecla no acionada volta para D6.6 ; D6.7.2 Aciona M1 ; D6.8 Volta para D5 ;E. CORREO DIANTEIRA PARA A DIREITA ; E1. Atualiza status correspondente

69

Wilson Ruiz
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 ; E2. L byte espelho de M0 ; E3. Atualiza byte espelho de M0 ; E4. Gira M0, no sentido horrio, um passo ; E5. Verifica sensor SDE ; E5.1 Se SDE = F vai para E2 ; E6. L byte espelho de M0 ; E7. Atualiza byte espelho de M0 ; E8. Gira M0, no sentido anti-horrio, um passo ; E9. Verifica S0 ; E.9.1 Se S0 = F vai para E6 ; E10. Atualiza Leds dos sensores e byte status ; E11. Retorna ;F. CORREO DIAN TEIRA PARA A ESQUERDA ; F1. Atualiza status correspondente ; F2. L byte espelho de M0 ; F3. Atualiza byte espelho de M0 ; F4. Gira M0, no sentido anti-horrio, um passo ; F5. Verifica sensor SDD ; F5.1 Se SDD = F vai para F2 ; F6. L byte espelho de M0 ; F7. Atualiza byte espelho de M0 ; F8. Gira M0, no sentido horrio, um passo ; F9. Verifica S0 ; F.9.1 Se S0 = F vai para F6 ; F10. Atualiza Leds dos sensores e byte status ; F11. Retorna ;Principais variveis: R0: byte espelho de M0 ; R1: byte rascunho de M0 ; R2: byte dos LEDs de status dos sensores ; R3: contador de passos ; R4: contador de passos ; R5: uso para temporizao ; R6: uso para temporizao ; R7: uso para temporizao ; A: uso geral ; B: uso geral ;Descrio do hardware: Microcontrolador 8751, operando em 12Mhz. ; Sensores pticos ligados a comparadores. ; de tenso. ; Circuito de acionamento de motor DC. ; Circuito de acionamento de motor de passo. ; LED's indicadores de status. ; Dip switch e teclas. ; Portas: ; P0: Entrada dos sensores ; p/ sensor = V = 0 para faixa ou marca detectada ; P0.7 S0: Alinhamento do motor de passo ; P0.6 S1: Parada definitiva ; P0.5 SPE: Parada esquerda (temporizada) ; P0.4 SPD: Parada direita (temporizada) ; P0.3 SDE: Dianteiro esquerdo ; P0.2 SDD: Dianteiro direito ; P1: Sada para controle dos motores ; P1.7 M1: acionado para bit = 1 ; P1.6 ; P1.5 ; P1.4 ; P1.3 fase A de M0 A B A' B' ; P1.2 fase B de M0 0 0 0 1 passo 1 ; P1.1 fase A' de M0 0 0 1 0 passo 2 ; P1.0 fase B' de M0 0 1 0 1 passo 3 ; 1 0 0 0 passo 4 ; P2: Sada para os LEDs indicadores de status dos sensores ; LED aceso para bit = 1 ; P2.7 ; P2.6 ; P2.5 LED do sensor SDD ; P2.4 LED do sensor S0 ; P2.3 LED do sensor SDE ; P2.2 LED do sensor SPE ; P2.1 LED do sensor S1 ; P2.0 LED do sensor SPD ; P3: Entrada para a dip switch e tecla INCIO ; P3.7 Tecla INCIO, quando acionada = 1 ; P3.6 dip switch nmero 4

70

Wilson Ruiz
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 ; P3.5 dip switch nmero 3 ; P3.4 ; P3.3 ; P3.2 ; P3.1 dip switch nmero 2 ; P3.0 dip switch nmero 1 ;Arquivo fonte: AGV20.asm ;Programas: X8051: Compilador assembly ; Link: Ligador ; AVSIM51: Simulador ;#################################################################### 0000 0000 02 00 50 0050 0050 0053 0056 0059 005C 005E 0060 0062 0064 0066 0069 006B 006C 006E 0071 0074 0077 007A 75 90 00 75 A0 00 75 A8 00 75 81 30 78 11 79 00 7A 00 7B 00 7C 00 20 B7 FD E5 80 FA 31 79 30 A1 F8 30 A2 F5 30 A0 F2 20 A3 EF 20 A5 EC ;************** A = INCIO ************************************************** ORG 0000H ;reset LJMP INICIO INICIO: ORG MOV MOV MOV MOV MOV MOV MOV MOV MOV 0050H P1, #00000000B P2, #00000000B IE, #00000000B SP, #0030H R0, #11H R1, #00H R2, #00H R3, #00H R4, #00H ;incio do programa ;desliga M0 e M1 ;apaga LEDs de status ;desabilita todas interrupes ;byte espelho de M0 ;rascunho do byte espelho de M0 ;byte status dos sensores ;contador de passos ;contador de passos

;************** B = POSICIONAMENTO AXIAL/FRONTAL *************** L1: JB P3.7, L1 ;espera tecla INCIO L2: MOV A, P0 ;l sensores MOV R2, A ;atualiza byte status sensores ACALL ATUALIZA ;atualiza LEDs de status JNB P2.1, L2 ;S1 (verifica os sensores JNB P2.2, L2 ;SPE e se o AGV est fora JNB P2.0, L2 ;SPD da posio axial / JB P2.3, L2 ;SDE frontal inicial JB P2.5, L2 ;SDD volta) ;************* C = INICIALIZAO DE M0 ******************************

007D 0080 0082 0084 0087 0089 008C 008E 0091 0093 0096 0098 0098 009A 009C 009D 009F 009F 00A1 00A3 00A6 00A8 00AA 00AB 00AD 00AD 00B0

20 B7 FD 7B 28 7C 50 20 87 13 31 0E 20 87 0E DB F9 20 87 09 31 1F 20 87 04 DC F9 31 E2 E5 80 FA 31 79 7B 00 7C 00 20 B7 FD D2 97 E5 80 FA 31 79 30 A3 02 11 DC

L20:

L22:

L23:

JB MOV MOV JB ACALL JB DJNZ JB ACALL JB DJNZ ACALL

P3.7, L20 R3, #28H R4, #50H P0.7, L21 MOVE_M0_H P0.7, L21 R3, L22 P0.7, L21 MOVE_M0_AH P0.7, L21 R4, L23 FALHA_S0 A, P0 R2, A ATUALIZA R3, #00H R4, #00H

;espera tecla INCIO ;contador com 40 = 28H passos ;contador com 80 = 50H passos ;verifica S0 ;move M0 no sentido horrio ;verifica S0 ;decrementa e se > 0 volta ;verifica S0 ;move M0 no sentido anti-horrio ;verifica S0 ;decrementa e se > 0 volta

L21:

MOV MOV ACALL MOV MOV

;l sensores ;atualiza byte status sensores ;atualiza LEDs de status ;zera contador de passos

;************** D = OPERACAO *********************************** L24: JB P3.7, L24 ;espera tecla INCIO SETB P1.7 ;aciona M1 L32: MOV A, P0 ;leitura dos sensores MOV R2, A ;atualiza byte status ACALL ATUALIZA ;atualiza LEDs de status JNB P2.3, L25 ACALL VIRA_FRENTE_D L25: L26: ;verifica SDE ;correo dianteira direita

00B2 30 A5 02 00B5 11 F5 00B7 00B7 20 A2 08

JNB P2.5, L26 ;verifica SDD ACALL VIRA_FRENTE_E ;correo dianteira esquerda JB P2.2, L27 ;verifica SPE

71

Wilson Ruiz
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 00BA 00BC 00BE 00C0 00C2 00C2 00C5 00C7 00C9 00CB 00CD 00CF 00CF 00D2 00D4 00D7 00D9 00D9 00DC C2 97 31 5F D2 97 31 C8 20 A0 0A C2 97 31 5F 31 5F D2 97 31 C8 20 A1 07 C2 97 20 B7 CC D2 97 02 00 A8 L27: CLR ACALL SETB ACALL P1.7 DELAY_10 P1.7 DELAY_1 ;desliga M1 ;parada de 10 segundos ;aciona M1 ;pausa de 1 segundo ;verifica SPD ;desliga M1 ;pausa de 20 segundos ;aciona M1 ;pausa de 1 segundo ;verifica S1 ;desliga M1 ;espera tecla INCIO ;aciona M1 ;volta

JB P2.0, L29 CLR P1.7 ACALL DELAY_10 ACALL DELAY_10 SETB P1.7 ACALL DELAY_1 JB P2.1, L31 CLR P1.7 JB P3.7, L24 SETB P1.7 LJMP L32

L29:

L31:

00DC 00DE 00E0 00E2 00E3 00E5 00E8 00EA 00ED 00EF 00F1 00F2 00F4

C0 E0 E5 80 31 79 FA 31 0E 20 83 FB 31 1F 30 87 FB E5 80 31 79 FA D0 E0 22

;##################################################################### ;subrotina: VIRA_FRENTE_D ;descrio: Correo dianteira para a direita ; Atualiza status correspondente ; Chama MOVE_M0_H ; Verifica sensor SDE e se este = F ; continua correo ; Chama MOVE_M0_AH ; Verifica S0 e se este = F continua ; correo contrria ; Atualiza Leds sensores e byte status ;entradas: ;sadas: ;variveis internas: ;hardware: ;OBS: ;##################################################################### VIRA_FRENTE_D: PUSH A MOV A, P0 ;leitura dos sensores ACALL ATUALIZA ;atualiza LEDs de status MOV R2, A ;atualiza byte status L35: ACALL MOVE_M0_H JB P0.3, L35 L36: ACALL MOVE_M0_AH JNB P0.7, L36 MOV A, P0 ;leitura dos sensores ACALL ATUALIZA ;atualiza LEDs de status MOV R2, A ;atualiza byte status POP A RET ;##################################################################### ;subrotina: VIRA_FRENTE_E ;descrio: Correo dianteira para a esquerda ; Atualiza status correspondente ; Chama MOVE_M0_AH ; Verifica sensor SDD e se este = F ; continua correo ; Chama MOVE_M0_H ; Verifica S0 e se este = F continua ; correo contrria ; Atualiza Leds sensores e byte status ;entradas: ;sadas: ;variveis internas: ;hardware: ;OBS: ;##################################################################### VIRA_FRENTE_E: PUSH A MOV A, P0 ;leitura dos sensores ACALL ATUALIZA ;atualiza LEDs de status MOV R2, A ;atualiza byte status L38: ACALL MOVE_M0_AH JB P0.2, L38 L39: ACALL MOVE_M0_H JNB P0.7, L39

00F5 00F7 00F9 00FB 00FC 00FE 0101 0103

C0 E0 E5 80 31 79 FA 31 1F 20 82 FB 31 0E 30 87 FB

72

Wilson Ruiz
290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 0106 0108 010A 010B 010D E5 80 31 79 FA D0 E0 22 MOV ACALL MOV POP RET A, P0 ATUALIZA R2, A A ;leitura dos sensores ;atualiza LEDs de status ;atualiza byte status

010E 010F 0110 0111 0113 0114 0116 0118 0119 011B 011D 011E 011F

E8 03 F8 54 0F F9 E5 90 54 F0 49 F5 90 31 30 49 22

;##################################################################### ;subrotina: MOVE_M0_H ;descrio: L byte espelho de M0 ; Gira M0, no sentido horrio, um passo ; Atualiza byte espelho ;entradas: ;sadas: ;variveis internas: ;hardware: ;OBS: ;##################################################################### MOVE_M0_H: MOV A, R0 ;l byte espelho RR A ;desloca byte espelho MOV R0, A ;atualiza byte espelho ANL A, #00001111B MOV R1, A MOV A, P1 ANL A, #11110000B ORL A, R1 MOV P1, A ;move M0 um passo ACALL DELAY ;pausa ORL A, R1 RET ;##################################################################### ;subrotina: MOVE_M0_AH ;descrio: L byte espelho de M0 ; Gira M0, no sentido anti-horrio, um passo ; Atualiza byte espelho ;entradas: ;sadas: ;variveis internas: ;hardware: ;OBS: ;##################################################################### MOVE_M0_AH: MOV A, R0 ;l byte espelho RL A ;desloca byte espelho MOV R0, A ;atualiza byte espelho ANL A, #00001111B MOV R1, A MOV A, P1 ANL A, #11110000B ORL A, R1 MOV P1, A ;move M0 um passo ACALL DELAY ;pausa ORL A, R1 RET ;##################################################################### ;subrotina: DELAY ;descrio: Fornece uma pausa entre os passos de M0 ;entradas: ;sadas: ;variveis internas: ;hardware: ;OBS: Necessria para o ajuste da velocidade do motor de passo ;##################################################################### DELAY: PUSH R5 PUSH R6 PUSH R7 PUSH A MOV A, P3 ;l a posio da dip switch ANL A, #00000011B ;verifica posies de 1 e 2 MOV R5, A ;carrega no contador R5 MOV A, P3 ;l a posio da dip switch ANL A, #01100000B ;verifica posies de 3 e 4 RR A ;desloca byte da dip switch RR A RR A

011F 0120 0121 0122 0124 0125 0127 0129 012A 012C 012E 012F

E8 23 F8 54 0F F9 E5 90 54 F0 49 F5 90 31 30 49 22

0130 0132 0134 0136 0138 013A 013C 013D 013F 0141 0142 0143

C0 05 C0 06 C0 07 C0 E0 E5 B0 54 03 FD E5 B0 54 60 03 03 03

73

Wilson Ruiz
365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 0144 0145 0146 0148 014A 014B 014E 014F 0152 0153 0156 0158 015A 015C 015E 4D FD 7E 25 7F 25 1F BF 00 FC 1E BE 00 F6 1D BD 00 F0 D0 07 D0 05 D0 06 D0 E0 22 L42: L41: L40: ORL MOV MOV MOV DEC CJNE DEC CJNE DEC CJNE POP POP POP POP RET A, R5 R5, A R6, #25H R7, #25H R7 R7, #00H, L40 R6 R6, #00H, L41 R5 R5, #00H, L42 R7 R5 R6 A ;compara com R5 ;carrega no contador R5 ;carrega contador R6 ;carrega contador R7 ;decrementa R7 ;decrementa R6 ;decrementa R5

015F 0161 0163 0165 0167 0168 0169 016A 016C 016D 016E 016F 0171 0172 0173 0174 0176 0178

C0 E0 7D FF 7E 57 7F 57 EF 14 FF 70 FB EE 14 FE 70 F4 ED 14 FD 70 ED D0 E0 22

;##################################################################### ;subrotina: DELAY_10 ;descrio: Fornece uma pausa de aproximadamente ; 10 segundos (com clock do sistema de 12 MHz) ;entradas: ;sadas: ;variveis internas: ;hardware: ;OBS: equao: ; 84 + 204.X + 132.X.Y + 60.X.Y.Z = 120000000 ; onde X, Y e Z so os valores em ; R5, R6 e R7 respectivamente ;##################################################################### DELAY_10: PUSH A MOV R5, #FFH ;carrega valor X L47: MOV R6, #57H ;carrega valor Y L46: MOV R7, #57H ;carrega valor Z L45: MOV A, R7 DEC A MOV R7, A JNZ L45 MOV A, R6 DEC A MOV R6, A JNZ L46 MOV A, R5 DEC A MOV R5, A JNZ L47 POP A RET ;##################################################################### ;subrotina: ATUALIZA ;descrio: Atualiza LEDs de status dos sensores ;entradas: ;sadas: ;variveis internas: ;hardware: ;OBS: ;##################################################################### ATUALIZA: JB P0.7, L3 CLR P2.4 LJMP L4 L3: SETB P2.4 L4: JB P0.6, L5 CLR P2.1 LJMP L6 L5: SETB P2.1 L6: JB P0.5, L7 CLR P2.2 LJMP L8 L7: SETB P2.2 L8: JB P0.4, L9 CLR P2.0 LJMP L10 L9: SETB P2.0 L10: JB P0.3, L11 CLR P2.3

0179 017C 017E 0181 0183 0186 0188 018B 018D 0190 0192 0195 0197 019A 019C 019F 01A1 01A4

20 87 05 C2 A4 02 01 83 D2 A4 20 86 05 C2 A1 02 01 8D D2 A1 20 85 05 C2 A2 02 01 97 D2 A2 20 84 05 C2 A0 02 01 A1 D2 A0 20 83 05 C2 A3

74

Wilson Ruiz
440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 01A6 01A9 01AB 01AE 01B0 01B3 01B5 01B8 01BA 01BD 01BF 01C2 01C4 01C5 01C7 02 01 AB D2 A3 20 82 05 C2 A5 02 01 B5 D2 A5 20 81 05 C2 A6 02 01 BF D2 A6 20 80 03 C2 A7 22 D2 A7 22 L11: L12: L13: L14: L15: L16: L17: LJMP SETB JB CLR LJMP SETB JB CLR LJMP SETB JB CLR RET SETB RET L12 P2.3 P0.2, L13 P2.5 L14 P2.5 P0.1, L15 P2.6 L16 P2.6 P0.0, L17 P2.7 P2.7

01C8 01CA 01CC 01CE 01D0 01D1 01D2 01D3 01D5 01D6 01D7 01D8 01DA 01DB 01DC 01DD 01DF 01E1

C0 E0 7D FF 7E 1B 7F 1B EF 14 FF 70 FB EE 14 FE 70 F4 ED 14 FD 70 ED D0 E0 22

;##################################################################### ;subrotina: DELAY_1 ;descrio: Fornece uma pausa de aproximadamente ; 1 segundo (com clock do sistema de 12 MHz) ;entradas: ;sadas: ;variveis internas: ;hardware: ;OBS: equao: ; 84 + 204.X + 132.X.Y + 60.X.Y.Z = 12000000 ; onde X, Y e Z so os valores em ; R5, R6 e R7 respectivamente ;##################################################################### DELAY_1: PUSH A MOV R5, #FFH ;carrega valor X L53: MOV R6, #1BH ;carrega valor Y L52: MOV R7, #1BH ;carrega valor Z L51: MOV A, R7 DEC A MOV R7, A JNZ L51 MOV A, R6 DEC A MOV R6, A JNZ L52 MOV A, R5 DEC A MOV R5, A JNZ L53 POP A RET ;##################################################################### ;subrotina: FALHA_S0 ;descrio: Indica falha no posicionamento de M0 ;entradas: ;sadas: LED de status do S0 piscando ;variveis internas: ;hardware: ;OBS: ;##################################################################### FALHA_S0: NOP L55: SETB P2.7 ACALL DELAY_1 CLR P2.7 ACALL DELAY_1 JMP L55 END Assembly Errors : 0

01E2 01E3 01E5 01E7 01E9 01EB 01ED 01ED

00 D2 A7 31 C8 C2 A7 31 C8 21 E3

Lines Assembled : 504

75

Wilson Ruiz

4.5.3

O formato HEXA intel

Todos os arquivos fornecidos para a gravao seguem o formato hexa intel abaixo. Cada linha do arquivo mostrado indica: O incio sempre com : No primeiro campo indicado a quantidade de bytes (em hexadecimal) presentes na linha. No segundo campo indicado o endereo do primeiro byte da linha. O terceiro campo sempre 00. No quarto campo temos os bytes do programa. No quinto campo, um byte de checksum (CS), para verificao de integridade do arquivo. A ltima linha serve apenas como referncia de final de arquivo. O arquivo abaixo mostrado em colunas apenas para facilitar a identificao dos respectivos campos.

O arquivo AGV20.HEX :03 :10 :10 :10 :10 :10 :10 :10 :10 :10 :10 :10 :10 :10 :10 :10 :10 :10 :10 :10 :10 :10 :10 :10 :10 :10 :0D :00 0000 0050 0060 0070 0080 0090 00A0 00B0 00C0 00D0 00E0 00F0 0100 0110 0120 0130 0140 0150 0160 0170 0180 0190 01A0 01B0 01C0 01D0 01E0 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01FF 020050 75900075A00075A80075813078117900 7A007B007C0020B7FDE580FA317930A1 F830A2F530A0F220A3EF20A5EC20B7FD 7B287C50208713310E20870EDBF92087 09311F208704DCF931E2E580FA31797B 007C0020B7FDD297E580FA317930A302 11DC30A50211F520A208C297315FD297 31C820A00AC297315F315FD29731C820 A107C29720B7CCD2970200A8C0E0E580 3179FA310E2083FB311F3087FBE58031 79FAD0E022C0E0E5803179FA311F2082 FB310E3087FBE5803179FAD0E022E803 F8540FF9E59054F049F59031304922E8 23F8540FF9E59054F049F59031304922 C005C006C007C0E0E5B05403FDE5B054 600303034DFD7E257F251FBF00FC1EBE 00F61DBD00F0D007D005D006D0E022C0 E07DFF7E577F57EF14FF70FBEE14FE70 F4ED14FD70EDD0E022208705C2A40201 83D2A4208605C2A102018DD2A1208505 C2A2020197D2A2208405C2A00201A1D2 A0208305C2A30201ABD2A3208205C2A5 0201B5D2A5208105C2A60201BFD2A620 8003C2A722D2A722C0E07DFF7E1B7F1B EF14FF70FBEE14FE70F4ED14FD70EDD0 E02200D2A731C8C2A731C821E338 AB 41 71 C8 D8 F0 B9 5A 72 64 F7 20 3D 50 05 FB FF CB AB 49 BB 6C 71 A8 37 23

76

Wilson Ruiz 4.5.4 ESQUEMAS ELETRNICOS

77

Wilson Ruiz

4.5.5

DESENHOS MECNICOS

78

Wilson Ruiz

BIBLIOGRAFIA: Microcontrleurs 8051 et 8052 Description et mise em oeuvre Bernard Odant Dunod Tech Paris, France Aplicaes Prticas do Microcontralador 8051 Teoria geral detalhada Vidal Pereira da Silva Jr. Editora rica Microcontroladores 8051 Salvador P. Gimenez Prentice Hall Manuais Intel Manuais Philips Manuais Atmel Notas de aulas diversas Foto da capa: Wilson Ruiz

79

You might also like