Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
graccula

Problema Timer MultiSim

Recommended Posts

Pessoal,

Estou começando a estudar a programação da família 8051 e estou usando o multisim como simulador.Estou acompanhando os exercícios do livro "Laboratório de Microcontroladores da Família 8051" do Denys Nicolosi.

Estava indo tudo bem até o exercício de timers.

Bom, para o cirtuito eu apenas coloquei no board um 8051 genérico e polarizei ele e comecei a escrever uns programas em assembler.

Todos os programas dos exercícios anteriores funcionaram perfeitamente inclusive este:

1 ORG 10H

2 MOV IE, #00H

3 MOV TMOD, #10H

4 MOV TH1, #HIGH(65535-20000)

5 MOV TL1, #LOW(65535-20000)

6 SETB TR1

7 JNB TF1, $

8 NOP

9 CLR TR1

10 CLR TF1

11 END

Acompanhando com um cronometro funcionou perfeito. Ele ficou 20 segundos no loop da linha 7, o que era esperado.

Mas neste código abaixo, onde eu programei para que o timer interrompesse o programa principal:

1 ORG 0BH

2 CLR TR0

3 RETI

4 ORG 100H

5 INICIO: MOV IE, #82H

6 MOV IP, #2

7 MOV TMOD, #01H

8 MOV TH0, #HIGH(65535 - 20000)

9 MOV TL0, #LOW(65535 - 20000)

10 SETB TR0

11 MOV A, #00H

12 LOOP: INC A

13 SJMP LOOP

14 END

Bom, o que acontece é que eu coloco um breakpoint na linha 2 e outro na linha 5. No meu entender ele deveria comecar o programa na linha 5 e apenas quando a partir da linha 10 quando eu ligasse o timer (depois de 20 segundos) que o programa deveria ir parar no breakpoint da linha 2.

Mas o que acontece é que o programa começa na linha 2, executa a linha 2 e a 3 e volta na linha 2, ficando eternamente nesse loop.

O que estou fazendo de errado? Alguém já passou por isso?

Agradeço qqer ajuda. Se precisarem do projeto pra dar uma olhada eu posso enviar.

[]s

Renato

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Pessoal,

    **** vacilo. Descobri a idiotice que eu estava fazendo. Faltava uma instrução de jump em um endereço anterior ao da interrupção. Bastou eu colocar as linhas:

    org 00h

    ljmp #0100h

    e tudo funcionou perfeitamente. Que mancada. Bom, fica a dica para os cabeções que nem eu!

    O programa ficou assim:

    1: ORG 00H

    2: LJMP 0100H

    3: ORG 0BH

    4: CLR TR0

    5: RETI

    6: ORG 100H

    7: INICIO: MOV IE, #82H

    8: MOV IP, #2

    9: MOV TMOD, #01H

    10: MOV TH0, #HIGH(65535 - 20000)

    11: MOV TL0, #LOW(65535 - 20000)

    12: SETB TR0

    13: MOV A, #00H

    14: LOOP: INC A

    15: SJMP LOOP

    16: FIM: NOP

    17: END

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

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

    ×