я делал так :
для 16-битных чисел :
если есть апп. умножение :
u16 div_by5_u16_hmul(u16 data_in)
{return((((u32)data_in * 0x3333) + 0x3333) >> 16);
}
только программно :
u16 div_by5_u16_soft(u16 data_in)
{u32 u32_01, result;
result = u32_01 = data_in;
u32_01 <<= 1; result += u32_01;
u32_01 <<= 3; result += u32_01;
u32_01 <<= 1; result += u32_01;
u32_01 <<= 3; result += u32_01;
u32_01 <<= 1; result += u32_01;
u32_01 <<= 3; result += u32_01;
u32_01 <<= 1; result += u32_01;
result += 0x3333; //correction
return(result >> 16);
}