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

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

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

CC2530 定時器配置步驟

DS小龍哥-嵌入式技術(shù) ? 來源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2023-07-06 14:43 ? 次閱讀

第一章 CC2530時鐘

(1)時鐘源

1、內(nèi)部RC震蕩器(32KHz、16MHz)

2、外部石英晶振(32.768KHz、32MHz)

注意:外部石英晶振比較穩(wěn)定,在無線收發(fā)中采用外部石英晶振

(2)時鐘源的切換

用于判斷時鐘源是否切換成功

img

img

img

第二章 定時/技術(shù)器的基本原理

定時/計數(shù)器,是一種能夠?qū)?nèi)部時鐘信號或外部輸入信號進行計數(shù),當(dāng)計數(shù)值達到設(shè)定要求時,向CPU提出中斷處理請求,從而實現(xiàn)定時或者計數(shù)功能的外設(shè)。

定時/計數(shù)器的最基本工作原理是進行計數(shù)。不管是定時器還是計數(shù)器,本質(zhì)上都是計數(shù)器,可以進行加1(減1)計數(shù),每出現(xiàn)一個計數(shù)信號,計數(shù)器就會自動加1(自動減1),當(dāng)計數(shù)值從0變成最大值(或從最大值變成0)溢出時,定時/計數(shù)器就會向CPU提出中斷請求。

第三章 CC2530的定時/計數(shù)器

CC2530共有5個定時/計數(shù)器,其中定時器1是一個16位的定時器,為CC2530中功能最全的一個定時/計數(shù)器,在 應(yīng)用中應(yīng)優(yōu)先選用。

定時器1的工作模式有三種:

<1> 自由運行模式:計數(shù)器從0x0000開始,在每個活動 時鐘邊沿增加1,當(dāng)計數(shù)器達到0xFFFF時溢出,計數(shù)器重新載入0x0000并開始新一輪的遞增計數(shù)。該模式的計數(shù)周期是固定值0xFFFF,當(dāng)達到最終計數(shù) 值0xFFFF時,標(biāo)志位T1IF和OVFIF被設(shè)置。

<2> 模模式:計數(shù)器從0x0000開始,在每個活動時鐘邊 沿增加1,當(dāng)計數(shù)器達到T1CC0寄存器保存的值時 溢出,計數(shù)器又將從0x0000開始新一輪的遞增計數(shù), 模模式的計數(shù)周期可由用戶自行設(shè)定。

<3> 正計數(shù)/倒計數(shù)模式:計數(shù)器反復(fù)從0x0000 開始,正計數(shù)到TICC0保存的最終計數(shù)值,然后再倒計數(shù)回0x0000,當(dāng)達到最終計數(shù)值時,標(biāo)志位T1IF和OVFIF被設(shè)置。

第四章 CC2530的定時/計數(shù)器中斷系統(tǒng)

定時器有3種情況能產(chǎn)生中斷請求:

<1> 計數(shù)器達到最終計數(shù)值(溢出或回到零)。

<2> 輸入捕獲事件。

<3> 輸出比較事件。

使用模模式要特別注意,需要開啟通道0的輸出比較模式,否則計數(shù)器的 值達到T1CC0后,是不會產(chǎn)生溢出中斷的。

第五章 應(yīng)用定時器1實現(xiàn)1秒定時

【1】設(shè)置定時器1的最大計數(shù)值

定時器1共有5對T1CCxH和T1CCxL寄存器,分別對應(yīng)通道0到通道4。在使用定時器1的定時功能時,使用T1CC0H和T1CC0L兩個寄存器存放最大計數(shù)值的高8位和低8位。

在系統(tǒng)中,系統(tǒng)時鐘為16MHz,分頻系數(shù)為128,要定時0.1秒,最大計數(shù)值為:

img

【2】定時器初始化函數(shù)設(shè)計

<1> 將定時器1的最大計數(shù)值寫入T1CC0。

<2> 通過T1CCTL0寄存器開啟定時器1通道0的輸出比較模式。

