Boa tarde amigos!
Recentemente eu comecei a usar a linguagem C para programar microcontroladores PIC. Estou utilizando o mplabX 3.40 junto com o compilador xc8 v1.38, ambos são as versões mais atualizadas desses programas! O código abaixo é para fazer um led blinking.
O problema é que a função "__delay_ms()" deveria fazer o uC esperar por "x" milissegundos, tal que 0 <= x <= 192, e no meu caso ela está fazendo o uC ficar um tempo muito superior a isso.
Repare que passando o valor 5 como argumento da função o meu led oscila aproximadamente em 1 segundo. Eu quero entender esse "bug" ,mas está difícil...
Eu já li o manual do compilador e vi que esse calculo é feito com base no #define do _XTAL_FREQ.
Eu já testei outras formas de delay como o "_delay()" que é equivalente ao NOP(); e em todos esses casos o delay é muito maior que o tempo que deveria ser
obs: Estou utilizando o pic18f1220, oscilador interno.
#include <xc.h>
#define _XTAL_FREQ 4000000
void main(void) {
TRISBbits.RB7 = 0x00;
PORTBbits.RB7 = 0x00;
while(1){
PORTBbits.RB7 = !PORTBbits.RB7; // inverte rb7
__delay_ms(5);
}
}