本帖最后由 冷漠 于 2010-9-10 11:11 编辑
书上早就精确算过了,好像应该写为:
void delay_ms( int m ) // 延时m 毫秒
{
while(m--)
{ for( i=0;i <125; i++); } // 1ms延时时间,也可能是250.
}
LZ的程序反汇编是:
?PR?main?TT2 SEGMENT CODE
?DT?main?TT2 SEGMENT DATA
EXTRN CODE (?C_STARTUP)
PUBLIC main
RSEG ?DT?main?TT2
?main?BYTE:
i?040: DS 2
j?041: DS 2
; #include<reg51.h>
; sbit gate=P2^0;
; void main(void)
RSEG ?PR?main?TT2
main:
; SOURCE LINE # 6
; {
; SOURCE LINE # 7
?C0001:
; unsigned int i,j;
; while(1)
; SOURCE LINE # 9
; {for(i=1000;i>0;i--)
; SOURCE LINE # 10
MOV i?040,#03H
MOV i?040+01H,#0E8H
?C0003:
SETB C
MOV A,i?040+01H
SUBB A,#00H
MOV A,i?040
SUBB A,#00H
JC ?C0001
; for(j=1000;j>0;j--)
; SOURCE LINE # 11
MOV j?041,#03H
MOV j?041+01H,#0E8H
?C0006:
SETB C
MOV A,j?041+01H
SUBB A,#00H
MOV A,j?041
SUBB A,#00H
JC ?C0005
; gate=!gate;
; SOURCE LINE # 12
CPL gate
?C0008:
MOV A,j?041+01H
DEC j?041+01H
JNZ ?C0010
DEC j?041
?C0010:
SJMP ?C0006
?C0007:
?C0005:
MOV A,i?040+01H
DEC i?040+01H
JNZ ?C0011
DEC i?040
?C0011:
SJMP ?C0003
?C0004:
; }
; SOURCE LINE # 13
SJMP ?C0001
?C0002:
; }
; SOURCE LINE # 14
?C0009:
RET
; END OF main
END
|