Ad esempio:
#define Fosc1 8000000L
#define prescaler 256
#define tempo_ms ((int)(4L*prescaler*255*1000/Fosc1))
#define cicli 120/tempo_ms
e se vuoi usare i float in fase di precompilazione:
#define Fosc1 8000000.0
#define prescaler 256
#define tempo_ms ((int)(0.0+4*prescaler*255*1000/Fosc1))
#define cicli (120/tempo_ms)
Ti ricordo che un intero a 16 bit puo' assumere i valori nei range [-32768..32767] oppure [0..65535] (se unsigned)
Gia' Fosc1 non e' rappresentabile, e me che meno 4*256*255*1000 (=261120000)
Visto che "4*prescaler*255*1000/Fosc1" vale circa 32, perche' non risolvi l'espressoine direttamente a mano?
Al limite, esiste una libreria che implementa i float a 16 bit:
Quindi la domanda sorge spontanea: sei sicuro dell'approccio che stai seguendo?
Se non sei esperto di programmazione e giochi con microcontrollori, e se e' per lavoro, e' meglio che ti fai consigliare da qualcuno con maggiori competenze: rischi di fare un disastro (volevo dire
casino, ma non e' elegante ).
Se e' per divertimento, allora preparati a comportamenti assolutamente imprevedibili
Concettualmente: ti devi assicurare che ogni operazione (somma, sottrazione, moltiplicazione, divisione, incrementi, decrementi, ...) non generi overflow!
Gia' parti in modo sbagliato con le definizioni delle macro Fosc1 e tempo_ms.