物聯(lián)網(wǎng)實(shí)訓(xùn)Day03

系統(tǒng)時(shí)鐘

振蕩器

  1. 采用 32.768hz 和 32M 兩種晶振。
  • 為什么是32.768?(2^15 = 32768)分頻下來就是1秒鐘。
  1. 晶振與RC振蕩器的優(yōu)缺點(diǎn)
  • 晶振:有源(通電可用、簡單)纹安、無源(需要結(jié)合)陆淀;起振慢考余;穩(wěn)定、高精度轧苫;成本高楚堤;受溫度影響大;
  • RC振蕩器:起振速度快含懊;頻率高身冬;簡單;成本低廉岔乔;精度低酥筝;受溫度影響。
  1. CLKCONCMD(時(shí)鐘控制命令寄存器)
    [圖片上傳失敗...(image-5a8b86-1625738279930)]
  • 系統(tǒng)時(shí)鐘源復(fù)位之后為1雏门,則在未設(shè)置時(shí)樱哼,為16MHz。(默認(rèn))
  1. 分頻剿配、倍頻
  • 倍頻搅幅,系統(tǒng)時(shí)鐘高于時(shí)鐘源,PLL
  • 選擇的系統(tǒng)頻率不能高于系統(tǒng)時(shí)鐘源呼胚,最高只能達(dá)到系統(tǒng)時(shí)鐘源的頻率茄唐。
  1. 查看設(shè)置是否起效
  • CLKCONSTA時(shí)鐘控制狀態(tài)寄存器(只讀)與CLKCONCMD(時(shí)鐘控制命令寄存器)設(shè)置是否一致。
  1. SLEEPSTA睡眠模式控制狀態(tài)寄存器
    [圖片上傳失敗...(image-bb1d7c-1625738279930)]

中斷

  • 中斷源 中斷使能IEN(interrupt enable)
  • 中斷類型
  • 中斷優(yōu)先級(jí)(優(yōu)先級(jí)的數(shù)字大小與優(yōu)先級(jí)別關(guān)系查看手冊)
  • 中斷處理過程


    中斷處理過程
  • 當(dāng)相應(yīng)的中斷源使能并發(fā)生時(shí)蝇更,中斷標(biāo)志位將自動(dòng)置1沪编,然后程序跳往中斷服務(wù)程序的入口地址執(zhí)行中斷服務(wù)程序。待中斷服務(wù)程序處理完畢后年扩,軟件中斷清零還是硬件中斷清零——查手冊蚁廓。(中斷執(zhí)行完之后中斷標(biāo)志位清零)


    中斷處理
  • I/O中斷:通過判斷PxIFG寄存中的中斷狀態(tài)標(biāo)志位可以判斷哪個(gè)引腳發(fā)生中斷。PxIFG寄存器有三個(gè)厨幻,分別是P0IFG相嵌、P1IFG和P2IFG。
  • 通用IO口中斷設(shè)置:


    通用IO口中斷設(shè)置
  • 作業(yè):將KEY實(shí)驗(yàn)由查詢方式改成中斷方式(參考代碼)
#include <ioCC2530.h>
#define LED1 P1_4
#define S5 P0_4
#define S6 P0_5
#define POINT_VECTOR VECT(13,0x6B)
#define ON 0
#define OFF 1
#define DOWN 0
#define UP 1
void led_init(void);
void key_init(void);
void delay_ms(int nms);
__interrupt void P0_ISR(void);
void main(void)
{
  led_init();
  key_init();
  while(1){
  }
  
}
void led_init(void)
{
  P1SEL&=~0x10;
  P1DIR |=0x10;
  LED1=OFF;//初始狀態(tài)
  
}
void delay_ms(int nms)
{
  unsigned int i,j;
  for(i=nms;i>0;i--)
    for(j=578;j>0;j--);
}
void key_init(void)
{
  P0IFG=0x00;
  P0INP &=~0x30;
  P0IEN|=0x30;
  PICTL|=0X01;
  EA=1;
  IEN1|=0x20;
}
#pragma vector=POINT_VECTOR
__interrupt void P0_ISR(void)
{
  P0IEN&=~0x30;
  if(P0IFG>0)
  {
    if(P0IFG==0x10)
    {
      LED1=ON;
    }
    if(P0IFG==0x20)
    {
      LED1=OFF;
    }
    P0IFG=0;
  }
}

