exercício 1 - iris serveriris.sel.eesc.usp.br/sel433/aula_exercicio_1.pdf · 1) o motor que...

33
Exercício 1 Fazer um programa em Assembly do 8051 que informe a temperatura de um forno. O programa deve enviar inicialmente um ‘String’ em ASCII armazenado na área de memória de programa a partir do endereço "TAB", para um monitor de vídeo serial RS232C (600 bps, sem paridade, 8 bits de dados, 1 stop bit), até encontrar o código ASCII do caractere "$" que não deve ser transferido. Após a mensagem ser mostrada, o programa deve enviar o valor da temperatura que está armazenado em hexadecimal no registrador R0 e parar. O cristal do micro é de 11.0592 Mhz. TAB: DB ‘TEMPERATURA DO FORNO =’, ‘$’

Upload: others

Post on 13-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

Exercício ‐1• Fazer um programa em Assembly do 8051 que informe a 

temperatura de um forno.  O programa deve enviar inicialmente um ‘String’ em ASCII armazenado na área de memória de programa a partir do endereço "TAB", para um monitor de vídeo serial RS232C (600 bps, sem paridade, 8 bits de dados, 1 stop bit), até encontrar o código ASCII do caractere "$" que não deve ser transferido. Após a mensagem ser mostrada, o programa deve enviar o valor da temperatura que está armazenado em hexadecimal no registrador R0 e parar. O cristal do micro é de 11.0592 Mhz.

• TAB:  DB  ‘TEMPERATURA DO FORNO =’, ‘$’

Page 2: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

( )( )RateBaud

OsciladordoFreqüênciaKTH×

×−=

3842561 K = 1  SMOD = 0

208)600384

100592,111(2566

1 =×

××−=TH

Timer 1 Timer 0

GATE C / T M1 M0 GATE C / T M1 M0

MOV TMOD,#20h ;TMOD =  00100000 Timer 1 no ;Modo 2, controle por software

TMOD

MOV SCON,#40h ;SCON = 01000000 modo 1 do;Canal Serial

SCON

208 = D0 h

Page 3: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado
Page 4: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado
Page 5: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

Programa Completo

Page 6: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

Exercício ‐2• Dado o programa em Assembly do 8051 abaixo responder a cada um dos itens:• ORG 0• SJMP PROG•• ORG 000BH• MOV TH1,#7FH• MOV TL1,#00• MOV TH0,#7FH• CLR TR0• SETB TR1• RETI••• ORG 001BH• MOV TH0,#7FH• MOV TL0,#00• MOV TH1,#7FH• CLR TR1• SETB TR0• RETI••• PROG: SETB EA• SETB ET0• SETB ET1• MOV TMOD,#11H• MOV TH0,#7FH• MOV TL0,#00• MOV TH1,#7FH• SETB TR0• LOOP: MOV P1,TH0• MOV P2,TH1• SJMP LOOP• END

Page 7: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

• a) Se a freqüência do oscilador for de 12Mhz, qual o tempo aproximado em milissegundos que o Timer T0 contará até solicitar uma interrupção pela primeira vez?

• b) Como os contadores mostrados nas portas P1 e P2 do microcontrolador serão vistos externamente considerando‐se o tempo de interrupção de cada temporizador ?

Page 8: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

• PROG: SETB EA• SETB ET0• SETB ET1• MOV TMOD,#11H• MOV TH0,#7FH• MOV TL0,#00• MOV TH1,#7FH• SETB TR0• LOOP: MOV P1,TH0• MOV P2,TH1• SJMP LOOP

TMOD

0         0           0           1           0          0          0        1

Controle por Software ‐‐‐‐ Temporizador ‐‐‐‐ Timer no Modo 1 (16 Bits)

O Contador/Timer 0 contará de 7F00 até FFFF quando dará um overflow e saltará para o endreço 000Bh

Page 9: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

FFFF – 7F00 = 80FF h  33023 ciclos

Como a freqüência  do cristal é de 12 MHz 

