Delay com 8051 em C

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

Delay com 8051 em C

Mensagempor Fugem » 12 Nov 2007 15:22

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
Avatar do usuário
Fugem
Bit
 
Mensagens: 13
Registrado em: 21 Ago 2007 01:41
Localização: Floripa

Mensagempor ze » 12 Nov 2007 15:41

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.
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor wmtorres » 12 Nov 2007 19:00

faça um laço for do tipo
for(i=1, i<1000, i++)
{
_nop();
}
wmtorres
Bit
 
Mensagens: 13
Registrado em: 11 Out 2006 21:34
Localização: Brasil

Mensagempor Maurício » 12 Nov 2007 21:18

Qual é a frequência do cristal?

[]'s
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor gabriel_paz » 17 Nov 2007 09:57

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
Avatar do usuário
gabriel_paz
Bit
 
Mensagens: 38
Registrado em: 11 Out 2006 21:48
Localização: São Paulo - Brasil


Voltar para 8051

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x