函数功能:延时1ms
(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒
void delaynms(unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
delay1ms();
}
反汇编:
119: for(i=0;i<10;i++)
C:0x02E5 E4 CLR A
C:0x02E6 FF MOV R7,A
120: for(j=0;j<33;j++)
121: ;
C:0x02E7 E4 CLR A
C:0x02E8 FE MOV R6,A
C:0x02E9 0E INC R6
C:0x02EA BE21FC CJNE R6,#0x21,C:02E9
C:0x02ED 0F INC R7
C:0x02EE BF0AF6 CJNE R7,#0x0A,C:02E7(外层循环用的CJNE,红色的都是内层的循环)
122: }
C:0x02F1 22 RET
------------------------
内层循环一个循环近似于8个时钟周期8*120=960近似1毫秒
unsigned int x,y;
for(x=1;x>0;x--)
{ for(y=0;y<120;y++)
;
}
反汇编:
19: for(x=1;x>0;x--)
C:0x0003 750800 MOV 0x08,#0x00
C:0x0006 750901 MOV 0x09,#0x01
20: { for(y=0;y<120;y++)
21: ;
C:0x0009 E4 CLR A
C:0x000A F50A MOV 0x0A,A
C:0x000C F50B MOV 0x0B,A
C:0x000E 050B INC 0x0B
C:0x0010 E50B MOV A,0x0B
C:0x0012 7002 JNZ C:0016
C:0x0014 050A INC 0x0A
C:0x0016 6478 XRL A,#0x78
C:0x0018 450A ORL A,0x0A
C:0x001A 70F2 JNZ C:000E
22: }
C:0x001C E509 MOV A,0x09