Pagina 1 di 1

Stranezze con timer e compilatori.

MessaggioInviato: 14 giu 2012, 18:40
da mpeino
Di solito uso il MikroC ma volevo provare HI TECH C e ho scoperto qualcosa di strano.
Questo è il codice MikroC:
Codice: Seleziona tutto
void main() {
TRISA =0;
TRISB=0;
TRISC=0;
INTCON =0b10100000;
OPTION_REG =0b10000011;
TMR0=196;
}

void interrupt(void)
{
if(INTCON.T0IF=1){
RB1_bit=RB1_bit^1;

}
TMR0=196;
INTCON.T0IF=0;
}


questo è il codice HI TECH C
Codice: Seleziona tutto
#define  XTAL_FREQ 4MHZ
#include <PIC.h>
#include "delay.c"

void main(void)
{
TRISA=0;
TRISB=0;
TRISC=0;

OPTION_REG=0b10000011;
INTCON=0b10100000;
TMR0=196;
while(1){
}
   
}

void interrupt ISR (void)
{
    if (T0IF=1){
       RB1=RB1^1;
        }
TMR0 =196;
T0IF=0;
    
      }


per entrambi non ci sono errori e generano un onda quadra con periodo di 2ms.

Ma se analizziamo i due codici notiamo che nel HI TECH C vi è un ciclo while infinito SENZA IL QUALE L'ONDA NON VIENE GENERATA e nel MikroC non c'è .

I timer non sono indipendenti dall' andamento del programma ?????
C' è qualcosa di sbagliato nel codice HI TECH C (visto che non lo conosco)???
HELP.
Massimo.

Re: Stranezze con timer e compilatori.

MessaggioInviato: 14 giu 2012, 18:43
da TardoFreak
C'e qualcosa di sbagliato nel primo programma. Manca il ciclo infinito di funzionamento.
Ed è un errore grave!
Probabilmente il compilatore della MikroE lo vede e lo inserisce alla fine del main. Diciamo che fa una cortesia al "programmatore". :roll:

Re: Stranezze con timer e compilatori.

MessaggioInviato: 14 giu 2012, 18:47
da mpeino
acc sei stato velocissimo GRAZIE !!!!
quindi il ciclo infinito va comunque messo anche se i timer sono diciamo "indipendenti".

Re: Stranezze con timer e compilatori.

MessaggioInviato: 14 giu 2012, 18:47
da AjKDAP
mpeino ha scritto:C' è qualcosa di sbagliato nel codice HI TECH C (visto che non lo conosco)???


Visto lo scopo (generare un'onda quadra tramite interrupt) il codice HITECH mi sembra il più sensato. La stessa cosa dovrebbe essere adottata su mikroC.

Se funziona lo stesso sarà a causa del compilatore che genera un codice che non termina ma permette alle interruzioni di continuare a generare l'onda quadra.

In ogni caso, anche se funziona senza, è meglio mettere un ciclo infinito anche su mikroC.

Per pura correttezza formale :D

Re: Stranezze con timer e compilatori.

MessaggioInviato: 14 giu 2012, 19:21
da TardoFreak
No, [-X non si tratta di correttezza formale ma di una necessità.

Ora, che MikroC lo metta di default per aiutare, consentitemi il temine, i programmatori improvvisati è un conto, che serva davvero è un altro.
Tutti i programmi per micrcontrollori hanno un ciclo infinito di funzionamento.
La lettura di QUESTO articolo forse può giovare.