定時(shí)器

  1. 概述:CC2530有4個(gè)定時(shí)器:定時(shí)器1~4况脆,另外還有一個(gè)睡眠定時(shí)器饭宾,和定時(shí)器2配合使用,可以使CC2530進(jìn)入低功耗模式格了。
  2. 方式:自由運(yùn)行模式(是模計(jì)數(shù)模式的一種)看铆、模計(jì)數(shù)模式、正計(jì)數(shù)/倒計(jì)數(shù)模式
    1. 自由運(yùn)行模式:在自由運(yùn)行操作模式下盛末,計(jì)數(shù)器從0x0000開始弹惦,每個(gè)活動(dòng)時(shí)鐘邊沿增加1否淤。當(dāng)計(jì)數(shù)器達(dá)到0xFFFF溢出,計(jì)數(shù)器載入0x0000棠隐。自由運(yùn)行模式可以用于產(chǎn)生獨(dú)立的時(shí)間間隔叹括,并輸出信號(hào)頻率。
    1. 模計(jì)數(shù)模式:當(dāng)定時(shí)器運(yùn)行在模計(jì)數(shù)器模式宵荒,16位計(jì)數(shù)器從0x0000開始,每個(gè)活動(dòng)時(shí)鐘邊沿增加1净嘀。當(dāng)計(jì)數(shù)器達(dá)到T1CC0(溢出)报咳。寄存器T1CC0H:T1CC0L保存最終計(jì)數(shù)值,計(jì)算器將復(fù)位到0x0000挖藏,并繼續(xù)遞增暑刃。如果定時(shí)器開始于T1CC0以上的一個(gè)值,當(dāng)達(dá)到最終計(jì)數(shù)值0xFFFF時(shí)膜眠,由硬件自動(dòng)設(shè)置標(biāo)志IRCON.T1IF和T1STAT.OVFIF岩臣。如果設(shè)置了相應(yīng)的中斷屏蔽位,將產(chǎn)生一個(gè)中斷請求宵膨。模計(jì)數(shù)器模式可以用于周期不是0xFFFF的應(yīng)用程序架谎。
    1. 正計(jì)數(shù)/倒計(jì)數(shù)模式:在正計(jì)數(shù)/倒計(jì)數(shù)模式,計(jì)數(shù)器反復(fù)從0x0000開始辟躏,“正計(jì)數(shù)”直到達(dá)到T1CC0H:T1CC0L保存的值谷扣。然后計(jì)數(shù)器將“倒計(jì)數(shù)”直到0x0000。這個(gè)定時(shí)器的輸出模式用于周期必須是對稱輸出脈沖而不是0xFFFF的應(yīng)用程序捎琐。在正計(jì)數(shù)/倒計(jì)數(shù)模式会涎,達(dá)到最終計(jì)數(shù)值時(shí),設(shè)置標(biāo)志位IRCON.T1IF和T1STAT.OVFIF瑞凑。如果設(shè)置了相應(yīng)的中斷屏蔽位末秃,將產(chǎn)生一個(gè)中斷請求。
  1. 定時(shí)器
    1. 睡眠定時(shí)器:睡眠定時(shí)器用于設(shè)置系統(tǒng)進(jìn)入和退出低功耗休眠模式之間的周期籽御。睡眠定時(shí)器還用于當(dāng)進(jìn)入低功耗模式時(shí)练慕,維持定時(shí)器2的定時(shí)。
    1. 定時(shí)器1是一個(gè)獨(dú)立的16位定時(shí)器技掏,支持典型的定時(shí)/計(jì)數(shù)功能贺待,有5個(gè)獨(dú)立的捕獲/比較通道。每個(gè)通道使用一個(gè)I/O引腳零截。在定時(shí)器1中由T1CTL.DIV設(shè)置的分頻器值進(jìn)一步劃分麸塞,這個(gè)分頻值可以為1、8涧衙、32或128哪工。因此當(dāng)32MHz晶振用作系統(tǒng)時(shí)鐘源時(shí)奥此,定時(shí)器1可以使用最低時(shí)鐘頻率是1953.125Hz,最高是32MHz雁比。 (1953.125 = 0.25*(10^6)/128)
    • MODE:00:暫停運(yùn)行稚虎;01:自由運(yùn)行,從0x0000到0xFFFF反復(fù)計(jì)數(shù)偎捎;10:模蠢终,從0x0000到T1CC0反復(fù)技術(shù);11:正計(jì)數(shù)/倒計(jì)數(shù)茴她,從0x0000到T1CC0反復(fù)計(jì)數(shù)且從T1CC0倒計(jì)數(shù)到0x0000寻拂。
    1. 定時(shí)器2主要用于為IEEE802.15.4 CSAM/CA算法提供定時(shí),并且為IEEE802.15.4 MAC層提供一般的計(jì)時(shí)功能丈牢。16位定時(shí)器正計(jì)數(shù)祭钉,可變周期可精確到31.25ns。(500000/16 = 31250)
    1. 定時(shí)器3和定時(shí)器4是是兩個(gè)8位定時(shí)器己沛,每個(gè)定時(shí)器有兩個(gè)獨(dú)立的比較通道慌核。每個(gè)通道上使用一個(gè)I/O引腳。時(shí)鐘分頻器申尼,可以被1垮卓,2,4师幕,8扒接,16,32们衙,64钾怔,128整除。
  • 作業(yè):通過操作定時(shí)器相關(guān)寄存器蒙挑,實(shí)現(xiàn) 500MS 翻轉(zhuǎn)一次 LED 燈宗侦。(參考代碼)