<3> 設(shè)置定時器1的相關(guān)中斷控制位。

<4> 設(shè)置分頻系數(shù)和工作模式并啟動定時器。

【3】定時器中斷服務(wù)函數(shù)設(shè)計

<1> 清除T1STAT的中斷標(biāo)志位。

<2> 累加全局變量count。

<3> count被10整除即1秒的定時到了。

<4> 10秒定時到將count清零。

示例代碼:

#include < ioCC2530.h >
 ?
 //定義LED燈的端口
 #define LED1 P1_2
 #define LED2 P1_3
 ?
 /*
 函數(shù)功能:LED燈IO口初始化
 硬件連接:LED1-- >P1_2 , LED2-- >P1_3
 */
 void LED_Init(void)
 {
     P1DIR |=0x3< 2;  //配置P1_2、P1_3為輸出模式
     LED1 = 1;
     LED2 = 1;
 }
 ?
 /*延時200毫秒*/
 void delay200ms(void)   //誤差 -0.125us
 {
     unsigned char a,b,c;
     for(c=95;c >0;c--)
         for(b=181;b >0;b--)
             for(a=14;a >0;a--);
 }
 ?
 ?
 /*===============定時器1初始化函數(shù)==================*/
 void Init_Timer1()
 {
   T1CC0L = 0xd4;        //設(shè)置最大計數(shù)值的低8位
   T1CC0H = 0x30;        //設(shè)置最大計數(shù)值的高8位
   T1CCTL0 |= 0x04;      //開啟通道0的輸出比較模式
   T1IE = 1;             //使能定時器1中斷
   T1OVFIM = 1;          //使能定時器1溢出中斷
   EA = 1;               //使能總中斷
   T1CTL = 0x0e;         //分頻系數(shù)是128,模模式
 }
 ?
 ?
 unsigned char count = 0;  
 /*================定時器1服務(wù)函數(shù)====================*/
 #pragma vector = T1_VECTOR
 __interrupt void Timer1_Sevice()
 {
   T1STAT &= ~0x01;      //清除定時器1通道0中斷標(biāo)志
   count++;
   if(count%10 == 0)     //定時1秒到
   {
     LED1 = !LED1;
   }
   if(count == 100)      //定時10秒到
   {
     LED2 = !LED2;
     count = 0;
   }
 }
 ?
 /*主函數(shù)*/
 void main(void)
 {
     LED_Init();//初始化LED燈控制IO口
     Init_Timer1();
     while(1)          
     {  
                 
     }
 }
 ?

第六章 相關(guān)寄存器

img

img

img

img

img

img

第七章 示例代碼

(1)無中斷配置定時器

#include < ioCC2530.h >
 ?
 //定義LED燈的端口
 #define LED1 P1_2
 #define LED2 P1_3
 ?
 /*
 函數(shù)功能:LED燈IO口初始化
 硬件連接:LED1-- >P1_2 , LED2-- >P1_3
 */
 void LED_Init(void)
 {
     P1DIR |=0x3< 2;  //配置P1_2、P1_3為輸出模式
     LED1 = 1;
     LED2 = 1;
 }
 ?
 /*===============定時器1初始化函數(shù)==================*/
 void Init_Timer1()
 {
    //初始化計數(shù)器1
     T1CTL = 0x05;   
     T1STAT= 0x21;            //通道0,中斷有效,8分頻;自動重裝模式(0x0000- >0xffff)     
 }
 ?
 ?
 unsigned int counter=0;             //統(tǒng)計溢出次數(shù)
 unsigned int LEDFlag;               //標(biāo)志是否要閃爍
 ?
 /*主函數(shù)*/
 void main(void)
 {
     LED_Init();//初始化LED燈控制IO口
     Init_Timer1();
     while(1)          
     {  
         if(IRCON > 0)
         {
             IRCON = 0;                //清溢出標(biāo)志     
             counter++;
             if(counter==15)            //中斷計數(shù),約0.25s
             {
                 counter =0;
                 LEDFlag = !LEDFlag;
             }
         }
         if(LEDFlag)
         {
              LED1 = !LED1;
              LED2 = !LED2;     // 每 1s LED燈閃爍一下 
              LEDFlag = !LEDFlag;   // 閃爍標(biāo)志變量置0
         }                       
     }
 }
 ?

