資料介紹
描述
時(shí)間敏感的任務(wù)
幾乎所有使用微控制器的項(xiàng)目都具有某種與時(shí)間相關(guān)的組件,例如延遲或重復(fù)任務(wù)。內(nèi)部定時(shí)器電路通過(guò)對(duì)從預(yù)分頻器或時(shí)鐘直接獲得的每個(gè)脈沖進(jìn)行計(jì)數(shù)來(lái)啟用此功能。

通過(guò)獲取此計(jì)數(shù)器的值,您可以確定已經(jīng)過(guò)去了多少時(shí)間。例如,如果 MCU 的時(shí)鐘設(shè)置為 125KHz,其中一個(gè)定時(shí)器設(shè)置為使用該時(shí)鐘,并且其預(yù)分頻器設(shè)置為 1/1024,則其計(jì)數(shù)器寄存器的每個(gè)增量大約等于 1/122 秒,這源自:
t = 1 / (CLK / prescaler)
所以(1/122) = 1 / (125000 / 1024)
如果您好奇,預(yù)分頻器的工作是將輸入的時(shí)鐘脈沖除以某個(gè)值,這會(huì)使計(jì)數(shù)器減慢該因子。因此,預(yù)分頻值為 4 的定時(shí)器會(huì)將 8Mhz 的系統(tǒng)時(shí)鐘視為 2MHz。Arduino 的 millis()、delay() 和 micros() 都依賴這些定時(shí)器來(lái)操作。但是有一個(gè)問(wèn)題:delay() 是阻塞的,為了使它成為非阻塞,你必須在每個(gè)循環(huán)中檢查 millis() 的值。
改用中斷
為了避免這個(gè)問(wèn)題,ATmega328P 的定時(shí)器可以設(shè)置為在幾個(gè)不同的觸發(fā)器上觸發(fā)中斷。其中之一是溢出標(biāo)志,每當(dāng)計(jì)數(shù)器寄存器從其最大值翻轉(zhuǎn)到 0 時(shí)都會(huì)設(shè)置該標(biāo)志,例如 8 位寄存器從 255 變?yōu)?0。觸發(fā)中斷的另一種方法是使用比較寄存器,它存儲(chǔ)一個(gè)與計(jì)數(shù)器連續(xù)檢查的值,并在計(jì)數(shù)器達(dá)到該值時(shí)引發(fā)中斷。ATmega328P 等微控制器使用這種功能來(lái)控制引腳上的 PWM,而其他更高級(jí)的 MCU 能夠直接從定時(shí)器切換引腳,而完全不需要 CPU。
設(shè)置硬件
對(duì)于這個(gè)例子,我創(chuàng)建了一個(gè)簡(jiǎn)單的程序,它為 ATmega328P 的 Timer/Counter2 設(shè)置一個(gè)比較值,在比較匹配 A 上觸發(fā)一個(gè)中斷,并切換一個(gè)引腳的值。這方面的所有細(xì)節(jié)都可以在微控制器的數(shù)據(jù)表中找到。代碼首先調(diào)用 hardware_setup() 函數(shù),其中設(shè)置了幾個(gè)寄存器來(lái)配置系統(tǒng)、定時(shí)器和引腳。(1 << DDD2)通過(guò)將 的值放入寄存器,將數(shù)字引腳 2 設(shè)置為輸出。DDRD接下來(lái),通過(guò)將 1 放入 TCCR2B 寄存器的時(shí)鐘選擇位字段來(lái)設(shè)置定時(shí)器 2 的預(yù)分頻器,將預(yù)分頻器設(shè)置為 1/1024。

接下來(lái),將 255 的值放入比較寄存器 A ( OCR2A),這意味著當(dāng)計(jì)數(shù)器到達(dá) 255 時(shí)將發(fā)生事件。TIMSK2寄存器得到一個(gè)值(1 << OCIE2A)放入其中,這讓定時(shí)器 2 在比較匹配時(shí)輸出中斷A 被觸發(fā)。最后,在每次比較匹配時(shí)也TCCR2A獲得一個(gè)(1 << COM2A0)切換的值。D12

程序執(zhí)行和最終想法
雖然我們?cè)O(shè)置了TIMSK2寄存器觸發(fā)中斷,但還是需要處理的。這是通過(guò)創(chuàng)建將在引發(fā)中斷時(shí)觸發(fā)的 ISR(中斷服務(wù)程序)來(lái)實(shí)現(xiàn)的。在附加的代碼中,ISR 增加一個(gè)計(jì)數(shù)器并清除標(biāo)志。在 main() 的 while 循環(huán)中,檢查計(jì)數(shù)器變量以查看它何時(shí)達(dá)到 100,如果達(dá)到了,則通過(guò)執(zhí)行 XOR 操作來(lái)切換 D2 的值,如下所示:PORTD ^= (1 << PORTD2);
使count變量 volatile 很重要,因?yàn)樗嬖V編譯器它的值可以在程序正常執(zhí)行路徑之外的任何時(shí)間更改。該程序應(yīng)通過(guò)編程器刷新到 Nano。不要將 Arduino 函數(shù)與自定義定時(shí)器一起使用,因?yàn)檫@會(huì)弄亂你的定時(shí)器和內(nèi)置函數(shù)。

