Ir ao conteúdo
  • Cadastre-se
KaioRodrigo

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Isadora Ferraz, ajudou um pouco na minha dúvida, porém nos datasheets que encontro eu tenho de clock 12 ao invés de 6. Continuo sem conseguir fazer a parte onde habilita a interrupção correspondente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
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

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

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





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

×
×
  • Criar novo...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!