Ir ao conteúdo

Display só com decimais


alexandre9865

Posts recomendados

Postado

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

  • Coordenador
Postado

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

Postado


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

Postado

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

Postado
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

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!