RM新时代网站-首页

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

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

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

基于MCU的模塊定時(shí)器的詳細(xì)解析

MCU開發(fā)加油站 ? 2018-01-16 09:42 ? 次閱讀

MCU中(M16),定時(shí)器是獨(dú)立的一個(gè)模塊,M16有三個(gè)獨(dú)立的定時(shí)器模塊,即T/C0、T/C1和T/C2;其中T/C0和T/C2都是8位的定時(shí)器,而T/C1是一個(gè)16位的定時(shí)器。定時(shí)器的工作是獨(dú)立于CPU之外自行運(yùn)行的硬件模塊。

1、定時(shí)器何時(shí)開始工作(或說(shuō)計(jì)數(shù))的?

當(dāng)TCCR0!=0x00任何模式下,只要MCU一上電,T/C就開始計(jì)時(shí)工作。其實(shí)TCCR0主要是定時(shí)器的預(yù)分頻和波形模式、比較匹配模式的設(shè)置,說(shuō)到預(yù)分頻,不得不提一下這個(gè)模塊,這個(gè)模塊是T/C0、T/C1共用的一個(gè)模塊,但可以有不同的分頻設(shè)置。

2、定時(shí)器是如何進(jìn)行工作的?

說(shuō)到定時(shí)器的工作,不得不說(shuō)三個(gè)個(gè)重要參數(shù):TCNT0、OCR0,TIMSK,TCNT0是設(shè)置定時(shí)器的計(jì)時(shí)初始值,定時(shí)器開始工作后立即從TCNT0一直累加到0XFF,累加過(guò)程所消耗的時(shí)間就是我們需要的定時(shí)時(shí)間;OCR0是一個(gè)比較設(shè)定值,當(dāng)TCNT0的值累計(jì)到OCR0時(shí)(TNCT0==OCR0),如果有開啟比較匹配中斷功能,那么此時(shí)就會(huì)產(chǎn)生比較中斷,所以,OCR0的值一般都是設(shè)置在TCNT0初始值和0XFF之間,之外的任何值都不會(huì)產(chǎn)生比較中斷。

TIMSK是一個(gè)中斷使能位設(shè)置,就是我們需要計(jì)時(shí)器溢出中斷或是比較匹配中斷功能或兩者都要時(shí)就對(duì)TIMSK的相應(yīng)寄存器位進(jìn)行設(shè)置。

3、定時(shí)器的中斷使用

一個(gè)定時(shí)器可以有兩個(gè)中斷資源可利用,一個(gè)只溢出中斷,另一個(gè)是比較匹配中斷,如上面2所說(shuō)的。想說(shuō)明的溢出中斷子程序內(nèi)一般要有重載TCNT0的初始值,否則,TCNT0就會(huì)從0X00開始累加計(jì)數(shù)到0XFF,所耗費(fèi)的時(shí)間就不我們想要的時(shí)間。比較中斷就是當(dāng)TCNT0==OCR0時(shí),發(fā)生比較匹配中斷;所以,中斷子程序中一般只插入少量的處理代碼,否則,會(huì)發(fā)生所謂的中斷套嵌的現(xiàn)象,由于M16不支持中斷套嵌,這樣會(huì)使得中斷子程序中的部分代碼無(wú)法執(zhí)行,嚴(yán)重時(shí)會(huì)造成系統(tǒng)崩潰。

4、TCNT0和OCR0的值換算:

對(duì)于8bit的計(jì)時(shí)器,TCNT0一般可以由下面的公式換算:

TCNT0=256-(TV*F)/N;TV: 所想要設(shè)定的定時(shí)時(shí)間,單位,usF: 晶振頻率(MHz)N: 分頻因子

定時(shí)器是獨(dú)立運(yùn)行的,它不占用CPU的時(shí)間,不需要指令,只有調(diào)用對(duì)應(yīng)的寄存器的時(shí)候才需要參與。

