Il punto è che ogni volta attende un pelo di più di un secondo (1,04 secondi), probabilmente perché nonostante il rimedio proposto, perde comunque qualche centesimo di troppo in ogni iterazione dei cicli. Prova così:
codice:
CLS
PRINT "Il programma legge la tensione sullo shunt da 250 ohm"
PRINT "L'escurzione di tensione sar… quindi compresa fra 1 e 5v"
INPUT "OGNI QUANTI SECONDI VUOI VENGA FATTO IL CAMPIONAMENTO "; tempo&
OPEN "COM1:9600,N,8,1,rs,cs0,ds0" FOR RANDOM AS #10 ' apro la porta seriale
nomefile$ = "log.txt" 'assegno il nome al file .txt

OPEN nomefile$ FOR APPEND AS #20 'apro il file in scrittura progressiva

'Ottiene la frazione di secondo a cui è iniziato il processo
t! = TIMER
begfrac! = t! - FIX(t!)
DO
    'Calcola il momento in cui si passerà alla prossima iterazione
    t! = FIX(TIMER) + begfrac! + tempo&
    'Correzione necessaria se il programma viene eseguito a cavallo di mezzanotte
    IF t! >= 86400! THEN t! = t! - 86400

    i$ = INKEY$
    IF i$ = CHR$(27) THEN END ' se viene premuto "ESC" termina il programma
    CLS
    PRINT "CAMPIONAMENTO OGNI ";tempo&; "SECONDI"
    PRINT "Sto salvando i dati sul file log.txt"
    
    A$ = "255"
    PRINT #10, "**" + CHR$(VAL(A$)) + "#"; 'invio i dati sulla seriale
    
    digital$ = INPUT$(1, #10) 'leggo gli ingressi digitali
    ad1$ = INPUT$(1, #10) 'leggo l'ingresso analogico 1
    ad2$ = INPUT$(1, #10) 'leggo l'ingresso analogico 2
    
    REM PRINT "Ingressi ="; ASC(digital$) 'mostro il valore
    REM PRINT "Convertitore A/D 1 ="; ASC(ad1$) 'mostro il valore
    valore = (ASC(ad1$))
    REM PRINT "Il valore nella variabile valore Š="; valore
    valvolt = valore * 5 / 255
    PRINT ""
    PRINT "La tensione letta Š di volt: "; valvolt
    mA = valvolt / 250 * 1000
    PRINT "Pari a "; mA; "mA"
    kW = mA * .25 * 400
    PRINT "La potenza letta Š di kW: "; kW
    REM PRINT "Convertitore A/D 2 ="; ASC(ad2$)
    PRINT TIME$
    PRINT ""
    PRINT "Press ESC to exit..."
    PRINT #20, DATE$, TIME$, mA 'scrivo sul file i dati
        
    REM Attende quanto manca perchŠ il ciclo duri esattamente un secondo
    DO
    LOOP UNTIL TIMER >= t!
    
LOOP WHILE i$ = ""

CLOSE #10
CLOSE #20

END
Un consiglio: evita di usare numeri fissi come ID di apertura dei file, usa piuttosto FREEFILE per ottenere un ID di file libero prima della OPEN.