freqüência do Contador/Temporizador = f cristal/12 = 1 MHz

1 ciclo = 1/1MHz = 1 us

a) O tempo será de aproximadamente 33 ms

33023 ciclos x 1 us = 33,023 ms

b) Serão vistos externamente 2 contadores de 8 Bits alternados de 7F a FF

A cada 33 ms um contador pára em 7F e o outro conta de 7F a FF

Page 10: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

Exercício‐3A figura abaixo é parte do controle de uma máquina que possui um Motor e um Encoder Óptico diretamente acoplado ao seu eixo. Cada vez que a luz do emissor de luz passa por um dos furos do disco do Encoder, um pulso é gerado no Fotorreceptor ligado no pino T0.

Page 11: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

Desenvolver um programa em Assembly que entre com a quantidade de pulsos através do Teclado conectado na Porta P1, ligue o Motor (P3.5 =  1) e quando a quantidade de pulsos gerada pelo Encoder for igual ao valor inserido pelo Teclado, enviar uma mensagem ao Display de LCD (16 x 2) com a informação “FERRAMENTA POSICIONADA” , parar o Motor (P3.5=0) e aguardar novos dados de posicionamento pelo Teclado. 

Atenção:•Para o Teclado: Utilizar apenas dois dígitos, ou seja, de 00 a 99 para os dados.Matriz P1.0 a P1.3 são as linhas (Entradas) e P1.4 a P1.6 são as Colunas (Saídas). Nãohá a necessidade de eliminar ruído de chave.•Para o LCD: E = P3.0, R/W = P3.1, RS = P3.2•Fornecer o programa contendo na ordem correta:a) A sub‐rotina de atendimento do Teclado.b) A sub‐rotina de escrita no LCD.c) A sub‐rotina de atendimento do Motor/Encoder.d) O programa Principal com as configurações necessárias.

Page 12: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

Solução:

ORG 0

PROG: MOV TMOD,#00000101 ;Contador 0,Modo1MOV TH0,#00MOV TL0,#00SETB TR0 ; Dispara ContadorACALL  CONFLCD ; Configuração do LCD

AGAIN: ACALL LETECLASWAP AMOV R0,AACALL LETECLAORL A,R0MOV R0,AACALL MOTORACALL WRITELCDSJMP AGAIN

Programa Principal.0         0           0           0           0          1          0        1

TMOD

Page 13: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

;***************************LETECLA: MOV P1,#0FFH

MOV A,#0FFHLOOP1: CLR P1.4

JNB P1.0,ZEROJNB P1.1,TRESJNB P1.2,SEISMOV P1,#0FFH

LOOP2: CLR P1.5JNB P1.0,UMJNB P1.1,QUATROJNB P1.2,SETEJNB P1.3,NOVEMOV P1,#0FFH

LOOP3: CLR P1.6JNB P1.0,DOISJNB P1.1,CINCOJNB P1.2,OITOMOV P1,#0FFHCJNE A,#0FFH,LEUSJMP LETECLA

LEU: RET

;*******************************ZERO: MOV A,#00

SJMP LOOP1UM: MOV A,#01

SJMP LOOP2DOIS: MOV A,#02

SJMP LOOP3TRES: MOV A,#03

SJMP LOOP1QUATRO: MOV A,#04

SJMP LOOP2CINCO: MOV A,#05

SJMP LOOP3SEIS: MOV A,#06

SJMP LOOP1SETE: MOV A,#07

SJMP LOOP2OITO MOV A,#08

SJMP LOOP3NOVE: MOV A,#09

SJMP LOOP2

Sub‐rotina de atendimento do Teclado.

Page 14: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

;*************************************MOTOR: SETB P3.5 ; Liga MotorCONT: MOV R1,TL0 ; Lê encoder

ACALL CONBCD  ; Converte BCDCJNE A,R0,CONTCLR P3.5RET

;*************************************CONBCD: CLR ACONT2: DJNZ R1,CONT1

