Ir ao conteúdo
  • Cadastre-se
alexandre9865

Display só com decimais

Recommended Posts

eu preciso faze um programa em assembly q é uma maquina de refrigerantes, e eu precisaria colocar numeros decimais nao só até 9 no display dessa maquina, por favor me mandem o codigo fonte disso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alexandre, explique melhor sua intenção e coloque para os colegas o que você já tem do código pretendido...

Compartilhar este post


Link para o post
Compartilhar em outros sites


BOT1 REG P3.4 ;botão para selecionar refrigerante1
BOT2 REG P3.3 ;botão para selecionar refrigerante2
BOT3 REG P3.2 ;botão para selecionar refrigerante3
BOTPAG REG P0.4 ;botão pagamento
LED1 REG P0.1 ;led para verificar se refrigerante1 está disponivel
LED2 REG P0.2 ;led para verificar se refrigerante2 está disponivel
LED3 REG P0.3 ;led para verificar se refrigerante3 está disponivel
LEDL REG P0.0 ;refrigerante escolhido liberado
BEEP REG P0.7 ; beep
RDD REG P3.5
WRR REG P3.6
INTR REG P3.7
VAR EQU 30H
WMCON EQU 96h ; Controle para Registro
EEMEN EQU 08H ; Acessar
EEMWE EQU 10H ; Escrita
WDTRST EQU 02H ; Sinal de Controle (RDY/BSY)

;ler valores a serem gravados
MOV DPTR,#0010H ;endereço para leitura
CALL LER ;leitura em 3010H
MOV R1,VAR; retornando em VAR

MOV DPTR,#0020H ;endereço para leitura
CALL LER ;leitura em 3010H com retorno em VAR
MOV R2,VAR ; retornando em VAR

MOV DPTR,#0030H ;endereço da leitura
CALL LER ;leitura em 3010H com retorno em VAR
MOV R3,VAR

;zerar quantidade de refrigerante se >255
CJNE R1,#FFH,TESTAR2
MOV R1,#00H
TESTAR2: CJNE R2,#FFH,TESTAR3
MOV R2,#00H
TESTAR3: CJNE R3,#FFH,START
MOV R3,#00H

;beepa para o usuario saber se o programa ligou
START: CLR BEEP; liga o beep
CALL TEMP2; temporiza
SETB BEEP; desliga o beep
START1: CALL MEMORIZA;memoriza a quantidade de refrigerantes disponiveis
CALL CHECAR;checa se ha refrigerantes disponiveis
CALL ANALO;usar o valor do potenciometro em VAR
CALL DISPLAY;valor é mostrado no display
CALL TEMP4; temporiza
JNB BOTI,INICIAR;RECARarrega os refrigerantes
JNB BOTPAG,SEL;pagamento do refrigerante é feito
JMP START1;se nenhum botão é apertado, volta pro inicio

;metodo pra recarrega refrigerantes
INICIAR:CLR BEEP; beepar ao apertar o botão "Iniciar"
CALL TEMP2; temporiza
SETB BEEP; desliga o beep
INIC1: CALL CHECAR;verifica se ha refrigerantes disponiveis
CALL ANALO;obtem o valor do potenciometro em VAR
CALL DISPLAY;valor é mostrado no display
CALL TEMP4; temporiza
CALL MEMORIZA;memoriza a quantidade de refrigerantes disponiveis
JNB BOT1,RECAR1;verifica se escolheu o refri1
JNB BOT2,RECAR2;verifica se escolheu o refri2
JNB BOT3,RECAR3;verifica se escolheu o refri3
JNB BOTI,START; reinicia
JMP INIC1; reinicia verificando se escoheu os outros

;recarrega a quantidade do refrigerante 1
RECAR1: CLR BEEP;liga o beep
CALL TEMP2; temporiza
SETB BEEP; desliga o beep
CALL ANALO; chama o valor no analo
CALL DISPLAY; valor do analo é mostrado no display
MOV A,R1;acumulador recebe o valor em R1
MOV R0,VAR; transforma o valor em R0 em VAR
ADD A,R0; soma o valor em A com o R0
MOV R1,A; valor em R1 passa a ter o valor que está acumulador
CALL CHECAR; chama o metodo checar
JMP INIC1; volta para o inicio

