找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3363|回复: 0
打印 上一主题 下一主题
收起左侧

关于延时函数的一些问题和汇编的学习与否

[复制链接]
跳转到指定楼层
楼主
ID:3721 发表于 2015-1-5 16:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
----------------===============延时函数==================--------------
 延时函数,是很多程序都会用到的函数。C语言很难调试出非常精确的延时函数,但对于大多说场合来说还是可以应用的。若是像DS18B20这类单总线器件对时序的要求较高的,就必须要讨论延时函数的准确性了。
  在此,我所说的是一般应用延时函数。如延时1ms、10ms之类的,用于LED流水灯和按键消抖的程序!在调试过程中,也遇到一些问题,由于不懂汇编,所以暂时无法测试其具体原因,所以,我也在想是否要学习汇编语言。希望懂汇编的朋友能够自己分析。

--------------------------==============延时程序==============------------------
--------------------------------------------------------------
编译测试环境:
    KEIL μVision 3
晶振频率:
    11.0592MHz
测试方法:
    软件自带调试功能
-------------------------------------------------------------


void delay(unsigned int t)             //延时 t 毫秒函数,参数在0 ~ 65535之间,晶振为11.0592MHz
{
  unsigned int x,y;                //定义两个循环用的变量参数


  for(x = t;x > 0;x --)                //循环的次数,有实参决定
       for(y = 120;y > 0;y --);     //每次循环的内部循环次数。
}


问题:当把y声明为unsigned char类型时,延时函数有所改变,测试结果为3.1ms左右。
如下面所示:
-------------------------------------------------------

void delay(unsigned int t)             //此延时函数,不能准确延时1ms.
{
  unsigned int x;                   //定义两个循环用的变量参数

  unsigned char y;

   for(x = t;x > 0;x --)                //循环的次数,有实参决定
       for(y = 120;y > 0;y --);     //每次循环的内部循环次数。
}

-------------------------------------------------------    
问题的具体原因,我不清楚。应该用汇编的方法来调试。



---------------------==若以后调试出来,会再更新的==在次做个标记--------------------------

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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