Página 1 de 2

problemas com incremento de P2

MensagemEnviado: 04 Nov 2018 18:59
por renan-papaco
estou tentando fazer um 8051 incrementar o port P2 apertando um botão no port P0.0, usando umas rotinas que experimentei num outro código que funcionou.

eu programei o uC para acender todos os oito leds do port P2 e ao apertar P0.0 ele incrementa em 1 o port P2 até chegar em 255(0XFF)
tipo, aperta uma vez, incrementa uma vez, aperta duas vezes incrementa duas vezes,(uma apertada = incrementa em 1) mas quando pressiono esse botão, ele apenas acende um unico led do P2 e não sai disso...

o código tá abaixo:

asm code
org     0000h
;inicializa P0 como entrada
mov A,#00h ;carrega 00 no acumulador
mov A,P0 ;zera P0, inciando ele como port de entrada
inicio:
mov A,#0FFh
mov P2,A
loop:
jb P0.0,inicio ;enquanto P0.0 não for acionado, desvia para inicio
setb B.0 ;apertou P0.0? seta flag B0
sjmp leitura ;em seguida desvia para a rotina de leitura
leitura:
jnb P0.0,$
clr B.0

mov A,#00h
mov P2,#01h
inc P2
sjmp leitura
end


será que tenho q salvar alguma coisa na pilha? tentei diferentes versões mas não consegui o efeito desejado...
poderiam me dar uma luz?

vou upar um video no youtube pra vocês verem a reação do circuito.

Re: problemas com incremento de P2

MensagemEnviado: 04 Nov 2018 19:03
por renan-papaco
video do circuito em funcionamento:


Re: problemas com incremento de P2

MensagemEnviado: 04 Nov 2018 19:40
por andre_luis
De onde voce tirou a ideia de que zerando P0 o configura como entrada?

Código: Selecionar todos
mov     A,#00h    ;carrega  00 no acumulador
mov     A,P0      ;zera P0, inciando ele como port de entrada

Re: problemas com incremento de P2

MensagemEnviado: 04 Nov 2018 22:20
por renan-papaco
andre_teprom escreveu:De onde voce tirou a ideia de que zerando P0 o configura como entrada?

Código: Selecionar todos
mov     A,#00h    ;carrega  00 no acumulador
mov     A,P0      ;zera P0, inciando ele como port de entrada



não tem o canal WR kits? ele usou essa tatica para usar P0 como entrada...

Re: problemas com incremento de P2

MensagemEnviado: 05 Nov 2018 14:02
por andre_luis
renan-papaco escreveu:não tem o canal WR kits? ele usou essa tatica para usar P0 como entrada...


Nunca ouvi falar nisso, devo estar desatualizado...
Só me baseio em datasheet e na minha experiencia com esse core.

Re: problemas com incremento de P2

MensagemEnviado: 05 Nov 2018 22:46
por tcpipchip
Pelo que lembro FF em P0 coloca como entrada

Re: problemas com incremento de P2

MensagemEnviado: 06 Nov 2018 09:40
por renan-papaco
bom
a questão aqui nem é como configurei como entrada.

o código permite que P0 seja lido, nesse caso bit a bit, pois usei esse truque num outro codigo que funcionou, e passou a rodar decentemente com um truque que aprendi aqui mesmo no fórum, sobre salvar e resgatar dados na stack pointer.

minha duvida está em como fazer o programa incrementar o registrador P2, isso pq to tentando projetar algo como um controle digital de volume e tonalidade para um amplificador de som, usando uns CI's 8031 peguei de sucata (eu gosto de reaproveitar componentes pra qualquer coisa)
e eu não sei como implementar essa rotina, pois não sou tão expert assim no ASM como a maioria aqui do forum é.

Re: problemas com incremento de P2

MensagemEnviado: 07 Nov 2018 14:18
por ze
oi
Não uso asm51 e asm51 há décadas mas percebo algo esquisito no seu fonte

asm code
loop:
jb P0.0,inicio ;enquanto P0.0 não for acionado, desvia para inicio
setb B.0 ;apertou P0.0? seta flag B0
sjmp leitura ;em seguida desvia para a rotina de leitura
leitura:
jnb P0.0,$
clr B.0
mov A,#00h
mov P2,#01h
inc P2
sjmp leitura

