por renatogv » 12 Set 2009 09:48
Se entendi bem vc esta querendo ler o adc e converter o valor.
bom eu fizemos uma forma que gasta um pouco de ciclo de maquina mas como o teu caso me parece não precisar ser muito rapido, esta serve.
no caso a nossa constante de conversão é 0,02 ou seja cada bit vale este valor.
CONVERTE:
MOV A,ADC ;Move o valor conteúdo de ADC1 para o acumulador
MOV DECI,#0 ;Zera a variável DECI
MOV UNID,#0 ;Zera a variável UNID
MOV CENTI,#0 ;Zera a variável CENTI
CJNE A,#0,L0 ;Verifica se o acumulador é diferente de 0, se sim, salta para L0
MOV A,DECI ;Se não, move o conteúdo de DECI para o acumulador
ADD A,#30H ;Soma 30H ao acumulador para gerar o código ASCII referente a 0
MOV DECI,A ;Devolve o valor para a variável DECI
MOV A,CENTI ;Se não, move o conteúdo de DECI para o acumulador
ADD A,#30H ;Soma 30H ao acumulador para gerar o código ASCII referente a 0
MOV CENTI,A ;Devolve o valor para a variável CENTI
MOV A,UNID ;Se não, move o conteúdo de DECI para o acumulador
ADD A,#30H ;Soma 30H ao acumulador para gerar o código ASCII referente a 0
MOV UNID,A ;Devolve o valor para a variável UNID
LJMP L6 ;Salta para L6
L0:
DJNZ A,L1 ;Decrementa L1, se não for 0 salta para L1
MOV A,DECI ;Move o conteúdo de DECI para o acumulador
ADD A,#30H ;Soma 30H ao acumulador para gerar o código ASCII referente ao valor de DECI
MOV DECI,A ;Devolve o valor para a variável DECI
MOV A,CENTI ;Move o conteúdo de CENTI para o acumulador
ADD A,#30H ;Soma 30H ao acumulador para gerar o código ASCII referente ao valor de CENTI
MOV CENTI,A ;Devolve o valor para a variável CENTI
MOV A,UNID ;Move o conteúdo de UNID para o acumulador
ADD A,#30H ;Soma 30H ao acumulador para gerar o código ASCII referente ao valor de UNID
MOV UNID,A ;Devolve o valor para a variável UNID
L6: RET ;Retorna
L1:
PUSH A ;Salva o valor do acumulador na pilha operaciona para que não seja perdido
MOV A,DECI ;Move o conteúdo de DECI para o acumulador
ADD A,#2H ;Adiciona 2 ao acumulador
MOV DECI,A ;Devolve o valor para a variável DECI
CJNE A,#10,VOLTA ;Verifica se o aculumador é igual a dez
MOV DECI,#0 ;Se dim, zera DECI
MOV A,CENTI ;Move o conteúdo de CENTI para o acumulador
ADD A,#1 ;Vai 1 em CENTI
MOV CENTI,A ;Devolve o valor para a variável CENTI
CJNE A,#10,VOLTA ;Verifica se o aculumador é igual a dez
MOV CENTI,#0 ;Se sim, zera CENTI
MOV A,UNID ;Devolve o valor para a variável UNID
ADD A,#1 ;Vai 1 em UNID
MOV UNID,A ;Devolve o valor para a variável UNID
VOLTA:
POP A ;Devolde o valor do acumulador salvo na pilha para o acumulador
LJMP L0 ;Salta para L0
Esta parte foi usada para leitura do AD, o adc usado foi o adc0820.
AD1: ;Se não, TELA vale 1 e...
CLR P3.4 ;Ativa o Chip Select do AD1
NOP ;Espera para sincronizar o funcionamento
SETB P3.0 ;Pulsa P3.0 para gerar clock de conversão
NOP ;Espera para sincronizar o funcionamento
CLR P3.0 ;Pulsa P3.0 para gerar clock de conversão
NOP ;Espera para sincronizar o funcionamentoO
SETB P3.0 ;Finaliza o pedido de conversão
MOV ADC,P1 ;Move o byte recebido do ADC na porta P1 para a variável aDC
SETB P3.4 ;Desativa o Chip-Select do AD1