lzh电子论坛

欢迎来到lzh电子论坛:
如果您对电子技术感兴趣就加入我们吧!在这里互相交流互相学习!主要讨论的方向有:单片机,ARM,PCB板设计,FPGA,汇编,C/C++等方面。
-----lzh电子论坛
lzhbbs.top-me.com
lzh电子论坛

电子的道路是孤独的,要懂得左手温暖右手,要懂得把debug当作快乐去欣赏,去享受,那样你才会成功...

欢迎访问lzh电子论坛。可通过【谷歌,SOSO,搜狗】搜索“lzh电子论坛”直接进入论坛。点击了解论坛详细制度


    430中精确软件延时方法

    分享
    avatar
    Admin
    管理员
    管理员

    帖子数 : 869
    威望 : 15
    注册日期 : 12-11-23
    年龄 : 25

    430中精确软件延时方法

    帖子 由 Admin 于 2013-01-07, 7:26 am

    IAR FOR 430中精确软件延时方法

    在用单片机的时候常常会用到延时函数,430也不例外,常见的形式有:
    void delay(unsigned int ms)
    {


    unsigned int i,j;


    for( i=0;i<ms;i++)


    for(j=0;j<1141;j++); //8MHz晶振时


    }

    复制代码//以上程序段在要求延时精度不高的场合可以用。


    但在 IAR 软件430的编译器里面我们可以利用它内部的延时子程序来实现我们想要的高精度软件延时,方法如下:


    (1):将以下这段代码复制到你的.C源文件中。
    #define CPU_F ((double)8000000)
    #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
    #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

    复制代码(2):修改

    在 #define CPU_F ((double)8000000) 语句里 8000000 修改成你当前MSP430 CPU的主频频率,即CPU的MCLK。

    单位为HZ。本例中的8000000为MCLK=8MHZ 的意思。


    (3):使用范例

    delay_us(1); //1 微秒的延时

    delay_ms(1); //1 毫秒的延时

    delay_us(3.5); //延时3.5微秒

    delay_ms(3.5); //延时3.5毫秒

    delay_ms(1000); //延时1秒

      目前的日期/时间是2018-07-22, 3:13 am