<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                * 導師視頻講解:[**去聽課**](https://www.bilibili.com/video/BV1k34y1D7Vz?p=12) >[success] **技術支持說明:** >**1**.一般以自主學習為主 > **2**.可到官方問答社區中提問:[**去提問**](https://bbs.csdn.net/forums/zigbee) > **3**.工程師**會盡快**解答社區問題,但他們是一線開發,【**難以保證**】解答時效,解答辛苦,感謝理解! <br/> 本節將使用CC2530內部的定時器1對LED等進行定時的開關控制,從而實現閃爍LED的效果。 <br/> ## **定時器基礎理論** * **系統時鐘頻率**:時鐘發生器會以恒定的時間間隔產生脈沖,這個間歇性的脈沖可以形象理解為芯片的心跳,時鐘頻率則是用來描述這個心跳的速率。大家通常用1s內時鐘發生器產生的脈沖數量來描述時鐘頻率,例如“時鐘頻率10 MHz”表示1s內的心跳次數為10 000 000次。CC2530有兩種時鐘頻率可供開發者使用:32MHz和16MHz。 ### * **分頻系數**:分頻是指將時鐘頻率降低為原來的1/N,也稱為N分頻。比如當時鐘頻率是16MHz的時候,那么2分頻是8MHz。分頻系數則是用1/N來表示,比如2分頻的分頻系數為:1/2。 ### * **系統時鐘周期**:周期和頻率的關系可以用公式表示: T = 1 / f,其中T為時鐘周期,f為時鐘頻率。時鐘周期和時鐘頻率成倒數關系。舉個例子說明一下,時鐘頻率為16MHz時表示在1s內時鐘發生器可以產生16 000 000個脈沖,而時鐘周期則可以表示產生一個脈沖所需要的時間,即1 / 160 000 00s。 ### * **計數器**:計數器是定時器的核心,用于記錄時鐘發生器產生的脈沖數量。由于脈沖的時鐘周期是恒定的,因此計算定時時間的公式是:t=nT,其中t為定時時間,n為計數次數,T為時鐘周期 ### * **溢出**:由于計數器的范圍是有限的,當計數次數超過最大值時就會產生溢出。例如當計數器的大小是16位時,那么計數范圍是0~65535,因此計數次數超過65535后計數器就會產生溢出。在產生溢出后,計算器的值會從最大值變為0。 <br/> ## **定時原理** 我們利用公式對頻率和周期的關系作進一步的解釋。 我們利用f表示時鐘頻率,T來表示時鐘周期,那么可以用此關系式來表示它們的關系: * T = 1 / f (1) 我們計時t秒后,假設此時計數器從0開始計數了N次(假設此時計數器沒有溢出)。前面已經講解過,時鐘周期T表示心跳1次所需要時間,因此t與N的關系如下: * t = N × T (2) 接著,我們可以推導出: * N = t / T (3) <br/> CC2530的默認系統時鐘頻率是16MHz(16000000Hz),其定時器1使用128分頻,因此定時器的時鐘頻率是 16000000 / 128 Hz。 ### * 根據公式(1)T = 1 / f 可以算出定時器1時鐘周期為T = 128/16000000 秒。 * 在定時5秒的情況下(即t=5秒),根據公式(2)N = t / T,計數器的計數值N = 5 / (128/16000000) = 625000。 ### ### **處理溢出** &emsp;&emsp;當定時器溢出時會發生中斷,此時寄存器IRCON的Bit1位會由原先的0被設置為1,因此我們只需要檢測這個標志位即可判斷是否發生了溢出。 >[info] 具體的相關寄存器說明,請閱讀下文的說明 &emsp;&emsp;定時器1是一個16位定時器,每溢出一次計數65536次,所以定時5秒后將會溢出: 625000 / 65536 = 9.54,取整數,即9次。反過來,如果溢出了9次,我們可以大約第認為時間過了5秒。 <br/> ## **相關寄存器** ![](https://img.kancloud.cn/86/5d/865d48b7de54066667b3ab2ee7c81044_886x830.png =600x) ![](https://img.kancloud.cn/9b/af/9baf0b9af0615ed85ac7a270b4b92978_878x708.png =600x) <br/> ## **寄存器配置** * 定時器1是一個16位的定時器,也就是說計數器能從0~65535進行計數。 * 定時器1支持5個通道 ``` 1.T1CTL?=?0x0D;?//?0000?1101:128分頻,自由計數(從0~65535)?? 2.T1STAT=?0x21;?//?bit0寫1,清空通道0中斷狀態位?? 3. //?bit5寫1,清空計數器中斷狀態位 ``` <br/> ## **程序說明** 主函數: ``` void main() { uint8_t Counter = 0; initLed(); initTimer1(); while(1) { if (!(IRCON & 0x02)) continue; // Timer1 interrupt not pending IRCON &= ~(0x02); // Clear timer1 interrupt flag if (++Counter < 9) continue; // ~5 second else Counter = 0; DEBUG_LOG("~5 Second.\r\n"); LED = (LED == LED_ON)?LED_OFF : LED_ON; } /* while */ } ``` ### &emsp;&emsp;主函數定義了一個計數器,用來記錄定時器溢出的次數。前面我們已經算出了定時5秒后會溢出9次。每當定時器溢出后都需要清除溢出標志位。溢出9次后我們需要把計數器歸0,重新計數。這樣,我們就實現了每隔5秒中打印輸出相應提示,并翻轉LED燈的亮滅狀態。 <br/> ## **仿真調試** >[danger] 在學習本節課前,需要先掌握基本的程序下載及仿真操作,參考:[程序下載及仿真](2482302) 把開發板連接仿真器,進入仿真模式: ![](https://img.kancloud.cn/1d/15/1d1558cd149452fda895264e0a215aac_354x384.png =300x) ### 可以看到,每隔大概5秒打印出信息,并且LED燈翻轉。 <br/> <br/> ## **項目定制** * 如需項目定制開發,可掃碼添加項目經理好友(注明“**項目定制**”) * 定制范圍:**NB-IoT**、**CATn(4G)**、**WiFi**、**ZigBee**、**BLE Mesh**以及**STM32**、**嵌入式Linux**等IoT技術方案 * 善學坊官網:[www.sxf-iot.com](https://www.sxf-iot.com/) ![](https://img.kancloud.cn/ca/73/ca739f92cab220a3059378642e3bd502_430x430.png =200x) * 非項目定制**勿擾**,此處**非**技術支持
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看