搜索
bottom↓
回复: 5

请马老师指导: 写了一个1ms的精确延时函数 (C 和 汇编对照计算)

[复制链接]

出70入10汤圆

发表于 2007-12-24 17:57:29 | 显示全部楼层 |阅读模式
//1. 精确1ms延时函数的函数体及汇编格式:

//延时计算:t_delay = n*6t + n/128t + 8t  (t为时钟周期)

void Delay_1ms_Preci(void)    //1ms延时函数
{
   unsigned int n;
   n=1130;                    //8MHz
   while (i--)
      ;
}

//延时1ms的调用:
void main(void)
{
   Delay_1ms_Preci();
}


//汇编格式:
//延时时间计算: t_delay= 3t + 1t + 1t + n*6t + ( (int(n/256) + 1) * 2t -1t) + 4t
//即: t_delay= n*6t + int(n/128)t + 10t
//计数计算(1ms):n= (1000 * f - 10) * 128 / 769
//              n= (1000 * 8 -10 ) * 128 /769 = 1329.93 (取整为n=1330, 再把1330去验证延时时间t_delay的计算)

_Delay_1ms_Preci:
    i               --> R16
    004B E705      LDI        R16,0x32  //1t    --把值0x0532(1330)存入R16,R17
    004C E014      LDI        R17,5     //1t   

    004D 0118      MOVW        R2,R16   //1t
    004E 5001      SUBI        R16,1    //1t
    004F 4010      SBCI        R17,0    //1t
    0050 2022      TST        R2       //1t
    0051 F7D9      BNE        0x004D   //2t/1t

    0052 2033      TST        R3       //1t
    0053 F7C9      BNE        0x004D   //2t/1t   (BNE是M16中的BRNE)
                                    
    0054 9508      RET           //4t

_main:
    0055 DFF5      RCALL _Delay_1ms_Preci   //3t
    0056 9508      RET

出0入0汤圆

发表于 2007-12-24 19:08:11 | 显示全部楼层
实际应用中,让CPU这么长时间不干活,简直是在浪费CPU资源!

出0入0汤圆

发表于 2007-12-24 20:50:02 | 显示全部楼层
除了一楼的说的原因外,软件延时,就不要谈什么"精确",只要差不多就行了.因为一旦系统当中有中断,"精确"就谈不上了.

要"精确"延时,超过500us,建议使用定时器加中断.

延时几个us的话,嵌入几个"nop".

10-500us的延时,可以使用软件延时,但系统中使用了中断,"精确"就打问号了.

出70入10汤圆

 楼主| 发表于 2007-12-25 09:12:12 | 显示全部楼层
谢谢马老师的指导和一楼的点评!

软件延时确实受中断等的影响

这里主要是想做一个理论上的“精确延时”函数,然后有一个参照;在运用时充分或综合考虑晶振对延时的影响,中断等对延时的影响等

出0入0汤圆

发表于 2007-12-25 10:38:16 | 显示全部楼层
你的分析方法是对的,没有问题.要注意的是;

1.不同的C编译器,可能生成的汇编代码不同,所以C的代码不能一概而论.

2.可以在AVR STUDIO中,使用软件模拟环境进行测试和验证该段函数的执行时间.

出70入10汤圆

 楼主| 发表于 2007-12-25 11:22:27 | 显示全部楼层
谢谢马老师鼓励!

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

本版积分规则

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

GMT+8, 2024-5-7 03:04

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

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