Por acaso não devia retornar ao loop:? ok.. talvez não. Parece que vc está com um resistor pra gnd pulldown e botão pro vcc. Nada contra mas verifique os valores do R. Se muito alto, o pino pode ficar indeciso. Penso que é mais interessante um R pullup e botão pro gnd. Neste caso, um capacitor em paralelo pra evitar repique calha bem. E sim, melhor setar o P0=0xff pra garantir o 1. Este mc não tem controle de direção.
Outra coisa: vc faz P2=0x01 e incrementa. Ou seja: nunca vai sair do 2. E tem mais: espere soltar o botão algo como:
jnb P0.0,$
jb P0.0,$
+- como voltar ao loop
A saidera: momento cogitar estudar c: bem mais simples.

Re: problemas com incremento de P2

MensagemEnviado: 11 Nov 2018 08:10
por renan-papaco
linguagem C é simples pra quem gosta...
eu comecei a programar 8051 em C e quase sempre meu codigo dava m****...
eu prefiro o asm pq nele tenho controle total sobre o uC.

e pelo q vc me falou, vc acha que é problema no hardware, mas não é essa a questão.

até pq já rodei outros programas nele q funcionaram perfeitamente, montei essas placas faz 3 anos.

mas sobre modificar as instruções... nesse codigo ja tem uma rotina que verifica se o botão foi solto.

como agora to atarefado pra caramba, vou voltar pro trabalho, depois dou uma verificada no codigo.

mas essa sua dica de voltar ao loop me pareceu interessante.
vou usar ela e ver noq vai dar.

Re: problemas com incremento de P2

MensagemEnviado: 11 Nov 2018 20:21
por brasilma
Assim que resolver as questões apontadas pelos colegas, provavelmente encontrará outro problema: ruído da tecla, para resolver pesquise por rotina de debouncing!

Re: problemas com incremento de P2

MensagemEnviado: 11 Nov 2018 20:42
por renan-papaco
brasilma escreveu:Assim que resolver as questões apontadas pelos colegas, provavelmente encontrará outro problema: ruído da tecla, para resolver pesquise por rotina de debouncing!

ruido de tecla tbm não é problema... como já falei uma vez aqui... esse mesmo hardware já rodou outro programa que também lê P2...
e ele foi ajustado justamente com uma resposta que foi dada aqui.
caso dê ruido de tecla, eu sei como resolver... bastando por capacitores eletroliticos de 100uF em paralelo com as teclas.

Re: problemas com incremento de P2

MensagemEnviado: 11 Nov 2018 21:14
por KrafT
renan-papaco escreveu:... bastando por capacitores eletroliticos de 100uF em paralelo com as teclas.


Isso não é a minha definição para o termo "eu sei resolver". :o

Re: problemas com incremento de P2

MensagemEnviado: 12 Nov 2018 09:45
por longo.251272
tcpipchip escreveu:Pelo que lembro FF em P0 coloca como entrada


Concordo com você

Re: problemas com incremento de P2

MensagemEnviado: 12 Nov 2018 16:19
por ze
renan-papaco escreveu:eu prefiro o asm pq nele tenho controle total sobre o uC.

Percebe-se kk.
Mas vem cá, 3 anos mexendo com asm e empacou num problema tão simples?
renan-papaco escreveu: por capacitores eletroliticos de 100uF em paralelo com as teclas

Pelo menos vc pensa grande. Quando mencionei
ze escreveu:um capacitor em paralelo pra evitar repique calha bem
pensei nuns 1...10nF. (mas algo me diz que vc errou a unidade)
Dica: rode passo a passo. Use o proteus p.ex. Mas continuo achando que isso
mov P2,#01h
inc P2
nunca vai deixar o P2 passar de 2. Mas sei lá. Asm51 não tem sido a minha praia há séculos.

Re: problemas com incremento de P2

MensagemEnviado: 12 Nov 2018 16:39
por andre_luis
eu prefiro o asm pq nele tenho controle total sobre o uC


Até hoje em quase 20 anos de carreira, só encontrei um caso onde o assembly foi essencial, um caso onde manipulei uma rotina que estourava deliberadamente a pilha do microcontrolador sem causar erro de compilação, e de resto pode-se dizer que pra tudo o mais o C atende, mas esse debate iria fugir do tópico, que não parece estar caminhando pra frente, ao menos esperava uma atualizacao do seu codigo com as dicas dadas até agora.