RETCONT1: ADD A,#01

DA ASJMP CONT2

A sub‐rotina de atendimento do Motor/Encoder.

Page 15: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

Sub‐rotinas do LCD 

;***************************CONFLCD:

ENAB EQU P3.0RW EQU P3.1RS EQU P3.2DATA EQU P2ACALL INIT_LCDACALL CLEAR_LCDRET

Page 16: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

Sub‐rotinas do LCD 

;******************************WRITELCD:

MOV DPTR,#TAB1CLR A

T1: MOVC A,@A+DPTRCJNE A,#’$’,CONTINSJMP LINHA2

CONTIN: ACALL WRITE_TEXTINC DPTRSJMP T1

LINHA2: MOV A,#40HACALL POS_LCDMOV DPTR,#TAB2CLR A

T3: MOVC A,@A+DPTRCJNE A,#’$’,T2RET

T2: ACALL WRITE_TEXTINC DPTRSJMP T3

TAB1: DB ‘FERRAMENTA$’TAB2: DB ‘POSICIONADA$’

Page 17: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

Exercício‐4Um Microcontrolador 89S52 faz a aquisição de dados de diversos sensores e se comunica via RS232c com um monitor de vídeo a uma taxa de 9600,N,8,1, conforme mostra a figura. 

O cristal é de 11,0592 MHz.

Page 18: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

Os sensores estão ligados nas entradas do conversor AD da seguinte maneira:IN0  Sensor de TemperaturaIN1  Sensor de PressãoIN2  Sensor de VelocidadeIN3  Sensor de UmidadeIN4  Sensor de DistânciaIN5  Sensor de RuídoIN6  Sensor de Vibração MecânicaIN7  Sensor de luz

Desenvolver um programa em Assembly que leia cada um dos Sensores em ordem crescente (IN0 a IN7) e transmita via serial RS232c para o monitor continuamente, escrevendo em uma coluna o nome da variável e seu valor em hexadecimal.Exemplo:Temperatura = 30Pressao = 2FVelocidade = 5DUmidade = 80Distância = 4CRuido = FFVibracao = 00Luz = AF

Page 19: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

EOC P3.5

START/ALE P3.6

OE P3.7

CLK P3.4 (Gerarum clock deaproximadamente500 KHz)

A0, A1, A2 P0.0,P0.1, P0.2

Dados do AD – P1

Utilizar para o conversor AD ADC0808: 

Page 20: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

Solução:;*******************Sub‐rotina que posiciona o cursor no início de cada linhaPOS: MOV A,#0DH

ACALL ENVIAMOV A,#0AHACALL ENVIARET

;********************ENVIA: MOV SBUF,A

JNB TI,$CLR TIRET

;**************************STRING: CLR ALOOP: MOVC A,@A+DPTR

CJNE A,#’$’,CONTRET

CONT: ACALL ENVIAINC DPTRSJMP  LOOP

TEMP:  DB ‘TEMPERATURA=$’PRESS: DB ‘PRESSAO=$’UMID: DB ‘UMIDADE=$’VELOC: DB ‘VELOCIDADE=$’DIST: DB ‘DISTANCIA=$’RUID: DB ‘RUIDO=$’VIBRA: DB ‘VIBRACAO=$’LUZ: DB ‘LUZ=$’

Page 21: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

;**********************************Sub‐rotina que lê o Conversor ADLEAD: CLR P3.6

SETB P3.6 ;Pulso START CLR P3.6CLR P3.7 ; OE=0JNB P3.5,$ ; EOCSETB P3.7 ; OE=1MOV A,P1 ; Lê DadosCLR P3.7 ; OE=0RET

;******************************Sub‐rotina que envia o valor de um sensorVAL_SENS:

MOV R1,ASWAP AANL A,#0FHACALL CONV2ACALL ENVIAMOV A,R1ANL A,#0FHACALL CONV2ACALL ENVIARET

DADOS: ACALL STRINGACALL  LEADACALL VAL_SENSACALL POS RET

