average several readings pic10f220
This is easily done using only 2 bytes of RAM if you implement a 256 times over-sampling filter. 

You allocate 2 bytes of RAM to form a 16-bit counter. If you look carefully, you will observe that the upper byte contains the full value of the 16-bit counter / 256.

It is this property that makes this filter so easy. 

I'm not at my computer,  so I'll try to describe what I mean in pseudo code.  Let's call the two bytes that form the counter CntrH &amp; CntrL. As described above, the 8-bit value for the final output is contained in CntrH. 

First, subtract the old filter value from the counter. 

CntrH : CntrL - CntrH 

Now add the 8-bit value from the a/d converter to the 16-bit counter. 

A2D + CntrH : CntrL 

The filtered output is contained in CntrH. 

This is a very slow filter. Therefore, you want to seed the filter upon initialization by taking one a/d sample and loading it into CntrH. 

This slow filter means that you want to add new samples fairly quickly. A rough approximation is that your desired filter period takes 256 samples. 

In other words, add new samples to the filter at the rate of 10 minutes / 256.

[Edit]

This is extensible by going to a 24-bit accumulator if you want to acquire the samples at a faster rate.  This would give you a 2^16 (65536) times over-sampling filter.

Same technique as above but using 3 bytes: CntrH : CntrM : CntrL .  As before, the 8-bit filtered output is contained in CntrH.

Given that you want the period to be about 10 minutes (600 seconds), you would accumulate your samples at 600 / (2^16) =~ 9.1ms