;recarrega a quantidade do refrigerante 2
RECAR2: CLR BEEP;liga o beep
CALL TEMP2; temporiza
SETB BEEP; desliga o beep
CALL ANALO; chama o valor no analo
CALL DISPLAY; valor do analo é mostrado no display
MOV A,R2;acumulador recebe o valor em R2
MOV R0,VAR; transforma o valor em R0 em VAR
ADD A,R0; soma o valor em A com o R0
MOV R2,A; valor em R2 passa a ter o valor que está acumulador
CALL CHECAR; chama o metodo checar
JMP INIC1; volta para o inicio

;recarrega a quantidade do refrigerante 1
RECAR3: CLR BEEP;liga o beep
CALL TEMP2; temporiza
SETB BEEP; desliga o beep
CALL ANALO; chama o valor no analo
CALL DISPLAY; valor do analo é mostrado no display
MOV A,R3;acumulador recebe o valor em R3
MOV R0,VAR; transforma o valor em R0 em VAR
ADD A,R0; soma o valor em A com o R0
MOV R3,A; valor em R3 passa a ter o valor que está acumulador
CALL CHECAR; chama o metodo checar
JMP INIC1; volta para o inicio

; metodo pra escolher o refrigerante
SEL: CLR BEEP; beepar ao selecionar o refrigerante
CALL TEMP2; temporiza
SETB BEEP; desliga o beep
SEL1: CALL CHECAR; checa se ha refrigerantes disponiveis
CALL MEMORIZA; memoriza a quantidade de refrigerantes disponiveis
JNB BOT1,PEG1; verifica se escolheu o refri1
JNB BOT2,PEG2;verifica se escolheu o refri2
JNB BOT3,PEG3;verifica se escolheu o refri3
JNB BOTPAG,VOLTA;retorna
JMP SEL1;retorna para ver se escoheu os outros

;o usuario escolheu o refrigerante 1
PEG1: CJNE R1,#0,CONT1
JMP SEL1
CONT1: DEC R1
CLR LEDL
CLR BEEP
CALL TEMP2
SETB LEDL
SETB BEEP
JMP START

;o usuario escolheu o refrigerante 1
PEG2: CJNE R2,#0,CONT2
JMP SEL1
CONT2: DEC R2
CLR LEDL
CLR BEEP
CALL TEMP2
SETB LEDL
SETB BEEP
JMP START

;o usuario escolheu o refrigerante 1
PEG3: CJNE R3,#0,CONT3
JMP SEL1
CONT3: DEC R3
CLR LEDL
CLR BEEP
CALL TEMP2
SETB LEDL
SETB BEEP
VOLTA: JMP START

;passa para o display os dados do potenciometro
DISPLAY:MOV A,VAR
MOV B,#26; limita para 9 a quantidade de refrigerantes que vira do potenciometro
DIV AB
MOV VAR,A
MOV P2,VAR

;metodo para checar se ha refrigerantes
CHECAR: CJNE R1,#0,ACENDER1 ;verifica se ha refrigerante 1 disponiveis
SETB LED1 ;apaga led1 se refrigerantes 1 <1
C2: CALL TEMP2; temporiza
CJNE R2,#0,ACENDER2 ;verifica se ha refrigerante 2 disponiveis
SETB LED2 ;apaga led2 se refrigerantes 2 <1
C3: CALL TEMP2; temporiza
CJNE R3,#0,ACENDER3;verifica se ha refrigerante 3 disponiveis
SETB LED3;apaga o led3 se refrigerantes 3 <1
RET
ACENDER1: CLR LED1;led3 acende se houverem 1 ou mais refrigerantes 1 disponiveis
JMP C2
ACENDER2: CLR LED2;led3 acende se houverem 1 ou mais refrigerantes 2 disponiveis
JMP C3
ACENDER3: CLR LED3;led3 acende se houverem 1 ou mais refrigerantes 3 disponiveis
RET

