91视频丝瓜-91视频完整版高清-91视频网-91视频网店-91视频网或将从此无大神-91视频网入口

您好,歡迎訪問上海現易電子元器件有限公司網站!

021-51870898
021-51870898   18019251567
4新聞資訊
您的位置: 首頁 ->  新聞資訊 -> 單片機

?AVR 的精確延時程序

文章出處:單片機 責任編輯:上海現易電子元器件有限公司 發表時間:2020-11-10

C語言中,想使用精確的延時程序并不容易。IAR 中有這樣的一個函數 __delay_cycles(),該函數在頭文件intrinsics.h中定義,函數的作用就是延時N個指令周期。根據這個函數就可以實現精確的延時函數了(但不能做到100%精確度)。

實現的方法:

建立一個delay.h的頭文件:

#ifndef __IAR_DELAY_H
#define __IAR_DELAY_H

#include

#define   XTAL   8   //可定義為你所用的晶振頻率(單位Mhz) 


#define   delay_us(x)   __delay_cycles ( (unsigned long)(x * XTAL)  ) 
#define   delay_ms(x)   __delay_cycles ( (unsigned long)(x * XTAL*1000UL) )
#define   delay_s(x)    __delay_cycles ( (unsigned long)(x * XTAL*1000000UL) )

#endif 

 

注意: __delay_cycles(x),x必須是常量或則是常量表達式,如果是變量則編譯報錯!

 

驗證方法:

     1.設置IAR編譯器,設置如下:

 

 

 

 Ctrl+D進入軟件仿真后,在主菜單View->Proifing,即可調出分析函數的運行時間。


按下圖中紅圈子的Activate按鈕 

,同時也把最右邊的“Auto Refresh"打開,在F5(Debug->Go)運行一段時間后,按Debug->Break中斷程序的執行,即可列出所有函數的Cycles周期。

 

 



2.編寫測試函數

 

空函數

 void delay()
{   
}

發現這個空函數所用到的指令周期為 4 ,本人用的是IAR AVR 5.20來測試

 

分別嘗試不用的測試值,測試us ,ms ,s級的延時,然后把delay()運行的指令周期減去4就是delay_us(),delay_ms(),delay_s()所執行的指令周期

  void delay()
{   
   delay_us(100);

   //delay_ms(100);

  // delay_s(100);
}

 

測試發現,精確度比較高,誤差在1us以下。

有了這個方法,以后就不用在改變晶振的情況下去調延時程序了!


上海現易電子元器件有限公司 版權所有 未經授權禁止復制或鏡像

CopyRight 2020-2025 www.urqm.cn All rights reserved   滬ICP備2020031792號

友情鏈接:

電話

易經理

18019251567

微信

易經理

易經理

頂部

咨詢
主站蜘蛛池模板: 奇米777四色 | 富二代精品短视频在线 | 波多野结衣全集线观看456 | 日本熟妇无码波多野1223 | 日本精品a在线观看 | 性夜夜春夜夜爽AA片A | 色情AV亚洲精品一区二区 | 偷看农村女人做爰毛片色 | 色欲久久精品无码一区二区三区 | 久久精品无码欧美成人一区 | 国产在线播 | 一区二区三区无码被窝影院 | 在线播放国产麻豆 | 一道本不卡免费高清在线 | 一区二区三区精密机械 | 艹b视频在线观看 | 在线久综合色手机在线播放 | AA级女人大片 | 天堂√最新版中文在线天堂 | 又色又爽的无遮挡免费网址 | 欧洲色情大片啪啪免费观看 | 免费在线黄网 | 爱福利视频一区 | 亚洲精品综合久久 | 91av影院| 最近高清中文在线字幕在线观看1 | 久久久久久久尹人综合网亚洲 | 色狠狠色狠狠综合天天 | 最近更新2019中文字幕 | 刘涛一级毛片 | 无人区卡一卡二卡三乱码网站 | 久久精品视频网站 | 国产精品久久久久久日本 | 亚洲在线中文字幕2 | 日日摸人人看97人人澡 | 精品a级片 | 一级欧美一级日韩片 | 麻豆影视国产TV在线观看 | 免费观看一级欧美在线视频 | 精品欧美一区二区三区久久久 | 91在线视频一区 |