On another note, I observed that with ADCIN the readings fluctuate quite a lot and I only want to change the motor speed if the value has 'really' changed (i.e. by me). I tried this code and while it yields a rock-solid value, it doesn't go to 0: the readings go from 1-255. Any ideas why?

Code:
' PIC 16F1825 with a 10k pot attached to AN1 (the data sheet says this is the maximum impedance allowed)

#DEFINE USE_LCD_FOR_DEBUG   ; comment out for non-debug use

' Vdd      -> pin 1         -> +5V   
' RC4/Tx   -> pin 6         -> EUSART transmit (LCD)
' RA1      -> pin 12        -> trim pot input
' Vss      -> pin 14        -> GND
   
DEFINE OSC 16               ; Set oscillator 16Mhz

DEFINE ADC_BITS      8      ; Set number of bits in result
DEFINE ADC_SAMPLEUS  50     ; Set sampling time in uS (was 5)
DEFINE ADC_CLOCK     3      ; Set clock source (3=rc)

DEFINE HSER_TXSTA   20h     ; Set transmit status and control register
DEFINE HSER_BAUD    2400    ; Set baud rate

                               
' ***************************************************************
' Device Fuses
' ***************************************************************

#CONFIG
   __config _CONFIG1, _FOSC_INTOSC & _WDTE_ON & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF
   __config _CONFIG2, _PLLEN_OFF & _STVREN_ON & _BORV_LO & _LVP_OFF
#ENDCONFIG

' ***************************************************************
' Initialization
' ***************************************************************

OSCCON    = %01111000       ; 16MHz internal osc

APFCON0.2 = 0               ; Tx on RC4 for LCD display
APFCON0.7 = 0               ; Rx on RC5

BAUDCON.4 = 1               ; Transmit inverted data to the Tx pin

ANSELC    = 0               ; Digital only for all PortC pins
TRISC     = 0               ; Make all PORTC pins output

TRISA     = %00000010	    ; Make all pins output except for RA1 (trim pot input)
ANSELA    = %00000010       ; Analog on PORTA.1 (AN1) only

FVRCON    = 0               ; Fixed Voltage Reference is disabled
ADCON0    = %00000101       ; ADC (analog-to-digital) is enabled on AN1 (RA1) only
PAUSEUS 20                  ; wait for the analog switch 'glitch' to die down
ADCON1.7  = 0               ; Left-justified results in 8-bits

#IFDEF USE_LCD_FOR_DEBUG
    LCD_INST   CON 254       ' instruction
    LCD_CLR    CON 1         ' Clear screen
    LCD_L1     CON 128       ' LCD line 1
    LCD_L2     CON 192       ' LCD line 2
#ENDIF

ADCInVal       VAR BYTE      ; stores ADCIN result read from trim pot
                                                           
Main:
    gosub Do_ADC
    pause 100
    #IFDEF USE_LCD_FOR_DEBUG
        ' DO SOMETHING HERE
        HSEROUT [LCD_INST, LCD_CLR]
        pause 5
        HSEROUT ["ADC val=", DEC ADCInVal, "       ", 13, 10] ; Send text followed by carriage return and linefeed
    #ENDIF
 
GOTO Main

Do_ADC:
    PAUSEUS 50              ' Wait for A/D channel acquisition time
    ADCON0.1 = 1            ' Start conversion
    
    WHILE ADCON0.1          ' Wait for it to complete
    WEND

    ADCInVal = ADRESH
return