历史上的今天
返回首页

历史上的今天

今天是:2025年03月08日(星期六)

2020年03月08日 | [MSP430] 对MSP430单片机__delay_cycles精确延时的说明及改正

2020-03-08 来源: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  并不是真正的函数, 只是提供编译器内联展开,该函数并

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

推荐阅读

史海拾趣

AMD(超微)公司的发展小趣事
  1. 公司成立与早期发展:AMD(Advanced Micro Devices)公司成立于1969年,由Jerry Sanders在美国加利福尼亚州圣克拉拉创立。最初,AMD致力于生产挑战Intel在x86处理器市场的产品,但起初面临着市场份额不足和技术挑战等问题。然而,随着时间的推移,AMD逐渐在市场上获得了一席之地,并推出了一系列创新产品。

  2. x86处理器市场竞争:AMD在x86处理器市场与Intel展开了激烈的竞争。1991年,AMD推出了第一款x86兼容处理器386DX-40,开始了与Intel的竞争。此后,AMD不断推出更快、更强大的处理器,如K6系列、Athlon系列等,一度取得了一定的市场份额。

  3. ATI收购与图形处理器发展:为了拓展业务,AMD于2006年收购了图形处理器制造商ATI Technologies。这一收购使AMD进入了图形处理器市场,并推出了一系列创新的图形处理器产品,如Radeon系列。AMD通过不断推出高性能、高度集成的图形处理器,赢得了广大用户的青睐。

  4. 全球Foundry战略:为了降低制造成本并提高生产效率,AMD实施了全球Foundry战略。2008年,AMD成立了GlobalFoundries,将自己的制造业务转移给这家独立的半导体制造公司。这一举措使AMD得以专注于设计和研发,提升了公司的竞争力。

  5. 技术创新与新市场拓展:除了在x86处理器和图形处理器市场取得成功外,AMD还不断进行技术创新,拓展新的市场。例如,AMD在数据中心领域推出了EPYC系列服务器处理器,致力于满足云计算和大数据处理的需求。此外,AMD还在游戏主机市场与Sony和Microsoft等公司合作,提供高性能的处理器和图形处理器。

这些故事展示了AMD在其创立以来的发展历程,包括在x86处理器市场的竞争、图形处理器领域的扩展、全球Foundry战略的实施以及在新兴市场的技术创新和市场拓展等方面取得的成就。

Greatbatch-Sierra Inc公司的发展小趣事

机顶盒,全称为数字视频变换盒,是连接电视机与外部信号源的重要设备,其专业性与科普性并重。从广义上讲,机顶盒泛指一切与电视机连接的网络终端设备,能够接收并转换多种信号源,包括有线电缆、卫星天线、宽带网络及地面广播等,为观众提供丰富多样的视听体验。

在数字电视时代,机顶盒扮演了至关重要的角色。它不仅能够接收并解码高清乃至4K超高清的数字电视信号,将其转换为电视机可识别的视频和音频流,还具备网络交互功能,使用户能够享受在线购物、观看网络视频、玩游戏等多元化服务。此外,机顶盒还提供了电子节目指南、因特网网页浏览等增值服务,极大地丰富了用户的娱乐生活。

从技术分类上看,机顶盒可分为多种类型,如DVB-S(数字卫星机顶盒)、DVB-T(数字地面机顶盒)、DVB-C(有线电视数字机顶盒)以及IPTV机顶盒等。每种类型在信号接收和解码方面各有特点,但共同之处在于它们都是连接电视机与外部世界的桥梁,为用户带来更加便捷、丰富的视听享受。

随着智能电视的快速发展,机顶盒的形态也在不断变化。一些智能电视已经内置了机顶盒的功能,实现了电视机与机顶盒的一体化。然而,机顶盒作为独立的设备,在灵活性、扩展性等方面仍具有独特的优势,将继续在数字电视领域发挥重要作用。

Helicomm公司的发展小趣事

在电子行业中,Helicomm公司凭借其深厚的技术积累和不断创新的精神,逐渐崭露头角并发展成为业界的佼佼者。以下是关于Helicomm公司发展起来的五个相关故事:

1. ZigBee技术的引领者

自2002年成立以来,Helicomm公司便致力于ZigBee及IEEE 802.15.4标准的研究与产品开发,成为全球ZigBee技术的引领者之一。公司不仅成功完成了IEEE 802.15.4和ZCP的双重资格认证,还推出了多款经过FCC认证的ZigBee模块,广泛应用于市政、安全、监测、物流、定位等领域。Helicomm的ZigBee模块为客户搭建了一条从芯片到应用的快速通道,极大地简化了无线产品的开发流程。(信息来源:百度百科)

2. 技术并购与子公司成立

2005年,Helicomm公司完成了对尉普(WirelessPlug)科技股份有限公司的并购,并成立了赫立讯科技(北京)有限公司,作为其在中国的全资子公司。这一举措不仅增强了Helicomm在全球无线通讯市场的竞争力,还为其在中国市场的拓展奠定了坚实的基础。赫立讯科技继承了尉普在无线传输终端产品方面的技术积累,进一步推动了ZigBee等无线通讯技术在中国的应用与发展。(信息来源:安阳市菲云网络科技有限公司网站)

3. 参与国际标准制定

作为ZigBee联盟的创始会员之一,Helicomm公司积极参与了ZigBee标准的制定与推广工作。通过与国际同行的紧密合作与交流,Helicomm不断提升自身在无线通讯领域的技术实力和影响力。其产品在符合国际标准的同时,也融入了公司的独特创新,满足了不同行业客户的多样化需求。(信息来源:综合多个来源)

4. 工业无线监控系统的创新

