Ir ao conteúdo
  • Cadastre-se

Ajuda com programação no uC


graccula

Posts recomendados

Pessoal,

Estou com um problema aqui que não consigo resolver. Fiz um programa simples em assembler para rodar em um AT89S52.

O código é bem simples mesmo, ele só verifica o pressionamento de uma tecla na porta p1.0 e ativa ou desativa um led na porta p3.0.

Código:

TECLA EQU 0FEH

DESL EQU 0FFH

ORG 0000H

MOV TMOD, #01H

LJMP PRINC

ORG 0040H

PRINC: NOP

VOLTA: MOV A, #DESL

MOV P3, A

MOV R0, P1

CJNE R0, #TECLA, VOLTA

LCALL SOLTA

VOLTA2: MOV A, #TECLA

MOV P3, A

MOV R0, P1

CJNE R0, #TECLA, VOLTA2

LCALL SOLTA

SJMP PRINC

SOLTA: MOV R0, P1

MOV TH0, #HIGH(65000)

MOV TH0, #LOW(65000)

SETB TR0

JNB TF0, $

CLR TR0

MOV R0, P1

CJNE R0, #DESL, SOLTA

RET

END

Eu testei o código no Proteus (vide imagens anexas) e funcionou perfeitamente. Consegui gravar o programa compilado em HEX no uC através do ISP 3.0a. Mas não roda de jeito nenhum !!!!

Inclusive fiz várias verificações para confirmar que não havia mau contato na protoboard e tudo ok, mas o programa não roda por nada desse mundo.

Outra verificação que fiz foi de ler o conteúdo do uC e depois gravar o buffer num arquivo .HEX e carregar no proteus para verificar se o que estava gravado no uC era mesmo o código certo. E era! No proteus roda que é uma beleza.

Alguém tem alguma ideia para me ajudar???

Existe a possibilidade de eu ter queimado o uC de alguma forma que ele não esteja funcionando o programa mas todo o resto esteja ok?

A única coisa estranha que eu percebi é que alguns dos bits das portas P0 e P2, quando testadas com um multimetro ficam com valores estranhos, como 3,2 v ou 0,16 v... Isso é normal? Não deveria ficar com 5v todas as portas na iniciação?

Agradeço qqer ajuda, pois já estou ficando doido!

<a href="http://img185.imageshack.us/my.php?image=micro2ac8.jpg" target="_blank"><img src="http://img185.imageshack.us/img185/6287/micro2ac8.th.jpg" border="0" alt="Free Image Hosting at www.ImageShack.us" /></a>

Abraços

Renato

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Ainda não analisei direito mas este progrma está muito grande para esta simples tarefa.

Qual compilador está usando?

1)A tecla poderia ser analisada direto no pino p1.0 tipo:

princ:

setb p1.0

jb p1.0,$ ;loop enquanto p1.0 for alto

lcall delay ;tempo para deboucing da tecla

lcall inverte ;inverte saída ( ou coloque aqui a instrução cpl p3.0)

jnb p1.0,$ ;espera tecla ser solta

sjmp princ

2) você pode ativar e desativar a saída com uma simples instrução:

inverte:

cpl p3.0 ;liga/desliga p3.0

ret

Link para o comentário
Compartilhar em outros sites

Soschip, valeu pela atenção! O código está grande assim porque eu tentei várias coisas. A principio, eu fiz um código simples assim como este que você postou, mas a medida que não foi funcionando eu fui mexendo e alterando várias coisas para tentar ver se o problema era a programação.

Depois que postei a dúvida, pensei em duas possibilidades, uma delas é essa que você citou, o compilador. Não sei se estou usando o compilador certo. Na verdade existe um compilador certo para cada modelo de uC? O que estou usando é o ASEM-51 v1.3.

Outra coisa que pensei é se eu não tenho que informar de algum jeito o uC que estou querendo que ele execute código da memória EPROM e não da Flash, pois estou gravando via ISP na EPROM. Faz sentido isso que estou falando, ou para o uC não faz a menor diferença?

Novamente obrigado.

[]s

Renato

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Use a versão demo 8051 IDE da acebus (até 16K de programa ASM ).

http://www.acebus.com/win8051.htm

Não precisa colocar nenhuma diretiva tipo include.

Basta digitar o texto da mesmo forma que fez acima, com a mesma sintaxe do assembler 8051 e pronto, é só compilar que terá o arquivo HEX. Se precisar, acesse o help no menu. Se precisar converter em BIN para programar use o ponyprog.

Link para o comentário
Compartilhar em outros sites

Soschip, obrigado pela ajuda. Baixei o programa que você me indicou e já estou usando.

Descobri o que eu estava fazendo errado. Eu não estava colocando o pino do EA/VPP com valor alto. Por isso ele não estava executando meu programa.

Agora eu entendi como esses kits que o pessoal vende por aí faz para executar um programa na memória RAM volátil externa.

Caramba, é tanta informação que estou ficando meio grogue.

Bom, agora que consegui executar meu "hello world" do mundo dos microcontroladores, estou mais tranquilo para aprofundar meus estudos.

Obrigado pela sua ajuda Soschip!!

Fui, por ora. Depois volto com mais algum problema. hehehehe

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