搜索
bottom↓
回复: 3

51单片机C语延时分析

[复制链接]

出0入0汤圆

发表于 2012-6-1 00:41:58 | 显示全部楼层 |阅读模式
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的倍数。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-6-1 09:16:02 | 显示全部楼层
一般会写一个,然后自己检测一下。

出0入0汤圆

发表于 2012-6-1 11:37:38 | 显示全部楼层
我还是喜欢自己用超级单片机有计算延时的。

出0入0汤圆

 楼主| 发表于 2012-6-1 15:42:49 | 显示全部楼层
devcang 发表于 2012-6-1 09:16
一般会写一个,然后自己检测一下。

那天不想测,就看了看汇编代码。

主要才从汇编转到C不久,没怎么写多少程序。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 02:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表