Page 22: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

ORG 0SJMP PROGORG 000BH ;Timer 0 = 500KHzSJMP CLOCK

PROG: MOV TMOD,#21HMOV TH1,#253MOV TL1,#253MOV SCON,#40HSETB TR1SETB TR0

LOOP2: MOV R0,#00 ; IN0MOV P0,R0MOV DPTR,#TEMPACALL DADOSINC R0 ; IN1MOV P0,R0MOV DPTR,#PRESSACALL DADOSINC R0 ;IN2MOV P0,R0MOV DPTR,#VELOCACALL DADOSINC R0 ;IN3MOV P0,R0MOV DPTR,#UMIDACALL DADOS

INC R0 ;IN4MOV P0,R0MOV DPTR,#DISTACALL DADOSINC R0 ;IN5MOV P0,R0MOV DPTR,#RUIDACALL DADOSINC R0 ;IN6MOV P0,R0MOV DPTR,#VIBRACALL DADOSINC R0 ;IN7MOV P0,R0MOV DPTR,#LUZACALL DADOSSJMP LOOP2

253)9600384

100592,111(2566

1 =×

××−=TH

Page 23: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

CLOCK:CLR EACPL P3.4MOV TH0,#0FFHMOV TL0,#0FFHSETB EARETI

Timer 1 Timer 0

GATE C / T M1 M0 GATE C / T M1 M0

TMOD

0 0 1 0 0 0 0 1

Cada ciclo = 12/11,0592 MHz = 1,085 us500 KHz t = 1/500 Khz = 2 us.Se a cada interrupção for complementado o bit P3.4, o período será de aproximadamente 2 us.Logo, basta carregar o T0 com FFFF e assim, a interrupção ocorrerá a cada 1 us aproximadamente.Na prática, a frequência do clock será inferior a 500 KHz devido ao número de instruções necessárias dentro da sub-rotina de atendimento CLOCK

Page 24: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

Exercício‐5A figura abaixo é o circuito microprocessado de uma bomba de combustível.

Page 25: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

Operação da bomba:1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 12) Cada litro que for bombeado equivale a um pulso na entrada T03) Para ligar a bomba, o frentista aciona o gatilho que está ligado na Interrupção INT1, sensível a nível baixo (Baixa prioridade).4) Um sensor instalado no bico do alimentador de combustível está conectado na interrupção INT0, sensível à descida de borda, que detecta quando o tanque está cheio (Alta Prioridade).5) O display de 7 segmentos, catodo comum e multiplexado, mostra nos dois dígitos menos significativos, acionados por P2.0 e P2.1, a quantidade de combustível transferida, e nos dois dígitos mais significativos (P2.6 e P2.7) o valor em Reais (considerar 1 litro de combustível = 1 Real).6) Um terminal RS232 (9600, N, 8, 1) instalado no interior do posto de combustível é utilizado para a cobrança.7) A Porta P0 do microprocessador serve para a comunicação de dados com a bomba de combustível.

Page 26: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

Item_1:Considerando-se o display de 7 segmentos acionado pela Porta P1, escrever um Programa em Assembly que mostre nos Displays, a quantidade de combustível e o preço (em BCD) durante o tempo de enchimento do tanque. Observar que o motor da bomba é ligado(P3.7=1) quando o gatilho for acionado e desligado (P3.7=0) ou pelo sensor no bico do alimentador (INT0) ou pelo gatilho (INT1=1). Ao ser ligado o motor da bomba, os displays devem ser zerados e ao ser desligado os valores devem permanecer acesos no Display.

Page 27: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

Solução do Item_1:ORG 0SJMP PROGORG 0003SJMP DESLIGORG 000BHSJMP CONT_LITORG 0013HSJMP LIG_BOMB

;Programação das InterrupçõesPROG: SETB EA

