In addition to what stevenvh said, make sure you are running the A/D correctly inside the processor. I am not familiar with that processor, but the ones I have seen all have a sample and hold in front of the internal A/D. Often there is one or a small number of actual A/D converters, with a mux in front of the sample and hold to select the single channel to read that time. The sample and hold takes some finite time to settle. You have to make sure it has been given sufficient time after the mux is changed before the sample and hold goes into hold mode and the A/D does the conversion.
Another possible error is the impedance of the signal driving the A/D pin. The datasheet should have a spec for that, and it might be a lot lower than you think. To avoid offset errors, there is generally no amplifier in the chip. The sample and hold is just a capacitor with a FET that connects it to the input pin in sample mode. The impedance driving the pin needs to be below some value to get the specified accuracy and minimum sample time.
Also check what exactly the A/D is using for its voltage references, particularly the low side reference in your case. The default is probably the regular processor ground. However, it could also have a separate analog ground pin, and sometimes a separate analog input pin can be used as the negative reference. Check to make sure this is all set up as you intended it.
As stevenvh said, 80mV is way too high for any normal error. At most you would expect one count or maybe two when it really should be reading 0. Something is definitely wrong with your setup. Keep in mind this includes the setup of use of the A/D by the firmware.