0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

AvR單片機(jī)1us延時(shí)函數(shù)數(shù)怎么寫(xiě)

科技綠洲 ? 來(lái)源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2023-12-26 14:02 ? 次閱讀

在編寫(xiě)AvR單片機(jī)的1us延時(shí)函數(shù)之前,我們首先需要了解幾個(gè)關(guān)鍵概念。

單片機(jī)的延時(shí)函數(shù)是通過(guò)控制器在特定的時(shí)間間隔內(nèi)執(zhí)行一系列的指令來(lái)實(shí)現(xiàn)的。在單片機(jī)中,我們通常使用定時(shí)器來(lái)實(shí)現(xiàn)延時(shí)功能。定時(shí)器是單片機(jī)中的一個(gè)特殊寄存器,它可以以特定的頻率進(jìn)行計(jì)數(shù),并在計(jì)數(shù)達(dá)到一定值時(shí)觸發(fā)中斷。

對(duì)于AvR單片機(jī)來(lái)說(shuō),我們可以利用定時(shí)器的計(jì)數(shù)器來(lái)實(shí)現(xiàn)微秒級(jí)的延時(shí)。AvR單片機(jī)常見(jiàn)的定時(shí)器有Timer0、Timer1和Timer2。這些定時(shí)器都有自己的控制寄存器和計(jì)數(shù)寄存器,可以被程序員配置和使用。

在編寫(xiě)1us延時(shí)函數(shù)之前,我們需要先選擇一個(gè)合適的定時(shí)器。通常來(lái)說(shuō),Timer1是一個(gè)比較好的選擇,因?yàn)樗?6位的計(jì)數(shù)器,可以達(dá)到較長(zhǎng)的延時(shí)時(shí)間。

下面我們來(lái)詳細(xì)介紹如何編寫(xiě)AvR單片機(jī)的1us延時(shí)函數(shù):

  1. 初始化定時(shí)器:首先,我們需要將定時(shí)器1的控制寄存器和計(jì)數(shù)寄存器進(jìn)行初始化。具體的初始化步驟如下:
  2. 設(shè)置WGM(波形發(fā)生器模式)位,選擇合適的工作模式。在這里,我們選擇CTC模式(比較匹配模式)。
  3. 設(shè)置COM(比較輸出模式)位,選擇適合的輸出模式。由于我們只需要延時(shí),不需要輸出信號(hào),可以將COM位設(shè)置為0。
  4. 設(shè)置預(yù)分頻系數(shù),選擇合適的分頻系數(shù)。這里我們選擇1分頻,即將預(yù)分頻寄存器設(shè)為1。
  5. 設(shè)置定時(shí)器計(jì)數(shù)值,使其在1us處觸發(fā)中斷。由于計(jì)數(shù)頻率為16MHz,所以計(jì)數(shù)值應(yīng)為16。
  6. 編寫(xiě)延時(shí)函數(shù):在定時(shí)器初始化后,我們可以編寫(xiě)延時(shí)函數(shù)了。延時(shí)函數(shù)的核心思路是啟動(dòng)計(jì)時(shí)器并等待計(jì)數(shù)器計(jì)數(shù)到特定值。

下面是一個(gè)示例的1us延時(shí)函數(shù)的代碼:

void delay_us(unsigned int us) {
unsigned int i;

// 設(shè)置定時(shí)器控制寄存器
TCCR1B = (1 < < WGM12) | (1 < < CS10);
// 設(shè)置定時(shí)器計(jì)數(shù)寄存器
OCR1A = 16;

// 循環(huán)等待指定的微秒數(shù)
for (i = 0; i < us; i++) {
// 啟動(dòng)定時(shí)器
TCNT1 = 0;
// 等待計(jì)數(shù)器計(jì)數(shù)到特定值
while ((TIFR1 & (1 < < OCF1A)) == 0);
// 清除中斷標(biāo)志位
TIFR1 = (1 < < OCF1A);
}
}

在上面的代碼中,我們使用了一個(gè)for循環(huán)去實(shí)現(xiàn)延時(shí)。在每次循環(huán)中,我們先將計(jì)數(shù)器清零,啟動(dòng)定時(shí)器,然后等待計(jì)數(shù)器計(jì)數(shù)到特定值。一旦計(jì)數(shù)器計(jì)數(shù)到特定值,中斷會(huì)被觸發(fā),我們將中斷標(biāo)志位清零,然后繼續(xù)下一次的延時(shí)。