以AVR mega16為例,它有三個(gè)寄存器,timer0,timer1和timer2,T0和T2是8位定時(shí)器,T1是16位寄存器,T2為異步定時(shí)器,三個(gè)定時(shí)器都可以用于產(chǎn)生PWM。

以定時(shí)器T0來(lái)簡(jiǎn)單介紹定時(shí)器的操作方法,T0有三個(gè)寄存器可以被CPU訪問(wèn),TCCR0,TCNT0,OCR0,下面看一段ICC生成的定時(shí)器初始化程序。

//TIMER0 initialize - prescale:8 // WGM: Normal // desired value: 1KHz // actual value: 1.000KHz (0.0%) void timer0_init(void) { TCCR0 = 0x00; //stop TCNT0 = 0x83; //set count OCR0 = 0x7D; //set compare TCCR0 = 0x02; //start timer }

TCCR0為控制寄存器,用于控制定時(shí)器的工作模式細(xì)節(jié);

TCNT0為T/C 寄存器,它的值在定時(shí)器的每個(gè)工作周期里加一或減一,實(shí)現(xiàn)定時(shí)操作,CPU可以隨時(shí)讀寫TCNT0;

OCR0:輸出比較寄存器,它包含一個(gè)8 位的數(shù)據(jù),不間斷地與計(jì)數(shù)器數(shù)值TCNT0 進(jìn)行比較。匹配事件可以用來(lái)產(chǎn)生輸出比較中斷,或者用來(lái)在OC0 引腳上產(chǎn)生波形。

這里說(shuō)最簡(jiǎn)單的模式,TCNT一直加一,到達(dá)最大值0xFF然后清零,進(jìn)入下一次計(jì)數(shù),在上面的程序中。

TCCR0=0x00;關(guān)閉T0的時(shí)鐘源,定時(shí)器停止工作。

TCNT0=0x83;設(shè)置T/C寄存器的初始值,及讓定時(shí)器從TCNT0從0x83開始定時(shí)或計(jì)數(shù)。

OCR0 = 0x7D;設(shè)定比較匹配寄存器的值,這個(gè)程序里沒有使用。

TCCR0 = 0x02;選擇時(shí)鐘源,來(lái)自時(shí)鐘8分頻,設(shè)置后定時(shí)器就開始工作。

初始化后定時(shí)器開始工作,TCNT0在每一個(gè)定時(shí)器時(shí)鐘加一,當(dāng)TCNT0等于OCR0的值時(shí),T/C 中斷標(biāo)志寄存器- TIFR中的OCF0 置位,如果這時(shí)候TIMSK中OCIE0為1(即允許T0比較匹配中斷),并且全局中斷允許,比較匹配中斷即運(yùn)行。中斷程序中可以對(duì)TCNT0和0CR0進(jìn)行操作,對(duì)定時(shí)器進(jìn)行調(diào)整。

TCNT0繼續(xù)加一,當(dāng)達(dá)到0xFF時(shí),T/C 中斷標(biāo)志寄存器- TIFR中的TOV0置位,如果這時(shí)候TIMSK中TOIE0為1(即允許T0溢出中斷),并且全局中斷允許,溢出中斷即運(yùn)行。中斷程序中可以對(duì)TCNT0和0CR0進(jìn)行操作,對(duì)定時(shí)器進(jìn)行調(diào)整。

和定時(shí)器相關(guān)的寄存器還有SREG和TIMSK,前者位1控制全局中段允許,后者位1(OCIE0)和位0(TOIE0)分別控制比較匹配中斷和溢出比較匹配中斷允許。

實(shí)際的過(guò)程中,定時(shí)器相關(guān)寄存器的操作非常靈活,可以在溢出中斷中修改TCNT0的值,也可以在中斷中修改OCR0的值,后面的實(shí)驗(yàn)中會(huì)講到用定時(shí)器1修改OCR1A的方法實(shí)現(xiàn)1S精確定時(shí)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17123

    瀏覽量

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

    關(guān)注

    31

    文章

    5336

    瀏覽量

    120230
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10854

    瀏覽量

    211574
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3246

    瀏覽量

    114715

