its a fairly simple process , 10 bits per button is easy , 8 bits with a bit of effort
providing the button check is called in a loop at a relatively consistent rate.
the program structure matters , spaghetti code won't get good results
sudo method
Code:
b1cnt  var byte
newb1  var bit 
b1dun  var bit
b2cnt  var byte
newb2  var bit 
b2dun  var bit
osc=8
t1con=$01;32mS
main
if pir1.0
pir1.0=0
gosub getkey
if newb1 gosub dob1 
if newb2 gosub dob2
endif


goto main




getkey:
read adc
 b1cnt = b1cnt<<1
 b2cnt = b2cnt<<1
if adc in b1 range 
  b1cnt = b1cnt+1
elseif if adc in b2 range
  b2cnt = b2cnt+1
endif
if !b1dun
  if b1cnt=255 then newb1=1  ;32*8mS
else
  if b1cnt=0 then b1dun=0
endif


if !b2dun
   if b2cnt=255 then newb2=1
else
   if b2cnt=0 then b2dun=0
endif


return


dob1:
b1dun=1
newb1=0
do b1 stuff
return


dob2:
b2dun=1
newb1=0
do b2 stuff
return