chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

怎樣在兩種不同模式下使用ATmega168上的Timer0

454398 ? 來源:工程師吳畏 ? 2019-07-31 17:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

原理圖

怎樣在兩種不同模式下使用ATmega168上的Timer0

為什么要使用計時器?

大多數(shù)微控制器項目都需要使用精心計時的事件,包括多任務(wù),位沖擊協(xié)議,測量等等。這些定時事件可以通過在循環(huán)的每次迭代中使用遞增計數(shù)器來在軟件中完成。但是,這會浪費可用于執(zhí)行其他操作的CPU資源,并且此類循環(huán)的使用可能難以正確計時。這就是定時器被引入微控制器的原因。現(xiàn)在它們非常普遍,很少找到?jīng)]有控制器的控制器。

大多數(shù)ATmega設(shè)備至少有一個定時器,ATmega168有三個定時器。因此,在本教程中,我們將看看定時器0以及在兩種不同模式下使用時如何將它用于定時事件:正常和比較。

定時器0

定時器0是一個通用的8位定時器,具有一些相當(dāng)強(qiáng)大的功能,包括比較模式,快速PWM生成和波形生成功能。雖然定時器0可能看起來很復(fù)雜,但實際上它使用起來相當(dāng)簡單,只要你了解其工作原理背后的基礎(chǔ)知識。

定時器0外設(shè)布局

首先,AVR上的定時器幾乎與一個由鏈中的一堆觸發(fā)器組成的簡單向上計數(shù)器相同。每次定時器計時時,它都會遞增一個計數(shù)器寄存器,用于跟蹤當(dāng)前定時器的值。

當(dāng)定時器達(dá)到最大值然后計時時(timer0是一個8位計數(shù)器,這意味著它最大值為255),定時器回繞到0并設(shè)置定時器溢出位。此位可用于查看計數(shù)器是否已溢出,并且在確定特定代碼段是否已停止或未響應(yīng)的情況下非常有用。

定時器通??梢詠碜圆煌脑矗▋?nèi)部時鐘源和外部I/O引腳。這意味著外部電路可以提供方波,使定時器遞增,或者微控制器本身可以遞增定時器(這通常用作時鐘源)。

一些定時器(如定時器0)有比較單位,允許定時器在定時器等于某個值時觸發(fā)中斷。當(dāng)微控制器需要執(zhí)行在特定時間過去時執(zhí)行的事件時,這非常有用。

一個這樣的例子涉及在需要每64uS發(fā)送一次脈沖同步脈沖時創(chuàng)建視頻信號(朋友)。其他示例包括多任務(wù),其中微控制器可以每毫秒切換到不同的任務(wù)。一旦匹配發(fā)生,也可以使這樣的比較單元清除定時器,這樣用戶就不必自己重置定時器。

定時器0:正常模式

在正常模式下,定時器0將在每個時鐘遞增,并且一旦計數(shù)器超過其最高值值(255,因為它是一個8位定時器),定時器回繞到值0并設(shè)置溢出位(TOV0位在寄存器TIFR0中找到)。