原文標(biāo)題:AVR——使用定時(shí)器必須弄清的幾個(gè)概念

文章出處:【微信號(hào):mcugeek,微信公眾號(hào):MCU開發(fā)加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    AT32 MCU定時(shí)器入門指南

    定時(shí)器種類有基本定時(shí)器、通用定時(shí)器、高級(jí)控制定時(shí)器,以AT32F435xx舉例,下表為各種類型定時(shí)器的功能總表。本文主要就
    發(fā)表于 11-01 10:26 ?1908次閱讀
    AT32 <b class='flag-5'>MCU</b><b class='flag-5'>定時(shí)器</b>入門指南

    AT32 MCU定時(shí)器入門指南

    AT32 MCU 定時(shí)器入門指南主要就定時(shí)器溢出中斷進(jìn)行基礎(chǔ)講解和案列解析。
    發(fā)表于 10-25 07:24

    使用定時(shí)器和計(jì)數(shù)創(chuàng)建高效的基于MCU的設(shè)計(jì)

    定時(shí)器和計(jì)數(shù)可能是MCU設(shè)計(jì)中最普遍的外圍設(shè)備。任何應(yīng)用程序都可以使用定時(shí)器或計(jì)數(shù)來(lái)提高性能,降低功耗,或者簡(jiǎn)化設(shè)計(jì),用簡(jiǎn)單的
    發(fā)表于 05-28 09:45 ?6次下載
    使用<b class='flag-5'>定時(shí)器</b>和計(jì)數(shù)<b class='flag-5'>器</b>創(chuàng)建高效的基于<b class='flag-5'>MCU</b>的設(shè)計(jì)

    基于MCU模塊定時(shí)器工作原理解析

    MCU中(M16),定時(shí)器是獨(dú)立的一個(gè)模塊,M16有三個(gè)獨(dú)立的定時(shí)器模塊,即T/C0、T/C1和T/C2;其中T/C0和T/C2都是8位的
    發(fā)表于 09-19 16:16 ?5635次閱讀

    STM32定時(shí)器基本計(jì)數(shù)原理解析

    STM32的TIM定時(shí)器分為三類:基本定時(shí)器、通用定時(shí)器和高級(jí)定時(shí)器。從分類來(lái)看就知道STM32的定時(shí)器功能是非常強(qiáng)大的,但是,功能強(qiáng)大了,
    發(fā)表于 12-27 16:20 ?1.8w次閱讀
    STM32<b class='flag-5'>定時(shí)器</b>基本計(jì)數(shù)原理<b class='flag-5'>解析</b>

    定時(shí)器電路的詳細(xì)說(shuō)明

    定時(shí)器電路是一種實(shí)用電路,包括固定時(shí)定時(shí)器、時(shí)間可變定時(shí)器、倒計(jì)時(shí)定時(shí)器等。定時(shí)器啟動(dòng)后即自動(dòng)
    發(fā)表于 01-07 22:40 ?18次下載
    <b class='flag-5'>定時(shí)器</b>電路的<b class='flag-5'>詳細(xì)</b>說(shuō)明

    如何解析定時(shí)器產(chǎn)生的脈沖信號(hào)?

    如何解析定時(shí)器產(chǎn)生的脈沖信號(hào)?
    發(fā)表于 04-06 17:20 ?15次下載
    如何<b class='flag-5'>解析</b><b class='flag-5'>定時(shí)器</b>產(chǎn)生的脈沖信號(hào)?

    對(duì)于MCU來(lái)說(shuō),定時(shí)器太重要了!

    對(duì)于MCU來(lái)說(shuō),定時(shí)器是必備的一個(gè)模塊,原因在于定時(shí)器是使用頻率最高。1寫在前面我之前寫過(guò)許多關(guān)于定時(shí)器的文章,不過(guò)后臺(tái)還是有很多朋友問(wèn)與
    發(fā)表于 10-28 15:21 ?8次下載
    對(duì)于<b class='flag-5'>MCU</b>來(lái)說(shuō),<b class='flag-5'>定時(shí)器</b>太重要了!

    清除所有定時(shí)器_對(duì)于MCU來(lái)說(shuō),定時(shí)器太重要了!

    對(duì)于MCU來(lái)說(shuō),定時(shí)器是必備的一個(gè)模塊,原因在于定時(shí)器是使用頻率最高。1寫在前面我之前寫過(guò)許多關(guān)于定時(shí)器的文章,不過(guò)后臺(tái)還是有很多朋友問(wèn)與
    發(fā)表于 10-29 10:36 ?6次下載
    清除所有<b class='flag-5'>定時(shí)器</b>_對(duì)于<b class='flag-5'>MCU</b>來(lái)說(shuō),<b class='flag-5'>定時(shí)器</b>太重要了!

    單片機(jī)MSP430入門-理論⑦--定時(shí)器模塊-定時(shí)器A②

    單片機(jī)MSP430入門-理論⑦--定時(shí)器模塊-定時(shí)器A②上期大概給大家匯總介紹了,定時(shí)器模塊中比較重要并且常用的
    發(fā)表于 11-19 17:51 ?9次下載
    單片機(jī)MSP430入門-理論⑦--<b class='flag-5'>定時(shí)器</b><b class='flag-5'>模塊</b>-<b class='flag-5'>定時(shí)器</b>A②

    單片機(jī)MSP430入門理論⑧--定時(shí)器模塊-定時(shí)器A③

    單片機(jī)MSP430入門理論⑧--定時(shí)器模塊-定時(shí)器A③上期大概給大家匯總介紹了,定時(shí)器模塊定時(shí)器
    發(fā)表于 11-19 18:51 ?8次下載
    單片機(jī)MSP430入門理論⑧--<b class='flag-5'>定時(shí)器</b><b class='flag-5'>模塊</b>-<b class='flag-5'>定時(shí)器</b>A③

    STM32定時(shí)器-基本定時(shí)器

    目錄定時(shí)器分類基本定時(shí)器功能框圖講解基本定時(shí)器功能時(shí)鐘源計(jì)數(shù)時(shí)鐘計(jì)數(shù)自動(dòng)重裝載寄存
    發(fā)表于 11-23 18:21 ?31次下載
    STM32<b class='flag-5'>定時(shí)器</b>-基本<b class='flag-5'>定時(shí)器</b>

    SysTick 定時(shí)器

    11.1關(guān)于 SysTick 定時(shí)器SysTick定時(shí)器(又名系統(tǒng)滴答定時(shí)器)是存在于Cortex-M3的一個(gè)定時(shí)器,只要是ARM Cotex-M系列內(nèi)核的
    發(fā)表于 12-05 14:51 ?9次下載
    SysTick <b class='flag-5'>定時(shí)器</b>

    單片機(jī)MSP430入門-理論⑥--定時(shí)器模塊-定時(shí)器A

    單片機(jī)MSP430入門-理論⑥--定時(shí)器模塊-定時(shí)器A上期大概給大家匯總介紹了,在MSP430環(huán)境下的定時(shí)器模塊,其中主要又說(shuō)了下看門狗
    發(fā)表于 12-16 16:54 ?12次下載
    單片機(jī)MSP430入門-理論⑥--<b class='flag-5'>定時(shí)器</b><b class='flag-5'>模塊</b>-<b class='flag-5'>定時(shí)器</b>A

    AT32講堂036 | AT32 MCU定時(shí)器入門指南

    AT32定時(shí)器概述定時(shí)器種類有基本定時(shí)器、通用定時(shí)器、高級(jí)控制定時(shí)器,以AT32F435xx舉例,下表為各種類型
    的頭像 發(fā)表于 11-02 14:56 ?5116次閱讀
    AT32講堂036 | AT32 <b class='flag-5'>MCU</b><b class='flag-5'>定時(shí)器</b>入門指南
    RM新时代网站-首页