#include<iocc2530.h>
#define uint unsigned int
#define uchar unsigned char
//定義控制燈的端口
// #define LED1 P1_0 //定義 LED1 為 P10 口控制
// #define LED2 P1_1 //定義 LED2 為 P11 口控制
#define LED1 P1_4 //定義 LED1 為 P14 口控制
#define ON 0
#define OFF 1
#define Down 0
#define Up  1
void led_init(void);
void delay_ms(unsigned int nms);
void T1_init(void);

/*************************************************
*.函數(shù)說明:LED燈初始化函數(shù),配置LED燈相應(yīng)端口
*.函數(shù)名稱:led_init(void)
*.參數(shù)說明:無
**************************************************/
void led_init(void)
{
  P1SEL &=~0x10;                 //p1.4為普通IO
  P1DIR |= 0x10;                 //p1.4為輸出
  LED1 = OFF;                    //LED1初始化為熄滅
}


/*************************************************
*函數(shù)名稱:void Delay_Ms(unsigned int xms)
*功能描述:延時(shí)函數(shù)
*參數(shù)說明:xms:延時(shí)的時(shí)間(以 MS 為單位)
**************************************************/
void delay_ms(unsigned int nms)
{
  unsigned int i,j;
  for(i=nms;i>0;i--)
    for(j=578;j>0;j--);
}



/**************************************************
*.函 數(shù) 名 : T1_init(void)
*.功能描述 : Timer1 中斷方式初始化函數(shù)
*.輸入?yún)?shù) : NONE
*.輸出參數(shù) : NONE
*.返 回 值 : NONE
***************************************************/
void T1_init(void)
{
/*  T1CTL|=0x0c; //128 分頻,自由運(yùn)行模式
//  T1CTL |=0x02;   //模 運(yùn)行模式
  T1IE = 1; //開 Timer1 中斷
  EA = 1; //開總中斷
*/
  //16MHz RC是默認(rèn)的時(shí)鐘源忆蚀,沒有校準(zhǔn)的時(shí)候誤差是正負(fù)18%
    //定時(shí)器的工作頻率 16MHz / 128 = 125000Hz
    //定時(shí)500ms,也就是計(jì)數(shù)62500
    //周期應(yīng)該是1秒矾利,實(shí)測940毫秒,RC的誤差馋袜,切換到外部晶振應(yīng)該會(huì)準(zhǔn)確一些的男旗。
  T1CTL |= 0x0c;    //128分頻,取模模式
  T1CC0L = (62500 & 0xff);      //配置通道0的低8位
  T1CC0H = 62500 >> 8;          //配置通道0的高8位
  TIMIF |= 0x20;  //打開定時(shí)器的中斷溢出標(biāo)志
  T1IE = 1;     //打開定時(shí)器1的中斷
  EA = 1;         //打開總中斷
  T1CCTL0 |= 0x46;//打開通道0的中斷,設(shè)置為比較器模式,下降沿計(jì)數(shù)欣鳖。
  T1CTL |= 0x02;  //設(shè)置為取模模式察皇,定時(shí)器開始工作
  
}


