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

微信

易經理

易經理

頂部

咨詢
主站蜘蛛池模板: 国产精品二区页在线播放 | 久久6热视频在线观看 | 狠狠狠色丁香婷婷综合激情 | 国产精品人妻在线观看 | 麻豆出品必是精品 | 亚洲综合日韩中文字幕v在线 | 日韩一级免费毛片 | 99在线视频免费观看视频 | 日韩欧美一区二区三区不卡 | 欧洲精品色 | 日韩一二三 | 亚洲精品久久久WWW小说 | 国产精品人妻无码久久久2024 | 在线免费观看最新电影 | 免费被网站在线 | 97看片| 情侣摸抱揉捏吃奶的影院 | 精品黄色片 | 欠cao的sao货撅屁股双性 | 亚洲AV无码无限在线观看不卡 | 国产又爽又猛又粗的A片 | 黑人巨茎大战欧美白妇免费 | 欧美城天堂网 | www.色中色| 韩国视频在线观看高h | 久久久久久九九 | 色八戒| 我把我的肥岳日出水来多少集 | 美美哒免费高清影院在线观看直播 | 亚洲精品久久久久高潮 | 最近免费2019中文字幕大全 | 超级乱婬长篇小说 | 狠狠色丁香婷婷综合尤物 | 久热国产vs视频在线观看 | 亚洲AV成人影视综合网 | 亚洲精品国产成人无码区A片 | 狠狠色婷婷丁香综合久久韩国 | 国产又色又爽又黄的A片 | 黄网址在线永久免费观看 | 99久久精品国产高清一区二区 | 天天做天天爱天天综合网2021 |