打印
[综合信息]

SWM181——延时函数Delay

[复制链接]
296|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
木木guainv|  楼主 | 2023-2-14 17:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.序言
延时函数在单片机的中都占有非常重要的地位。下面是我对延时函数的认识与解读。
1.首先了解延时函数的来源,他有单片机系统的内部时钟和外部时钟所产生。对于是swm181来说,SWM181 支持片上包含精度为 1%以内的 24MHz、48MHz 时钟,还可以在他的启动文件里面找到,





从system_SWM171.c(startup)文件中可以看到,已经设置好了,SYS_CLK等于48MHZ,如果自己需要用到不同的时钟,直接可以在这里修改即可。好了,我们已经了解了系统时钟,下面我将介绍的俩种方法写延时函数,分布是(1)循环延时。(2)系统滴答计时器

2.循环延时
首先要搞明白一些概念,(时钟周期,机器周期,指令周期)附链接参考

时钟周期、机器周期、指令周期的概念及三者之间的关系;定时器及计数器_xiebingsuccess的博客-CSDN博客_机器周期时钟周期指令周期之间的关系

//延时函数
void delay(int count)
{
        int i;
        for(i=1;i<=count;i++)
        ;
}
计算公式

时钟周期 = 1/时钟频率
机器周期 = 完成一个基本操作所需要的时间 = 时钟周期*n(n取决于单片的不同而不同)
指令周期 = 完成一次指令所需的时间           = 一或者两个机器周期

而我们的计算公式则是:
(count(次数)*指令周期所需的时钟周期数(例如c51就是12)*循环中的指令数)/时钟频率
对应SWM181来说

时钟周期=1/SYS_CLK
机器周期=时钟周期*n(其中n=12)


  指令周期
a.用C语言写的程序,会被转换成一条一条的指令,不同的指令执行的时间不同。

b. 简单指令需要一个机器周期,复杂指令可能需要两个或两个以上的机器周期。

下面是Cortex-M0的指令集和其所用的周期数Cortex-M0指令集_nolatin的博客-CSDN博客_cortex m0指令集



还有更多的指令集欢迎大家阅读手册时钟周期、机器周期、指令周期的概念及三者之间的关系;定时器及计数器_xiebingsuccess的博客-CSDN博客_机器周期时钟周期指令周期之间的关系

还有就是SWM官网给的手册里面仅有的一段周期介绍



总结上述,计算上面普通的延时函数周期为for(i=1;i<=count;i++) 执行一次为1us,执行十次就为10us,故达到延时的效果。
3.系统滴答计时器(定时器/计数器)
老方法看手册(查找需要用到的寄存器)

初值寄存器LOAD:配置初值寄存器 LOAD,设置计数值,该值以系统时钟为单位递减
使能控制寄存器CTRL:使能控制寄存器(CTRLx)使能位(ENx),对应 TIMERx 开始递减计数,计数到0 时,产生中断,同时重新装载计数值,进行下一周期计数
过装载值寄存器VAL:在计数过程中,可通过对当前值寄存器(CVALx)进行读取,获取当前计数值。定时器计数过程中改变装载值寄存器(LDVALx)值,将在下个计数周期(计数到 0 重新装载)生效,不会改变本周期计数值。





配置定时器的寄存器的思路过程:
初值寄存器装入数——设置过装置寄存器的值——使能控制寄存器使能——开始计时/开始计数——使能控制寄存器使能关闭——清空计数器/计时器。



————————————————
版权声明:本文为CSDN博主「鹿川条也」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_60924455/article/details/127371843

使用特权

评论回复

相关帖子

沙发
小小蚂蚁举千斤| | 2023-2-15 10:22 | 只看该作者
微秒级延时和毫秒级

使用特权

评论回复
板凳
belindagraham| | 2023-3-2 10:15 | 只看该作者
定时器实现精确延时              

使用特权

评论回复
地板
usysm| | 2023-3-2 10:44 | 只看该作者
求一用C编写的延时 程序,要精确到秒级别

使用特权

评论回复
5
sanfuzi| | 2023-3-2 11:11 | 只看该作者
可以实现几种精确延时?              

使用特权

评论回复
6
adolphcocker| | 2023-3-2 11:39 | 只看该作者
函数延时的时间是怎么计算的?               

使用特权

评论回复
7
robertesth| | 2023-3-2 11:59 | 只看该作者
单片机中怎么得到精确延时?               

使用特权

评论回复
8
mikewalpole| | 2023-3-2 12:07 | 只看该作者
delay函数精确延时多少ms?

使用特权

评论回复
9
jf101| | 2023-3-2 15:11 | 只看该作者
计算延时时间有一定的误差,因为每次调用延时函数时会浪费一定的时间

使用特权

评论回复
10
mollylawrence| | 2023-3-2 16:46 | 只看该作者
怎样对SWM181单片机编程实现精确1s的延时

使用特权

评论回复
11
一种在主函数里调用写好的延时函数,达到延时的目的。还有另一种方法写延时函数,而且所延迟的时间更加精确,使用单片机的烧入程序STC-ISP。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

134

主题

3940

帖子

5

粉丝