A millis() se la suele usar de esta forma:
#INCLUDE <16F628A.H>
#use delay(internal=4MHz)
#use fast_io(all)
int32 cont32=0 ;
#INT_TIMER2
void TIMER2_isr(void)
{
cont32++ ;
}
int32 millis(void){
disable_interrupts(INT_TIMER2);
int32 x32 = cont32 ;
enable_interrupts(INT_TIMER2);
return x32 ;
}
void main(void){
int32 T0 ;
set_tris_b(0xFE) ;
setup_timer_2(T2_DIV_BY_4,249,1); //1.0 ms overflow, 1.0 ms interrupt
// setup_timer_2(T2_DIV_BY_4,249,10); //1.0 ms overflow, 10.0 ms interrupt
enable_interrupts(INT_TIMER2);
enable_interrupts(GLOBAL);
output_high(PIN_B0);
T0 = millis() ;
#define T_LED 1000
while(1){
//--------------------------------
if((millis()-T0) >= T_LED){
output_toggle(PIN_B0);
T0 = millis() ;
}
//--------------------------------
// lo que sea
}
}
Con delay_ms() es escribir en el bucle
while(1){
//--------------------------------
delay_ms(1000) ;
output_toggle(PIN_B0);
//--------------------------------
// lo que sea
}
}
Pero usar millis() para controlar el encendido de un led es poco imaginativo, es mejor que la interrupción del Timer2 se encargue de apagarlo/encenderlo.