C语言本身允许内联汇编,直接写C语言程序就可以。C语言和汇编本身结合的比较紧,多看看C语言编译器手册,上面一般都有怎么和汇编混合。写内联汇编要注意C编译器需要的寄存器需要保护。

使用定时器实现1秒定时; 初始值要看单片机配置的晶振频率了,若12M晶振,初始值为TH0=0x3c;TL0=0xb0; 这才是50ms,还要一个单元做计数器,计数20次才是1秒 方波?在定时中断里求反一次。
C语言本身并不能产生随机数。介绍一个比较简单的随机数获取方法:启动单片机的定时器,让它自己跑不要发生溢出中断,用户操作时直接读计数器数值,那基本上就是个随机数。
一,不会c语言是能学51单片机的。
二,但建议先学简单的C语言基础,再学51单片机会比较容易入门,因为现在所有8/16/32位(51系列,MSP430系列,ARM系列)都是使用C语言。
三,如果完全不会c语言,学起来会非常吃力,而且不容易掌握好。