电子技术论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

搜索
下载方法|用单线程|避免多扣帖子规范|求助必读|发帖建议积分策略|勋章介绍|新人必读获取金币|推广论坛|出售帖子基本礼节|致会员信|版规总则
禁涉政治|反对低俗|举报专帖征集相片|留下足迹|推荐精华上传附件|制作分卷|使用网盘禁发qq群|恶意灌水|纯表情帖加入团队|监督机制|安全上网
查看: 5154|回复: 4

51单片机代码执行时间自测试,精确延时测试

[复制链接]
发表于 2016-2-13 22:47:42 | 显示全部楼层 |阅读模式

注册家电维修技术论坛,与同行畅聊维修技术,享更多技术论坛功能。

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
本帖最后由 吕水波 于 2016-2-13 22:51 编辑

关于51单片机,用C语言写程序,有时需要精确的延时代码或精确的延时函数,网络资料都比较多,都有写好的标准延时函数,甚至计算公式,如keil编译环境下 _nop_; //一个机器周期。
先定义j为char型变量,while( --j ); // 延时2*j个机器周期 。
while( j-- ); // 延时(j+1)*6个机器周期。
现在的问题是我想知道如何去验证这些精确延时函数和计算公式是对的,或自己写的代码走了多少机器周期,可以在开发板或带数码管显示的51系统上写个程序来解决这个问题。示例测试i=80;while(i--);运行的机器周期数。
void main(void)
{  unsigned int n;
   unsigned char i;
  TMOD=0x01;//定时器零16位模式
TR0=1;//开定时器,以下两行是被测试代码
i=80;//1个机器周期
while(i--);//(i+1)*6=486个机器周期
TR0=0;//关定时器
n=256*TH0+TL0-1;//这里是代码运行机器周期的计算
  while(1)//这里显示被测试代码执行的机器周期数,487是对的
      {  //晶振12M时代码执行487微秒
         P0=LED[n%10]; P2=0x7f;delay();//个位
                 P0=LED[(n/10)%10]; P2=0xbf;delay();//十位
                 P0=LED[(n/100)%10]; P2=0xdf;delay();//百位
                 P0=LED[(n/1000)%10]; P2=0xef;delay();//千位
                 P0=LED[(n/10000)%10]; P2=0xf7;delay();//
       }
}
void delay()
{
   unsigned char i=200;
        while(i--);
}
发表于 2016-2-13 23:28:16 | 显示全部楼层
本帖最后由 求个明白 于 2016-2-13 23:29 编辑

值得借鉴的方法,但不知开启和关闭定时器有没有时延
 楼主| 发表于 2016-2-14 07:38:52 | 显示全部楼层
求个明白 发表于 2016-2-13 23:28
值得借鉴的方法,但不知开启和关闭定时器有没有时延

n=256*TH0+TL0-1;这个计算已经考虑了定时器延时,百试百准的方法,百度上还找不到呢
发表于 2016-2-14 14:55:41 来自手机 | 显示全部楼层
这写的都是啥啊,我也看不懂,我自学可怎么办啊
发表于 2016-2-15 17:24:44 | 显示全部楼层
吕水波 发表于 2016-2-14 07:38
n=256*TH0+TL0-1;这个计算已经考虑了定时器延时,百试百准的方法,百度上还找不到呢

还有人像我一样玩51单片机哈哈
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|家电维修技术论坛 ( 鄂ICP备09003585号-2 )

GMT+8, 2024-5-16 06:13 , Processed in 0.061734 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

CopyRight © 电子技术论坛
电子邮箱:8794149@qq.com | 联系 QQ:3081868839 | 官方网址:www.dzdu.com

Qiji. All Rights Reserved


服务条款 | 站长声明

Wuhan Qiji Technology Co., Ltd.武汉奇迹科技有限公司版权所有


鄂ICP备09003585号-2鄂公网安备42010602000420号

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