Problema con EEPROM.read (o write?)

Con la prima delle 2 routine sotto, salvo in eeprom un numero tra 0 e 25755, dividendo le centinaia dalle decine (max 255 per singolo indirizzo)
Quando vado a leggere con la seconda routine, mi trovo sempre e comunque entrambi gli indirizzi a 255, anche se in scrittura ho passato uno zero! Cosa sbaglio?
Grazie!

void e2prom_ore_write(long num){
 if(num>99){//oltre 99
   EEPROM.write(Addr1, int(num/100));
   EEPROM.write(Addr0, int(num%100));
 }else{ //<99
    EEPROM.write(Addr0, num);
 }
}

void e2prom_ore_read(){ 
     contaore=EEPROM.read(Addr1)*100;
     contaore+=EEPROM.read(Addr0);
}

Prova a cambiare tipo di dati. Le funzioni legate alla lettura/scrittura su EEPROM trattano singoli byte ma tu passi numeri di tipo unsigned long che poi oltretutto converti a signed integer prima della scrittura.
Spezza semplicemente in byte alto/byte basso senza mettere nel mezzo divisioni e numeri in virgola mobile.

void e2prom_ore_write(unsigned int num){
  EEPROM.write(Addr1, highByte(num));
  EEPROM.write(Addr0, lowByte(num));
}

Presupponiamo che anche contaore sia unsigned int, quando vai a leggere devi fare solo:

void e2prom_ore_read(){
  contaore=(EEPROM.read(Addr1)<<8) || (EEPROM.read(Addr0));
}

Così riassembli l'integer con i 2 byte.

Funziona! A volte mi rendo conto che ne so veramente poco di programmazione.... nemmeno conoscevo le funzioni highByte e lowByte....

Grazie!!