使用此代碼,連接到引腳 2 的 LED 應(yīng)每 2.5 秒閃爍一次。嘗試更改不同的值或在各種模式下設(shè)置其他計(jì)時(shí)器。
?
- labview超快自定義控件制作和普通自定義控件制作 14次下載
- labview自定義控件 22次下載
- ESP32上的自定義UART協(xié)議開(kāi)源
- Arduino LCD圖標(biāo)(自定義字符)
- 自定義視圖組件教程案例 15次下載
- Labview自定義右鍵快捷菜單功能實(shí)用小技巧 27次下載
- STM32CUBEMX(5)--自定義紅外NEC解碼,定時(shí)器TIM捕獲方式
- 串口屏LUA教程10-自定義串口指令
- Xilinx基本自定義OpenRISC系統(tǒng)硬件教程 93次下載
- LCD1602自定義顯示字符及漢字 85次下載
- AN958:自定義設(shè)計(jì)的調(diào)試和編程接口 2次下載
- 自定義fifo接口控制器 1次下載
- 1602自定義字符 1次下載
- 自定義函數(shù)測(cè)試學(xué)習(xí)工程
- matlab自定義函數(shù)調(diào)用的方法
- HarmonyOS應(yīng)用自定義鍵盤解決方案 2.1k次閱讀
- 如何添加自定義單板 1.2k次閱讀
- TSMaster 自定義 LIN 調(diào)度表編程指導(dǎo) 2k次閱讀
- 基于YOLOv8實(shí)現(xiàn)自定義姿態(tài)評(píng)估模型訓(xùn)練 5.6k次閱讀
- 博途用戶自定義庫(kù)的使用 2.6k次閱讀
- 添加自定義屬性控制fridaserver啟動(dòng)和停止 2.8k次閱讀
- 自定義特性能做什么? 1.5k次閱讀
- 用AWTK和AWPLC快速開(kāi)發(fā)自定義功能塊 1.7k次閱讀
- 基于AWTK和AWPLC開(kāi)發(fā)自定義功能塊 1.6k次閱讀
- 如何自定義函數(shù)或局部腳本 2.3k次閱讀
- 如何在Vivado中更改自定義的Interface 3.9k次閱讀
- Python學(xué)習(xí)要點(diǎn):自定義序列實(shí)現(xiàn)切片功能 1k次閱讀
- Glib創(chuàng)建自定義事件源的方法 3.7k次閱讀
- 如何給EOS賬號(hào)設(shè)置自定義權(quán)限 1.9k次閱讀
- springmvc 自定義攔截器實(shí)現(xiàn)未登錄用戶的攔截 3.5k次閱讀
下載排行
本周
- 1新一代網(wǎng)絡(luò)可視化(NPB 2.0)
- 3.40 MB | 1次下載 | 免費(fèi)
- 2冷柜-電氣控制系統(tǒng)講解
- 13.68 MB | 1次下載 | 10 積分
- 3MDD品牌三極管MMBT3906數(shù)據(jù)手冊(cè)
- 2.33 MB | 次下載 | 免費(fèi)
- 4MDD品牌三極管S9012數(shù)據(jù)手冊(cè)
- 2.62 MB | 次下載 | 免費(fèi)
- 5LAT1218 如何選擇和設(shè)置外部晶體適配 BlueNRG-X
- 0.60 MB | 次下載 | 3 積分
- 6LAT1216 Blue NRG-1/2 系列芯片 Flash 操作與 BLE 事件的互斥處理
- 0.89 MB | 次下載 | 3 積分
- 7收音環(huán)繞擴(kuò)音機(jī) AVR-1507手冊(cè)
- 2.50 MB | 次下載 | 免費(fèi)
- 8MS1000TA 超聲波測(cè)量模擬前端芯片技術(shù)手冊(cè)
- 0.60 MB | 次下載 | 免費(fèi)
本月
- 1愛(ài)華AIWA HS-J202維修手冊(cè)
- 3.34 MB | 37次下載 | 免費(fèi)
- 2PC5502負(fù)載均流控制電路數(shù)據(jù)手冊(cè)
- 1.63 MB | 23次下載 | 免費(fèi)
- 3NB-IoT芯片廠商的資料說(shuō)明
- 0.31 MB | 22次下載 | 1 積分
- 4UWB653Pro USB口測(cè)距通信定位模塊規(guī)格書(shū)
- 838.47 KB | 5次下載 | 免費(fèi)
- 5蘇泊爾DCL6907(即CHK-S007)單芯片電磁爐原理圖資料
- 0.04 MB | 4次下載 | 1 積分
- 6蘇泊爾DCL6909(即CHK-S009)單芯片電磁爐原理圖資料
- 0.08 MB | 2次下載 | 1 積分
- 7100W準(zhǔn)諧振反激式恒流電源電路圖資料
- 0.09 MB | 2次下載 | 1 積分
- 8FS8025B USB的PD和OC快充協(xié)議電壓誘騙控制器IC技術(shù)手冊(cè)
- 1.81 MB | 1次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開(kāi)源硬件-PMP21529.1-4 開(kāi)關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191439次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183353次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81602次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73822次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App





創(chuàng)作
發(fā)文章
發(fā)帖
提問(wèn)
發(fā)資料
發(fā)視頻
上傳資料賺積分
評(píng)論