历史上的今天
返回首页

历史上的今天

今天是:2025年05月04日(星期日)

2018年05月04日 | 对MSP430单片机__delay_cycles精确延时的说明及改正

2018-05-04 来源:eefocus

    在这里, 我来讨论一下关于MSP430单片机使用__delay_cycles延时的问题.

    IAR for MSP430编译器提供了一个编译器内联的精确延时函数(并非真正的

函数)以提供用户精确延时使用, 该函数原型是:

        __intrinsic void __delay_cycles(unsigned long __cycles);

该内部函数实现__cycles个CPU周期的延时,但对于该参数的设置,我要陈述一下:

    __cycles需要我们传递的是CPU运行的周期个数


    网上普遍的用法是:

        #define CPU_CLOCK       8000000

        #define delay_us(us)    __delay_cycles(CPU_CLOCK/1000000*(us))

        #define delay_ms(ms)    __delay_cycles(CPU_CLOCK/1000*(ms))


    在CPU主时钟频率为8MHz时, 这确实没有问题, 但是这样的写法:

        #define CPU_CLOCK       8000000

这很容易让人们想到, 可以通过修改它的值以实现对不同主频系统参数的统一,其实

这是不正确的! 比如修改为#define CPU_CLOCK 32768以实现32KHz主频的延时...


    下面来计算看看:

        当系统主时钟频率CPU_CLOCK为8MHz时:

        频率 f = 8MHz = 8,000,000Hz

        机器周期 Tm = 1/f = 1/8MHz = 1/8us

    也就是说,一个机器周期(nop)的时长是1/8us,所以延时1us即8*Tm,同上面:

        #define delay_us(us)    __delay_cycles(8*(us))

        #define delay_ms(ms)    __delay_cycles(8000*(ms))


    按照上面的宏定义方法,我们把CPU_CLOCK定义成32768,那么:

        频率 f = 32KHz = 32,768Hz

        机器周期 Tm = 1/f = 1/32768Hz ~= 30.5us

    可想而知,CPU最短的指令执行周期为30.5us, 这时, 想延时1us, 这可能吗?

所以, 简单地把上面的定义改成

        #define CPU_CLOCK   32768

是绝对错误的.


    同样, 还有些朋友实现了0.5us的延时, 这在当f = 1MHz = 1000000Hz时也

是不现实的, 此时机器周期Tm = 1us. 在f = 8Mhz时, 4个机器周期为0.5us尚可.


    所以, 为避免引起错误的使用或不正确的理解,最好像下面这样定义宏:

        #if CPU_CLOCK == 8000000

            #define delay_us(us)    __delay_cycles(8*(us))

            #define delay_ms(ms)    __delay_cycles(8000*(ms))

        #else

            #pragma error "CPU_CLOCK is defined implicitly!"

        #endif


另外:

  __delay_cycles  并不是真正的函数, 只是提供编译器内联展开,该函数并

不支持变量参数, 其参数只能是常数.


推荐阅读

史海拾趣

台湾三礼(3L)公司的发展小趣事

进入21世纪,随着全球电子产业的快速发展,三礼公司看到了中国内地市场的巨大潜力。2006年,公司决定扩大在中国内地的生产规模,投资建构了40,000平方米的厂房,并成立了专业客制化产品厂——和瑞电子(3LQ)。这一举措不仅提升了公司的生产能力,还使得产品更加符合市场需求,进一步巩固了公司的市场地位。

Continental公司的发展小趣事

随着汽车电子化的趋势日益明显,大陆集团也开始将业务拓展到汽车电子领域。在新的架构体系中,车身电子部门被纳入“车联网和信息”这个大的业务板块中。大陆集团致力于实现车身电子的更好互联、更好呈现信息和更好的集成。通过互联技术,数据能够在汽车与外界之间进行传递,并将这些信息通过人机交互界面呈现给驾驶者和乘客。同时,大陆集团还致力于确保数据从车辆到云端的顺畅传输和处理。这些举措使得大陆集团在汽车电子领域取得了显著的进展。

Forge Europa Ltd公司的发展小趣事

在快速发展的过程中,Forge Europa Ltd公司始终注重品牌与文化的塑造。公司秉承“创新、品质、服务”的企业精神,致力于为客户提供优质的产品和服务。同时,公司还注重员工的培养和发展,建立了完善的培训体系和激励机制,激发了员工的创造力和工作热情。通过这些努力,Forge Europa不仅塑造了一个具有行业影响力的品牌形象,还形成了独特的企业文化,为企业的长远发展奠定了坚实的基础。

Diamond SA公司的发展小趣事