;pega os dados do potenciometro
ANALO: CLR WRR ;começa a conversao
NOP ;tempo para começar
SETB WRR
ESP1: JNB INTR,ESP1 ;aguarda conversao
CLR RDD ;possibilita guardo de valores
CALL TEMP ;temporiza
MOV VAR,P1 ;guarda valor no analogico
SETB RDD ;retorna ao inicio
RET

;quantidade de refrigerantes são salvos na memoria
MEMORIZA:MOV DPTR,#0010H ;endereço de gravação
MOV VAR,R1 ;valor a ser gravado
CALL GRAVA ;grava R1 em 3020H
MOV DPTR,#0020H ;endereço de gravação
MOV VAR,R2 ;valor a ser gravado
CALL GRAVA ;grava R2 em 3020H
MOV DPTR,#0030H ;endereço de gravação
MOV VAR,R3 ;valor a ser gravado
CALL GRAVA ;grava R3 em 3030H

;forma para ler os valores gravados
LER: orl WMCON,#EEMEN ; enable EEPROM accesses
orl WMCON,#EEMWE
movx a,@dptr ; read EEPROM
mov VAR,A
xrl WMCON, #EEMWE ; disable EEPROM writes
xrl WMCON, #EEMEN ; disable EEPROM accesses
CALL TEMPO3 ;temporiza para ler os valores (15us)
RET

;forma para gravar dados na memoria
GRAVA: orl WMCON,#EEMEN; enable EEPROM accesses
orl WMCON,#EEMWE
loop4: mov a,WMCON ; get EEPROM write status
anl a,#WDTRST ; check RDY/BSY
jz loop4 ;jump if busy
mov A,VAR ; data to write
movx @DPTR,A ; write EEPROM
loop2: mov a,WMCON; get EEPROM write status
anl a,#WDTRST; check RDY/BSY
jz loop2;jump if busy
xrl WMCON, #EEMWE; disable EEPROM writes
xrl WMCON, #EEMEN; disable EEPROM accesses
RET

;valores dos temporizadores

TEMP: MOV R4,#00H
MOV R5,#180
TEMPO: DJNZ R4, TEMPO
DJNZ R5, TEMPO
RET

TEMPO3: MOV R4,#180
TEMP3: DJNZ R4, TEMP3
RET

TEMP2: MOV R4,#00H
MOV R5,#00H
MOV R6,#2H
TEMPO2: DJNZ R4, TEMPO2
DJNZ R5, TEMPO2
DJNZ R6,TEMPO2
RET


TEMP4: MOV R4,#00H
MOV R5,#200
TEMPO4: DJNZ R4, TEMPO4
DJNZ R5, TEMPO4
RET
BOTI REG P0.6 ;botão repor refirgerantes

só falta essa parte, q eu tinha deixado limitado até o numero 9, mas eu n consigo faze pra deixar na tela mais do q 9 e em decimal, n em hexadecimal

Compartilhar este post


Link para o post
Compartilhar em outros sites

E que tipo de display de 1 dígito que está ligado nesse port P2 ?????

Deve ter algum tipo de decodificador , explica prá gente essa parte do hardware, e como você pretende implementar NO HARDWARE os dois dígitos....

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites
E que tipo de display de 1 dígito que está ligado nesse port P2 ?????

Deve ter algum tipo de decodificador , explica prá gente essa parte do hardware, e como você pretende implementar NO HARDWARE os dois dígitos....

Paulo

naao!, o display é de dois digitos,é q se for mostra no display vai aparece depois do 9 vai aparece simbolos em hexa decimal, e eu só quero q ao invés de aparece os numeros hexadecimais, apareça só decimais, eu n sei nd do hardware, pois é da minha escola, e é portanto uma maquina mais simples

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×