Página 1 de 1
Delay com 8051 em C

Enviado:
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

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

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

Enviado:
12 Nov 2007 21:18
por Maurício
Qual é a frequência do cristal?
[]'s

Enviado:
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