关于单片机C语言的精确延时,网上很多都是大约给出延时值没有准确那值是多少,也就没有达到精确高的要求,而本函数克服了以上缺点,能够精确计数出要延时值且精确达到1us,本举例所用CPU为STC12C5412系列12倍速的单片机,只要修改一下参数值其它系例单片机也通用,适用范围宽。 在单片机编程中,延时函数是一个非常关键的组件,它允许程序在特定时间间隔后继续执行下一部分。在STC单片机中,精确的延时功能尤其重要,因为许多应用需要精确到微秒级别的控制。STC单片机C语言精确延时主要涉及如何编写函数来实现不同时间范围内的延时。 对于小于10微秒的延时,可以通过一个简单的for循环来实现。例如,给定的代码中有一个1微秒级的延时函数,它使用了一个变量i的循环计数。根据代码中的提示,延时时间=(3+5*X)/12,其中X的取值范围不能超过255。这个函数可以用来实现微秒级的精确延时。 对于10微秒至约21.9955毫秒的延时,可以使用一个10微秒级的延时函数。这个函数包含两个嵌套的for循环,外部循环用于控制延时的大致时间,内部循环则进行精细的微秒级调整。通过公式i=[(延时值-1.75)*12/Ms-15]/4,可以计算出内部循环的迭代次数i,从而实现所需的延时。 对于大于20毫秒的延时,通常会使用中断来实现。STC单片机中,可以设置定时器0来进行1毫秒的中断。在中断服务函数timer0中,更新定时器的初值以维持每毫秒执行一次,并在全局变量DelayMs_1中进行计数,直到达到所需的延时时间。 此外,代码中还提供了一个名为DelayMs的函数,用于延迟a毫秒的时间。它通过将全局变量DelayMs_1设置为a,然后在一个while循环中检查DelayMs_1是否为零,直到计数值减至零才结束延时。 在编写这些延时函数时,需要考虑到单片机的指令周期和CPU速度。STC12C5412系列单片机是12倍速的,这意味着每个机器周期是1/12微秒。因此,每条指令执行所需的时间需要根据这个速度进行计算。例如,DJNZ指令需要4个机器周期,即4/12微秒,SETB指令需要1个机器周期等。这些指令时间在编写延时函数时必须被考虑进去,以确保延时的精确性。 STC单片机的精确延时涉及到对微秒级延时函数的设计、10微秒级延时函数的优化以及通过中断服务函数实现毫秒级的延时。通过对单片机指令周期的理解和适当的数学计算,可以构建出适应不同延时需求的函数,从而满足各种精确控制的应用场景。
- 另一章翻开2012-09-21有参考价值,不过一般用示波器
- jackenly2011-11-04有一定的参考价值! 没有想象的好!
- 粉丝: 1
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助