(2)開中斷配置定時器

#include < ioCC2530.h >
 ?
 //定義LED燈的端口
 #define LED1 P1_2
 #define LED2 P1_3
 ?
 /*
 函數(shù)功能:LED燈IO口初始化
 硬件連接:LED1-- >P1_2 , LED2-- >P1_3
 */
 void LED_Init(void)
 {
     P1DIR |=0x3< 2;  //配置P1_2、P1_3為輸出模式
     LED1 = 1;
     LED2 = 1;
 }
 ?
 /*延時200毫秒*/
 void delay200ms(void)   //誤差 -0.125us
 {
     unsigned char a,b,c;
     for(c=95;c >0;c--)
         for(b=181;b >0;b--)
             for(a=14;a >0;a--);
 }
 ?
 ?
 /*===============定時器1初始化函數(shù)==================*/
 void Init_Timer1()
 {
   T1CC0L = 0xd4;        //設(shè)置最大計數(shù)值的低8位
   T1CC0H = 0x30;        //設(shè)置最大計數(shù)值的高8位
   T1CCTL0 |= 0x04;      //開啟通道0的輸出比較模式
   T1IE = 1;             //使能定時器1中斷
   T1OVFIM = 1;          //使能定時器1溢出中斷
   EA = 1;               //使能總中斷
   T1CTL = 0x0e;         //分頻系數(shù)是128,模模式
 }
 ?
 ?
 unsigned char count = 0;  
 /*================定時器1服務(wù)函數(shù)====================*/
 #pragma vector = T1_VECTOR
 __interrupt void Timer1_Sevice()
 {
   T1STAT &= ~0x01;      //清除定時器1通道0中斷標(biāo)志
   count++;
   if(count%10 == 0)     //定時1秒到
   {
     LED1 = !LED1;
   }
   if(count == 100)      //定時10秒到
   {
     LED2 = !LED2;
     count = 0;
   }
 }
 ?
 /*主函數(shù)*/
 void main(void)
 {
     LED_Init();//初始化LED燈控制IO口
     Init_Timer1();
     while(1)          
     {  
                 
     }
 }
 ?
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 晶振
    +關(guān)注

    關(guān)注

    33

    文章

    2740

    瀏覽量

    67539
  • 信號
    +關(guān)注

    關(guān)注

    11

    文章

    2752

    瀏覽量

    76241
  • 定時器
    +關(guān)注

    關(guān)注

    23

    文章

    3218

    瀏覽量

    113774
  • CC2530
    +關(guān)注

    關(guān)注

    19

    文章

    221

    瀏覽量

    57514
  • 時鐘源
    +關(guān)注

    關(guān)注

    0

    文章

    92

    瀏覽量

    15896
