Página 1 de 1

Delay com 8051 em C

MensagemEnviado: 12 Nov 2007 15:22
por Fugem
Ola, sou novato com o 8051, e não estou conseguindo achar uma função para delay em C no 8051! tipo a "delay_ms" do pic!
Se alguem tiver uma apostila ou tuto para que trabalhe com 8051 em C eu agradeceria também! =D

Grato
Fugem

MensagemEnviado: 12 Nov 2007 15:41
por ze
faça uma função. algo como:
void delay(unsigned int dl)
{
while(dl--); // usando um simulador, pode saber quanto tempo dura cada iteração
}

ou use o timer0, p. ex. deixando-o habilitado.

void delay(unsigned char dl)
{
TH0=255-dl;
while(TH0); // não precisa de simulador, mas tem que calcular
}

faz tempo que não uso 8051. por favor, corrija-me.

MensagemEnviado: 12 Nov 2007 19:00
por wmtorres
faça um laço for do tipo
for(i=1, i<1000, i++)
{
_nop();
}

MensagemEnviado: 12 Nov 2007 21:18
por Maurício
Qual é a frequência do cristal?

[]'s

MensagemEnviado: 17 Nov 2007 09:57
por gabriel_paz
Geralmente nos compiladores C para 8051, não existem esses tipos de funções prontas, você precisa criá-las, gerar tempos sem o uso do Timer é complicado, fica difícil de estimar o tempo real de execução, a seguir tem uma rotina para geração de tempos com base em 1ms, com o uso do Timer do microcontrolador, mas as bases de cálculo foram feitas para uso de cristal de 12MHz.

void delay_ms(unsigned char m_segundos) //Função de geração de tempo - base 1ms
{
// A variável m_segundos é a entrada do parâmetro de quantos milissegundos serão gerados

unsigned int carga_inicial=(65535-1000); // Variável de carga inicial do Timer

while(m_segundos)
{
TL0=carga_inicial; // Carregamento do parte baixa do valor inicial de contagem
TH0=carga_inicial>>8; // Carregamento do parte baixa do valor inicial de contagem
TR0=1; // Ligação do Timer
while(!TF0); // Verificação do fim da contagem a partir do estouro do flag, necessário apenas quando não usamos a interrupção do Timer
TR0=0; // Desligao o timer
TF0=0; // Zera o flag
m_segundos--; // Decrementa a variável
}

}

Um abraço.

Gabriel