Entradas y salidas.

Esto es una función a la que le pasas un valor de 8 bits o byte por eso esta definido de ese modo
byte val
byte es el tipo de variable de 0 a 255
val es la variable, podría haberse llamado como gustes.

    byte Bcddata (byte val) {   

    return( (val/16*10) + (val%16));
}

luego con ese valor la funcion hace esto

val/16*10
Supongamos que tu de algun modo lees 8 bits y pensando que fueran BCD cada bloque de 4 bits entonces veamos que pasaría.
Lo mejor es con un ejemplo.

supongamos que tienes
0111 = 7 decimal por un lado en el nibble (4 bits) mas significativo y tienes
1001 = 9 decimal en el nible menos significativo

o sea tiens 0111 1001 = 79 que es lo que tu quieres ver como BCD en dos grupos perooo eso unido tiene otro valor

0111 1001 = 0x79 hexadecimal = 121 decimal

Asi que ese valor si lo pasas por la rutina hara

Dos operaciones

  1. val/1610 = 121/1610 =
    Recuerda que las operaciones son de enteros, no hay decimales
    121/16=7 con resto 0
    asi que 7 x 10 = 70 ese es un resultado parcial

  2. val%16 = 121 % 16
    Esta operacion % se llama módulo.
    Módulo es el resto de la operacion que harias de dividior 121 / 16. En este caso es 0.56x16 = 9

Entonces el resultado es 9

Tienes 70 + 9 = 79

Recuperaste los valores BCD que en decimal lucen como 121