收藏 人收藏

    評論

    相關(guān)推薦

    CC2530 GPIO口輸入配置配置步驟

    介紹CC2530 GPIO口輸入配置配置。
    的頭像 發(fā)表于 07-06 14:40 ?2184次閱讀
    <b class='flag-5'>CC2530</b> GPIO口輸入<b class='flag-5'>配置</b><b class='flag-5'>配置</b><b class='flag-5'>步驟</b>

    CC2530 外部中斷配置步驟

    介紹CC2530 外部中斷配置步驟
    的頭像 發(fā)表于 07-06 14:41 ?2421次閱讀
    <b class='flag-5'>CC2530</b> 外部中斷<b class='flag-5'>配置</b><b class='flag-5'>步驟</b>

    CC2530的時鐘配置概述

    二、CC2530的時鐘配置概述CC2530同樣也有兩個時鐘,一個是高頻時鐘信號給CPU使用,另一個低頻時鐘信號給看門狗,睡眠定時器等使用;相對應(yīng)的高速時鐘
    發(fā)表于 01-19 07:01

    CC2530有哪些定時器?

    CC2530有哪些定時器?
    發(fā)表于 01-25 06:10

    如何使用cc2530定時器來產(chǎn)生pwm波?

    如何使用cc2530定時器來產(chǎn)生pwm波?
    發(fā)表于 01-25 06:55

    CC2530單片機定時器的原理是什么?怎么使用?

    CC2530單片機定時器的原理是什么?怎么使用?如何通過CC2530實現(xiàn)了0.5S的定時控制LED燈1Hz閃爍?
    發(fā)表于 01-25 06:22

    CC2530 定時器T1的使用

    CC2530定時器T1的使用,多看看原理圖。
    發(fā)表于 04-26 10:41 ?0次下載

    cc2530 睡眠定時器串口顯示

    功能描述cc2530 睡眠定時器串口顯示//第12次次課 (睡眠定時器方式喚醒)//體會1:切換系統(tǒng)主時鐘16MHz和32MHz//體會2:當(dāng)串口波特率比較高時候(19200),亂碼多,降低后
    發(fā)表于 11-25 10:21 ?22次下載
    <b class='flag-5'>cc2530</b> 睡眠<b class='flag-5'>定時器</b>串口顯示

    CC2530 定時器應(yīng)用

    CC2530 定時器應(yīng)用任務(wù)分析知識儲備相關(guān)寄存知識T1CTL-定時器1的控制和狀態(tài)T1CCTL0-定時器1通道0捕獲/比較控制T1
    發(fā)表于 11-29 18:51 ?7次下載
    <b class='flag-5'>CC2530</b> <b class='flag-5'>定時器</b>應(yīng)用

    CC2530定時器3

    LED1的亮滅周期為2s。文章目錄CC2530定時器3完成對LED1周期為2s控制前言一、定時器3和定時器1哪些不同?二、使用步驟1.
    發(fā)表于 11-29 18:51 ?9次下載
    <b class='flag-5'>CC2530</b><b class='flag-5'>定時器</b>3

    CC2530定時器1使能

    CC2530定時器1CC2530有5個定時器定時器1,定時器2,
    發(fā)表于 11-29 20:06 ?6次下載
    <b class='flag-5'>CC2530</b><b class='flag-5'>定時器</b>1使能

    cc2530學(xué)習(xí)筆記一

    cc2530學(xué)習(xí)筆記一使用cc2530定時器一的模模式來產(chǎn)生pwm波。計數(shù)寄存T1CC0的值確定pwm波周期,比較寄存
    發(fā)表于 11-29 20:21 ?6次下載
    <b class='flag-5'>cc2530</b>學(xué)習(xí)筆記一

    cc2530 睡眠定時器喚醒功耗模式PM2

    功能描述cc2530 睡眠定時器喚醒功耗模式PM2//(睡眠定時器方式喚醒)#include <ioCC2530.h>typedef unsigned char
    發(fā)表于 11-29 20:36 ?9次下載
    <b class='flag-5'>cc2530</b> 睡眠<b class='flag-5'>定時器</b>喚醒功耗模式PM2

    CC2530授課筆記】⑦ 定時器的原理及應(yīng)用

    摘要本篇文章基于CC2530單片機,介紹了定時器的原理及使用,通過定時器1實現(xiàn)了0.5S的定時,控制LED燈1Hz閃爍。完整的源代碼#include <ioCC
    發(fā)表于 11-30 09:21 ?12次下載
    【<b class='flag-5'>CC2530</b>授課筆記】⑦ <b class='flag-5'>定時器</b>的原理及應(yīng)用

    CC2530查詢方式使用定時器

      實驗?zāi)康?   1)、通過實驗掌握 CC2530 芯片 GPIO 的配置方法   2)、掌握 Led 驅(qū)動電路及開關(guān) Led 的原理   3)、掌握定時器 T1 的配置
    發(fā)表于 04-11 15:35 ?3次下載