Why C instead ASM
ASM is a specific language as it is a low level programming language. It is mnemonics to a mashine codes. It takes tons of time to develop embedded programs in ASM language. Now even 8 bit microcontrollers are more capable as they were earlier. The program memories are going up to megabyte(s). Programs becoming more complex, functionality grows up. This is one reason to use higher level programming languages like C.
If using C language you do not have to go into details how processor works. You don't have to think about hardware logic. It is better to leave this work to C compiler which may help you to avoid bugs in silicon level.
Another C language benefit against ASM language is portability. If you work on one embedded system architecture and decide to move to other maybe more advanced. But if your previous program were written in ASM language, then you will have to rewrite this code from beginning. Using C language you can compile program for different microcontrollers without significant modifications of code. This way you new project code upgrade becomes ease.
When using C or other high level language it is easy to save specific hardware routines to libraries which are convenient to reuse in other projects. Using C libraries ensure that your application can be recompiled for different MCU's.
The most important benefit of using high level programming language like C is that you can focus on algorithm design and spend less time on implementing. C is a high level language. It enables to write, understand and maintain embedded programs faster and easier as one C language line can stand for several ASM lines.
ASM language can also be used in critical parts of algorithms, but again C compilers are improving and sometimes program written in C may be more efficient then written in ASM. It depends more on developer than a programming language.