SETB EX0 ;Externa 0SETB EX1 ;Externa 1SETB PX0 ;Alta Prioridade, Int0CLR PX1 ;Baixa Prioridade, Int1SETB IT0 ;Descida de Borda, Int0CLR IT1 ;Nível Baixo, Int1SETB ET0 ;Timer 0MOV TMOD,#25HMOV SCON,#40HSETB TR0SETB TR1MOV TH1,#253 ;9600,N,8,1MOV TL1,#253MOV TH0,#0FFHMOV TL0,#0FFH

Timer 1 Timer 0

GATE C / T M1 M0 GATE C / T M1 M0

0 0 1 0 0 1 0 1

Timer 0 no Modo 1 (Serial)eTimer 1 no Modo 2 (Contador)

MOV R2,#00ACALL APAGAACALL ZERA_DISP

LOOP: JNB P3.3,NORCLR P3.7

NOR: ACALL DADOSACALL DMUXSJMP LOOP

Page 28: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

;*****************************************;Sub-rotina do Contador de ;Litros de combustível em BCD (R2)CONT_LIT: CLR ET0

MOV TH0,#0FFHMOV TL0,#0FFHMOV A,R2ADD A,#1DA AMOV R2,ASETB ET0RETI

;************************************************LIG_BOMB: SETB P3.7

JNB P3.3,DESLIGRETI

DESLIG: CLR P3.7RETI

Litros = Preço (R2)

Page 29: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

ZERA_DISP: MOV R1,#30HCONT1: MOV A,#7EH ;Código 7 segmentos do dígito 0

MOV @R0,AINC R1CJNE R0,#38H,CONT1ACALL DMUXRET

Page 30: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

DADOS: MOV A,R2ANL A,#0FHACALL DISPLAYMOV 30H,AMOV 36H,AMOV A,R2SWAP AANL A,#0FHACALL DISPLAYMOV 31H,AMOV 37H,ARET

DISPLAY: MOV DPTR,#TABMOVC A,@A+DPTRRET

TAB: DB 7EH, 30H, 6DH, 79H, 33H, 5BH, 5FH, 70H, 7FH, 7BH

Page 31: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

Item_2:O preço a pagar e a quantidade de combustível bombeado devem ser transmitidos em ASCII para o terminal RS232 instalado no interior do posto no final de cada operação, ou seja, quando o motor da bomba for desligado. O Microprocessador desabilita as interrupções e aguarda um código de “transação OK” enviado pela linha serial (3Ch) do terminal, retransmitindo-o para a bomba de combustível através da Porta P0 e liberando a bomba para uma nova operação. A liberação da bomba deve ser realizada através da reabilitação das interrupções.O cristal do microprocessador é de 11.0592 MHz.Escrever este programa na forma de uma Sub-rotina e indicar em qual ponto no programa do item 1 ela deverá ser chamada.

Page 32: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

;***********************************************; Sub-rotina de atendimento do terminal

ATENDE: CLR EAACALL TRANS_ASCACALL TRANS_ASCSETB REN

VOLTA: JNB RI,$MOV A,SBUFCLR RICJNE A,#3CH,VOLTAMOV P0,ASETB EARET

Solução do Item_2:

;********************ENVIA: MOV SBUF,A

JNB TI,$CLR TIRET

;*************************Sub‐rotina que envia o valor  de R2TRANS_ASC:

MOV A,R2SWAP AANL A,#0FHACALL CONV2ACALL ENVIAMOV A,R2ANL A,#0FHACALL CONV2ACALL ENVIARET

Page 33: Exercício 1 - IRIS SERVERiris.sel.eesc.usp.br/sel433/Aula_Exercicio_1.pdf · 1) O motor que bombeia o combustível é acionado pelo pino P3.7 = 1. 2) Cada litro que for bombeado

DESLIG: CLR P3.7ACALL ATENDERETI

Local de inserção da subrotina ATENDE

MOV R2,#00ACALL APAGAACALL ZERA_DISP

LOOP: JNB P3.3,NORCLR P3.7ACALL ATENDE

NOR: ACALL DADOSACALL DMUXSJMP LOOP