scrivo per sapere se qualcuno ha già riscontrato una stranezza molto grave sul compilatore XC8 di Microchip (sto utilizzando un PIC16F1704).
Di seguito vi riporto il firmware di un programma che ho ridotto all'osso per capirci qualche cosa.
In pratica utilizzo il timer0 impostato a 1 ms (il tutto utilizzando il comodissimo code configurator) per incrementare la variabile "sys_tick", nel main verifico quando "sys_tick - t0" >100, questo significa che sono passati 101ms. Ho utilizzato anche la variabile t1 giusto per cercare l'origine del mio problema.
Ho inserito anche "if ((t1<100)||(t1>101)" per mettere un breakpoint e controllare le variabili quando sbagliava. Con il breakpoint in CLRWDT() i valori delle variabili sono:
sys_tick = 23048
t0 = 23028
t1 = 264
Tutte e tre le variabili sono dichiarate come unsigned long.
Ma come fa (sys_tick - t0) che in questo caso vale 20 a mettere in t1 264? Il bello è che lo fa anche per valori successivi. Ne ho provate 1000 senza alcun risultato.
Ho spostato l'istruzione "sys_tick++" all'interno del main con una pausa di 1ms e il risultato è stato: FUNZIONA TUTTO.Ho provato a dichiarare le variabili unsigned char (8bit) e FUNZIONA TUTTO. ma con variabili a 16 e 32 bit ogni tanto fa cilecca.
Di seguito il listato:
- Codice: Seleziona tutto
void main(void)
{
SYSTEM_Initialize();
/**********************************************************
* PROGRAMMA PRINCIPALE *
*********************************************************/
while (1){
CLRWDT();
t1 = (sys_tick - t0);
if (t1 > 100) {
if ((t1<100)||(t1>101)){
CLRWDT();
CLRWDT();
}
else t0=sys_tick;
}
}
}
void interrupt ISR (void){
if(INTCONbits.TMR0IE == 1 && INTCONbits.TMR0IF == 1)
{
INTCONbits.TMR0IF = 0;
sys_tick ++;
}
}
Ringrazio anticipatamente se qualcuno volesse darmi una mano... sono disperato.
Grazie
Ivan

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)