設(shè)置定時器0運行在正常模式下,WGM02-WGM01位需要設(shè)置為0(注意; WGM02位于TCCR0B中,而位WGM01和WGM00位于寄存器TCCR0A中。

寄存器TCCR0A和TCCR0B中的波形位

定時器0:CTC模式

比較匹配模式(CTC)上的清除定時器與普通模式類似,除非定時器達(dá)到的值寄存器OCR0A,定時器清零(復(fù)位為0x00)。這可用于創(chuàng)建定時事件,包括延遲和中斷,而無需使用軟件資源(全部在硬件中完成)。

當(dāng)定時器等于OCR0A的值時,則設(shè)置OCF0A,表示匹配在定時器和OCR0A之間發(fā)生。要在CTC模式下配置定時器0,需要將WGM02-WMG00位設(shè)置為0x02。

定時器0時鐘源

定時器0可以通過外部源(通過T0引腳)或內(nèi)部I/O時鐘提供時鐘。某些I/O時鐘源可以如表所示進(jìn)行預(yù)分頻,時鐘源選擇位可在TCCR0B寄存器中找到。

從顯示預(yù)分量選項的ATmega數(shù)據(jù)表中提取

關(guān)于中斷標(biāo)志的注意事項

重要的是要注意AVR是為了清除標(biāo)志,你必須在標(biāo)志上寫一個邏輯的。這意味著,例如,如果要清除溢出標(biāo)志,則將1寫入寫入0的寄存器INSTEAD

示例1:正常模式

此模式顯示在正常模式下使用定時器0來打開和關(guān)閉LED每次計數(shù)器翻轉(zhuǎn)(超過255)。

/*

* AVR Timer.c

*

* Created: 08/01/2018 13:16:36

* Author : RobinLaptop

*/

#define setBit(reg, bit) (reg = reg | (1 《《 bit))

#define clearBit(reg, bit) (reg = reg & ~(1 《《 bit))

#define toggleBit(reg, bit) (reg = reg ^ (1 《《 bit))

#define clearFlag(reg, bit) (reg = reg | (1 《《 bit))

#include

int main(void)

{

// Initialize Registers

clearBit(TCCR0A, WGM00); // Configure WGM to be 0x00 for normal mode

clearBit(TCCR0A, WGM01);

clearBit(TCCR0B, WGM02);

setBit(TCCR0B, CS00); // Configure clock source to be clock io at 1024 pre-scale

clearBit(TCCR0B, CS01);

setBit(TCCR0B, CS02);

DDRD = 0xFF; // Make PORT D and output

while (1)

{

// Wait until the TOV0 bit is set

while(!(TIFR0 & (1 《《 TOV0)))

{

}

// Clear the overflow flag by writing a 1 to it. I know, thats dumb but that‘s how it is!

clearFlag(TIFR0, TOV0);

// Toggle the LED (PD0 , Pin 2)

PORTD = PORTD ^ (1 《《 PD0);

}

}

示例2:CTC模式

當(dāng)定時器0等于OCR0A的值時,該模式將切換LED。一旦匹配發(fā)生,定時器將自動復(fù)位并設(shè)置OCF0A標(biāo)志。

/*

* Example 2 - CTC.c

*

* Created: 08/01/2018 13:43:06

* Author : RobinLaptop

*/

#define setBit(reg, bit) (reg = reg | (1 《《 bit))

#define clearBit(reg, bit) (reg = reg & ~(1 《《 bit))

#define toggleBit(reg, bit) (reg = reg ^ (1 《《 bit))

#define clearFlag(reg, bit) (reg = reg | (1 《《 bit))

#include

int main(void)

{

// Initialize Registers

clearBit(TCCR0A, WGM00); // Configure WGM to be 0x00 for normal mode

setBit(TCCR0A, WGM01);

clearBit(TCCR0B, WGM02);

setBit(TCCR0B, CS00); // Configure clock source to be clock io at 1024 pre-scale

clearBit(TCCR0B, CS01);

setBit(TCCR0B, CS02);

DDRD = 0xFF; // Make PORT D and output

OCR0A = 0x7F; // Reset the timer once the value of the timer reaches 127

while (1)

{

// Wait until the OCF0A bit is set

while(!(TIFR0 & (1 《《 OCF0A)))

{

}

// Clear the overflow flag by writing a 1 to it. I know, thats dumb but that’s how it is!

clearFlag(TIFR0, OCF0A);

// Toggle the LED (PD0 , Pin 2)

PORTD = PORTD ^ (1 《《 PD0);

}

}

結(jié)論

本教程僅涉及計時器能夠做更多事情的計時器。例如,這些定時器可以啟用它們的中斷,這將允許微控制器在設(shè)置標(biāo)志后立即運行時間敏感的代碼。或者,我們可以執(zhí)行其他代碼,而不是使用while循環(huán)來等待溢出標(biāo)志觸發(fā),這樣可以更有效地利用CPU。很明顯,定時器非常強(qiáng)大,可以為大多數(shù)項目帶來巨大的變化!

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

    關(guān)注

    0

    文章

    9

    瀏覽量

    9529
  • TIMER0
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    7734
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    深入解析Atmel ATmega48/88/168汽車級8位AVR微控制器

    深入解析Atmel ATmega48/88/168汽車級8位AVR微控制器 汽車電子等眾多領(lǐng)域,高性能、低功耗的微控制器是不可或缺的核心組件。Atmel的ATmega48/88/
    的頭像 發(fā)表于 04-07 16:55 ?597次閱讀

    深入解析Atmel ATmega48/88/168汽車級8位AVR微控制器

    深入解析Atmel ATmega48/88/168汽車級8位AVR微控制器 電子工程師的日常設(shè)計工作中,選擇一款合適的微控制器至關(guān)重要。Atmel的ATmega48/88/
    的頭像 發(fā)表于 04-07 09:40 ?191次閱讀

    TVS vs TSS 兩種保護(hù)機(jī)制的深度博弈

    現(xiàn)代電子設(shè)備日益精密、工作環(huán)境愈發(fā)復(fù)雜的背景,電路安全問題尤其是雷擊和瞬態(tài)過壓(Surge)防護(hù),已成為產(chǎn)品設(shè)計中不可忽視的重要環(huán)節(jié)。其中,TVS(瞬態(tài)電壓抑制器)與TSS(晶閘管浪涌抑制器)是兩種廣泛應(yīng)用的浪涌保護(hù)器件。盡
    的頭像 發(fā)表于 02-12 15:23 ?2298次閱讀
    TVS vs TSS <b class='flag-5'>兩種</b>保護(hù)機(jī)制的深度博弈

    NRF54L15DK串行恢復(fù)模式沒有了藍(lán)牙功能,應(yīng)該怎樣藍(lán)牙模式進(jìn)行ota

    ] 如果你希望 藍(lán)牙模式進(jìn)行 OTA(FOTA) ,而不是進(jìn)入串行恢復(fù)模式,有兩種典型做法: 應(yīng)用內(nèi) DFU(推薦用于 BLE OTA
    發(fā)表于 02-12 10:06

    用PLC實現(xiàn)卷徑計算的兩種算法

    卷徑計算,是動態(tài)計算如鋼卷,紙卷等存料量的一方法,它是實現(xiàn)張力控制和自動充放料、以及甩尾控制的重要前提。卷徑計算目前主流的方法有兩種,一是根據(jù)機(jī)列速度(產(chǎn)線速度)和和被測卷的轉(zhuǎn)動角速度求得;另一
    的頭像 發(fā)表于 11-14 16:54 ?2601次閱讀
    用PLC實現(xiàn)卷徑計算的<b class='flag-5'>兩種</b>算法

    ADI GMSL技術(shù)兩種視頻數(shù)據(jù)傳輸模式的區(qū)別

    本文深入介紹GMSL技術(shù),重點說明用于視頻數(shù)據(jù)傳輸?shù)南袼?b class='flag-5'>模式和隧道模式之間的差異。文章將闡明這兩種模式之間的主要區(qū)別,并探討成功實施需要注意的具體事項。
    的頭像 發(fā)表于 10-10 13:49 ?2667次閱讀
    ADI GMSL技術(shù)<b class='flag-5'>兩種</b>視頻數(shù)據(jù)傳輸<b class='flag-5'>模式</b>的區(qū)別

    兩種TVS有啥不同?

    當(dāng)我們查看TVS二極管的規(guī)格書,常會看到有以下兩種種引腳功能標(biāo)識圖:對于初學(xué)者,看到感到疑惑,他們一樣嗎?他們有啥區(qū)別?為啥有的個尖頭往外,陽極連在一起,有的個尖頭往里,陰極連在一起?一連三問。EMC小哥根據(jù)自己經(jīng)驗略作分析
    的頭像 發(fā)表于 09-15 20:27 ?995次閱讀
    這<b class='flag-5'>兩種</b>TVS有啥不同?

    兩種散熱路徑的工藝與應(yīng)用解析

    背景:兩種常見的散熱設(shè)計思路 大電流或高功率器件應(yīng)用中,散熱和載流能力是PCB設(shè)計中必須解決的難題。常見的兩種思路分別是: 厚銅板方案:通過整體增加銅箔厚度(如3oz、6oz甚至更高),增強(qiáng)導(dǎo)熱
    的頭像 發(fā)表于 09-15 14:50 ?982次閱讀

    CMOS 2.0與Chiplet兩種創(chuàng)新技術(shù)的區(qū)別

    摩爾定律正在減速。過去我們靠不斷縮小晶體管尺寸提升芯片性能,但如今物理極限越來越近。在這樣的背景,兩種創(chuàng)新技術(shù)站上舞臺:CMOS 2.0 和 Chiplet(芯粒)。它們都在解決 “如何讓芯片更強(qiáng)” 的問題,但思路卻大相徑庭。
    的頭像 發(fā)表于 09-09 15:42 ?1222次閱讀

    【BPI-CanMV-K230D-Zero開發(fā)板體驗】+兩種開發(fā)板間的比較

    散熱器的配合,這在K230是配有散熱器的,而BPI-CanMV-K230D-Zero因為沒有散熱器的配合,其一直工作發(fā)熱的狀態(tài),令人十分擔(dān)憂。 當(dāng)然,兩種還存在其他的一些差別,如HDMI接口的有無等
    發(fā)表于 07-17 21:40

    兩種驅(qū)動方式永磁直線開關(guān)磁鏈電機(jī)的研究

    摘要:永磁開關(guān)磁鏈電機(jī)數(shù)學(xué)模型可以等效為永磁無刷電機(jī),普遍采用方波驅(qū)動方式。在有限元基礎(chǔ)分析6/7極直線式磁鏈電機(jī)反電勢波形,采用方波和正弦波驅(qū)動方式,比較兩種方式的電流、電壓、平均推力大小
    發(fā)表于 06-09 16:18

    兩種感應(yīng)電機(jī)磁鏈觀測器的參數(shù)敏感性研究

    模式和發(fā)電模式對閉環(huán)電壓電流模型磁鏈觀測器和滑模磁鏈觀測器參數(shù)敏感性進(jìn)行了研究,通過仿真和實驗比較了這兩種觀測器對定、轉(zhuǎn)子電阻及勵磁電感的敏感性。同時還研究了基于這
    發(fā)表于 06-09 16:16

    TIMER定時器

    TIMER0TIMER7定時器載波相位有偏差,如何解決
    發(fā)表于 06-06 14:41

    銣原子鐘與CPT原子鐘:兩種時間標(biāo)準(zhǔn)的區(qū)別

    物理學(xué)的世界中,精密的時間測量是至關(guān)重要的。這就需要一個高度準(zhǔn)確且穩(wěn)定的時間標(biāo)準(zhǔn),這就是原子鐘。今天我們將探討兩種重要的原子鐘:銣原子鐘和CPT原子鐘,以及它們之間的主要區(qū)別。首先,我們來了解一
    的頭像 發(fā)表于 05-22 15:49 ?919次閱讀
    銣原子鐘與CPT原子鐘:<b class='flag-5'>兩種</b>時間標(biāo)準(zhǔn)的區(qū)別

    分享兩種前沿片互連技術(shù)

    隨著臺積電 2011年推出第一版 2.5D 封裝平臺 CoWoS、海力士 2014 年與 AMD 聯(lián)合發(fā)布了首個使用 3D 堆疊的高帶寬存儲(HBM)芯片,先進(jìn)封裝技術(shù)帶來的片互連拓?fù)浣Y(jié)構(gòu)的改變和帶來的集成能力的提升,成為
    的頭像 發(fā)表于 05-22 10:17 ?1320次閱讀
    分享<b class='flag-5'>兩種</b>前沿片<b class='flag-5'>上</b>互連技術(shù)