Ir ao conteúdo
  • Cadastre-se

Automação com 8051 - Contador de eventos


Martins_eng

Posts recomendados

mov a,TL0 ; pega a parte baixa do contador zero.

;é preciso converter para BCD valores maiores que 0Ah. Isto é contigo.

mov p0,a ;só isto.

Cara tudo bem, eu tentei fazer de varias formas utilizando divisão onde eu pego o quociente e o resto b ( DIv AB ) e faço dezena e unidade carreguei o TL0 em @R0 ou TL) em A usei a função SWAP para inverter a PORT P0 pois os meus displays são invertido P0 a P4 e a dezena e de P4 a P7 e a unidade, mas não tive exito o que acontece e que bagunção o contador do programa ou eu vejo a contagem mas e por P0 fica com um sinal 0.

Você pode dar uma dica de como arrumar esta bagunça de uma melhor forma, e vou colocar o programa que esta rodando mas sem a função de mostrar no display usando a P0 para que você possar analisar e me dar ungumas dicas

#include <Sfr51.inc>

;

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Sinto muito, amigo. Pra analisar uma programa preciso de tempo e já estou cheio de serviço meu atrasado por falta desse tempo.

faça contagens de 1 em 1 usando a instrução DAA (Ajuste decimal do acumulador)

Suponhamos que queira converter tl0 que contém 50h.

Então:

mov Rx,TL ;contador

clr a ;zera acumulador

loop:

add a,#1

DAA ;ajusta para decimal

djnz Rx,loop

;aqui você já term no acumulador o valor de 50h convertido em BCD=80d ou 1000000b

Link para o comentário
Compartilhar em outros sites

Sinto muito, amigo. Pra analisar uma programa preciso de tempo e já estou cheio de serviço meu atrasado por falta desse tempo.

faça contagens de 1 em 1 usando a instrução DAA (Ajuste decimal do acumulador)

Suponhamos que queira converter tl0 que contém 50h.

Então:

mov Rx,TL ;contador

clr a ;zera acumulador

loop:

add a,#1

DAA ;ajusta para decimal

djnz Rx,loop

;aqui você já term no acumulador o valor de 50h convertido em BCD=80d ou 1000000b

E ai tudo bem fera !!!

Utilizei esta instrução que você me passou e fiz alguns alterações para poder rodar no meu codigo, e agora a unidade farou de zerar quando chega em #10h, porém a casa da dezena não esta mais sendo mostrada, cara o que fou que eu erei aqui veja a instrução, a ideia e usar e divisão para colocar a dezena e a unidade separadas como exemplu ;10h seria 16d dividio por 10 fica sendo 1 na dezena e 6 na unidade

A e assim esta perdendo um pulso pois onde e para contar de 0 a 9 ele conta de 0 a 8 em relação ao contador do resto do codigo

Por favor me ajuda nessa também fera !!!

MOV B,#0Ah ; Coloca #Ah em B

CLR A ; Apaga A

MOV R3,TL0 ;MOVE O TL0 PARA O R3

MOV A,R3 ;ADICIONA O CONTEUDO DE R3 EM A

DIV AB ;Divide a por b

MOV A,B

DA A ajusta para decimal

SWAP A ;FAZ A PERMUTAÇÃO DE B ITS (3-0 ) E ( 4- 7 ) DE A

MOV P0,A ;MOVE A PARA P0 APÓS A PERMUTAÇÃO

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Tá difícil de entender o que você quer...

Pra que separar a dezena da unidade?

Se a contém 30h = 48d = 00110000b

MOB B,#10d ;

DIV AB ;aqui a dezena já fica separada de unidade.

;A=4

;B=8 = resto que é a unidade.

swap a ;coloca dezena no devido lugar

ADD a,b ;Junta a com B e fica valor convertido = 0100 1000b

Existe outra instrução para juntar os nibles que é XCHD A,@Ri , que simplesmente troca os níveis baixos do acumulador com o valor no endereço apontado por Ri.

Vou te dar um conselho:

É bom se acostumar a estudar os datasheets, porque ninguém ou nenhum curso vai te ensinar tudo sobre programação de microcontroladores, OK!

http://www.atmel.com/dyn/products/datasheets.asp?family_id=604

Link para o comentário
Compartilhar em outros sites

Tá difícil de entender o que você quer...

Pra que separar a dezena da unidade?

Se a contém 30h = 48d = 00110000b

MOB B,#10d ;

DIV AB ;aqui a dezena já fica separada de unidade.

;A=4

;B=8 = resto que é a unidade.

swap a ;coloca dezena no devido lugar

ADD a,b ;Junta a com B e fica valor convertido = 0100 1000b

Existe outra instrução para juntar os nibles que é XCHD A,@Ri , que simplesmente troca os níveis baixos do acumulador com o valor no endereço apontado por Ri.

Vou te dar um conselho:

É bom se acostumar a estudar os datasheets, porque ninguém ou nenhum curso vai te ensinar tudo sobre programação de microcontroladores, OK!

http://www.atmel.com/dyn/products/datasheets.asp?family_id=604

E ai soschip beleza, cara acertei aqui meu erros e deu tudo certo o programa esta rodando correntemente e o hardware também, a contagem esta perfeita agora fiz deiversas alterações e ocorreu tudo bem !!!!

O duro e que programar em asm e mais difícil eu so faço programação em C fazia muito tempo que não usava Asm mas vou voutar a usar sempre que puder pois acho bem legal e necessario estar pronto para tudo

Cara obrigado pela ajuda !!!!!

Link para o comentário
Compartilhar em outros sites

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!