『壹』 51单片机用汇编语言设计1S延时子程序,晶振为12MHz。 (麻烦附上详细计算过程以及详细说明,

DELAY1S:
MOV R2,#10 ;1
DELAY1:
MOV R3,#200 ;1*10
DELAY2:
MOV R4,#249 ;1*199*20
DJNZ R4,$ ;2*249*199*10
DJNZ R3,DELAY2 ;2*199*10
DJNZ R2,DELAY1 ;2*10
MOV R2,#250 ;1
DJNZ R2,$ ;2*250
MOV R2,#243 ;1
DJNZ R2,$ ;2*243
RET ;2
以上注释值之和就是延时总时间:T=1000001US约1S

『贰』 单片机C语言编程中,编一个延时约1s的语句

双重循环,共有循环 1000 × 1000 = 一百万遍。
每一遍,如果是1us,才能是延时约1s。
但是,晶振是12MHz,一条汇编的指令就至少是1us,C语言的语句,就要更多。
在编写延时函数之前,首先确认一下系统对晶振的分频系数,从而确定每个单周期指令执行所需的时间,一般的单片机都将指令执行周期设置为1us,这样就可以写一个比较接近1秒的延时函数了。