C语写的,单片机AT89S52,编译器KEIL2。
无聊的东西。
有错请大家指出啊,谢谢。
/****************C语*******************/
void delay(uint delaytime)
{
while(delaytime--);
}
/****************汇编******************/
C:0x0840 EF MOV A,R7 //1个机器周期
C:0x0841 1F DEC R7 //1个机器周期
C:0x0842 AC06 MOV R4,0x06 //1个机器周期
C:0x0844 7001 JNZ C:0847 //2个机器周期
C:0x0846 1E DEC R6 //1个机器周期
C:0x0847 4C ORL A,R4 //1个机器周期
C:0x0848 70F6 JNZ delay(C:0x0840) //2个机器周期
C:0x084A 22 RET //2个机器周期
/**************************************/
运行时间(周期):
8*[(R7+1)+256*R6]+1*R6+2
平均时间约为8个机器周期
占用资源:ACC,R4,R6,R7
/**************************************/
/****************C语*******************/
void delay(uint delaytime)
{
while(--delaytime);
}
/****************汇编******************/
C:0x0840 EF MOV A,R7 //1个机器周期
C:0x0841 1F DEC R7 //1个机器周期
C:0x0842 7001 JNZ C:0845 //2个机器周期
C:0x0844 1E DEC R6 //1个机器周期
C:0x0845 14 DEC A //1个机器周期
C:0x0846 4E ORL A,R6 //1个机器周期
C:0x0847 70F7 JNZ delay(C:0x0840) //2个机器周期
C:0x084A 22 RET //2个机器周期
/**************************************/
运行时间(周期):
6*(R7+256*R6)+1*R6+2
平均时间约为6个机器周期
占用资源:ACC,R6,R7
/**************************************/
/****************C语*******************/
void delay(uint delaytime)
{
for(;delaytime==0;--delaytime);
}
/****************汇编******************/
C:0x0840 EF MOV A,R7 //1个机器周期
C:0x0841 4E ORL A,R7 //1个机器周期
C:0x0842 7007 JNZ C:084B //2个机器周期
C:0x0844 EF MOV A,R7 //1个机器周期
C:0x0845 1F DEC R7 //1个机器周期
C:0x0846 70F8 JNZ delay(C:0x0840) //2个机器周期
C:0x0848 1E DEC R6 //1个机器周期
C:0x0849 80F5 SJMP delay(C:0x0840) //2个机器周期
C:0x084B 22 RET //2个机器周期
/**************************************/
运行时间(周期):
4+8*(R7+256*R6)+3*R6+2
平均时间约为8个机器周期
占用资源:ACC,R6,R7
/**************************************/
void delay(uint delaytime)
{
for(;delaytime==0;delaytime--);
}
同上一样 for(;delaytime==0;--delaytime);。
/**************************************/
所以延时程序里面个人感觉while(--delaytime);不错,但是是3的倍数。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
那天不想测,就看了看汇编代码。
主要才从汇编转到C不久,没怎么写多少程序。
一周热门 更多>