Ir ao conteúdo
  • Cadastre-se
frixen

Delay no mplab xc8 + pic 18f2550

Recommended Posts

Caros colegas ao usar o mplab xc8 para fazer um pisca led de um segundo, notei quando gravei no pic, que o led piscava mais rápido do que deveria.

tentei aumentar o tempo do delay mas quando aumentava esse valor de delay o led começou a piscar mais rápido, tentei mudar a frequência e alguns registradores e nada deu certo. eu usei o deley dessa forma: Delay10KTCYx(1000); e depois dessa: __delay_ms(1000). na segunda forma o mplab não compila se o valor do delay for maior que 100 ms.

Procurei demais e não achei nenhuma explicação, será que é bug do compilador ou do pic ou deixei passar algo?

obrigado!

O código pisca led esta abaixo:

#include <p18f2550.h>
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <delays.h>

#pragma config WDT = ON
#pragma config FOSC = EC_EC
#pragma config LVP = OFF
#pragma config PWRT = ON
#pragma config PBADEN = ON



void main()
{

TRISB = 0;
PORTB = 0;
while(1)
{

RB7=1;
Delay10KTCYx(1000);
RB7=0;
Delay10KTCYx(1000);


}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

A única forma que consegui, é fazer um função com um delay de 100ms e quando chamar a função com um valor esse valor multiplicara o delay e eu conseguirei o tempo que quero.

olha como ficou

#include <p18f2550.h>
#include <stdlib.h>
#include <stdio.h>
#include <delays.h>
#include <xc.h>


#pragma config FOSC = HS
#pragma config LVP = OFF
#pragma config PWRT = ON
#pragma config PBADEN = ON
#pragma config WDT = OFF

#define _XTAL_FREQ 48000000



void _delay_teste(int x) [COLOR="cyan"]//aqui é a função que criei[/COLOR]
{
int cont;
for(cont=0; cont<x; cont++)
{
__delay_ms(10);
}
}

void main(){

TRISB = 0;
PORTB = 0;
while(1)
{
RB7=1;
_delay_teste(100) ; [COLOR="Cyan"]//aqui eu chamo ela com o valor de x=100, que por sua vez multiplica o delay da função que é 10, dando 1000ms = 1s[/COLOR]
RB7=0;
_delay_teste(100);
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

engenhoso para ficar mais fácil usa :

void _delay_teste(int x)                //aqui é a função que criei 
{
int cont;
int mult = x*100;
for(cont=0; cont<mult; cont++)
{
__delay_ms(10);
}
}

Agora é só colocar em segundos

  • Curtir 1

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

×