|
这是我用延时函数
void delay_8us(uchar us)
{uchar i;
for(i=0;i
}
在main函数调用 delay_8us(1) 生成汇编如下(+n 表示指令周期)
C:0x002F 7F01 MOV R7,#0x01 +1
C:0x0031 12003B LCALL delay_8us(C:003B) +2
5: void delay_8us(uchar us)
6: {uchar i;
7: for(i=0;i
C:0x003B E4 CLR A +1
C:0x003C FE MOV R6,A +1 +1
C:0x003D EE MOV A,R6 +1 +1
C:0x003E C3 CLR C +1 +1
C:0x003F 9F SUBB A,R7 +1 +1
C:0x0040 5003 JNC C:0045 +2 +2
C:0x0042 0E INC R6 +1
C:0x0043 80F8 SJMP C:003D +1
8: }
C:0x0045 22 RET +2
计算它的调用时间: 23*1us(晶振为12MHz)=23us
如果我调用delay_8us(n)
那么计算它的调用时间: [(12*n+1+2+1+1+2)*1us]/n=12us (当n比较大时)
不知道是不是这样算 有没有错? 它为什么是说是延时8us呢?
这种方法搞延时也太难了吧 |
|