晶振延时的计算公式: void delay500ms(void ) { unsigned char i,j,k; for(i=15;i>0;i--) for(j=202;j>0;j--) for(k=81;k>0;k--); } 本延时函数以晶振12MHZ为准,DJNZ为汇编程序的一个减一不为零操作,一次大概2us,函数有三层循环,首先是最内层循环由内向外分层计算,最内层的结果用于外层计算的初值的一部分。 一层循环:n=R5×DJNZ=81×2=162us; 二层循环:m=R6×(DJNZ+n)=202×(n+3)=33330us;DJNZ=2us+1us 三层循环:L=R7×(m+3)=15×33333;