版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
智能產(chǎn)品設(shè)計(jì)與應(yīng)用1.定時(shí)器/計(jì)數(shù)器案例導(dǎo)入01/PART
ONE定時(shí)器/計(jì)數(shù)器1.定時(shí)/技術(shù)器的基本原理定時(shí)/計(jì)數(shù)器,是一種能夠?qū)?nèi)部時(shí)鐘信號(hào)或外部輸入信號(hào)進(jìn)行計(jì)數(shù),當(dāng)計(jì)數(shù)值達(dá)到設(shè)定要求時(shí),向CPU提出中斷處理請(qǐng)求,從而實(shí)現(xiàn)定時(shí)或者計(jì)數(shù)功能的外設(shè)。定時(shí)/計(jì)數(shù)器的最基本工作原理是進(jìn)行計(jì)數(shù)。不管是定時(shí)器還是計(jì)數(shù)器,本質(zhì)上都是計(jì)數(shù)器,可以進(jìn)行加1(減1)計(jì)數(shù),每出現(xiàn)一個(gè)計(jì)數(shù)信號(hào),計(jì)數(shù)器就會(huì)自動(dòng)加1(自動(dòng)減1),當(dāng)計(jì)數(shù)值從0變成最大值(或從最大值變成0)溢出時(shí),定時(shí)/計(jì)數(shù)器就會(huì)向CPU提出中斷請(qǐng)求。定時(shí)器/計(jì)數(shù)器2.CC2530的定時(shí)/計(jì)數(shù)器CC2530共有4個(gè)定時(shí)/計(jì)數(shù)器定時(shí)器1:16位的定時(shí)器,功能最全。定時(shí)器2:為系統(tǒng)定時(shí),用戶不用此定時(shí)器。定時(shí)器3:4:
8位定時(shí)器定時(shí)器/計(jì)數(shù)器2.CC2530的定時(shí)/計(jì)數(shù)器CC2530T1定時(shí)/計(jì)數(shù)器定時(shí)器1:16位的定時(shí)器自由運(yùn)行模式:0x0000-0xFFFF,CHXIF和OVFIF被置1模模式:0x0000-T1CC0,CHXIF和OVFIF被置1正計(jì)數(shù)/倒計(jì)數(shù)模式:0x0000-T1CC0-0x0000,CHXIF和OVFIF被置1定時(shí)器/計(jì)數(shù)器2.CC2530的定時(shí)/計(jì)數(shù)器T1定時(shí)/計(jì)數(shù)器通過(guò)兩個(gè)8位的SFR讀取16位的計(jì)數(shù)器值:T1CNTH和T1CNTL,分別包含在高位字節(jié)和低位字節(jié)中。當(dāng)讀取T1CNTL時(shí),計(jì)數(shù)器的高位字節(jié)在那時(shí)被緩沖到T1CNTH,以便高位字節(jié)可以從T1CNTH中讀出。T1CNTL必須總是在讀取T1CNTH之前首先讀取。定時(shí)器/計(jì)數(shù)器2.CC2530的定時(shí)/計(jì)數(shù)器T1定時(shí)/計(jì)數(shù)器工作模式定時(shí)器1:16位的定時(shí)器自由運(yùn)行模式:0x0000-0xFFFF,CHXIF和OVFIF被置1模模式:0x0000-T1CC0,CHXIF和OVFIF被置1正計(jì)數(shù)/倒計(jì)數(shù)模式:0x0000-T1CC0-0x0000,CHXIF和OVFIF被置1定時(shí)器1的三種工作模式自由運(yùn)行模式:計(jì)數(shù)器從0x0000開(kāi)始,在每個(gè)活動(dòng)時(shí)鐘邊沿增加1,當(dāng)計(jì)數(shù)器達(dá)到0xFFFF時(shí)溢出,計(jì)數(shù)器重新載入0x0000并開(kāi)始新一輪的遞增計(jì)數(shù)。該模式的計(jì)數(shù)周期是固定值0xFFFF,當(dāng)達(dá)到最終計(jì)數(shù)值0xFFFF時(shí),標(biāo)志位T1IF和OVFIF被設(shè)置。定時(shí)器/計(jì)數(shù)器2.CC2530的定時(shí)/計(jì)數(shù)器定時(shí)器1的三種工作模式模模式:計(jì)數(shù)器從0x0000開(kāi)始,在每個(gè)活動(dòng)時(shí)鐘邊沿增加1,當(dāng)計(jì)數(shù)器達(dá)到T1CC0寄存器保存的值時(shí)溢出,計(jì)數(shù)器又將從0x0000開(kāi)始新一輪的遞增計(jì)數(shù),模模式的計(jì)數(shù)周期可由用戶自行設(shè)定。定時(shí)器/計(jì)數(shù)器2.CC2530的定時(shí)/計(jì)數(shù)器定時(shí)器1的三種工作模式正計(jì)數(shù)/倒計(jì)數(shù)模式:計(jì)數(shù)器反復(fù)從0x0000開(kāi)始,正計(jì)數(shù)到TICC0保存的最終計(jì)數(shù)值,然后再倒計(jì)數(shù)回0x0000,當(dāng)達(dá)到最終計(jì)數(shù)值時(shí),標(biāo)志位T1IF和OVFIF被設(shè)置。定時(shí)器/計(jì)數(shù)器2.CC2530的定時(shí)/計(jì)數(shù)器定時(shí)器有3種情況能產(chǎn)生中斷請(qǐng)求:計(jì)數(shù)器達(dá)到最終計(jì)數(shù)值(溢出或回到零)。輸入捕獲事件。輸出比較事件(模模式時(shí)使用)。使用模模式要特別注意,需要開(kāi)啟通道0的輸出比較模式,否則計(jì)數(shù)器的值達(dá)到T1CC0后,是不會(huì)產(chǎn)生溢出中斷的。定時(shí)器/計(jì)數(shù)器3.CC2530的定時(shí)/計(jì)數(shù)器中斷系統(tǒng)定時(shí)器/計(jì)數(shù)器3.CC2530的定時(shí)/計(jì)數(shù)器中斷系統(tǒng)T智能產(chǎn)品設(shè)計(jì)與應(yīng)用2.定時(shí)器/計(jì)數(shù)器寄存器詳解案例導(dǎo)入01/PART
ONE定時(shí)器/計(jì)數(shù)器寄存器詳解任務(wù):用定時(shí)器1的模模式實(shí)現(xiàn)1秒定時(shí)將內(nèi)部系統(tǒng)時(shí)鐘16MHz的RC振蕩器128分頻作為定時(shí)器1的計(jì)數(shù)信號(hào),在模模式中實(shí)現(xiàn)0.1秒定時(shí)。在定時(shí)中斷服務(wù)函數(shù)中對(duì)全局變量count進(jìn)行累加,實(shí)現(xiàn)1秒定時(shí),并將LED1每1秒切換亮滅,LED2每4秒切換亮滅。設(shè)計(jì)思路
CC2530模塊P1_0P1_1P0_4P0_1P2_0LED1LED2LED3K1K2計(jì)算最大計(jì)數(shù)值,并填入T1CC0H和T1CCOL。使用模模式,記得開(kāi)啟通道0的輸出比較模式。使能定時(shí)器1相關(guān)的中斷控制位。在T1CTL寄存器設(shè)置分頻系數(shù),啟動(dòng)定時(shí)器。定時(shí)器初始化編寫(xiě)定時(shí)器1中斷服務(wù)處理函數(shù),在這里記得手工清除T1STAT寄存器中的中斷標(biāo)志位。定義一個(gè)全局變量count,進(jìn)行1秒定時(shí)。定時(shí)器中斷定時(shí)器/計(jì)數(shù)器寄存器詳解周期的概念TT1CNTH–定時(shí)器1計(jì)數(shù)高位T1CNTL–定時(shí)器1計(jì)數(shù)低位T1CTL–定時(shí)器1控制T1STAT–定時(shí)器1狀態(tài)T1CCTLn–定時(shí)器1通道n捕獲/比較控制T1CCnH–定時(shí)器1通道n捕獲/比較高位值T1CCnL–定時(shí)器1通道n捕獲/比較低位定時(shí)器/計(jì)數(shù)器寄存器詳解與定時(shí)器T1相關(guān)的寄存器定時(shí)器/計(jì)數(shù)器寄存器詳解與定時(shí)器T1相關(guān)的寄存器定時(shí)器/計(jì)數(shù)器寄存器詳解與定時(shí)器T1相關(guān)的寄存器定時(shí)器/計(jì)數(shù)器寄存器詳解與定時(shí)器T1相關(guān)的寄存器定時(shí)器/計(jì)數(shù)器寄存器詳解與定時(shí)器T1相關(guān)的寄存器定時(shí)器/計(jì)數(shù)器寄存器詳解與定時(shí)器T1相關(guān)的寄存器定時(shí)器/計(jì)數(shù)器寄存器詳解與定時(shí)器T1相關(guān)的寄存器智能產(chǎn)品設(shè)計(jì)與應(yīng)用3.定時(shí)器/計(jì)數(shù)器配置案例導(dǎo)入01/PART
ONE定時(shí)器/計(jì)數(shù)器配置任務(wù):用定時(shí)器1的模模式實(shí)現(xiàn)1秒定時(shí)將內(nèi)部系統(tǒng)時(shí)鐘16MHz的RC振蕩器128分頻作為定時(shí)器1的計(jì)數(shù)信號(hào),在模模式中實(shí)現(xiàn)0.1秒定時(shí)。在定時(shí)中斷服務(wù)函數(shù)中對(duì)全局變量count進(jìn)行累加,實(shí)現(xiàn)1秒定時(shí),并將LED1每1秒切換亮滅,LED2每4秒切換亮滅。
CC2530模塊P1_0P1_1P0_4P0_1P2_0LED1LED2LED3K1K2定時(shí)器/計(jì)數(shù)器配置設(shè)計(jì)思路計(jì)算最大計(jì)數(shù)值,并填入T1CC0H和T1CCOL。使用模模式,記得開(kāi)啟通道0的輸出比較模式。使能定時(shí)器1相關(guān)的中斷控制位。在T1CTL寄存器設(shè)置分頻系數(shù),啟動(dòng)定時(shí)器。定時(shí)器初始化編寫(xiě)定時(shí)器1中斷服務(wù)處理函數(shù),在這里記得手工清除T1STAT寄存器中的中斷標(biāo)志位。定義一個(gè)全局變量count,進(jìn)行1秒定時(shí)。定時(shí)器中斷定時(shí)器/計(jì)數(shù)器配置1.定時(shí)器初始化函數(shù)設(shè)計(jì)765432100:捕獲模式1:比較模式T1IE=1;7:43:2分頻系數(shù)1:0工作模式00:1分頻01:8分頻
10:32分頻11:128分頻00:暫停01:自由運(yùn)行
10:模模式11:正/倒計(jì)數(shù)一旦設(shè)置了定時(shí)器1的工作模式,就馬上開(kāi)始計(jì)數(shù)工作了,故該語(yǔ)句要寫(xiě)在初始化最后一行。①T1CC0計(jì)數(shù)最大值②T1CCTL0開(kāi)啟通道0比較模式T1CC0L=0XD4;先寫(xiě)低位T1CC0H=0X30;后寫(xiě)高位5個(gè)通道:0-4。③T1IE=1;定時(shí)器1中斷允許④EA=1;開(kāi)啟總中斷EA=1;⑤T1CTL定時(shí)器1工作模式T1CTL=0X0E;T1CCTL0|=0X04;定時(shí)器/計(jì)數(shù)器配置2.設(shè)置定時(shí)器1的最大計(jì)數(shù)值定時(shí)器1共有5對(duì)T1CCxH和T1CCxL寄存器,分別對(duì)應(yīng)通道0到通道4。在使用定時(shí)器1的定時(shí)功能時(shí),使用T1CC0H和T1CC0L兩個(gè)寄存器存放最大計(jì)數(shù)值的高8位和低8位。最大計(jì)數(shù)值=定時(shí)時(shí)長(zhǎng)/定時(shí)器計(jì)數(shù)周期。定時(shí)器/計(jì)數(shù)器配置3.計(jì)算定時(shí)器1的最大計(jì)數(shù)值在本實(shí)訓(xùn)中,系統(tǒng)時(shí)鐘為16MHz,分頻系數(shù)為128,要定時(shí)0.1秒,最大計(jì)數(shù)值為:T1CC0L=0XD4;先寫(xiě)低位T1CC0H=0X30;后寫(xiě)高位定時(shí)器/計(jì)數(shù)器配置4.定時(shí)器初始化函數(shù)設(shè)計(jì)初始化定時(shí)器1的最大計(jì)數(shù)值。開(kāi)啟定時(shí)器1比較模式。開(kāi)啟定時(shí)器1中斷和總中斷。設(shè)置分頻系數(shù)(128)和工作模式(模模式)啟動(dòng)定時(shí)器。T1CCTL0|=0X04;T1IE=1;開(kāi)啟定時(shí)器1中斷EA=1;開(kāi)啟總中斷T1CTL=0X0E;T1CC0L=0XD4;先寫(xiě)低位T1CC0H=0X30;后寫(xiě)高位定時(shí)器/計(jì)數(shù)器配置5.定時(shí)器中斷服務(wù)函數(shù)設(shè)計(jì)清除T1STAT的中斷標(biāo)志位。OVFIF:定時(shí)器1計(jì)數(shù)器溢出中斷標(biāo)志位CHXIF:定時(shí)器1通道X中斷標(biāo)志位T1STAT&=~0x21;
//清除定時(shí)器1中斷標(biāo)志,通道0中斷標(biāo)志累加全局變量count。count被10整除即1秒的定時(shí)到了。4秒定時(shí)到將count清零。7-6543210保留OVFIFCH4IFCH3IFCH2IFCH1IFCH0IF定時(shí)器/計(jì)數(shù)器配置定時(shí)器1通道0,自由模式,128分頻,0.1s,初始化T1CC0L=0XD4;//先寫(xiě)低位T1CC0H=0X30;//后寫(xiě)高位T1CCTL0|=0X04;//T1CCTL0,開(kāi)啟比較模式。T1IE=1;//開(kāi)啟定時(shí)器1中斷EA=1;//開(kāi)啟總中斷T1CTL=0X0E;//設(shè)置分頻系數(shù)(128)和工作模式(模模式)并啟動(dòng)定時(shí)器定時(shí)中斷響應(yīng)后,清除中斷標(biāo)志位:
T1STAT&=~0x21;//清除定時(shí)器1中斷標(biāo)志,通道0中斷標(biāo)志
智能產(chǎn)品設(shè)計(jì)與應(yīng)用4.定時(shí)器/計(jì)數(shù)器應(yīng)用編程案例導(dǎo)入01/PART
ONE任務(wù)選擇內(nèi)部16MHz時(shí)鐘的128分頻作為計(jì)數(shù)器1的計(jì)數(shù)信號(hào)。以模模式啟動(dòng)定時(shí)器1,進(jìn)行0.1秒的間隔定時(shí)。當(dāng)k1按鍵長(zhǎng)按松開(kāi)后,切換D1燈的開(kāi)關(guān)狀態(tài)當(dāng)k1按鍵短按松開(kāi)后,切換D2燈的開(kāi)關(guān)狀態(tài)。注:按鍵按下時(shí)間大于0.5秒,定義為長(zhǎng)按,反之為短按?;诙〞r(shí)器1,用按鍵長(zhǎng)按和短按切換D1,D2燈的狀態(tài)
P1_0P1_1P0_4P0_1P2_0LED1LED2LED3K1K2CC2530模塊前后臺(tái)的基本概念前臺(tái)系統(tǒng):一般指中斷級(jí)程序,即中斷服務(wù)函數(shù)。后臺(tái)系統(tǒng):一般指任務(wù)級(jí)程序,即死循環(huán)中的主函數(shù)?;镜乃季S模式:中斷服務(wù)函數(shù)中的邏輯處理受到主函數(shù)運(yùn)行的制約,主函數(shù)中的某些功能又取決于中斷服務(wù)函數(shù)中的變量,兩者相互關(guān)聯(lián),相互制約,協(xié)同運(yùn)行。以本節(jié)課任務(wù):“按鍵長(zhǎng)按與短按的實(shí)現(xiàn)”為例。后臺(tái)工作:掃描按鍵狀態(tài),在按鍵按下和松開(kāi)時(shí)分別標(biāo)志不同的變量值,并且對(duì)按鍵的按下時(shí)間T進(jìn)行判斷,決定按鍵是長(zhǎng)按還是短按。前臺(tái)工作:定時(shí)器循環(huán)進(jìn)行0.1秒間隔定時(shí)。按鍵按下,開(kāi)始計(jì)算時(shí)間,按鍵松開(kāi),結(jié)束計(jì)算時(shí)間。程序講解程序講解Count=0;//計(jì)時(shí)次數(shù)F_key=0;//確定是否按下F_key=1?Count++;有按鍵按下,才計(jì)時(shí)定時(shí)器中斷服務(wù)程序Scan_key()確定按鍵按下Count=0;F_key=1;開(kāi)始計(jì)時(shí)等待松開(kāi);F_key=0;//停止計(jì)時(shí)Count>5?長(zhǎng)按;短按;程序講解#include"iocc2530.h"#defineLED1P1_0#defineLED2P1_1#defineLED3P0_4#definek1P0_1unsignedintcount=0;//定時(shí)累加unsignedcharF_time=0;unsignedcharF_key=0;/1.端口初始化voidInit_Port(){//led設(shè)置//1.功能0:io,1:外設(shè)P1SEL&=~0x03;//0000,0011P0SEL&=~0X10;//0001,0000//2.方向0:輸入,1:輸出P1DIR|=0X03;P0DIR|=0X10;
//k1設(shè)置P0_1//1.功能P0SEL&=~0X02;//0000,0010//2.方向P0DIR|=0X02;//3.輸入模式P0INP&=~0X02;P2INP&=~0X20;//0010,0000
LED1=1;//熄滅LED2=1;//熄滅LED3=1;//熄滅}頭文件&宏定義初始化子程序程序講解voidInit_Time()//定時(shí)器中斷初始化{//1.計(jì)數(shù)最大值T1CC0L=0XD4;T1CC0H=0X30;//2.開(kāi)啟通道0比較模式T1CCTL0|=0X04;//3.定時(shí)器1中斷允許T1IE=1;//4.開(kāi)啟總中斷EA=1;//5.定時(shí)器1工作模式設(shè)置,開(kāi)啟定時(shí)T1CTL=0X0E;}//3.定時(shí)器中斷服務(wù)函數(shù)#pragmavector=T1_VECTOR_interruptvoidTime1_Sevicr(){T1STAT&=~0X21;//清除定時(shí)中斷標(biāo)志if(F_key==1)count++;}程序講解voidscan_key(){if(k1==0){delay(200);if(k1==0){count=0;//確定按下,計(jì)時(shí)初始值清0F_key=1;//定時(shí)器開(kāi)始計(jì)時(shí)while(k1==0);F_key=0;//定時(shí)器停止計(jì)時(shí)if(count>5){LED1=~LED1;//切換1狀態(tài)}elseLED2=~LED2;//切換2狀態(tài)}}}voidmain(){Init_Port();//1.端口初始化Init_Time();//2.定時(shí)器中斷初始化while(1){scan_key();}}拓展任務(wù)單擊按鍵k1,切換LED1燈的開(kāi)關(guān)狀態(tài);雙擊按鍵K1,切換LED2燈的開(kāi)關(guān)狀態(tài);三連擊按鍵K1,切換LED3燈的開(kāi)關(guān)狀態(tài);四連擊按鍵K1,切換LED1-3的開(kāi)關(guān)狀態(tài)。定時(shí)器,定時(shí)0.1s,實(shí)現(xiàn)單擊、雙擊、三擊、四擊控制
P1_0P1_1P0_4P0_1P2_0LED1LED2LED3K1K2CC2530模塊編程思路每個(gè)按鍵按下都定義一個(gè)生命周期,假如是0.5秒,生命周期結(jié)束的時(shí)候才確定按鍵的最終狀態(tài)。如果在按鍵的生命周期內(nèi)有新的按鍵按下,將會(huì)重新計(jì)算生命周期,這時(shí)候就是雙擊。在雙擊的生命周期中,又有新的按鍵按下,則生命周期會(huì)重新計(jì)算,這時(shí)候就是三連擊。在整個(gè)生命周期中如果沒(méi)有新的按鍵按下,那么最終的按鍵狀態(tài)就是三連擊。如此類推。編程思路編程思路#include"iocc2530.h"#defineLED1P1_0#defineLED2P1_1#defineLED3P0_4#definek1P0_1unsignedcharcount=0;unsignedchark_Num=0;voidInitIO(void)//端口初始化{//功能:0:IO,1:外設(shè)P1SEL&=~0X03;P0SEL&=~0X12;//0001,0010
//方向:0:輸入,1:輸出P1DIR|=0X03;P0DIR|=0X10;//0001,0000,P0_4輸出P0DIR&=~0X02;//0000,0010,P0_1輸入//輸入模式:0:上拉/下拉,1:三態(tài)P0INP&=~0X02;//0:上拉/下拉,0000,0010,P2INP&=~0X20;//0:上拉LED1=1;LED2=1;LED3=1;//開(kāi)始燈熄滅}編程思路voidInit_Timer1(void){T1CC0L=0XD4;//先寫(xiě)低位T1CC0H=0X30;//后寫(xiě)高位T1CCTL0|=0X04;//T1CCTL0,開(kāi)啟比較模式。T1IE=1;//開(kāi)啟定時(shí)器1中斷EA=1;//開(kāi)啟總中斷T1CTL=0X0E;//設(shè)置分頻系數(shù)(128)和工作模式(模模式)并啟動(dòng)定時(shí)器}定時(shí)器中斷初始化#pragmavector=T1_VECTOR__interruptvoidTimer1_Sevice(void){T1STAT&=~0x21;//清除定時(shí)器1中斷標(biāo)志,通道0中斷標(biāo)志if(k_Num!=0&&k1!=0)//進(jìn)入開(kāi)始按鍵,中途按鍵要松開(kāi)才計(jì)時(shí)間count++;}中斷函數(shù)編程思路voidkey_scan(void){if(k1==0){delay(100);if(k1==0)while(k1==0);//等待松手k_Num++;//按下1次,按鍵次數(shù)加1if(k_Num>4)k_Num=4;}//按鍵識(shí)別if(count>5)//時(shí)間超過(guò)0.5s{switch(k_Num){case1:LED1=~LED1;break;//單擊case2:LED2=~LED2;break;//雙擊case3:LED3=~LED3;break;//三擊case4:LED1=~LED1;LED2=~LED2;LED3=~LED3;break;//四擊}k_Num=0;//按鍵次數(shù)清0count=0;//計(jì)數(shù)清0}}按鍵掃描函數(shù)編程思路voidmain(void){InitIO();Init_Timer1();while(1){key_scan();}}主函數(shù)智能產(chǎn)品設(shè)計(jì)與應(yīng)用5.看門(mén)狗定時(shí)器和系統(tǒng)時(shí)鐘案例導(dǎo)入01/PART
ONE看門(mén)狗定時(shí)器在CPU可能受到軟件顛覆的情況下,看門(mén)狗定時(shí)器(WDT)可用于恢復(fù)。當(dāng)軟件在選定時(shí)間間隔內(nèi)不能清除WDT時(shí),WDT必須就復(fù)位系統(tǒng)??撮T(mén)狗可用于受到電氣噪音、電源故障、靜電放電等影響,或需要高可靠性的環(huán)境。如果一個(gè)應(yīng)用不需要看門(mén)狗功能,可以配置看門(mén)狗定時(shí)器為一個(gè)間隔定時(shí)器,這樣可以用于在選定的時(shí)間間隔產(chǎn)生中斷。什么是看門(mén)狗定時(shí)器看門(mén)狗定時(shí)器四個(gè)可選的定時(shí)器間隔看門(mén)狗模式定時(shí)器模式在定時(shí)器模式下產(chǎn)生中斷請(qǐng)求WDT可以配置為一個(gè)看門(mén)狗定時(shí)器或一個(gè)通用的定時(shí)器。WDT模塊的運(yùn)行由WDCTL寄存器控制??撮T(mén)狗定時(shí)器包括一個(gè)15位計(jì)數(shù)器,它的頻率由32kHz時(shí)鐘源規(guī)定。注意用戶不能獲得15位計(jì)數(shù)器的內(nèi)容。在所有供電模式下,15位計(jì)數(shù)器的內(nèi)容保留,且當(dāng)重新進(jìn)入主動(dòng)模式,看門(mén)狗定時(shí)器繼續(xù)計(jì)數(shù)??撮T(mén)狗定時(shí)器的特性如下看門(mén)狗定時(shí)器WDT:WatchDogTimer,本質(zhì)上是一個(gè)計(jì)數(shù)器,可以監(jiān)測(cè)系統(tǒng)的運(yùn)行情況,在程序“跑飛”的情況下,實(shí)現(xiàn)自動(dòng)復(fù)位。程序正常運(yùn)行過(guò)程中,每隔一段時(shí)間內(nèi)核發(fā)出指令讓看門(mén)狗重新開(kāi)始計(jì)數(shù),也稱為喂狗。只要在設(shè)定的最大間隔時(shí)間內(nèi),通過(guò)喂狗復(fù)位計(jì)數(shù)器,系統(tǒng)就不會(huì)復(fù)位。1.看門(mén)狗原理當(dāng)系統(tǒng)受到干擾導(dǎo)致程序跑飛,或者軟件存在漏洞沒(méi)有按預(yù)定設(shè)計(jì)執(zhí)行,在設(shè)定的最大喂狗時(shí)間內(nèi)沒(méi)有進(jìn)行定時(shí)器復(fù)位,看門(mén)狗則溢出,系統(tǒng)自動(dòng)復(fù)位??撮T(mén)狗定時(shí)器15位計(jì)數(shù)器,工作在32KHz的時(shí)鐘頻率,系統(tǒng)復(fù)位時(shí)禁用。4個(gè)定時(shí)間隔:1s、0.25s、15.625ms、1.9ms。2種工作模式:看門(mén)狗模式、定時(shí)器模式。喂狗序列:在一個(gè)看門(mén)狗時(shí)鐘周期內(nèi),寫(xiě)入0xA到WDCTL.CLR[3:0],然后寫(xiě)入0x5到同一個(gè)寄存器中。1.看門(mén)狗原理看門(mén)狗定時(shí)器2.看門(mén)狗控制寄存器WDCTL位名稱復(fù)位R/W描述7:4CLR[3:0]0000R0/W清除定時(shí)器。當(dāng)0xA跟隨0x5寫(xiě)到這些位,定時(shí)器被清除(即加載0)。3:2MODE[1:0]00R/W模式選擇。00:IDLE(idle空閑的意思)
01:IDLE(未使用,等于00設(shè)置)10:看門(mén)狗模式
11:定時(shí)器模式1:0INT[1:0]00R/W定時(shí)器間隔選擇。注意時(shí)間間隔智能在WDT處于IDLE時(shí)改變,這樣間隔必須在定時(shí)器啟動(dòng)同時(shí)設(shè)置。00:1s01:
0.25s10:15.625ms
11:1.9ms設(shè)計(jì)參考:將看門(mén)狗定時(shí)器設(shè)為看門(mén)狗模式,喂狗時(shí)間為0.25秒。WDCTL=0x09;00001001將看門(mén)狗定時(shí)器設(shè)為定時(shí)器模式,定時(shí)間隔為1秒。WDCTL=0x0C;//00001100看門(mén)狗定時(shí)器將看門(mén)狗定時(shí)器設(shè)置成定時(shí)器模式。定時(shí)周期選擇1秒。在看門(mén)狗中斷服務(wù)函數(shù)中,切換LED1燈的開(kāi)關(guān)狀態(tài)。注:看門(mén)狗中斷標(biāo)志位--WDTIF,需要軟件手動(dòng)清除。任務(wù)5.1:看門(mén)狗定時(shí)器實(shí)現(xiàn)1秒定時(shí)
P1_0P1_1P0_4P0_1P2_0LED1LED2LED3K1K2CC2530模塊端口初始化函數(shù)看門(mén)狗初始化函數(shù)看門(mén)狗中斷服務(wù)函數(shù)定時(shí)器模式
看門(mén)狗定時(shí)器中斷允許總中斷看門(mén)狗定時(shí)器看門(mén)狗初始化函數(shù)WDCTLIEN2.WDTIE(第5位)EA=1;voidInit_WDI(){WDCTL=0x0C;//00001100,定時(shí)器模式,1s,修改最后2位,即修改定時(shí)長(zhǎng)度IEN2|=0x20;//00100000//
IEN2.WDTIE(第5位),看門(mén)狗定時(shí)中斷允許位EA=1;//總中斷允許位}看門(mén)狗定時(shí)器看門(mén)狗中斷函數(shù)看門(mén)狗中斷標(biāo)志位WDTIF#pragmavector=WDT_VECTOR__interruptvoidSevice_WDT(){
WDTIF=0;//清除看門(mén)狗中斷標(biāo)志位,在IRCON2.4LED1=~LED1;}看門(mén)狗定時(shí)器主函數(shù)main看門(mén)狗中斷函數(shù)LED引腳初始化函數(shù)看門(mén)狗初始化函數(shù)死循環(huán)while(1)②看門(mén)狗定時(shí)器中斷允許①定時(shí)器模式③總中斷②切換LED1狀態(tài)①清除看門(mén)狗標(biāo)志位配置LED1(P1_0)作為IO輸出引腳①定時(shí)器模式看門(mén)狗定時(shí)器拓展任務(wù)5.2使看門(mén)狗定時(shí)器WDT工作在定時(shí)器模式,控制LED1、LED2、LED3的亮/滅。LED1亮滅時(shí)間間隔1s,LED2亮滅時(shí)間間隔2s、LED3亮滅時(shí)間間隔3s。采用中斷方式,在中斷服務(wù)函數(shù)中切換次LED的亮滅狀態(tài)。智能產(chǎn)品設(shè)計(jì)與應(yīng)用6.看門(mén)狗定時(shí)器和系統(tǒng)時(shí)鐘運(yùn)用案例導(dǎo)入01/PART
ONE看門(mén)狗定時(shí)器初始化看門(mén)狗定時(shí)器為看門(mén)狗模式,喂狗時(shí)間為1秒。設(shè)計(jì)LED燈檢測(cè)函數(shù),3個(gè)燈同時(shí)點(diǎn)亮,延時(shí),再同時(shí)熄滅。設(shè)計(jì)帶喂狗功能的閃燈函數(shù),LED1亮,延時(shí),LED1滅,延時(shí),喂狗。設(shè)計(jì)不帶喂狗功能的閃燈函數(shù),LED2亮,延時(shí),LED2滅,延時(shí)。在主函數(shù)中,進(jìn)入死循環(huán),先執(zhí)行8次帶喂狗功能的閃燈函數(shù),再執(zhí)行8次不帶喂狗功能的閃燈函數(shù)。效果:帶喂狗,閃爍完成,不帶喂狗,超過(guò)時(shí)間,會(huì)復(fù)位。任務(wù)5.3設(shè)計(jì)看門(mén)狗監(jiān)測(cè)程序看門(mén)狗定時(shí)器
P1_0P1_1P0_4P0_1P2_0LED1LED2LED3K1K2CC2530模塊任務(wù)5.3設(shè)計(jì)看門(mén)狗監(jiān)測(cè)程序端口初始化函數(shù)看門(mén)狗初始化函數(shù)喂狗函數(shù)LED1閃爍函數(shù)LED2閃爍函數(shù)看門(mén)狗定時(shí)器主函數(shù)mainLED1閃爍喂狗函數(shù)LED引腳初始化函數(shù)看門(mén)狗初始化函數(shù)死循環(huán)while(1)①看門(mén)狗模式1s8次LED1閃爍函數(shù)(帶喂狗)8次LED2閃爍函數(shù)(不帶喂狗)WDCTL=0x08;LED2閃爍Feed_Dog()WDCTL|=0xA0;WDCTL|=0x50;看門(mén)狗定時(shí)器voidInit_WDI(){WDCTL=0x08;//00001000,看門(mén)狗模式,1s}看門(mén)狗初始化函數(shù)voidFeed_Dog(){WDCIL|=0xA0;WDCTL|=0x50;}喂狗函數(shù)系統(tǒng)時(shí)鐘系統(tǒng)時(shí)鐘是從所選的主時(shí)鐘源獲得的。CC2530的主時(shí)鐘源:(1)16MHz的內(nèi)部RC振蕩器
(2)32MHz的外部晶振32MHz的外部晶振,其啟動(dòng)時(shí)間對(duì)一些應(yīng)用程序來(lái)說(shuō)可能比較長(zhǎng),所以設(shè)備可以先運(yùn)行在16MHz的內(nèi)部RC振蕩器,直到外部晶振穩(wěn)定。RC振蕩器的功耗低于外部晶振,但是精度不如外部晶振高,因此,要使用RF收發(fā)器,必須使用32MHz晶體振蕩器。串口通信是也建議使用32MHz晶體振蕩器。系統(tǒng)時(shí)鐘CLKCONCMD時(shí)鐘控制命令寄存器位名稱復(fù)位R/W描述7OSC32K1R/W當(dāng)前選擇的32kHz時(shí)鐘源。0:32kHzXOSC
1:32kHzRCOSC6OSC1R/W當(dāng)前選擇的系統(tǒng)時(shí)鐘。0:32MHzXOSC
1:16MHzRCOSC5:3TICKSPD[2:0]001R/W當(dāng)前設(shè)置的定時(shí)器標(biāo)記輸出,不能高于通過(guò)OSC位設(shè)置的時(shí)鐘。000:32MHz
001:16MHz2:0CLKSPD001R/W當(dāng)前時(shí)鐘速度,表示當(dāng)前系統(tǒng)時(shí)鐘頻率。000:32MHz
001:16MHzCLKCONCMD.OSC位選擇主系統(tǒng)的時(shí)鐘源。改變CLKCONCMD.OSC位不會(huì)立即改變系統(tǒng)的時(shí)鐘。時(shí)鐘源的改變首先在CLKCONSTA.OSC位與CLKCONCMD.OSC位相等的時(shí)候生效。因?yàn)樵趯?shí)際改變時(shí)鐘源之前需要有穩(wěn)定的時(shí)鐘。上電默認(rèn)選擇系統(tǒng)時(shí)鐘CLKCONSTA時(shí)鐘控制狀態(tài)寄存器(只讀)位名稱復(fù)位R/W描述7OSC32K1R當(dāng)前選擇的32kHz時(shí)鐘源。0:32kHzXOSC
1:32kHzRCOSC6OSC1R當(dāng)前選擇的系統(tǒng)時(shí)鐘。0:32MHzXOSC
1:16MHzRCOSC5:3TICKSPD[2:0]001R當(dāng)前設(shè)置的定時(shí)器標(biāo)記輸出,不能高于通過(guò)OSC位設(shè)置的時(shí)鐘。000:32MHz
001:16MHz2:0CLKSPD001R當(dāng)前時(shí)鐘速度,表示當(dāng)前系統(tǒng)時(shí)鐘頻率。000:32MHz
001:16MHz將CC2530的系統(tǒng)時(shí)鐘源從16MHz的內(nèi)部RC振蕩器切換成32MHz的外部晶振。CLKCONCMD&=~0x40;//0SC位清0,選擇系統(tǒng)時(shí)鐘源為32MHz晶振。while(CLKCONSTA&0x40);//等待外部晶振穩(wěn)定,第6位OSC由1變?yōu)?,就穩(wěn)定了。CLKCONCMD&=~
0x07;//設(shè)置當(dāng)前系統(tǒng)時(shí)鐘的速度為32MHz,最低3位變?yōu)?。系統(tǒng)時(shí)鐘位名稱復(fù)位R/W描述7OSC32K1R/W當(dāng)前選擇的32kHz時(shí)鐘源。0:
32kHzXOSC
1:32kHzRCOSC6OSC1R/W當(dāng)前選擇的系統(tǒng)時(shí)鐘。0:32MHzXOSC
1:16MHzRCOSC5:3TICKSPD[2:0]001R/W當(dāng)前設(shè)置的定時(shí)器標(biāo)記輸出,不能高于通過(guò)OSC位設(shè)置的時(shí)鐘。000:32MHz
001:16MHz2:0CLKSPD001R/W當(dāng)前時(shí)鐘速度,表示當(dāng)前系統(tǒng)時(shí)鐘頻率。000:32MHz
001:16MHz系統(tǒng)時(shí)鐘CLKCONCMD&=~0x40;//0SC位清0,選擇系統(tǒng)時(shí)鐘源為32MHz晶振while(CLKCONSTA&0x40);//等待外部晶振穩(wěn)定,第6位OSC由1變?yōu)?,就穩(wěn)定了CLKCONCMD&=~
0x07;//設(shè)置當(dāng)前系統(tǒng)時(shí)鐘的速度為32MHz,最低3位變?yōu)?CLKCONCMD|=0x40;//0SC位清1,選擇系統(tǒng)時(shí)鐘源為16MHz晶振While(!(CLKCONSTA&0x40));//第6位OSC由0變?yōu)?CLKCONCMD|=0x01;//設(shè)置當(dāng)前系統(tǒng)時(shí)鐘的速度為16MHz,最低3位000->001設(shè)置為32MHz設(shè)置為16MHz系統(tǒng)時(shí)鐘設(shè)計(jì)端口初始化函數(shù),配置1個(gè)LED燈和k1,關(guān)閉1個(gè)LED燈。設(shè)計(jì)系統(tǒng)時(shí)鐘切換函數(shù),根據(jù)參數(shù)進(jìn)行16MHz和32MHz時(shí)鐘源切換。設(shè)計(jì)按鍵掃描處理函數(shù),當(dāng)k1按下松開(kāi)后,切換系統(tǒng)的時(shí)鐘源,當(dāng)前為16MHz的切換成32MHz,當(dāng)前是32MHz的則切換為16MHz。在主函數(shù),D1燈循環(huán)閃爍,并對(duì)按鍵k1進(jìn)行掃描處理。任務(wù)5.6按鍵控制系統(tǒng)時(shí)鐘切換
P1_0P1_1P0_4P0_1P2_0LED1LED2LED3K1K2CC2530模塊系統(tǒng)時(shí)鐘IO配置Whle(1)LED1亮延時(shí)鍵盤(pán)掃描LED1滅延時(shí)鍵盤(pán)掃描F_clk=16;鍵盤(pán)掃描函數(shù)確定按鍵按下Main主程序F_clk=16?F_clk=32;設(shè)置時(shí)鐘為32MHzset_clock(32);F_clk=32?F_clk=16;設(shè)置時(shí)鐘為16MHzset_clock(16);YNYN設(shè)置時(shí)鐘函數(shù)set_clock(?);CLKCONCMD|=0X40;//OSC=1;while(!(CLKCONSTA&0X40));//等待OSC變?yōu)?CLKCONCMD|=0X01;//000->001,低三位置001,16MHz1632CLKCONCMD&=~0X40;//OSC=0;while(CLKCONSTA&0X40);//等待OSC變?yōu)?CLKCONCMD&=~0X07;//低三位置001->000,32MHz系統(tǒng)時(shí)鐘voidset_clock(unsignedcharclk_set){switch(clk_set){case16:CLKCONCMD|=0X40;//OSC=1;while(!(CLKCONSTA&0X40));//等待OSC變?yōu)?CLKCONCMD|=0X01;//000->001,低三位置001,32MHzbreak;case32:CLKCONCMD&=~0X40;//OSC=0;while(CLKCONSTA&0X40);//等待OSC變?yōu)?CLKCONCMD&=~0X07;//低三位置0,32MHzbreak;}}系統(tǒng)時(shí)鐘voidkey_scan(){if(k1==0){delay(100);if(k1==0){while(k1==0);if(F_clk==16){F_clk=32;set_clock(32);}elseif(F_clk==32){F_clk=16;set_clock(16);}}}}按鍵掃描切換系統(tǒng)時(shí)鐘智能產(chǎn)品設(shè)計(jì)與應(yīng)用7.外部中斷基本概念案例導(dǎo)入01/PART
ONE外部中斷基本概念內(nèi)核與外設(shè)之間的主要交互方式有兩種:輪詢和中斷。輪詢的方式貌似公平,但實(shí)際工作效率很低,且不能及時(shí)響應(yīng)緊急事件;中斷系統(tǒng)使得內(nèi)核具備了應(yīng)對(duì)突發(fā)事件的能力。在執(zhí)行CPU當(dāng)前程序時(shí),由于系統(tǒng)中出現(xiàn)了某種急需處理的情況,CPU暫停正在執(zhí)行的程序,轉(zhuǎn)而去執(zhí)行另外一段特殊程序來(lái)處理出現(xiàn)的緊急事務(wù),處理結(jié)束后,CPU自動(dòng)返回到原來(lái)暫停的程序中去繼續(xù)執(zhí)行。這種程序在執(zhí)行過(guò)程中由于外界的原因而被中間打斷的情況,稱為中斷。兩個(gè)重要的概念中斷服務(wù)函數(shù):內(nèi)核響應(yīng)中斷后執(zhí)行的相應(yīng)處理程序。中斷向量:中斷服務(wù)程序的入口地址。每個(gè)中斷源都對(duì)應(yīng)一個(gè)固定的入口地址。當(dāng)內(nèi)核響應(yīng)中斷請(qǐng)求時(shí),就會(huì)暫停當(dāng)前的程序執(zhí)行,然后跳轉(zhuǎn)到該入口地址執(zhí)行代碼。1.中斷相關(guān)的基礎(chǔ)概念外部中斷基本概念2.CC2530的中斷系統(tǒng)CC2530具有18個(gè)中斷源,每個(gè)中斷源都由各自的一系列特殊功能寄存器來(lái)進(jìn)行控制。外部中斷基本概念中斷發(fā)生時(shí),CPU就指向上表所描述的中斷向量地址。一旦中斷服務(wù)開(kāi)始,就只能夠被更高優(yōu)先級(jí)的中斷打斷。中斷服務(wù)程序由中斷指令RETI(從中斷指令返回)終止,RETI執(zhí)行時(shí),CPU將返回到中斷發(fā)生時(shí)的下一條指令。當(dāng)中斷發(fā)生時(shí),不管該中斷使能或禁止,CPU都會(huì)在中斷標(biāo)志寄存器中設(shè)置中斷標(biāo)志位。如果當(dāng)設(shè)置中斷標(biāo)志時(shí)中斷使能,那么在下一個(gè)指令周期,由硬件強(qiáng)行產(chǎn)生一個(gè)LCALL到對(duì)應(yīng)的向量地址,運(yùn)行中斷服務(wù)程序。中斷的響應(yīng)需要不同的時(shí)間,取決于該中斷發(fā)生時(shí)CPU的狀態(tài)。當(dāng)CPU正在運(yùn)行的中斷服務(wù)程序,其優(yōu)先級(jí)大于或等于新的中斷時(shí),新的中斷暫不運(yùn)行,直至新的中斷的優(yōu)先級(jí)高于正在運(yùn)行的中斷服務(wù)程序。在其他情況下,中斷響應(yīng)的時(shí)間取決于當(dāng)前的指令,最快響應(yīng)一個(gè)中斷的時(shí)間是7個(gè)機(jī)器指令周期,其中1個(gè)機(jī)器指令周期用于探測(cè)中斷,其余6個(gè)用來(lái)執(zhí)行LCALL。3.中斷處理外部中斷基本概念中斷服務(wù)函數(shù)與一般自定義函數(shù)不同,有特定的書(shū)寫(xiě)格式:(1)在每一個(gè)中斷服務(wù)函數(shù)之前,都要加上一句起始語(yǔ)句:
#pragmavector
=<中斷向量>
<中斷向量>表示接下來(lái)要寫(xiě)的中斷服務(wù)函數(shù)是為那個(gè)中斷源服務(wù)的,有兩種寫(xiě)法:
#pragma
vector=
0x6B
或者
#pragma
vector=
P0INT_VECTOR
前者是中斷向量的入口地址,后者是頭文件“ioCC2530.h”中的宏定義。(2)__interrupt關(guān)鍵字表示該函數(shù)是一個(gè)中斷服務(wù)函數(shù),<函數(shù)名稱>可以自定義,函數(shù)體不能帶有參數(shù),也不能有返回值。4.CC2530的中斷處理函數(shù)編寫(xiě)方法
#pragma
vector=
P0INT_VECTOR__interrupt
voidInt0_Sevice(void)外部中斷基本概念CC2530的P0、P1和P2端口中的每個(gè)引腳都具有外部中斷輸入功能。設(shè)置IEN0~2:中斷使能寄存器:中斷類型使能(大)0:禁止,1:使能PxIEN:P0~2端口中斷使能寄存器:具體引腳使能(小):0:禁止,1:使能PICTL寄存器:端口輸入信號(hào)控制寄存器,0:上升沿,1:下降沿“EA=1;”打開(kāi)總中斷。中斷標(biāo)志端口中斷標(biāo)志位:P0IF、P1IF和P2IF,引腳產(chǎn)生外部中斷時(shí),對(duì)應(yīng)端口組的中斷標(biāo)志自動(dòng)置位。(端口中斷標(biāo)志必須在中斷服務(wù)函數(shù)中手工清除,否則CPU會(huì)反復(fù)進(jìn)入中斷。)引腳狀態(tài)標(biāo)志位:P0IFG、P1IGF和P2IFG,當(dāng)某引腳發(fā)生外部中斷觸發(fā)時(shí),對(duì)應(yīng)引腳標(biāo)志位會(huì)自動(dòng)置位,需要手工清除。5.CC2530的外部中斷外部中斷基本概念中斷觸發(fā)示意圖外部中斷基本概念邏輯順序外部中斷基本概念設(shè)置方法②P0端口中斷允許位位名稱:P0IE寄存器:IEN1.5①EA總中斷允許位位名稱:EA寄存器:IEN0.7③引腳中斷允許寄存器:P0IEN8只引腳中斷允許④中斷觸發(fā)方式位位名稱:P0ICON寄存器:PICTL.0P0ICON:0:上升沿觸發(fā)中斷1:下降沿觸發(fā)中斷⑤P0口中斷標(biāo)志位位名稱:P0IF寄存器:IRCON.5⑥P0口8位引腳中斷標(biāo)志寄存器:P0IFG中斷向量名稱外部中斷基本概念寄存器詳情外部中斷基本概念具體配置②P0端口中斷允許位位名稱:P0IE寄存器:IEN1.5①EA總中斷允許位位名稱:EA寄存器:IEN0.7③引腳中斷允許寄存器:P0IEN8只引腳中斷允許④中斷觸發(fā)方式位位名稱:P0ICON寄存器:PICTL.0P0ICON:0:上升沿觸發(fā)中斷1:下降沿觸發(fā)中斷⑥P0口中斷標(biāo)志位位名稱:P0IF寄存器:IRCON.5⑤P0口8位引腳中斷標(biāo)志寄存器:P0IFGP0_1K1中斷服務(wù)程序中,先清除位標(biāo)志,再清除端口標(biāo)志EA=1;//打開(kāi)總中斷IEN1|=0X20;//P0端口中斷允許P0IE
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二手車交易財(cái)務(wù)制度
- 三資資金財(cái)務(wù)制度
- 上海地區(qū)餐飲財(cái)務(wù)制度
- 對(duì)賬財(cái)務(wù)制度規(guī)定
- 基層自治組織財(cái)務(wù)制度
- 公路工程質(zhì)量檢查、評(píng)定與驗(yàn)收制度
- 公司員工制度
- 工地樣品封存管理制度文庫(kù)(3篇)
- 服務(wù)外包人員保密管理制度(3篇)
- 液氨回收施工方案(3篇)
- 座椅相關(guān)測(cè)試題及答案
- 《大連醫(yī)科大學(xué)研究生學(xué)位論文書(shū)寫(xiě)規(guī)范》
- 二十屆四中全會(huì)測(cè)試題及參考答案
- 蒸鍍相關(guān)知識(shí)培訓(xùn)總結(jié)
- 按摩禁忌課件
- 代建工程安全管理
- 風(fēng)電場(chǎng)培訓(xùn)安全課件
- 工程質(zhì)量管理復(fù)盤(pán)總結(jié)
- (完整版)房屋拆除施工方案
- 供水管道搶修知識(shí)培訓(xùn)課件
- 廣東物業(yè)管理辦法
評(píng)論
0/150
提交評(píng)論