近年来,Helicomm公司联合柏元网控、研华科技等合作伙伴,共同推出了针对油田、水利等行业的工业无线监控系统方案。该系统方案充分利用了Helicomm在ZigBee、GSM/GPRS/CDMA等无线通讯技术方面的优势,结合合作伙伴在软件监控、硬件采集控制等方面的专长,为相关行业提供了高效、可靠的无线监控解决方案。这一创新不仅提升了行业的智能化水平,也进一步巩固了Helicomm在无线通讯领域的领先地位。(信息来源:重庆市智畅行物联科技有限公司网站)

5. 国际市场的拓展

Helicomm公司的产品不仅在中国市场取得了显著成绩,还成功打入国际市场,赢得了广泛的认可。公司凭借其先进的技术、稳定的产品性能和优质的本地化服务,在国际市场中建立了一席之地。特别是在水利、交通、环保、气象等领域,Helicomm的无线通讯产品得到了广泛应用,为全球客户提供了可靠的无线通讯解决方案。(信息来源:综合多个来源)

以上五个故事展示了Helicomm公司在电子行业中的发展历程和成就,体现了其在无线通讯领域的深厚技术实力和不断创新的精神。

Coors Components Inc公司的发展小趣事

除了关注经济效益外,Coors Components Inc公司还积极履行社会责任。公司积极参与公益事业,为社会做出贡献;同时,公司也注重环保和可持续发展,努力降低生产过程中的环境污染。这些举措不仅提升了公司的品牌形象,还赢得了社会各界的广泛赞誉。

以上是关于电子行业公司发展的通用框架,你可以根据这些框架来进一步了解“Coors Components Inc”公司的具体发展故事。请注意,在编写故事时,应确保所描述的事实准确无误,避免夸大或缩小事实。

Dean Technology公司的发展小趣事

为了进一步扩大市场份额,Dean Technology公司开始积极拓展国际市场。他们通过设立海外办事处、与当地企业建立合作关系等方式,将产品推向全球。在这个过程中,公司不断优化产品设计,提高生产效率,以满足不同国家和地区客户的需求。随着国际市场的不断拓展,Dean Technology的高压二极管产品逐渐在全球范围内获得了良好的口碑。

芯邦(Chipsbank)公司的发展小趣事

在全球半导体市场竞争日益激烈的背景下,芯邦科技面临着来自国际巨头的挑战。然而,公司凭借在半导体设计领域的深厚积累和不断创新的精神,逐步形成了自己的核心竞争力。同时,芯邦也积极寻求与国际合作伙伴的合作机会,共同推动半导体产业的发展。

以上五个故事简要概述了芯邦科技在电子行业中的发展起来的关键节点和里程碑事件。这些故事不仅展现了芯邦科技在技术创新、产品线拓展、资本运作、市场表现和国际竞争等方面的努力和成就,也预示着公司未来发展的广阔前景和无限可能。

问答坊 | AI 解惑

定时器为什么不中断了

  各位哥哥哥姐这个程序第一次启动定时器可以正常运行,第二次启动定时器就不中断了,小弟初学单片机,实在是找不出原因了。   ORG 0000H   LJMP START   MORG 000BH   LJMP TIMER1 ;定时器1的中断处理   ORG 30H START: &nbs ...…

查看全部问答>

读《把时间当作朋友》(一):所有人的困境

虽说越来越多的人把时间花在网络上,但静静地读一本好书,从中获得的不仅仅是书本身,而是一种心灵暂时的宁静。 李笑来,这个名字对于那些考过托福、GRE的人并不陌生,这位前新东方的老师著有一些应试的畅销书。而对于我这个从没想过出国的人来说 ...…

查看全部问答>

下述代码用VC能编译通过,用ads1.2编译器则不行,错误提示:Serious error: C2432E: non-constant initialiser

#define BYTE unsigned char #define WORD unsigned short int #define DWORD unsigned int #define SDWORD signed int #define SBYTE signed char #define SWORD signed short int static SWORD neg_pow2[17]={0,-1,-3,-7,-15,-31,-63,-12 ...…

查看全部问答>

怎么读出单片机里的代码?

SynCmos公司的 SM8958AC25P单片机。我要读出里面的代码。什么编程器支持这块芯片的代码读取?各位推荐一些好吧。…

查看全部问答>

udp发送文件问题

请问各位大侠,在vc下,可以用udp发送数据流吗,我现在只会发送字符串,要想发送文件该怎么实现呢?…

查看全部问答>

EVC中动态改变静态文本控件颜色

请教一个EVC中动态改变静态文本控件颜色的问题;     现在正在开发一个基于WinCE.net4.2平台的应用程序,用EVC开发一个MFC应用程序。 碰到的问题是:我在对话框中依次排列了四个静态文本控件,ID分别为IDC_STATIC1,IDC_STATIC2,IDC_STA ...…

查看全部问答>

想用STM32的FSMC挂普通单色液晶遇到的问题?

                                 液晶的数据线不是三态的,所以直接挂在FSMC的总线上是肯定不行了,不知道要怎么处理才即可以保持FSMC总线上其他器 ...…

查看全部问答>

请教版主,STM8S103F单片机AD采样扫描模式

                                 请教版主,STM8S103F单片机AD的模拟输入通道为AIN2~AIN6,如果需要使用AD扫描采样的话,能不能从AIN2开始扫描。…

查看全部问答>

【问TI】 C6713中MCBSP实现SPI模式的具体步骤有哪些?求教

【问TI】 C6713中MCBSP实现SPI模式的具体步骤有哪些?求教…

查看全部问答>

ADC检测值异样问题

我的单通道多次转换AD,已经有软件的平滑滤波,但是检测大于1V的信号是显示低于1V接近1V              检测200mV的信号显示0.956~0.542之间不断波动,总之是与实际值相差较大,检测2V以上信号时 ...…

查看全部问答>