Ir ao conteúdo
  • Cadastre-se

Temporizador em Assembly 89C51


Posts recomendados

Galera, estou com essa questão para fazer, eu entendo algumas coisas como deixar o temporizador 0 no modo 2 e tudo, mas gerar essas interrupções a cada 1ms e prever a habilitação de interrupção eu fiquei meio que boiando. Quem puder fazer o trecho do programa a qual a questão se refere e comentar de maneira sucinta eu agradeço.

 

Suponha que determinada aplicação empregando o microcontrolador 89C51 exija interrupções periódicas para realizar a varredura de displays de 7 segmentos. Escreva um trecho de programa em Assembly que apenas programe o temporizador 0 no modo 2, de maneira que sejam geradas interrupções a cada 1ms. Esse trecho de programa deve prever também a habilitação da interrupção correspondente e o disparo da contagem do temporizador. A freqüência de clock do microcontrolador é de 6MHz.

 

 

@edit: erro de pontuação.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

trecho não vai rolar. . Mas vejamos...

 

T1%2BMode%2B2.PNG

 

Pelo desenho você percebe que tem 1Mhz (6MHz/6) entrando no contador do timer né? E você quer 1Khz (1mS) de interrupt certo? Ou seja dividido por mil. Considerando que um pulso de interrupt é gerado quando o contador passa de 0xFFFF (65535) para 0X0000, para dar 1000 contagens você tem que realimentar 64535 (65535-1000) nos dois registros TH1...TL1

Portando no seu programa, alimente TH1..TL1 com 64535 (converta pra hexa), habilite a interrupt e nela realimente com os mesmos valores

 

Só pra constar, não tenho contato com este mc desde o século passado, portanto me auto-permito-me algum engano. Sugiro aguardar + opiniões. Constatando algum erro, edito ou apago o post. Portanto não clique em "citar"

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

ok

O clock do datasheet não é importante e sim o que vai no seu sistema. A ideia do d.s. é só pra dar algum exemplo prático. Mais tarde dou uma olhadela no d.s. e faço algum remendo...


De fato vou ter que remendar... Acho que o modo 2 não pode gerar 1mS de interrupt pois 8 bits não é capaz de dividir 1Mhz por 1000. Confundi os modos. Perdoe minha falha

 

"Mode2 configures Timer1 as an 8-bit Timer(TL1 register) with automatic reload from TH1 register on overflow (seeFigure32).TL1 overflow sets TF1 flag in TCON register and reloads TL1 with the contents of TH1,which is preset by software. There load leaves TH1 unchanged..."

 

Por gentileza, de uma olhada aqui

http://blog.circuits4you.com/2015/07/programming-timers-on-8051.html


obs: no afã de responder rápido, confundi feio o modo da figura com o do datasheet. O texto naquele post está incoerente. Vou deixar como está pra confirmar que ninguém é perfeito ok? Queira ler a explicação do blog

Sorry friends...

Link para o comentário
Compartilhar em outros sites

Bem, o ciclo que estou calculando é o seguinte: 

ciclo = (1 / 6000000) * 12
ciclo = 2,00uS

 

então eu preciso de 500 contagens, mas o registrador é de 8 bits, FFH ou 255, então estáva pensando em algo mais ou menos assim:

 

R. ATRASO:

                MOV IE, #10000010                   ;Habilitando a interrupção do timer 0

                MOV TCON, #00000000B         ;

                MOV TMOD, #00000010B        ;TIMER 0 no modo 2

                 MOV TH0, #HIGH(04H)             ;251 cilcos para recarga

                MOV TL0, #LOW (04H)              ;251 ciclos

                  SETB TR0                                    ;Inicia a contagem do timer 0

TEMPO:

                MOV A, TF0                                  ;

                CJNE A, #06H, TEMPO                ;

                MOV TL0, #LOW (05H)                ;250 ciclos

ESPERA:

                JNB TF0, ESPERA

                CLR TF0                                       ;

                CLR TR0                                       ;

                RET                                               ;

 

 

@edit: código estava incompleto

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...