Ir ao conteúdo
  • Cadastre-se

Outro Como programar um delay de 1 segundo em linguagem Assembly no Intel 8051?


Posts recomendados

Há um tópico parecido aqui no site, mas não solucionou a dúvida. Possuo o conhecimento de como programar interrupções, no entanto, o máximo de delay que elas permitem são 65536us. Como faço para fazer interrupções maiores que esse valor? Esta programação abaixo permite 20.000us (ou 20ms), seu objetivo é incrementar em 1 o acumulador e depois de 20ms, ocorrer uma interrupção:


  

	ORG 0000H
    	LJMP 100H

    	ORG 0BH
    	CLR TR0
    	RETI
    
    	ORG 100H
INICIO: MOV  IE  ,#82H
    	MOV  IP  ,#02H
    	MOV  TMOD,#01H
    	MOV  TH0 ,#HIGH(65535-20000)
    	MOV  TL0 ,#LOW (65535-20000)
    	SETB TR0
    	MOV  A   ,#00H

LOOP: 	INC  A
      	LJMP LOOP

END

 

Como faço para aumentar este valor SEM TRAVAR num loop infinito, como no caso abaixo (Seu objetivo foi trocar o estado de P2.5 a cada (20*10)ms no timer1 modo 01), para isso, usei DJNZ para repetir a interrução 10 vezes seguidas (ou seja, travei a programação):


    

	ORG 0000H
	LJMP INICIO

    	ORG 001BH
    	LJMP ROTINA

INICIO:	CLR P2.5
    	MOV IE, #88H
   		MOV IP, #08H
    	MOV TCON, #40H
    	MOV TMOD, #10H

    	MOV TH1, #0D8H
    	MOV TL1, #0F1H

    	LJMP $   		; ESCREVA O PROGRAMA PRINCIPAL AQUI.

ROTINA: MOV R0, #09H
LOOP:   MOV TH1, #0D8H
    	MOV TL1, #0F0H
    	JNB TF1,$ 		; ESPERA A CONTAGEM TERMINAR (ESPERA O OVERFLOW) - não é possível fazer outras coisas coisas, somos obrigados 							a esperar TF1, logo, não é o ideal.
    	
        CLR TF1   		; LIMPA O TF1 POIS ELE NÃO MUDA DE ESTADO AUTOMATICAMENTE QUANDO O OVERFLOW TERMINA.
   		
        DJNZ R0, LOOP   ; ESPERAMOS (TRAVADO) A INTERRUÇÃO ACONTECER 10 VEZES (20*10 = 200ms)
    	CPL P2.5		; INVERTE O ESTADO LÓGICO DE P2.5 A CADA 200ms
    RETI

 

 

Se alguém puder me dizer como faço para programar interrupções de mais de 65535us, eu ficaria agradecido!
    
    
 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

De fato travar algum tempo sem nada fazer na interrupção não é boa ideia. O que podes fazer é incrementar uma variável,  verifique se atingiu  10, se não: continue tocando barco,  se sim, inverta o pino (ou faça algo), zere a variável. Neste caso pode controlar o tempo e qualquer intervalo de evento que quiser.

Dica: faça um fluxograma prazidéia ir clareando

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!