How constant is the 10Hz signal? If it's consistent and precise, you may want to to use a notch-reject filter instead of a high-pass filter, since a notch-reject filter can be constructed to have minimal phase distortion for anything other than the frequency of interest.
One of the things that is unfortunately missing in the C language is a good way to do a 16x16 multiply to a 32-bit result. For best precision, a good filter algorithm should probably use a 32x16 multiply to 32 bit result (shifted right 16). This would end up requiring two 32x32 multiplies on the PIC.
The generalized notch-reject procedure is:
Code:
newsine = oldsine * const1 + oldcos * const2;
newcos = oldcos * const3 + oldsine * const4;
oldsine = newsine;
newsine = oldsine;
filteredinput = input - oldcos;
newcos += input;
The constants const1, const2, const3, and const4 should be chosen to yield the desired filter characteristics. If they are well-chosen, the filter will have very sharp attenuation at the desired reject frequency and minimal effect at any other. In environments that support true double-precision floading point numbers effectively, they should be used. Otherwise, long ints are good if they can be handled successfully (recognizing that multiplying by any of the constants means multiplying be a big number and shifting right 16).