版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
網(wǎng)絡(luò)空間安全學(xué)院網(wǎng)絡(luò)安全基礎(chǔ)技術(shù)應(yīng)用第五章定時(shí)器系統(tǒng)目錄CONTENT5.1.定時(shí)器工作原理5.2.定時(shí)器配置5.3.PWM定時(shí)器5.1.1.定時(shí)器內(nèi)部結(jié)構(gòu)定時(shí)器通過(guò)記錄單位時(shí)間發(fā)生的次數(shù)完成定時(shí)、延時(shí)等功能,所以定時(shí)器的核心是一個(gè)計(jì)數(shù)寄存器組,記錄脈沖發(fā)生的次數(shù)。以定時(shí)器0為例,定時(shí)器0自動(dòng)重裝載內(nèi)部結(jié)構(gòu)及工作原理如圖5.1-1所示。圖5.1-1定時(shí)器0自動(dòng)重裝載內(nèi)部結(jié)構(gòu)圖SYSclk在第二章圖2.3-2已經(jīng)說(shuō)明。定時(shí)器內(nèi)部結(jié)構(gòu)的核心是計(jì)數(shù)寄存器TH0、TL0。在這兩個(gè)寄存器前面,有兩個(gè)選擇開(kāi)關(guān),分別受到AUXR.7、C/T控制;在這兩個(gè)計(jì)數(shù)寄存器下面,有2個(gè)重裝寄存器RL_TH0、RL_TL0,是TH0和TL0的預(yù)裝值。定時(shí)器的工作過(guò)程說(shuō)明如下。5.1.1.定時(shí)器內(nèi)部結(jié)構(gòu)(1)TH0、TL0:定時(shí)器0的計(jì)數(shù)寄存器,從初值開(kāi)始往上計(jì)數(shù),是向上計(jì)數(shù)器。當(dāng)定時(shí)器工作在16位模式時(shí),TH0和TL0組合成為一個(gè)16位寄存器,TL0是低字節(jié),TH0是高字節(jié);如果定時(shí)器工作在8位模式,TL0和TH0是兩個(gè)獨(dú)立的8位寄存器。(2)當(dāng)TR0=1,TH0、TL0開(kāi)始對(duì)輸入振蕩器信號(hào)計(jì)數(shù),計(jì)滿后讓TF0=1,向CPU發(fā)出中斷請(qǐng)求。(3)TH0、TL0溢出后,一方面TF0置1,發(fā)出中斷請(qǐng)求;另一方面自動(dòng)重新載入RL_TH0、RL_TL0的值,開(kāi)始新一輪的計(jì)數(shù)。(4)RL_TH0、RL_TL0是TH0和TL0的影子寄存器,當(dāng)用戶第一次給TH0、TL0賦值的時(shí)候,這個(gè)初值就被寫(xiě)入到RL_TH0、RL_TL0,一旦TH0、TL0計(jì)滿溢出不僅置位TF0,而且會(huì)自動(dòng)將影子寄存器的內(nèi)容重新載入到TH0、TL0。5.1.1.定時(shí)器內(nèi)部結(jié)構(gòu)(5)定時(shí)器可以由軟件啟動(dòng),也可以由硬件啟動(dòng)。當(dāng)GATE=0時(shí)無(wú)需外部條件只要TR0=1就可以讓定時(shí)器計(jì)時(shí);當(dāng)GATE=1時(shí)需要INT0管腳為1,此時(shí)TR0=1才有效。(6)當(dāng)C/T=0時(shí),多路開(kāi)關(guān)連接到系統(tǒng)內(nèi)部系統(tǒng)時(shí)鐘,是定時(shí)器的方式。定時(shí)器對(duì)內(nèi)部系統(tǒng)時(shí)鐘SYSclk周期計(jì)數(shù),AUXR.7決定了SYSclk是否分頻,如果AUXR.7=0,那么12個(gè)SYSclk定時(shí)器才計(jì)數(shù)一次,如果AUXR.7=1,那么1個(gè)SYSclk計(jì)數(shù)一次。(7)當(dāng)C/T=1時(shí),多路開(kāi)關(guān)連接到芯片外部的T0管腳,是計(jì)數(shù)器的方式,不計(jì)算時(shí)間,只記錄脈沖發(fā)生次數(shù),當(dāng)計(jì)數(shù)達(dá)到規(guī)定的值就溢出,發(fā)出中斷請(qǐng)求。(8)當(dāng)T0CLKO=1時(shí),定時(shí)器0在P3.5管腳輸出脈沖波形,為外圍電路提供時(shí)鐘信號(hào)源。5.1.2.定時(shí)器的工作模式不同的單片機(jī)型號(hào)提供的定時(shí)器數(shù)量是不一樣的。傳統(tǒng)8051單片機(jī)只有定時(shí)器0和1,且只有定時(shí)器1可做串口通信的波特率發(fā)生器?,F(xiàn)代單片機(jī)定時(shí)器數(shù)量大大增加,STC8、STC32系列內(nèi)置5個(gè)16位定時(shí)器。定時(shí)器的核心是計(jì)數(shù)寄存器,計(jì)數(shù)寄存器到底怎么工作,決定了定時(shí)器的工作模式。按照計(jì)數(shù)寄存器的位數(shù),分為8位定時(shí)器、16位定時(shí)器;按照計(jì)數(shù)器初值是否能自動(dòng)重裝,分為自動(dòng)重裝載和不可重裝兩種。表5.1-1列出了STC單片機(jī)各定時(shí)器的工作模式。從列表5.1-1可知,定時(shí)器0和定時(shí)器1有四種工作模式,定時(shí)器2~4只有一種工作模式。下面分別介紹這四種工作模式。定時(shí)器x(Tx)定時(shí)器0(T0)定時(shí)器1(T1)定時(shí)器2~4(T2、T3、T4)模式016位自動(dòng)重裝載16位自動(dòng)重裝載模式模式116位不可重裝模式28位自動(dòng)重裝模式3不可屏蔽中斷的16位自動(dòng)裝載無(wú)效表5.1-1STC系列單片機(jī)定時(shí)器的工作模式5.1.2.定時(shí)器的工作模式1.模式0——16位自動(dòng)重裝:圖5.1-2是定時(shí)器0的16位自動(dòng)重裝內(nèi)部結(jié)構(gòu)圖,定時(shí)器的兩個(gè)計(jì)數(shù)器THx、TLx都參與計(jì)數(shù),當(dāng)計(jì)數(shù)溢出后,單片機(jī)自動(dòng)把影子寄存器的初始值賦值給它們,重新從初值開(kāi)始計(jì)數(shù)。圖5.1-2定時(shí)器的16位自動(dòng)重裝載模式5.1.2.定時(shí)器的工作模式2.模式1——16位不可重裝:圖5.1-3是定時(shí)器0的16位不可重裝結(jié)構(gòu)圖,定時(shí)器的兩個(gè)計(jì)數(shù)器THx、TLx都參與計(jì)數(shù),當(dāng)計(jì)數(shù)溢出后,THx和TLx向高位進(jìn)位產(chǎn)生TF0信號(hào),自身清零。因?yàn)闆](méi)有自動(dòng)重裝初值,所以TH0、TL0從0開(kāi)始重新計(jì)數(shù),為了與上次定時(shí)時(shí)間一致,程序要對(duì)THx、TLx再次賦值。16位不可重裝的工作過(guò)程如圖5.1-3所示。圖5.1-3定時(shí)器0的16位不可重裝載模式5.1.2.定時(shí)器的工作模式3.模式2——8位自動(dòng)重裝:圖5.1-4是定時(shí)器0的8位自動(dòng)重裝結(jié)構(gòu)圖,定時(shí)器只有TLx參與計(jì)數(shù),當(dāng)TLx計(jì)數(shù)溢出后,單片機(jī)自動(dòng)把THx中的值裝進(jìn)TLx,從初值開(kāi)始加1計(jì)數(shù)。圖5.1-4定時(shí)器0的8位自動(dòng)重裝載模式4.模式3——不可屏蔽中斷的16位自動(dòng)裝載:內(nèi)部結(jié)構(gòu)同模式0的圖5.1-2完全一致,但是該模式中斷處理特殊,只要中斷開(kāi)啟,中斷請(qǐng)求將不可屏蔽,既無(wú)法禁止該中斷,此功能可作為系統(tǒng)節(jié)拍器或系統(tǒng)監(jiān)控使用。任務(wù)1.理解定時(shí)器工作原理任務(wù)要求:理解定時(shí)器的核心部件——計(jì)數(shù)器寄存器TH、TL,其記錄輸入脈沖的過(guò)程。要求①設(shè)置定時(shí)器0的工作模式是8位自動(dòng)重裝(模式2);要求②讀出計(jì)數(shù)寄存器的值;要求③當(dāng)它溢出后蜂鳴器鳴叫。1.任務(wù)分析:(1)圖5.1-4是定時(shí)器T0模式2工作原理圖,根據(jù)任務(wù)要求,定時(shí)器工作在計(jì)數(shù)器模式。(2)設(shè)置T0管腳(P3.4)是計(jì)數(shù)器輸入管腳,按鍵每按下一次,計(jì)數(shù)寄存器TL0值就增加1。(3)當(dāng)TL0溢出后,TF0值會(huì)被置1。(4)令TL0值顯示在數(shù)碼管,TF0使得蜂鳴器響。(5)按鍵電路參考圖5.1-6,電路沒(méi)有上拉電阻,因此需要設(shè)置P34、P35是內(nèi)部上拉。(6)蜂鳴器電路參考圖5.1-7,P5.4管腳是可編程管腳,當(dāng)它低電平時(shí),三極管T2導(dǎo)通,蜂鳴器上電開(kāi)始鳴叫。(7)查詢TF0的狀態(tài),根據(jù)TF0的狀態(tài)控制P5.4管腳電平。任務(wù)1.理解定時(shí)器工作原理圖5.1-5定時(shí)器0、定時(shí)器1外部管腳連接按鍵圖5.1-6蜂鳴器電路任務(wù)1.理解定時(shí)器工作原理2.任務(wù)參考代碼:/*************功能說(shuō)明******************************************讀計(jì)數(shù)寄存器內(nèi)容,了解定時(shí)器工作原理由于按鍵是機(jī)械按鍵,按下有抖動(dòng),本例程沒(méi)有去抖動(dòng)處理,所以按一次可能連續(xù)計(jì)數(shù)./*---------------------------------------------------------------------*/ #include<STC8.H>#defineMAIN_Fosc12000000UL//定義主時(shí)鐘typedefunsignedcharu8;typedefunsignedintu16;typedefunsignedlongu32;/***********本地常量聲明段碼共陰數(shù)碼管顯示字形編碼*************/任務(wù)1.理解定時(shí)器工作原理 //0123456789u8codetab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, //ABCDEFblack 0x77,0x7C,0x39,0x5E,0x79,0x71, 0x00};/************位碼,8位數(shù)碼管com7~com0獨(dú)立選中****************/u8codedspcom[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};u8dspbuf[8]={16,16,16,16,16,16,16,16};//顯示緩沖,初始化黑屏u8display_index=0;//顯示位索引voiddelay_ms(u8ms);//聲明延時(shí)函數(shù)voidDisplayScan(void);//數(shù)碼管顯示掃描/***********端口設(shè)置的初始化函數(shù)***********************/voidGPIO_PxMxSet()任務(wù)1.理解定時(shí)器工作原理{ P0M1=0x00;P0M0=0x00;//設(shè)置為準(zhǔn)雙向口P1M1=0x00;P1M0=0x00;//設(shè)置為準(zhǔn)雙向口P2M1=0x00;P2M0=0x00;//設(shè)置為準(zhǔn)雙向口//P3M1=0x00;P3M0=0x00;//設(shè)置為準(zhǔn)雙向口P4M1=0x00;P4M0=0x00;//設(shè)置為準(zhǔn)雙向口P5M1=0x00;P5M0=0x00;//設(shè)置為準(zhǔn)雙向口P6M1=0x00;P6M0=0x00;//設(shè)置為準(zhǔn)雙向口P7M1=0x00;P7M0=0x00;//設(shè)置為準(zhǔn)雙向口P40=0;}voidTimer0Init(void) //計(jì)數(shù)10次@12.000MHz任務(wù)1.理解定時(shí)器工作原理{ AUXR&=0x7F; //定時(shí)器時(shí)鐘12T模式 TMOD&=0xF0; //設(shè)置定時(shí)器模式 TMOD|=0x06; //設(shè)置定時(shí)器模式 TL0=0xF5; //設(shè)置定時(shí)初始值,為了減少按鍵次數(shù),從245開(kāi)始計(jì)數(shù) TH0=0xF5; //設(shè)置定時(shí)重載值 TF0=0; //清除TF0標(biāo)志 TR0=1; //定時(shí)器0開(kāi)始計(jì)數(shù)}voidmain(){GPIO_PxMxSet()任務(wù)1.理解定時(shí)器工作原理P3M1=0x30;P3M0=0x00;//P3.4,P3.5設(shè)置為輸入口 P_SW2|=0x80; //使能擴(kuò)展RAMP3PU=0x30;//P3.4,P3.5使能內(nèi)部4.1K上拉電阻P_SW2&=0x7f;Timer0Init(); while(1){ if(TF0)//查詢定時(shí)器是否溢出 { P54=0; delay_ms(200);//鳴叫一段時(shí)間 P54=1; TF0=0;
任務(wù)1.理解定時(shí)器工作原理 } DisplayScan(); }}//========================================================================//函數(shù):voiddelay_ms(u8ms)//描述:延時(shí)函數(shù)。//參數(shù):ms,要延時(shí)的ms數(shù),這里只支持1~255ms.自動(dòng)適應(yīng)主時(shí)鐘.//返回:none.//========================================================================任務(wù)1.理解定時(shí)器工作原理voiddelay_ms(u8ms){u16i;do{i=MAIN_Fosc/10000;while(--i);//10Tperloop}while(--ms);}/**********************數(shù)碼管動(dòng)態(tài)顯示掃描函數(shù)************************/voidDisplayScan(void){ //顯示內(nèi)容 dspbuf[6]=TL0>>4;//顯示高四位任務(wù)1.理解定時(shí)器工作原理 dspbuf[7]=TL0&0x0f;//顯示低四位 //位選 P7=~dspcom[display_index];//從最左邊開(kāi)始 //段選 P6=~tab[dspbuf[display_index]]; //延時(shí),穩(wěn)定顯示 delay_ms(2); //動(dòng)態(tài)數(shù)碼管掃描if(++display_index>=8)//與靜態(tài)顯示相比,數(shù)碼管顯示位是變化的{display_index=0;//8位結(jié)束回0}}任務(wù)1.理解定時(shí)器工作原理總結(jié):P34,T0按鍵每按下一次,TL0計(jì)數(shù)值就增加1,當(dāng)TL0=0xff,再次按下按鍵,定時(shí)器溢出,并將TH0的值自動(dòng)重裝給TL0。任務(wù)17操作視頻見(jiàn)二維碼5.1-1。二維碼5.1-1任務(wù)17的程序?qū)崿F(xiàn)5.2.定時(shí)器配置現(xiàn)代單片機(jī)有多個(gè)定時(shí)器,其中定時(shí)器0、1和傳統(tǒng)8051完全兼容,定時(shí)器2及以上都是擴(kuò)展定時(shí)器,這兩類定時(shí)器的功能及使用稍有不同,因此分別講述其配置方法。5.2.1.定時(shí)器0、1配置單片機(jī)的定時(shí)器0有4種工作模式,定時(shí)器1有3種工作模式。定時(shí)器模塊是單片機(jī)重要資源,要開(kāi)啟定時(shí)器,首先要給它權(quán)限,允許定時(shí)器工作,即將允許標(biāo)志位置“1”;其次要設(shè)置定時(shí)器的工作模式,即設(shè)定單片機(jī)工作在16位還是8位,是自動(dòng)重裝還是非重裝模式。定時(shí)器配置,既給特殊功能寄存器賦值。有兩個(gè)寄存器非常重要:控制寄存器(TCON)——允許標(biāo)志位所在的寄存器;工作模式寄存器(TMOD)——設(shè)置定時(shí)器工作模式的寄存器。除了TCON、TMOD,其它與定時(shí)器0和1有關(guān)的寄存器一并說(shuō)明如下。(1)TCON:定時(shí)器控制寄存器,可位尋址寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0TCON88HTF1TR1TF0TR0IE1IT1IE0IT05.2.1.定時(shí)器0、1配置TF1:定時(shí)器T1的溢出中斷標(biāo)志,當(dāng)計(jì)數(shù)寄存器從初值加1計(jì)數(shù),到0xffff(16位計(jì)數(shù)器)或0xff(8位計(jì)數(shù)器)后,進(jìn)位產(chǎn)生溢出,硬件將TF1置“1”,向CPU發(fā)出中斷請(qǐng)求,一直保持到CPU響應(yīng)中斷時(shí),由硬件清“0”,如果單片機(jī)沒(méi)有開(kāi)啟定時(shí)器中斷,要軟件清“0”TR1:定時(shí)器T1的運(yùn)行控制位(TimerRunning),TR1=1,允許Timer1開(kāi)始計(jì)數(shù),TR1=0時(shí)停止Timer1計(jì)數(shù)。TF0:定時(shí)器T0的溢出中斷編址,功能及使用同TF1。TR0:定時(shí)器T0的運(yùn)行控制位,功能及使用同TR1。IE1:外部中斷1(管腳INT1/P33)請(qǐng)求標(biāo)志,當(dāng)IE1=1,意味著有外部中斷源信號(hào)向CPU發(fā)出請(qǐng)求,當(dāng)CPU響應(yīng)該中斷時(shí)單片機(jī)自動(dòng)清除該標(biāo)志位。IT1:外部中斷1觸發(fā)控制位,當(dāng)IT1=0,上升沿或下降沿都可觸發(fā)外部中斷1,當(dāng)IT1=1,外部中斷源的下降沿觸發(fā)中斷。IE0:外部中斷0(管腳INT0/P32)請(qǐng)求標(biāo)志,功能及使用同IE1。IT0:外部中斷0觸發(fā)控制位,功能及使用同IT1。5.2.1.定時(shí)器0、1配置(2)TMOD:定時(shí)器工作模式寄存器,可位尋址寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0TMOD89HGATEC/TM1M0GATEC/TM1M0for:定時(shí)器1定時(shí)器0TMOD可以控制Timer0和Timer1兩個(gè)定時(shí)器的工作模式。高四位控制Timer1,低四位控制Timer0。GATE:當(dāng)Gate=1,硬件開(kāi)啟定時(shí)器;Gate=0,定時(shí)器開(kāi)啟與外部管腳無(wú)關(guān)。C/T:定時(shí)器的作用域,當(dāng)C/T=1,此時(shí)定時(shí)器的功能是個(gè)計(jì)數(shù)器,對(duì)外部中斷的管腳脈沖進(jìn)行計(jì)數(shù)。當(dāng)C/T=0,是定時(shí)器,可以實(shí)現(xiàn)us、ms定時(shí)。5.2.1.定時(shí)器0、1配置M1M0:定時(shí)器工作模式選擇。定時(shí)器0、1都有四個(gè)工作模式,這兩個(gè)定時(shí)器的模式0~2完全一致,模式3不一樣。如表5.2-1所示。M1M0定時(shí)器0定時(shí)器100模式0:16位自動(dòng)重裝定時(shí)器,當(dāng)溢出時(shí)將RL_TH1/RL_TH0、RL_TL1/RL_TL0存放的值自動(dòng)重裝入TH1/TH0和TL1/TL001模式1:16位不可重裝載模式,TH1/TH0、TL1/TL0溢出歸零后要手動(dòng)裝入初值10模式2:8位自動(dòng)重裝載模式,當(dāng)溢出時(shí)將TH1/TH0存放的值自動(dòng)重裝入TL1/TL011模式3:不可屏蔽中斷的16位自動(dòng)重載模式。與模式0相同,但是中斷要無(wú)條件相應(yīng),是最高優(yōu)先級(jí),可用作操作系統(tǒng)的節(jié)拍定時(shí)器或者系統(tǒng)監(jiān)控定時(shí)器。定時(shí)器無(wú)效,停止計(jì)數(shù)。表5.2-1定時(shí)器0和1的工作模式5.2.1.定時(shí)器0、1配置(3)TH0、TL0、TH1、TL1:計(jì)數(shù)寄存器,不可位尋址符號(hào)地址bit7bit6bit5bit4bit3bit2bit1bit0TL0/TL18AH/8BH--------TH0/TH18CH/8DH--------計(jì)數(shù)寄存器不可位尋址,只能整個(gè)寄存器讀和寫(xiě)。當(dāng)定時(shí)器工作在16位模式時(shí),THx和TLx組合成一個(gè)16位寄存器,THx是高8位,TLx是低8位;若為8位模式,THx和TLx是兩個(gè)獨(dú)立的8位寄存器。5.2.1.定時(shí)器0、1配置(4)AUXR:輔助寄存器1,可位尋址”符號(hào)地址bit7bit6bit5bit4bit3bit2bit1bit0AUXR8EHT0x12T1x12UART_M0x6T2RT2_C/TT2x12EXTRAMSIST2T0x12:定時(shí)器0速度控制位。T0x12=0,12T模式,定時(shí)器時(shí)鐘是晶振的1/12(FOSC/12);T0x12=1,1T模式,定時(shí)器時(shí)鐘不分頻(FOSC/1)。T1x12:定時(shí)器1速度控制位,功能及使用同T0x12,當(dāng)復(fù)位后,T0x12、T1x12的值都為0,定時(shí)器時(shí)鐘是12T模式,與傳統(tǒng)8051兼容。UART_M0x6:串口1模式0的通訊速度控制。T2R:定時(shí)器2的運(yùn)行控制位,T2R=0,定時(shí)器2停止計(jì)數(shù);T2R=1,定時(shí)器2開(kāi)始計(jì)數(shù)。T2_C/T:控制定時(shí)器2用作定時(shí)器或計(jì)數(shù)器,清“0”用作定時(shí)器(對(duì)內(nèi)部系統(tǒng)時(shí)鐘進(jìn)行計(jì)數(shù)),置“1”用作計(jì)數(shù)器(對(duì)管腳T2/P1.2外部脈沖進(jìn)行計(jì)數(shù))。T2x12:定時(shí)器2速度控制位,T2x12=0,12T模式,系統(tǒng)時(shí)鐘12分頻;T2x12=1,1T模式,系統(tǒng)時(shí)鐘不分頻。EXTRAM:擴(kuò)展RAM訪問(wèn)控制,EXTRAM=0,訪問(wèn)內(nèi)部擴(kuò)展RAM;EXTRAM=1,內(nèi)部擴(kuò)展RAM被禁用。5.2.2.定時(shí)器計(jì)算公式定時(shí)器0、1的計(jì)算公式見(jiàn)表5.2-2。定時(shí)器計(jì)數(shù)器定時(shí)器速度周期時(shí)間計(jì)算公式16位1T
12T
8位1T
12T表5.2-2定時(shí)器0、1定時(shí)時(shí)間計(jì)算公式:從在上面的計(jì)算公式可以看到,定時(shí)器的計(jì)數(shù)寄存器其實(shí)是個(gè)向上計(jì)數(shù)器。所謂“向上”就是從THx、TL初值開(kāi)始,每來(lái)一個(gè)時(shí)鐘源脈沖,就自動(dòng)+1,直到計(jì)數(shù)滿為止。定時(shí)器的定時(shí)時(shí)間和THx、TLx的初值有關(guān)系,初值越大,定時(shí)時(shí)間就越短。另外,系統(tǒng)時(shí)鐘頻率越快,最大定時(shí)時(shí)間越短。設(shè)單片機(jī)晶振12MHz,定時(shí)器設(shè)置在12T,那么定時(shí)器最大定時(shí)時(shí)間65.536ms。定時(shí)器設(shè)置在1T,最大定時(shí)時(shí)間只有5.46ms。5.2.2.定時(shí)器計(jì)算公式在單片機(jī)應(yīng)用開(kāi)發(fā)中通常已知定時(shí)時(shí)間,定時(shí)器初值是未知數(shù),即需要計(jì)算定時(shí)器從何值開(kāi)始計(jì)數(shù),初值計(jì)算公式如表5.2-3所示。定時(shí)器位數(shù)定時(shí)器速度計(jì)數(shù)寄存器初值計(jì)算公式16位1T12T
8位1T
12T
表5.2-3定時(shí)器0、1的計(jì)數(shù)寄存器初值計(jì)算公式:5.2.2.定時(shí)器計(jì)算公式例1:已知STC8H8K單片機(jī)時(shí)鐘電路頻率是12MHz,單片機(jī)定時(shí)T0工作在12T,16位自動(dòng)重裝模式,現(xiàn)在要定時(shí)50ms,請(qǐng)問(wèn)T0的TH0、TL0初值裝載多少合適?思路1:按照表5.2-3的公式計(jì)算,可以得到TH0和TL0的初值,注意計(jì)算的時(shí)候數(shù)量單位要統(tǒng)一,時(shí)間如果用秒,頻率就要用Hz。256=(65536-50000)/256=60=(65536-50000)%256=176思路2:?jiǎn)纹瑱C(jī)的SYSclk是12MHz,定時(shí)器12T,因此定時(shí)器輸入時(shí)鐘周期是1us,現(xiàn)在定時(shí)50ms即50000us,要經(jīng)過(guò)50000個(gè)時(shí)鐘周期達(dá)到定時(shí)時(shí)間,因此從65536-50000=15536開(kāi)始計(jì)數(shù)。15536轉(zhuǎn)換成16進(jìn)制為0x3CB0,因此TH0=0x3C,TL0=0xB0,與思路1的計(jì)算結(jié)果一致。5.2.2.定時(shí)器計(jì)算公式例2:例1的定時(shí)器T0如果設(shè)定在1T,定時(shí)還是50ms,TH0、TL0初值又該如何設(shè)定?思路:12MHz單片機(jī)的定時(shí)器如果在1T工作模式,50ms已經(jīng)超過(guò)了它的最大定時(shí)時(shí)間,可以將50ms分解為10個(gè)5ms,或者50個(gè)1ms,定時(shí)器先設(shè)定為5ms或1ms溢出,然后記錄溢出次數(shù),達(dá)到次數(shù)后說(shuō)明定時(shí)時(shí)間到。令T0的定時(shí)時(shí)間1ms,得到:256=(65536-12000)/256=209=(65536-12000)%256=32當(dāng)定時(shí)器溢出50次后,達(dá)到定時(shí)時(shí)間50ms。5.2.2.定時(shí)器計(jì)算公式下面介紹使用輔助工具STC-ISP獲得定時(shí)器初值的方法,圖5.2-1示意了工具使用方法。圖5.2-1STC-ISP軟件定時(shí)器初始化5.2.2.定時(shí)器計(jì)算公式步驟如下:(1)選擇系統(tǒng)時(shí)鐘(2)選擇定時(shí)器(3)設(shè)置定時(shí)長(zhǎng)度(4)選擇定時(shí)器模式(5)定時(shí)器時(shí)鐘選擇1T(6)點(diǎn)擊生成C代碼,得到THx、TLx。(7)復(fù)制代碼,粘貼到Keil程序書(shū)寫(xiě)框。任務(wù)3.定時(shí)器1定時(shí)1s任務(wù)要求:設(shè)置1秒定時(shí)器。通過(guò)LED燈的閃爍彰顯定時(shí)器效果。1.任務(wù)資訊及分析:(1)LED電路原理圖如圖5.2-2所示。(2)單片機(jī)晶振選擇12MHz。單片機(jī)工作在1T方式下。(3)由任務(wù)要求可知,定時(shí)器周期是1秒,根據(jù)表5.2-2定時(shí)器周期的計(jì)算公式,對(duì)于16位定時(shí)器1T工作方式,當(dāng)THx和TLx是最小值0的時(shí)候,定時(shí)器的定時(shí)時(shí)間最多只有5個(gè)毫秒,現(xiàn)在要定時(shí)1秒,讓定時(shí)器只溢出一次肯定是不夠的。解決辦法是定時(shí)器先定時(shí)1毫秒,然后記錄定時(shí)器溢出次數(shù),當(dāng)定時(shí)器溢出1000次后,就是1秒定時(shí)。(4)開(kāi)啟定時(shí)器1,利用STC-ISP軟件獲得定時(shí)器的設(shè)置語(yǔ)句,過(guò)程如圖5.2-1所示。(5)開(kāi)啟單片機(jī)中斷工作模式,當(dāng)定時(shí)器1溢出后,CPU執(zhí)行中斷。(6)書(shū)寫(xiě)定時(shí)器中斷函數(shù),在中斷里記錄定時(shí)器時(shí)間,控制led狀態(tài)。任務(wù)3.定時(shí)器1定時(shí)1s圖5.2-2LED電路任務(wù)3.定時(shí)器1定時(shí)1s2.任務(wù)參考代碼:#include<STC8.H>//包含此頭文件后,里面聲明的寄存器不需要再手動(dòng)輸入,避免重復(fù)定義/********************************************************定時(shí)器初始化函數(shù)*********************************************************/voidTimer1Init(void) //1毫秒@12.000MHz1T模式{ AUXR|=0x40; //定時(shí)器時(shí)鐘1T模式 TMOD&=0x0F; //設(shè)置定時(shí)器模式 TL1=0x20; //設(shè)置定時(shí)初始值 TH1=0xD1; //設(shè)置定時(shí)初始值任務(wù)3.定時(shí)器1定時(shí)1s TF1=0; //清除TF1標(biāo)志 TR1=1; //定時(shí)器1開(kāi)始計(jì)時(shí) ET1=1;//打開(kāi)定時(shí)器1中斷EA=1;//打開(kāi)總中斷}/********************************************************主函數(shù)*********************************************************/ voidmain(void){GPIO_PxMxSet();//見(jiàn)任務(wù)15Timer1Init();任務(wù)3.定時(shí)器1定時(shí)1s{ ;}}//========================================================================//函數(shù):voidTimer1_Isr(void)interruptTIMER1_VECTOR//描述:timer1中斷函數(shù).//參數(shù):none.//返回:none.//========================================================================任務(wù)3.定時(shí)器1定時(shí)1svoidTimer1_Isr(void)interrupt3{staticintcnt=0;cnt++;//記錄定時(shí)器中斷溢出的次數(shù)if(cnt==1000)//1s時(shí)間到{ cnt=0; P60=~P60;}}任務(wù)18操作視頻見(jiàn)二維碼5.2-1。二維碼5.2-1任務(wù)18的程序?qū)崿F(xiàn)5.2.3.定時(shí)器2~4的配置現(xiàn)代單片機(jī)都提供多個(gè)定時(shí)器,與定時(shí)器0和1不同,定時(shí)器2、3、4的工作模式只有一種既16位自動(dòng)重載模式。定時(shí)器可以定時(shí)、計(jì)數(shù)復(fù)用,可以設(shè)置為串口波特率發(fā)生器或可編程時(shí)鐘輸出。以定時(shí)器2為例其內(nèi)部結(jié)構(gòu)如圖5.2-3所示。圖5.2-3定時(shí)器2內(nèi)部結(jié)構(gòu)5.2.3.定時(shí)器2~4的配置(1)T2H、T2L:定時(shí)器2計(jì)數(shù)寄存器,是定時(shí)器工作的核心寄存器,T2H、T2L合成為一個(gè)16位寄存器,T2H是高字節(jié),T2L是低字節(jié)。(2)RL_T2H、RL_T2L是T2H和T2L的影子寄存器。(3)只要T2R=1,T2H、T2L就開(kāi)始計(jì)數(shù)。(4)當(dāng)T2_C/T=0時(shí),多路開(kāi)關(guān)連接到系統(tǒng)內(nèi)部系統(tǒng)時(shí)鐘,是定時(shí)器的方式。當(dāng)T2_C/T=1時(shí),多路開(kāi)關(guān)連接到芯片外部的T2管腳,是計(jì)數(shù)器的方式,對(duì)管腳脈沖計(jì)數(shù)。(5)增加了8位預(yù)分頻寄存器TM2PS,定時(shí)器2的時(shí)鐘=系統(tǒng)時(shí)鐘SYSclk÷(TM2PS+1)。所以系統(tǒng)時(shí)鐘是可以編程的。(6)AUXR.2決定是否對(duì)定時(shí)器2的時(shí)鐘再次12分頻或不分頻。5.2.3.定時(shí)器2~4的配置(7)TM2PS:定時(shí)器2的8位預(yù)分頻寄存器,不可位尋址。TM2PS、TM3PS、TM4PS的寄存器地址和內(nèi)部位結(jié)構(gòu)如表5.2-4所示。寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0TM2PSFEA2H--------TM3PSFEA3H--------TM4PSFEA4H--------表5.2-4預(yù)分頻寄存器內(nèi)部不可位尋址結(jié)構(gòu)示意(8)定時(shí)器2~4的定時(shí)器周期計(jì)算公式列于表5.2-5中。定時(shí)器速度周期計(jì)算公式1T
12T表5.2-5定時(shí)器2~4的計(jì)算公式:注:上式中x=2,3,4,對(duì)應(yīng)定時(shí)器2、3、4。SYSclk是系統(tǒng)時(shí)鐘,如果芯片連接外部時(shí)鐘,則為外部晶振頻率,如果是內(nèi)部時(shí)鐘,則為內(nèi)部晶振頻率。任務(wù)4.定時(shí)器2掃描數(shù)碼管動(dòng)態(tài)顯示任務(wù)要求:使8位數(shù)碼管顯示時(shí)間。顯示格式如下:小時(shí)(十位)小時(shí)(個(gè)位)-分(十位)分(個(gè)位)-秒(十位)秒(個(gè)位)1.任務(wù)資訊:(1)數(shù)碼管電路參考第3章任務(wù)8圖3.4-1。數(shù)碼管的段選連接P6端口,位選連接P7端口。(2)數(shù)碼管動(dòng)態(tài)掃描原理:人眼有視覺(jué)停留效應(yīng)。光信號(hào)進(jìn)入人眼后,在視網(wǎng)膜上產(chǎn)生影像,光信號(hào)消失后,影像并不會(huì)立即消失,這個(gè)過(guò)程就稱為視覺(jué)暫留效應(yīng),暫留時(shí)間約為0.05~0.2秒。動(dòng)畫(huà)片、電影的播放都是利用這個(gè)原理將靜止的畫(huà)面變換為連續(xù)畫(huà)面。(3)圖3.4-1中八位數(shù)碼管的顯示段都連接在一起,要讓每位數(shù)碼管顯示不同的字型,必須利用人眼視覺(jué)停留效應(yīng)。方法是輪流向各位數(shù)碼管送出要顯示的字型,每次只有一個(gè)數(shù)碼管顯示。每位數(shù)碼管獨(dú)立顯示的時(shí)間都很短,因?yàn)橐曈X(jué)停留效應(yīng),看上去這些數(shù)碼管同時(shí)在顯示不同字型。如果把數(shù)碼管當(dāng)做“靶子”,這些靶子每隔一段時(shí)間就要掃射一遍,所以稱為動(dòng)態(tài)掃描,也稱動(dòng)態(tài)刷新。任務(wù)4.定時(shí)器2掃描數(shù)碼管動(dòng)態(tài)顯示3.任務(wù)參考代碼:#include<STC8.H>//包含此頭文件后,里面聲明的寄存器不需要再手動(dòng)輸入,避免重復(fù)定義typedefunsignedcharu8;typedefunsignedintu16;typedefunsignedlongu32;#defineDIS_0x11//顯示“-”/*********************本地常量聲明段碼共陰數(shù)碼管顯示字形編碼*************/u8codetab[]={//0123456789ABCDEF0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,//black-HJKLNoPUtGQrMy0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,任務(wù)4.定時(shí)器2掃描數(shù)碼管動(dòng)態(tài)顯示//0.1.2.3.4.5.6.7.8.9.-10xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};/***********************位碼,8位數(shù)碼管com7~com0獨(dú)立選中****************/u8codedspcom[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};/*************本地變量聲明**************/u8dspbuf[8];//顯示緩沖u8display_index=0;//顯示位索引u8second_cnt,minute_cnt,hour_cnt;/*******************************顯示函數(shù)****************************************/voidDisplayScan(void);/********************************************************定時(shí)器初始化函數(shù)任務(wù)4.定時(shí)器2掃描數(shù)碼管動(dòng)態(tài)顯示*********************************************************/voidTimer0Init(void) //1毫秒@12.000MHz1T模式,定時(shí)器0{ AUXR|=0x80; //定時(shí)器時(shí)鐘1T模式 TMOD&=0xF0; //設(shè)置定時(shí)器模式 TL0=0x20; //設(shè)置定時(shí)初始值 TH0=0xD1; //設(shè)置定時(shí)初始值 TF0=0; //清除TF0標(biāo)志 TR0=1; //定時(shí)器0開(kāi)始計(jì)時(shí)}voidTimer2Init(void) //2毫秒@12.000MHz{任務(wù)4.定時(shí)器2掃描數(shù)碼管動(dòng)態(tài)顯示 AUXR|=0x04; //定時(shí)器時(shí)鐘1T模式 T2L=0x40; //設(shè)置定時(shí)初始值 T2H=0xA2; //設(shè)置定時(shí)初始值 AUXR|=0x10; //定時(shí)器2開(kāi)始計(jì)時(shí)}/********************************************************主函數(shù)*********************************************************/ voidmain(void){GPIO_PxMxSet(); ET0=1;//打開(kāi)定時(shí)器0中斷任務(wù)4.定時(shí)器2掃描數(shù)碼管動(dòng)態(tài)顯示IE2=IE2|0x04;//打開(kāi)定時(shí)器2中斷,ET2=1,IE2不可位尋址EA=1;//打開(kāi)總中斷 Timer0Init();Timer2Init();while(1){ ;}}///========================================================================任務(wù)4.定時(shí)器2掃描數(shù)碼管動(dòng)態(tài)顯示//函數(shù):voidtimer0_int(void)interruptTIMER0_VECTOR//描述:timer0中斷函數(shù).//參數(shù):none.//返回:none.//========================================================================voidtimer0_int(void)interrupt1{staticintcnt=0;cnt++;//記錄定時(shí)器中斷溢出的次數(shù)if(cnt==1000)//1s時(shí)間到{任務(wù)4.定時(shí)器2掃描數(shù)碼管動(dòng)態(tài)顯示 cnt=0; P60=~P60; second_cnt++;//秒 if(second_cnt==60) {second_cnt=0; minute_cnt++;//分 if(minute_cnt==60) { minute_cnt=0; hour_cnt++; if(hour_cnt==24) hour_cnt=0;任務(wù)4.定時(shí)器2掃描數(shù)碼管動(dòng)態(tài)顯示 hour_cnt=0; } }}}//========================================================================//函數(shù):voidtimer2_int(void)interruptTIMER2_VECTOR//描述:timer2中斷函數(shù).數(shù)碼管定時(shí)掃描//參數(shù):none.//返回:none.//=======================================================任務(wù)4.定時(shí)器2掃描數(shù)碼管動(dòng)態(tài)顯示voidtimer2_int(void)interrupt12{DisplayScan();}/**********************顯示掃描函數(shù)************************/voidDisplayScan(void){//顯示內(nèi)容dspbuf[7]=second_cnt%10;//最左邊秒dspbuf[6]=second_cnt/10;dspbuf[5]=DIS_;dspbuf[4]=minute_cnt%10;
dspbuf[3]=minute_cnt/10;任務(wù)4.定時(shí)器2掃描數(shù)碼管動(dòng)態(tài)顯示dspbuf[2]=DIS_;dspbuf[1]=hour_cnt%10;dspbuf[0]=hour_cnt/10; //位選 P7=~dspcom[display_index];//從com7開(kāi)始//段選 P6=~tab[dspbuf[display_index]]; //delay_ms(2);//延時(shí),因?yàn)槎〞r(shí)掃描,所以無(wú)需延時(shí)。if(++display_index>=8){display_index=0;//8位結(jié)束回0}}任務(wù)4.定時(shí)器2掃描數(shù)碼管動(dòng)態(tài)顯示任務(wù)19操作視頻見(jiàn)二維碼5.2-2。二維碼5.2-2任務(wù)19的程序?qū)崿F(xiàn)在上面的程序中,注意每次只能有一個(gè)管子工作,當(dāng)該管工作時(shí),其他管子都要熄滅。任務(wù)5.定時(shí)器3掃描按鍵矩陣任務(wù)要求:檢測(cè)按鍵矩陣,如果有按鍵按下,就返回按鍵值。1.任務(wù)資訊:按鍵矩陣工作原理(1)矩陣式鍵盤(pán)由行線和列線組成,按鍵的兩端分別連接一個(gè)行線、一個(gè)列線。矩陣按鍵中的每個(gè)按鍵都是二端口器件。在單片機(jī)上電復(fù)位后,GPIO口是弱上拉狀態(tài),檢測(cè)到的按鍵行列線都是高電平。圖5.2-4中為了增強(qiáng)可靠性,行線通過(guò)10K電阻強(qiáng)制拉到了高電平。圖5.2-4按鍵矩陣電路圖任務(wù)5.定時(shí)器3掃描按鍵矩陣(2)檢測(cè)按鍵鍵值的方法有逐列掃描法、行列反轉(zhuǎn)法。逐列(行)掃描法:首先判斷鍵盤(pán)是否有鍵按下,方法是向所有的列線上輸出低電平,再讀入所有的行信號(hào),只要有一個(gè)按鍵按下,那么讀入的行電平就不全為高。第二步,判斷具體的鍵值。方法是往列線上逐列送低電平,在送出列線電平后,就要讀行線的狀態(tài),當(dāng)其中一個(gè)行線是低電平,那么就能判斷出該行列對(duì)應(yīng)的按鍵按下。行列反轉(zhuǎn)法:分別給行、列端口輸出兩次相反的值,再將讀入的行值和列值進(jìn)行運(yùn)算,得到每個(gè)鍵的鍵值。首先向所有的列線輸出低電平,行線輸出高電平,然后讀行線,只要有一個(gè)按鍵按下,對(duì)應(yīng)的行線就是低電平,記錄該行線的值;其次和上面步驟相反,向所有的列線上輸出高電平,行線輸出低電平,讀入列線,如果有按鍵按下,對(duì)應(yīng)的列線就是低電平,記錄該列線的值。(3)根據(jù)鍵值的定義情況,得出鍵值計(jì)算公式。圖5.2-4中鍵值從左到右、從上往下1~8編號(hào)。鍵值=行號(hào)×4+列號(hào),行號(hào)在0~1之間,列號(hào)在0~3之間。任務(wù)5.定時(shí)器3掃描按鍵矩陣2.任務(wù)分析(1)本例程采用逐行掃描法檢測(cè)按鍵。(2)本例程開(kāi)啟定時(shí)器3,定時(shí)逐行掃描按鍵。(3)開(kāi)啟定時(shí)器3中斷,減輕主函數(shù)的任務(wù)量。定時(shí)器3的中斷編號(hào)是19。(4)利用STC-ISP軟件獲得定時(shí)器3的配置代碼。任務(wù)5.定時(shí)器3掃描按鍵矩陣3.任務(wù)參考程序:#include<stc8h.h>//包含此頭文件后,里面聲明的寄存器不需要再手動(dòng)輸入,避免重復(fù)定義#include"intrins.h"#defineMAIN_Fosc24000000L//定義主時(shí)鐘typedefunsignedcharu8;typedefunsignedintu16;typedefunsignedlongu32;#defineDIS_0x11//顯示“-”u8codetab[]={//標(biāo)準(zhǔn)字庫(kù)//0123456789ABCDEF0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,任務(wù)5.定時(shí)器3掃描按鍵矩陣//black-HJKLNoPUtGQrMy0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};//0.1.2.3.4.5.6.7.8.9.-1u8codedspcom[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//位碼u8dspbuff[8];//顯示緩沖u8display_index;//顯示位索引u8KeyCode;//給用戶使用的鍵碼,1~16有效/********************************************************定時(shí)器初始化函數(shù)*********************************************************/voidTimer3Init(void) //2毫秒@24.000MHz任務(wù)5.定時(shí)器3掃描按鍵矩陣{ T4T3M|=0x02; //定時(shí)器時(shí)鐘1T模式 T3L=0x80; //設(shè)置定時(shí)初始值 T3H=0x44; //設(shè)置定時(shí)初始值 T4T3M|=0x08; //定時(shí)器3開(kāi)始計(jì)時(shí)}voidIO_KeyScan(void);//按鍵掃描函數(shù)unsignedcharcol_scan();/**********************************************/voidmain(void){u8i;任務(wù)5.定時(shí)器3掃描按鍵矩陣GPIO_PxMxSet(); P40=1;//關(guān)閉led燈 IE2|=0x20;//開(kāi)啟定時(shí)器3中斷,IE2.5是ET3,IE2不能位尋址。EA=1;//打開(kāi)總中斷Timer3Init(); display_index=0;for(i=0;i<8;i++)dspbuff[i]=DIS_;//上電顯示“-”KeyCode=0;//給用戶使用的鍵碼,1~16有效cnt50ms=0;while(1){;//定時(shí)器里完成按鍵掃描和數(shù)碼管顯示任務(wù)5.定時(shí)器3掃描按鍵矩陣}}/***************逐行掃描程序**********************/voidIO_KeyScan(void)//50mscall{u8i;//循環(huán)次數(shù) u8col,row; //列、行的編號(hào) for(i=0;i<2;i++) {P0=0xff;//P0全部拉高 if(i==0) {P06=0;//拉低第一行 col=col_scan();//掃描列,記錄按鍵的列值 任務(wù)5.定時(shí)器3掃描按鍵矩陣} elseif(i==1) {P07=0;//拉低第二行 col=col_scan();//掃描列,記錄按鍵的列值 } elsecol=0x0f; if(col<0x0f) {row=i; KeyCode=row*4+col+1;//從1開(kāi)始 } }}任務(wù)5.定時(shí)器3掃描按鍵矩陣unsignedcharcol_scan() { unsignedcharcol; if(P00==0) col=0; elseif(P01==0) col=1; elseif(P02==0) col=2; elseif(P03==0) col=3; else col=0x0f;任務(wù)5.定時(shí)器3掃描按鍵矩陣 return(col); }/**********************顯示掃描函數(shù)************************/voidDisplayScan(void){ if(KeyCode>0)//有鍵按下,按鍵顯示內(nèi)容改變 { dspbuff[6]=KeyCode/10;//顯示鍵碼,十位數(shù) dspbuff[7]=KeyCode%10;//顯示鍵碼,個(gè)位數(shù) 最右邊數(shù)碼管 } //位選,從右往左任務(wù)5.定時(shí)器3掃描按鍵矩陣P7=~dspcom[7-display_index]; //段選 P6=~tab[dspbuff[display_index]];if(++display_index>=8) display_index=0;//8位結(jié)束回0}///========================================================================//函數(shù):voidtimer3_int(void)interruptTIMER3_VECTOR//描述:timer3中斷函數(shù).//參數(shù):none.//返回:none.任務(wù)5.定時(shí)器3掃描按鍵矩陣//=======================================================voidtimer3_isr(void)interrupt19{staticu8cnt50ms; DisplayScan();//2ms數(shù)碼管就顯示一次if(++cnt50ms>=25)//50ms掃描一次行列鍵盤(pán) { cnt50ms=0; IO_KeyScan(); }}任務(wù)5.定時(shí)器3掃描按鍵矩陣任務(wù)20操作視頻見(jiàn)二維碼5.2-3。二維碼5.2-3任務(wù)20的程序?qū)崿F(xiàn)5.3.PWM定時(shí)器PWM(PulseWidthModulation)簡(jiǎn)稱脈寬調(diào)制,是利用微處理器的數(shù)字輸出對(duì)模擬電路進(jìn)行控制的一種非常有效地技術(shù),廣泛應(yīng)用在測(cè)量、通信、工業(yè)控制等方面。圖5.3-1是PWM波形示意圖,高電平(通電)經(jīng)歷的時(shí)間稱為脈寬,T1是波形周期。在一個(gè)脈沖的循環(huán)中,高電平(通電時(shí)間)相對(duì)于總時(shí)間所占的比例稱為占空比。圖5.3-1PWM波形示意圖5.3.PWM定時(shí)器STC8H/STC32G系列單片機(jī)提供16位高級(jí)PWM定時(shí)器,可對(duì)外輸出任意頻率以及任意占空比的PWM波形,輸出互補(bǔ)/對(duì)稱/帶死區(qū)的PWM波形??梢圆东@外部輸入信號(hào)并測(cè)量其周期值和占空比值。有正交編碼功能、外部異常檢測(cè)功能以及實(shí)時(shí)觸發(fā)ADC轉(zhuǎn)換功能。16位高級(jí)PWM定時(shí)器有8通道,分成了PWMA和PWMB兩組PWM,每組周期可不同,每組都可配置成4路PWM輸出或捕捉外部信號(hào),第一組PWMA的4個(gè)通道分別是PWM1P/PWM1N、PWM2P/PWM2N、PWM3P/PWM3N、PWM4P/PWM4N,第二組PWMB的4個(gè)通道分別是PWM5、PWM6、PWM7、PWM8,兩組每個(gè)通道都可獨(dú)立實(shí)現(xiàn)PWM輸出、捕獲和比較功能。PWMA的輸出功能更強(qiáng)大,4個(gè)通道有正負(fù)兩端,可輸出帶死區(qū)的互補(bǔ)對(duì)稱PWM,每個(gè)通道都可獨(dú)立實(shí)現(xiàn)PWM輸出,或者兩兩互補(bǔ)對(duì)稱輸出。PWMB只能輸出單端PWM。若需要使用第一組PWM定時(shí)器進(jìn)行捕獲或者測(cè)量脈寬,輸入信號(hào)只能從每路的正端輸入。PWM定時(shí)器的預(yù)分頻系數(shù)可在1~65535之間變化。PWM定時(shí)器在電機(jī)驅(qū)動(dòng)領(lǐng)域應(yīng)用廣泛,本節(jié)主要介紹PWM定時(shí)器輸出比較功能的使用方法。5.3.1.PWM定時(shí)器的時(shí)基單元PWM定時(shí)器的時(shí)基單元和普通定時(shí)器內(nèi)部結(jié)構(gòu)相似,但PWM定時(shí)器的計(jì)數(shù)器,不僅可以向上計(jì)數(shù),還能向下計(jì)數(shù)、中央計(jì)數(shù)。以PWMA為例,它的時(shí)基單元包含:16位向上/向下計(jì)數(shù)器、16位自動(dòng)重載寄存器、重復(fù)計(jì)數(shù)器、預(yù)分頻器。它的工作過(guò)程如圖5.3-2所示,定時(shí)器時(shí)鐘CK_PSC除以預(yù)分頻器PWM_PSCR里的數(shù)值,得到分頻后的時(shí)鐘信號(hào),16位計(jì)數(shù)器PWM_CNTR對(duì)該時(shí)鐘向上或向下計(jì)數(shù),每當(dāng)16位計(jì)數(shù)器溢出一次,重復(fù)計(jì)數(shù)器的值就遞減一次,當(dāng)重復(fù)計(jì)數(shù)器里的值減到0,此時(shí)PWM定時(shí)器向CPU發(fā)出中斷請(qǐng)求。圖5.3-2表明16位計(jì)數(shù)器的初值保存在自動(dòng)重載寄存器PWM_ARR里,當(dāng)CNTR溢出,ARR值重新載入CNTR;同理,重復(fù)計(jì)數(shù)器里的值減到0后,由重復(fù)計(jì)數(shù)寄存器PWM_RCR里的值重新載入。圖5.3-2PWM定時(shí)器的時(shí)基單元5.3.1.PWM定時(shí)器的時(shí)基單元重復(fù)計(jì)數(shù)器的好處是,可以令16位計(jì)數(shù)器溢出多次后才發(fā)出定時(shí)器中斷請(qǐng)求,延長(zhǎng)定時(shí)器中斷時(shí)間。預(yù)分頻器令定時(shí)器輸入時(shí)鐘頻率可調(diào),分頻系數(shù)在0~65535之間設(shè)置。16位計(jì)數(shù)器的頻率計(jì)算公式:1.向上計(jì)數(shù)模式在向上計(jì)數(shù)模式中,計(jì)數(shù)器從0開(kāi)始計(jì)數(shù)到用戶定義的比較值(ARR),然后重新從0開(kāi)始計(jì)數(shù),并產(chǎn)生一個(gè)計(jì)數(shù)器溢出事件,如圖5.3-3所示。圖5.3-3向上計(jì)數(shù)模式5.3.1.PWM定時(shí)器的時(shí)基單元2.向下計(jì)數(shù)模式在向下模式中,計(jì)數(shù)器從自動(dòng)裝載(ARR)的值開(kāi)始向下計(jì)數(shù)到0,然后再?gòu)腁RR里的值重新開(kāi)始計(jì)數(shù),并產(chǎn)生一個(gè)計(jì)數(shù)器向下溢出事件,如圖5.3-4所示。圖5.3-4向下計(jì)數(shù)模式5.3.1.PWM定時(shí)器的時(shí)基單元3.中間對(duì)齊模式在中央對(duì)齊模式,計(jì)數(shù)器從0開(kāi)始計(jì)數(shù)到ARR寄存器的值,產(chǎn)生一個(gè)計(jì)數(shù)器上溢事件,然后從ARR的值向下計(jì)數(shù)到0并且產(chǎn)生一個(gè)計(jì)數(shù)器下溢事件,如圖5.3-5所示。圖5.3-5中央對(duì)齊模式5.3.1.PWM定時(shí)器的時(shí)基單元圖5.3-6圖展示了重復(fù)計(jì)數(shù)寄存器RCR等于0、1、2、3的定時(shí)器中斷請(qǐng)求(更新事件UEV)情況。當(dāng)RCR=0,計(jì)數(shù)器溢出和UEV一致;當(dāng)RCR=1,計(jì)數(shù)器溢出2次發(fā)出UEV請(qǐng)求;當(dāng)RCR=2,計(jì)數(shù)器溢出3次發(fā)出UEV請(qǐng)求;當(dāng)RCR=3,計(jì)數(shù)器溢出4次發(fā)出UEV請(qǐng)求。圖5.3-6重復(fù)寄存器設(shè)置和中斷請(qǐng)求對(duì)應(yīng)情況5.3.2.PWM定時(shí)器輸出比較功能PWM定時(shí)器中的“比較”是指PWM模塊(圖5.3-2)中計(jì)數(shù)器(CNT)的值和預(yù)裝載(ARR)的值進(jìn)行比較,輸出一個(gè)矩形波。假定PWM定時(shí)器工作在向上計(jì)數(shù)模式,如圖5.3-7所示。坐標(biāo)縱軸是CNT的值,黃色線條表示ARR值,紅色線條是輸出比較寄存器(CCRx)值。鋸齒波表明隨著時(shí)間的推進(jìn),CNT值在增加,當(dāng)CNT值達(dá)到CCRx的值,輸出從低電平跳轉(zhuǎn)成高電平;當(dāng)CNT值繼續(xù)增加到預(yù)裝載值,CNT回復(fù)到0,輸出從高電平恢復(fù)成低電平。用邏輯表達(dá)式表述:當(dāng)CNT<CCRx時(shí),輸出0;當(dāng)CNT>=CCRx時(shí),輸出1。5.3.2.PWM定時(shí)器輸出比較功能圖5.3-7中還表明,PWM計(jì)數(shù)器會(huì)反復(fù)計(jì)數(shù),當(dāng)CNT增長(zhǎng)到ARR值的時(shí)候,計(jì)數(shù)器歸零,然后重新向上計(jì)數(shù)。如此重復(fù),就得到一個(gè)PWM矩形波。改變CCRx的值,就改變了PWM輸出的占空比;改變ARR的值,就改變了PWM輸出的頻率。圖5.3-7
PWM輸出比較波形5.3.3.PWM定時(shí)器寄存器開(kāi)啟PWM定時(shí)器需要設(shè)置相關(guān)寄存器,主要有功能腳切換寄存器、使能寄存器、控制寄存器、中斷使能寄存器、模式寄存器等。1.PWM功能腳切換寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0PWMA_PSFEB2HC4PS[1:0]C3PS[1:0]C2PS[1:0]C1PS[1:0]PWMB_PSFEB6HC8PS[1:0]C7PS[1:0]C6PS[1:0]C5PS[1:0]CxPS[1:0]是PWM第x通道的輸出腳選擇位,以通道1為例:C1PS[1:0]PWM1PPWM1N00P1.0P1.101P2.0P2.110P6.0P6.15.3.3.PWM定時(shí)器寄存器2.輸出使能寄存器1.PWM功能腳切換ENOxP是PWM定時(shí)器第x通道的正極輸出控制位,ENOxN是PWM定時(shí)器第x通道的負(fù)極輸出控制位,0——禁止輸出;1——使能輸出。PWMB是單端輸出,只有1個(gè)管腳輸出使能。3.控制寄存器寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0PWMA_ENOFEB1HENO4NENO4PENO3NENO3PENO2NENO2PENO1NENO1PPWMB_ENOFEB5H-ENO8P-ENO7P-ENO6P-ENO5P寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0PWMA_CR1FEC0HARPEACMSA[1:0]DIRAOPMAURSAUDISACENAPWMB_CR1FEE0HARPEBCMSB[1:0]DIRBOPMBURSBUDISBCENB5.3.3.PWM定時(shí)器寄存器控制寄存器1規(guī)定了PWM定時(shí)器的計(jì)數(shù)模式。ARPEn:自動(dòng)預(yù)裝載允許位,0表示ARR寄存器沒(méi)有緩沖,直接寫(xiě)入;1表示ARR寄存器由預(yù)裝載緩沖器緩沖。CMSn[1:0]選擇對(duì)齊模式:CMSn[1:0]對(duì)齊模式說(shuō)明00邊沿對(duì)齊模式計(jì)數(shù)器依據(jù)方向位(DIR)向上或向下計(jì)數(shù)01中央對(duì)齊模式1計(jì)數(shù)器向下計(jì)數(shù)時(shí)輸出比較中斷標(biāo)志位置110中央對(duì)齊模式2計(jì)數(shù)器向上計(jì)數(shù)時(shí)輸出比較中斷標(biāo)志位置111中央對(duì)齊模式3計(jì)數(shù)器向上和向下計(jì)數(shù)時(shí)輸出比較中斷標(biāo)志均被置1.5.3.3.PWM定時(shí)器寄存器DIRn:計(jì)數(shù)器的計(jì)數(shù)方向,0——計(jì)數(shù)器向上計(jì)數(shù);1——計(jì)數(shù)器向下計(jì)數(shù)。CENn:允許計(jì)數(shù)器,0——禁止計(jì)數(shù)器;1——使能計(jì)數(shù)器。OPMn:?jiǎn)蚊}沖模式,0——在發(fā)生更新事件時(shí),計(jì)數(shù)器不停止;1——在發(fā)生下一次更新事件時(shí),清楚CEN位,計(jì)數(shù)器停止。URSn:更新請(qǐng)求源,0——如果UDIS允許產(chǎn)生更新事件,則任一事件(寄存器更新、軟件設(shè)置UG位、時(shí)鐘/觸發(fā)控制器產(chǎn)生更新)都會(huì)產(chǎn)生一個(gè)更新中斷;1——如果UDIS允許產(chǎn)生更新事件,則只有當(dāng)寄存器被更新(計(jì)數(shù)器上溢/下溢)才產(chǎn)生更新中斷,并UIF置1。UDISn:禁止更新,0——產(chǎn)生更新事件;1——不產(chǎn)生更新事件。5.3.3.PWM定時(shí)器寄存器4.
溫馨提示
- 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ù)制度
- 代帳公司財(cái)務(wù)制度
- 工業(yè)園區(qū)管委會(huì)財(cái)務(wù)制度
- 酒店相關(guān)財(cái)務(wù)制度
- 公司受托人制度
- 養(yǎng)老院老人緊急救援人員職業(yè)發(fā)展規(guī)劃制度
- 養(yǎng)老院老人活動(dòng)場(chǎng)地設(shè)施管理制度
- 大學(xué)活動(dòng)策劃方案生(3篇)
- 格溝施工方案(3篇)
- 三八洗浴活動(dòng)方案策劃(3篇)
- 無(wú)錫車(chē)聯(lián)天下信息技術(shù)有限公司智能網(wǎng)聯(lián)汽車(chē)車(chē)載顯示模組研發(fā)及智能化生產(chǎn)項(xiàng)目環(huán)評(píng)資料環(huán)境影響
- 抹灰層陰陽(yáng)角方正度控制技術(shù)
- 【SA8000標(biāo)準(zhǔn)(社會(huì)責(zé)任標(biāo)準(zhǔn))對(duì)我國(guó)勞動(dòng)密集型產(chǎn)業(yè)的影響及應(yīng)對(duì)措施研究12000字(論文)】
- 醫(yī)療行業(yè)知識(shí)產(chǎn)權(quán)教育的必要性
- 2024-2025學(xué)年滬教版(五四學(xué)制)(2024)初中英語(yǔ)六年級(jí)下冊(cè)(全冊(cè))知識(shí)點(diǎn)歸納
- 五年級(jí)數(shù)學(xué)下冊(cè)寒假作業(yè)每日一練
- 傳染病院感防控課件
- 羅馬機(jī)場(chǎng)地圖
- 實(shí)習(xí)生醫(yī)德醫(yī)風(fēng)培訓(xùn)
- 橫穿公路管道施工方案
- 快樂(lè)讀書(shū)吧:非洲民間故事(專項(xiàng)訓(xùn)練)-2023-2024學(xué)年五年級(jí)語(yǔ)文上冊(cè)(統(tǒng)編版)
評(píng)論
0/150
提交評(píng)論