需要注意的是,這里的延時(shí)函數(shù)只能達(dá)到微秒級(jí)別的延時(shí),如果需要更長(zhǎng)的延時(shí)時(shí)間,可能需要在函數(shù)內(nèi)部進(jìn)行倍增。

在實(shí)際使用過(guò)程中,我們可以根據(jù)具體的需求和單片機(jī)的型號(hào)來(lái)調(diào)整定時(shí)器的配置參數(shù),以達(dá)到更精確的延時(shí)效果。

總結(jié):

本文介紹了編寫(xiě)AvR單片機(jī)1us延時(shí)函數(shù)的詳細(xì)方法。通過(guò)使用定時(shí)器和中斷,我們可以實(shí)現(xiàn)微秒級(jí)別的精確延時(shí)。通過(guò)合適的配置參數(shù)和調(diào)整,可以根據(jù)具體需求實(shí)現(xiàn)不同的延時(shí)時(shí)間。編寫(xiě)1us延時(shí)函數(shù)可以在單片機(jī)的控制和應(yīng)用中起到重要的作用。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6026

    文章

    44455

    瀏覽量

    630910
  • AVR
    AVR
    +關(guān)注

    關(guān)注

    11

    文章

    1122

    瀏覽量

    78503
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5271

    瀏覽量

    119654
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4260

    瀏覽量

    62231
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32單片機(jī)延時(shí)原理和延時(shí)函數(shù)方法

    當(dāng)涉及到單片機(jī)編程時(shí),延時(shí)是一項(xiàng)常見(jiàn)但關(guān)鍵的任務(wù)。在許多應(yīng)用中,我們需要控制程序暫停一段時(shí)間,以實(shí)現(xiàn)精確的時(shí)間控制或協(xié)調(diào)不同設(shè)備之間的操作。本文將以STM32為例,介紹關(guān)于單片機(jī)延時(shí)
    發(fā)表于 08-09 09:13 ?1.7w次閱讀

    STM32的最短延時(shí)能少于1us嗎,謝謝了

    在做產(chǎn)品改進(jìn)的時(shí)候,需要用到正弦波,先存儲(chǔ)數(shù)據(jù),然后DA轉(zhuǎn)換為正弦波。在做調(diào)試的時(shí)候,要求用到6000HZ的正弦波,現(xiàn)在最短延時(shí)1us,我用一個(gè)周期12個(gè)點(diǎn)來(lái)仿真正弦波,但由于波形不平滑,后期很
    發(fā)表于 04-24 09:44

    51單片機(jī)C語(yǔ)言延時(shí)函數(shù)怎么定義

    比unsigned int更優(yōu)化的代碼,在使用時(shí)應(yīng)該使用unsigned char作為延時(shí)變量。 以某晶振為12MHz的單片機(jī)為例,晶振為12MHz即一個(gè)機(jī)器周期為1us。定義一個(gè)延時(shí)
    發(fā)表于 07-15 06:42

    延時(shí)函數(shù)的相關(guān)資料分享

    在實(shí)現(xiàn)單片機(jī)功能的時(shí)候,經(jīng)常會(huì)用到延時(shí)函數(shù),那么延時(shí)函數(shù)的原理也是非常有必要了解的。一般我們寫(xiě)
    發(fā)表于 11-18 06:22

    AVR單片機(jī)寫(xiě)程序progisp172

    AVR單片機(jī)寫(xiě)程序progisp172,感興趣的可以看看。
    發(fā)表于 03-23 17:46 ?111次下載

    51單片機(jī)C語(yǔ)言延時(shí)函數(shù)怎么定義和使用

    比unsigned int更優(yōu)化的代碼,在使用時(shí)應(yīng)該使用unsigned char作為延時(shí)變量。 以某晶振為12MHz的單片機(jī)為例,晶振為12MHz即一個(gè)機(jī)器周期為1us。
    發(fā)表于 11-16 17:06 ?8.4w次閱讀

    為什么要選擇AVR單片機(jī)

    什么是AVR單片機(jī)?AVR單片機(jī)有什么優(yōu)點(diǎn)?為什么要選擇AVR單片機(jī)?
    發(fā)表于 02-12 04:31 ?1776次閱讀

    AVR單片機(jī)延時(shí)函數(shù)程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是AVR單片機(jī)延時(shí)函數(shù)程序免費(fèi)下載
    發(fā)表于 11-16 08:00 ?7次下載
    <b class='flag-5'>AVR</b><b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>延時(shí)</b><b class='flag-5'>函數(shù)</b>程序免費(fèi)下載

    單片機(jī)spi通信的通用程序分享

    以下是單片機(jī)spi通信的通用程序,在不同晶振情況下可能需調(diào)整延時(shí)。這里單片機(jī)晶振為11.0592MHz。 _nop_();語(yǔ)句指延遲一個(gè)機(jī)器周期,約1us左右。
    發(fā)表于 12-28 15:23 ?7363次閱讀
    <b class='flag-5'>單片機(jī)</b>spi通信的通用程序分享

    使用C51編寫(xiě)單片機(jī)延時(shí)函數(shù)的詳細(xì)方法說(shuō)明

    參考了51單片機(jī) Keil C 延時(shí)程序的簡(jiǎn)單研究,自己也親身測(cè)試和計(jì)算了一些已有的延時(shí)函數(shù)。這里假定單片機(jī)是時(shí)鐘頻率為12MHz,則一個(gè)機(jī)
    發(fā)表于 09-26 17:16 ?6次下載
    使用C51編寫(xiě)<b class='flag-5'>單片機(jī)</b><b class='flag-5'>延時(shí)</b><b class='flag-5'>函數(shù)</b>的詳細(xì)方法說(shuō)明

    51單片機(jī)延時(shí)函數(shù)免費(fèi)下載

    C程序中可使用不同類型的變量來(lái)進(jìn)行延時(shí)設(shè)計(jì)。經(jīng)實(shí)驗(yàn)測(cè)試,使用unsigned char類型具有比unsigned int更優(yōu)化的代碼,在使用時(shí)應(yīng)該使用unsigned char作為延時(shí)變量。 以某晶振為12MHz的單片機(jī)為例,晶
    發(fā)表于 07-17 17:38 ?1次下載
    51<b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>延時(shí)</b><b class='flag-5'>函數(shù)</b>免費(fèi)下載

    你會(huì)51單片機(jī)的精確延時(shí)嗎?

    大家可以去網(wǎng)上查查,這方面的資料很多,且很簡(jiǎn)單。 以 12MHz 晶振為例,12MHz晶振的機(jī)器周期為 1us,所以,執(zhí)行一條單周期指令所用時(shí)間就是 1us,如 NOP 指令。下面具體闡述一下。 若要延時(shí)
    的頭像 發(fā)表于 11-05 10:40 ?2726次閱讀

    單片機(jī)延時(shí)函數(shù)的理解

    在實(shí)現(xiàn)單片機(jī)功能的時(shí)候,經(jīng)常會(huì)用到延時(shí)函數(shù),那么延時(shí)函數(shù)的原理也是非常有必要了解的。一般我們寫(xiě)
    發(fā)表于 11-11 09:36 ?94次下載
    <b class='flag-5'>單片機(jī)</b>:<b class='flag-5'>延時(shí)</b><b class='flag-5'>函數(shù)</b>的理解

    C語(yǔ)言 | 延時(shí)函數(shù)(Delay)

    的,采用“nop”函數(shù),這個(gè)函數(shù)相當(dāng)匯編NOP指令,延時(shí)幾微秒。NOP指令為單周期指令,可由晶振頻率算出延時(shí)時(shí)間,對(duì)于12M晶振,延時(shí)
    發(fā)表于 01-13 13:38 ?14次下載
    C語(yǔ)言 | <b class='flag-5'>延時(shí)</b><b class='flag-5'>函數(shù)</b>(Delay)

    關(guān)于AVR單片機(jī),你了解多少?

    什么是AVR單片機(jī)AVR單片機(jī)有什么優(yōu)點(diǎn)?為什么要選擇AVR單片機(jī)?
    發(fā)表于 02-11 14:09 ?6次下載
    關(guān)于<b class='flag-5'>AVR</b><b class='flag-5'>單片機(jī)</b>,你了解多少?