void main(void)
{ 
  led_init();//初始化 LED 端口配置
  T1_init();   //初始化Timer1
  while(1)
  {
    
  }
}
/**************************************************
函 數(shù) 名 : T1_ISR
功能描述 : 中斷服務(wù)函數(shù)
輸入?yún)?shù) : NONE
輸出參數(shù) : NONE
返 回 值 : NONE
***************************************************/

#pragma vector = T1_VECTOR //Timer1 中斷向量
__interrupt void T1_ISR(void)
{
  if ((T1STAT & 0x01) == 0x01) {  //通道1中斷標(biāo)志
        LED1 = ~LED1;
        T1STAT &= ~0x01;//清除通道1的中斷標(biāo)志
    }
    
    T1STAT &= ~0x20;    //清除定時(shí)器1的中斷標(biāo)志
/*
  static unsigned char cnt = 0;
  IRCON = 0x00; //清中斷標(biāo)志, 也可由硬件自動(dòng)完成
  cnt++;
  if(cnt == 1) 
  { 
    cnt = 0; //計(jì)數(shù)清零
    LED1=~LED1;//1 次中斷后 LED 取反,閃爍一輪(0.5 秒時(shí)間)
  }
  */
}

超聲波模塊HC-SR04

  • 工作原理
    1. 采用IO口TRIG觸發(fā)測距,給至少10us的高電平信號(hào)什荣;
    1. 模塊自動(dòng)發(fā)送8個(gè)40khz的方波矾缓,自動(dòng)檢測是否有信號(hào)返回;
    1. 有信號(hào)返回稻爬,通過IO口ECHO輸出一個(gè)高電平嗜闻,高電平持續(xù)的時(shí)間就是超聲波從發(fā)射到返回的時(shí)間。測試距離=(高電平*聲速(340m/s)/2)或uS/58=厘米;(0.01m除以340m/s再乘以來回兩倍距離,再乘以10^6辆沦,轉(zhuǎn)換為uS單位,得到58.82352個(gè)周期)
  • 作業(yè):結(jié)合超聲波模塊及Timer1定時(shí)器實(shí)現(xiàn)超聲波測距(倒車?yán)走_(dá))(參考代碼下篇見)

版權(quán)聲明:本文為CSDN博主「路燈謠」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議翠肘,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/lululumiao/article/details/118559792

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末商佑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子厢塘,更是在濱河造成了極大的恐慌茶没,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晚碾,死亡現(xiàn)場離奇詭異抓半,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)格嘁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進(jìn)店門笛求,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人糕簿,你說我怎么就攤上這事探入。” “怎么了懂诗?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵蜂嗽,是天一觀的道長。 經(jīng)常有香客問我殃恒,道長植旧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任离唐,我火速辦了婚禮病附,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘亥鬓。我一直安慰自己完沪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布嵌戈。 她就那樣靜靜地躺著丽焊,像睡著了一般较剃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上技健,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天写穴,我揣著相機(jī)與錄音,去河邊找鬼雌贱。 笑死啊送,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的欣孤。 我是一名探鬼主播馋没,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼降传!你這毒婦竟也來了篷朵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤婆排,失蹤者是張志新(化名)和其女友劉穎声旺,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體段只,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腮猖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赞枕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澈缺。...
    茶點(diǎn)故事閱讀 40,912評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖炕婶,靈堂內(nèi)的尸體忽然破棺而出姐赡,到底是詐尸還是另有隱情,我是刑警寧澤柠掂,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布雏吭,位于F島的核電站,受9級(jí)特大地震影響陪踩,放射性物質(zhì)發(fā)生泄漏杖们。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一肩狂、第九天 我趴在偏房一處隱蔽的房頂上張望摘完。 院中可真熱鬧,春花似錦傻谁、人聲如沸孝治。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谈飒。三九已至岂座,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間杭措,已是汗流浹背费什。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留手素,地道東北人鸳址。 一個(gè)月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像泉懦,于是被迫代替她去往敵國和親稿黍。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內(nèi)容