在电子行业竞争日益激烈的背景下,Diamond SA公司开始寻求通过并购来实现规模扩张和资源整合。他们精心挑选了一些具有潜力的目标企业,通过谈判和交易成功完成了并购。这些并购不仅为Diamond SA公司带来了更多的技术资源和市场份额,还增强了公司的整体竞争力。

B&B Electronics Manufacturing Company公司的发展小趣事

B&B公司成立于二战后的经济恢复期,最初是一家小型的电子制造公司。在创始人对电子技术的深厚兴趣和不懈追求下,公司逐渐在数据通信和商业应用领域找到了自己的定位。初步的产品线主要集中在转换器、控制器等基础电子设备上,为当时的工业自动化和过程控制提供了稳定可靠的解决方案。

Cornell Dubilier公司的发展小趣事

在1936年至1962年期间,Cornell Dubilier公司在汉密尔顿工业园运营,专门制造电子零件和组件。然而,在这一时期,公司在生产过程中使用了含有多氯联苯(PCB)和其他有害物质的材料,并将其直接倾倒在现场土壤中。这一行为导致了严重的环境污染问题,使得该场地在后续被众多商业企业占据后,仍面临着环境保护的挑战。

问答坊 | AI 解惑

CT机常见故障维修,请补充

机型:GE prospee AI CT机 GE prospee AI CT维修中发现的故障主要分两类:一类是误操作引起的故障,这类情况最多,当机器不正常时首先要考虑是否有误操作,以免走弯路。第二类是真正的硬件故障,硬件损坏时多有故障报告,根据情况分析,找准位置。 ...…

查看全部问答>

SPARC V8结构嵌入式微处理器开发环境的设计实现之二

2、SPARC V8结构嵌入式微处理器的软件集成开发环境设计 2.1 软件集成开发环境总体设计 一个好的设计应该是在参考已有优秀系统的前提下,根据自身的特点和需求来定制的,这种设计思路在设计中已经被广泛使用。在设计软件集成开发环境时也是采用了 ...…

查看全部问答>

周立功写给学单片机的年轻人 -----有必要看看

作为过来人思前想后,我感到完全有责任将发自心底的感受传递给年轻一代,“一个企业家心灵深处渴望优秀人才的卓越追求和深层次的叹息、痛苦和感受”。您们千万不要等到毕业求职时才觉得自己能力太差,世界上从来就没有后悔药。当然,如果您现在看了 ...…

查看全部问答>

这个比较过瘾

这个比较过瘾 但是老外的 还有不知道怎么传视频 只好发个连接了哦  希望楼主别给和谐了 $(\'swf_zGz\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAcces ...…

查看全部问答>

[================]帮忙看下 这段 DataGrid 设置列宽 代码 那错了

//创建Records表                 Cmd.CommandText = \"  CREATE TABLE Records (数据时间 datetime, 流量 float,累计流量 float,热量 float,累计热量 float)\";      ...…

查看全部问答>

求助:各位大哥怎么会出现这样的问题呢?(串口问题)

//-------------------------------------头文件-------------------------------------- #include #include #include //-------------------------------------头文件-------------------------------------- //********定义引脚********* ...…

查看全部问答>

要快速拷贝大量数据到SD卡,请问有没有较快的办法

公司有一个j2me程序要用到大量的数据,约300多M,同时这些数据由大量的文件组成,约为3万多个。 我们需要把这些数据拷贝到SD卡上去,经过测试,在Windows上得2个多小时,在Linux上只要十来分钟即可。 请问高手: 1. 为什么windows与linux上有这 ...…

查看全部问答>

红外摄像机白天色彩整体偏红,晚上漆黑是何因?

造成此现象的原因主要是摄像机内的IR Cut装置切换错误,可通过以下方法纠正:(1)使用IR校正工具对摄像机进行校正,使用方法可致电客服电话咨询; (2)调整摄像机安装环境:尽量使摄像机的光敏电阻和摄像机本身所监控区域的亮度接近,如果光敏电 ...…

查看全部问答>

招聘单片机嵌入式开发工程师

招聘要求: 1:2年以上嵌人式系统软件开发相关工作经验。 2:熟悉计算机组成原理及操作系统,有较强的嵌人式系统软件,硬件设计技能.。 3:至少熟悉一种业界常用的嵌人式微处理器(ARM优先考虑),熟悉各种通用接口(如Ethernet,USB,SPI,串口, 485 ...…

查看全部问答>

ZJM12864BSBD

在电路图上,看到好多的有关ZJM12864BSBD的液晶,在网上查了一下,找不到这个型号啊,也没有卖的,到底怎么回事啊?我设计电路的时候想用这个型号,怎么找不到这个型号的相关资料,也没有卖的?…

查看全部问答>