Estoy utilizando dicho código en PIC18F25K80 compilado con el compilador xc8:
unsigned long kline_kw1281_byte_time = 0;
void sendKline(void) {
klineWrite(0x9);
while (klineBusy());
kline_kw1281_byte_time = millis();
while (!klineAvailable()) {
if (kline_kw1281_byte_time_out()) {
mStatus = DISCONNECTED;
while(Busy1USART());
Write1USART(0x00);
return;
}
}
}
bit kline_kw1281_byte_time_out(void) {
unsigned long time_out = millis() - kline_kw1281_byte_time;
if (time_out > 20){
while(Busy1USART());
Write1USART(time_out);
return 1;
} else
return 0;
}
y tengo un problema extraño. En la función kline_kw1281_byte_time_out()
tengo una declaración verdadera para time_out > 20
pero Write1USART(time_out)
me imprime un número menor que 20. Esto sucede al azar. La función la mayor parte del tiempo funciona correctamente.
este es el código millis ():
#include <p18cxxx.h>
#include "timer0.h"
volatile unsigned long runtime_millis;
void initialize_timer0() {
T0CON = 0b11000011;
INTCONbits.TMR0IE = 1;
INTCON2bits.TMR0IP = 1; //set timer0 interrupt priority high
INTCONbits.TMR0IF = 0; //reset timer0 interrupt flag
}
void timer0(void) {
runtime_millis++;
TMR0L = 8;
INTCONbits.TMR0IF = 0;
}
unsigned long millis(void) {
return runtime_millis;
}
void delay(unsigned long ms) {
unsigned long cTime = runtime_millis;
while (runtime_millis - cTime < ms);
}