ADC value changing after changing Timer1 value in program
ADC doesn't show the same value again


You are not reading the ADC correctly, so ADC_READ() can return
anything. See the comments in the code:

word ADC_READ(byte sample, byte tim, byte CH)
{
    word adcdata;  // not needed
    word avrdata;  // not initialized
    word abcdata;  // not used
    byte i;
    for (i = 0; i &lt; sample; i++)
    {
        adcdata = 0;  // useless
        adcdata = analogRead(CH);
        avrdata = avrdata + adcdata;
        delay(tim);
    }
    return (avrdata/sample);
}


The big issue is avrdata not being initialized. Its initial value is
whatever was left there (in the stack or some CPU registers) by the code
that ran before. The value returned by the function is then hard to
predict and depends on what the rest of the program is doing.

The other remarks I left in the comments are not that problematic,
although they are revealing of some lack of attention to detail. Same
for some badly named variables. Here is how I would implement this
function:

word ADC_READ(byte samples, byte time, byte channel)
{
    word sum = 0;
    for (int i = 0; i &lt; samples; i++)
    {
        sum += analogRead(channel);
        delay(time);
    }
    return sum/samples;
}