第7章 IO接口及增強型捕捉定時器模塊_第1頁
第7章 IO接口及增強型捕捉定時器模塊_第2頁
第7章 IO接口及增強型捕捉定時器模塊_第3頁
第7章 IO接口及增強型捕捉定時器模塊_第4頁
第7章 IO接口及增強型捕捉定時器模塊_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

實驗內(nèi)容

實驗4:掌握9S12單片機IO口的基本程序調(diào)試,學(xué)會使用BDM和實際實驗系統(tǒng)編程下載:事先看一下實驗板原理圖和《CodeWarriorV5.0開發(fā)環(huán)境快速入門-工程創(chuàng)建for9S12DG128B.doc》或《CodeWarriorV5.0開發(fā)環(huán)境快速入門-工程創(chuàng)建for9S12XDT512等.doc》(一部分同學(xué)的實驗板是帶協(xié)處理器的9S12XDT512或DP512等),拿到實驗板后先看一下板上單片機的型號。

1.編寫并實現(xiàn)LED排燈(D2~D10)顯示程序,實現(xiàn)花燈顯示,即01010101和10101010動態(tài)顯示(0表示燈滅,1表示燈亮);

2.編寫并實現(xiàn)LED排燈(D2~D10)顯示程序,分別實現(xiàn)從左向右逐個點亮和從右到左逐個點亮的流水燈顯示;

3.編寫并實現(xiàn)LED排燈(D2~D10)顯示程序,實現(xiàn)按鍵與LED的關(guān)聯(lián),即4個按鍵S3~S6控制4個LED燈,按鍵按下相應(yīng)的燈亮,松開相應(yīng)的燈滅。要求1.用到延時的地方需用軟件延時實現(xiàn)。

2.有完整的程序和注釋,并最后總結(jié)實現(xiàn)原理。實驗5:掌握9S12單片機ECT模塊的使用方法要求1.描述什么是輸入捕捉和輸出比較,描述9S12單片機ECT模塊主要寄存器設(shè)置;

2.用ECT模塊延時代替實驗6中用到的軟件延時,實現(xiàn)實驗6中的各種LED排燈(D2~D10)顯示效果;

3.要有完整的程序和注釋,并最后總結(jié)實現(xiàn)原理。實驗6:掌握9S12單片機實現(xiàn)數(shù)碼管顯示要求1.在四位數(shù)碼管上循環(huán)顯示0~F共16個數(shù)中的某連續(xù)四位,如下圖所示;

2.程序中需要延時的地方用軟件延時實現(xiàn);

3.要有完整的程序和注釋,并最后總結(jié)實現(xiàn)原理。0123456789ABCDEF實驗7:掌握9S12單片機實現(xiàn)數(shù)碼管顯示要求1.在四位數(shù)碼管上循環(huán)顯示0~F共16個數(shù)中的某連續(xù)四位,如下圖所示;

2.程序中需要延時的地方用ECT模塊延時實現(xiàn);

3.要有完整的程序和注釋,并最后總結(jié)實現(xiàn)原理。0123456789ABCDEF實驗8:掌握9S12單片機AD和顯示綜合編程與調(diào)試要求1.實驗板上單片機AD模塊的AN15引腳接了可調(diào)電位器RV1(見實驗板原理圖),要求實現(xiàn)對可調(diào)電位器上的電壓進行AD轉(zhuǎn)換(10位精度),并對采樣結(jié)果進行數(shù)字濾波,即對采樣多次(如10次)的結(jié)果排序并掐頭去尾求平均值,將濾波后的結(jié)果(轉(zhuǎn)換成十進制)送四位數(shù)碼管顯示;

2.調(diào)節(jié)可調(diào)電位器,觀察數(shù)碼管顯示變化規(guī)律;

3.要有完整的程序和注釋,畫出程序流程圖并最后總結(jié)實現(xiàn)原理。AD采樣數(shù)字濾波第七章IO接口及增強型捕捉定時器模塊

§7-1通用I/O接口§7-2I/O接口的功能及設(shè)置方法

§7-3增強型定時器ECT模塊內(nèi)容提要:§7-1通用I/O接口I/O檢測控制PORTA、PORTB、PORTE和PORTK在芯片處于擴展方式下被用作總線信號PORTT、PORTP、PORTS、PORTM、PORTJ和PORTH被集成在端口集成模塊(PIM)內(nèi),與片內(nèi)其他功能模塊的引腳復(fù)用并行I/O口復(fù)用模塊PORTJCAN4,I2C模塊PORTPSPI1,PWM模塊PORTMCAN0,CAN1,CAN4,SPI0模塊PORTTECT模塊PORTSSCI模塊PORTADATD模塊MC9S12DG128單片機并行I/O的復(fù)用功能

§7-2I/O接口的功能及設(shè)置方法

通用I/O接口一般可以設(shè)置輸入輸出、驅(qū)動能力、內(nèi)部上拉或下拉電阻、中斷輸入等功能,每個I/O接口都有各自的寄存器。數(shù)據(jù)寄存器:并行I/O接口都有數(shù)據(jù)寄存器進行數(shù)據(jù)的讀取和發(fā)送

并行I/O口

數(shù)據(jù)寄存器

PORTAPORTAPORTBPORTBPORTEPORTEPORTJPTJ(PortJI/ORegister:可讀寫),PTIJ(PortJInputRegister:只讀)PORTPPTP,PTIP(意義類上)PORTMPTM,PTIM(意義類上)PORTTPTT,PTIT(意義類上)PORTSPTS,PTIS(意義類上)PORTHPTH,PTIH(意義類上)PORTADPORTADPortJI/ORegister(PTJ)Read:Anytime.Write:Anytime.IfthedatadirectionbitsoftheassociatedI/Opinsaresetto1,areadreturnsthevalueoftheportregister,otherwisethevalueatthepinsisread.PortJInputRegister(PTIJ)Read:Anytime.Write:Never,writestothisregisterhavenoeffect.Thisregisteralwaysreadsbackthestatusoftheassociatedpins.Thiscanbeusedtodetectoverloadorshortcircuitconditionsonoutputpins.方向寄存器

MC9S12單片機中的I/O接口除了PORTAD只可作為輸入口外,一般都是雙向并行口,因此都配置了一個方向寄存器“DDRx”,I/O接口每個引腳的輸入輸出方向由各方向寄存器的對應(yīng)位來設(shè)置。方向寄存器的某位為“0”表示相應(yīng)的引腳為輸入引腳;為“1”表示相應(yīng)的引腳為輸出引腳。并行I/O口

方向寄存器

特點

PORTADDRA--PORTBDDRB--PORTEDDRE低2位只能作輸入

PORTJDDRJ高2位有效

PORTPDDRP--PORTMDDRM--PORTTDDRT--PORTSDDRS--PORTHDDRH--PORTAD--只作輸入口

驅(qū)動控制寄存器

MC9S12單片機可以設(shè)置I/O接口的驅(qū)動能力,當(dāng)I/O接口為輸出口時此功能有效。此寄存器的相應(yīng)位為“1”,則表示全額驅(qū)動能力;為“0”,則表示縮減驅(qū)動能力,后者的驅(qū)動能力是前者的三分之一。并行I/O口

驅(qū)動控制寄存器

特點

PORTARDRIV.BIT01bit控制整個I/O口

PORTBRDRIV.BIT11bit控制整個I/O口

PORTERDRIV.BIT41bit控制整個I/O口

PORTJRDRJ--PORTPRDRP--PORTMRDRM--PORTTRDRT--PORTSRDRS--PORTHRDRH--PORTAD----拉電阻控制寄存器

MC9S12單片機的各個I/O接口內(nèi)置了拉電阻,可以通過編程來設(shè)置是否使用拉電阻。拉電阻的主要作用是當(dāng)電路驅(qū)動器關(guān)閉時給線路(節(jié)點)一個固定電平,可以提高總線的抗電磁干擾能力。拉電阻控制寄存器的相應(yīng)位為“1”,則使用拉電阻;為“0”,則不使用拉電阻。另外,可以使用極性選擇寄存器選擇拉電阻的極性,即選擇拉電阻為上拉或者下拉,相應(yīng)位為“1”則表示下拉電阻,為“0”則表示上拉電阻。注意,PORTA、PORTB和PORTE只能使用上拉電阻,所以并不設(shè)有極性選擇寄存器。并行I/O口

拉電阻控制寄存器

極性選擇寄存器

特點

PORTAPUCR.BIT0--(只能使用上拉)

1bit控制整個I/O口

PORTBPUCR.BIT1--(只能使用上拉)

1bit控制整個I/O口

PORTEPUCR.BIT4--(只能使用上拉)

1bit控制整個I/O口

PORTJPERJ--(只能使用上拉)

--PORTPPERP--(只能使用上拉)

--PORTMPERMPPSM--PORTTPERTPPST--PORTSPERSPPSS--PORTHPERHPPSH--PORTAD------中斷允許、標(biāo)志寄存器

MC9S12單片機的I/O接口PORTJ、PORTP、PORTH。具有中斷功能,可以通過軟件編程來允許或禁止。相應(yīng)位為“1”表示允許中斷,“0”表示禁止中斷。具有中斷能力的I/O口都有各自的中斷標(biāo)志寄存器。對應(yīng)位為“1”表示有中斷發(fā)生,“0”表示無中斷發(fā)生。另外,還有中斷邊沿選擇寄存器,相應(yīng)位為“1”表示上升沿中斷,“0”表示下降沿中斷。當(dāng)檢測到有效中斷邊沿時,中斷標(biāo)志寄存器PIFJ相應(yīng)位被置一,產(chǎn)生中斷并進入相應(yīng)的中斷服務(wù)程序。并行I/O口

中斷使能寄存器

中斷標(biāo)志寄存器

邊沿選擇寄存器

PORTJPIEJPIFJPPSJPORTPPIEPPIFPPPSPPORTHPIEHPIFHPPSH課本6.1.2程序舉例8緩沖器#include<hidef.h> #include<mc9s12dg128.h> voidinterrupt24PJI(void); /*聲明中斷函數(shù)*/

voidmain(void){

EnableInterrupts; DDRJ=0x00; /*PORTJ作為輸入*/

DDRB=0xFF; /*PORTB作為輸出*/

PORTB=0xff; /*燈全滅*/

DDRA=0xff;/*PORTA輸出*/

PORTA=0x00;/*PORTA全為低電平*/

PPSJ=0xff;/*上升沿中斷*/

PIEJ=0xff;/*中斷使能*/

for(;;){PORTA=0b11000000;/*產(chǎn)生中斷*/}

}

#pragmaCODE_SEGNON_BANKEDvoidinterrupt24PJI(void)/*中斷服務(wù)程序,中斷向量號為24*/

{PORTB=0xf0;/*LED燈高四滅,低四亮*/}

#pragmaCODE_SEGDEFAULT//9S12中斷程序必須定位于non-

//banked區(qū)域,必須有這兩個pragma語句課本6.1.2程序說明使用PORTJ口的中斷功能。設(shè)置PORTA口為輸出口,PORTA的第6腳和PORTJ的第6腳硬件相連,PORTB為輸出口,用來控制8個LED燈,PORTJ開中斷,并且設(shè)置為上升沿觸發(fā)。首先PORTA初始化為0,PORTB為0xff,此時LED燈全滅。在循環(huán)中設(shè)置PORTA第6位為高電平,產(chǎn)生中斷,在中斷服務(wù)程序中設(shè)置LED燈低4位亮,高4位不亮,表示已經(jīng)進入中斷。如何得知中斷向量號?……向量號0向量號1向量號24依次向下數(shù)中斷向量表(書上有)本課程實驗板原理圖見pdf文件另參考“實驗板上所用芯片”中的文檔前面那個例程不適用本課程實驗板讓實驗板上的小燈(D10~D2)循環(huán)點亮#include<hidef.h>/*commondefinesandmacros*/#include<mc9s12dg128.h>/*derivativeinformation*/#pragmaLINK_INFODERIVATIVE"mc9s12dg128b"voiddeley(unsignedintd){inti;for(i=0;i<d;i++){};}voidmain(void){/*putyourowncodehere*/unsignedchard;EnableInterrupts;DDRA=0xFF;PORTA=0xFF;deley(60000);d=0x80;for(;;){PORTA=d;deley(60000);d>>=1;if(d==0)d=0x80;}for(;;){}/*waitforever*//*pleasemakesurethatyouneverleavethisfunction*/}該程序也可寫成如下:#include<hidef.h>/*commondefinesandmacros*/#include<mc9s12dg128.h>/*derivativeinformation*/#pragmaLINK_INFODERIVATIVE"mc9s12dg128b"#definePortA*((volatileunsignedchar*)0)#defineDdrA*((volatileunsignedchar*)2)voiddeley(unsignedintd){inti;for(i=0;i<d;i++){};}voidmain(void){unsignedchard;EnableInterrupts;DdrA=0xFF;PortA=0xFF;deley(60000);d=0x80;for(;;){PortA=d;deley(60000);d>>=1;if(d==0)d=0x80;}for(;;){}/*waitforever*/}IC/OC的定義:InputCapture/OutputCompare輸入捕捉和輸出比較IC—用來監(jiān)測外部的事件和輸入信號。當(dāng)外部事件發(fā)生或信號發(fā)生變化時,在指定的輸入捕捉引腳發(fā)生一個指定的沿跳變(可以指定該跳變是上升沿還是下降沿)。定時器捕捉到特定的沿跳變后,把計數(shù)寄存器當(dāng)前的值鎖存到通道寄存器。ECT模塊有8個IC通道分別為IC0-IC7,IC0-IC3是標(biāo)準(zhǔn)的帶有保持器的緩沖通道,而IC4-IC7不帶有保持器。OC—用程序的方法在規(guī)定的時刻輸出需要的電平,實現(xiàn)對外部電路的控制。通道為OC0-OC7。ECT模塊的外部引腳:共有8個外部引腳,分別為IOC0—IOC7,與PORTT復(fù)用?!?-3增強型定時器ECT模塊ECT模塊結(jié)構(gòu)一個16位向上帶可編程預(yù)分頻的主計數(shù)器.一個16位的帶可編程預(yù)分頻的模數(shù)向下計數(shù)器8個獨立的定時器通道,每個通道具備輸入捕捉和輸出比較功能4個8位脈沖累加器,也可設(shè)置成2個16位脈沖累加器.通過對寄存器編程可以實現(xiàn)不同的功能定時器結(jié)構(gòu)預(yù)分頻選擇

PR[2:0]MClock1248163264128TCNT15...........................................0DATABUSPINRRRR1–計數(shù)器使能0–計數(shù)器禁止TENTSWAITSFRZTFFCATSCR1-定時器控制寄存器RST:00000000TCNTCLK.TENB0.......……...B7B8……..........B15R=Reserved$0006AddressOffset$0004,05$FFFE$FFFF$0000*******************TOF模塊時鐘計數(shù)器寄存器脈沖累加器計時器溢出時,對溢出標(biāo)志位置位,如允許中斷,則向CPU發(fā)出中斷請求定時器,預(yù)分頻,計數(shù)器寄存器:1.TCNT16位自由運行/模計數(shù)器B15............................................................................................................................…B0RST:0........................................................................................................................0AddressOffset$0004,$00051–定時器溢出中斷使能0–定時器中斷禁止$000D3.TSCR2RST:000000001–定時器由OC7比較符合時復(fù)位0–定時器自由運行TCRE-允許使用PWM功能B7....................................................................................B0TOI000TCREPR2PR1PR02.TFLG2定時器溢出標(biāo)志位,寫‘1’清零TOF0000000B7......................................................................B0RST:00000000$000F標(biāo)志寄存器除以1248163264128000011110101010100110011PR2PR1PR0預(yù)分頻系數(shù)選擇編程步驟用途:產(chǎn)生定時器溢出中斷初始化設(shè)定預(yù)分頻系數(shù)定時器溢出中斷使能定時器使能中斷函數(shù)清標(biāo)志位用戶自己的代碼voidECT_Init(void){TSCR2_PR=7;//prescalefactoris8,busclock/128TSCR2_TOI=1;//timeroverflowinterruptenableTSCR1_TEN=1;//timerenable}voidinterrupt16Int_TimerOverFlow(void){TFLG2_TOF=1;//cleartimeroverflowflag//用戶自己的代碼

…………….}定時器溢出中斷例程(可在實驗板上運行)#include<hidef.h>/*commondefinesandmacros*/#include<mc9s12dg128.h>/*derivativeinformation*/#pragmaLINK_INFODERIVATIVE"mc9s12dg128b"#pragmaCODE_SEGNON_BANKED//9S12中斷程序必須定位于non-banked區(qū)域interrupt16voidInt_TimerOverFlow(void){TFLG2_TOF=1;//cleartimeroverflowflag//用戶自己的代碼

PORTA=~PORTA;}#pragmaCODE_SEGDEFAULT//9S12中斷程序必須定位于//non-banked區(qū)域,必須有這兩個pragma語句voidmain(void){EnableInterrupts;TSCR2_PR0=1;TSCR2_PR1=1;TSCR2_PR2=0;//prescalefactorTSCR2_TOI=1;//timeroverflowinterruptenableTFLG2_TOF=1;TSCR1_TEN=1;//timerenableDDRA=0xFF;PORTA=0xFF; for(;;) { }}輸出比較功能16位自由運行計數(shù)器16位輸出比較寄存器比如設(shè)置為:0x5678,軟件可以修改引腳控制邏輯中斷請求CxF狀態(tài)標(biāo)志位置位,當(dāng)比較發(fā)生時(值相等時)CxI中斷屏蔽(通過軟件使能)?共有8個輸出比較通道?每個通道有自己的向量表和控制寄存器?在特定的時刻輸出一個信號當(dāng)比較寄存器的值和計數(shù)器的值相等時,采取行動比如:當(dāng)TCNT=0x5678TCNTTCxPinOCx比較比較器相等置位OROR清零翻轉(zhuǎn)輸出比較寄存器C7FC6FC5FC4FC3FC2FC1FC0FOM7OL7OM6OL6OM5OL5OM4OL41.TC7–TC02.TFLG13.TIE4.TCTL1

比較/捕捉標(biāo)志位寫‘1’清除中斷狀態(tài)標(biāo)志位

比較/捕捉屏蔽位

0=屏蔽中斷請求

1=中斷請求允許OMXOLXActiononOCx00110101NoActionOCxToggleOCxDriveOCxLODriveOCxHI輸出模式和輸出電平(O7–OC0)B6B5B4B3B7B2B1B05.TCTL2B6B5B4B3B7B2B1B0RST:00000000$0008RST:00000000RST:00000000RST:00000000$000C$000E$0009AddressOffset$0010-$0011--$001E-$001F16位捕捉/比較寄存器(TC7)16位捕捉/比較寄存器(TC0)--C7IC6IC5IC4IC3IC2IC1IC0IB6B5B4B3B7B2B1B0OM3OL3OM2OL2OM1OL1OM0OL0B6B5B4B3B7B2B1B0FOC7FOC6FOC5FOC4FOC3FOC2FOC1FOC06.CFORCB7B6B5B4B3B2B1B0RST:00000000$0001輸出強制比較寄存器輸出比較,OC7-OC0中斷: 清除中斷,對TFLG1其中的CxF寫’1’不要使用位操作使用OC7-OC0向量表單片機復(fù)位時:自由運行計數(shù)器(TCNT)被初始化為$0000,并且被禁止輸出比較寄存器被初始化為$0000捕捉/比較引腳與比較功能斷開中斷被禁止標(biāo)志位被清零強制比較位被清零輸出比較,通道7OC7(1of2)用途:1、多個輸出比較引腳的控制2、通過2個輸出比較來控制1個引腳,可以輸出短脈沖在每個時鐘周期內(nèi),輸出比較寄存器7和自由運行的計數(shù)器進行比較如果它們的值相等,則:1、中斷標(biāo)志位被置12、輸出引腳OC7-OC0的狀態(tài)被改變或/和產(chǎn)生中斷OC7可以影響多個引腳(OC7-OC0)當(dāng)OC7和OC7-OC0某個引腳的動作有沖突時,OC7的動作將被執(zhí)行

輸出比較7(2of2)C7IC6FC5FC4FC3FC2FC1FC0FOC7M7OC7M6OC7M5OC7M4OC7M3OC7M2OC7M1OC7M04.TIE–定時器中斷允許使能5.OC7M-OC7MASKB7.............................................................................................B01-TC7-16位比較寄存器7.RST:00000000RST:00000000$0002$000CC7FC6FC5FC4FC3FC2FC1FC0FRST:00000000$000EB7.............................................................................................B02.TCNT-16-位計數(shù)器B15...............................................................................................................................................................B0RST:0..................................................................................................................................................0$0004,$05B7.............................................................................................B03.TFLG1–標(biāo)志位OC7D7OC7D6OC7D5OC7D4OC7D3OC7D2OC7D1OC7D06.OC7D-OC7DATARST:00000000$0003B7.............................................................................................B0OC7MASK根據(jù)寄存器的設(shè)置,可以控制任意一路或全部輸出比較引腳OC7DATA當(dāng)OC7比較事件發(fā)生時,引腳的邏輯電平定時器溢出時電平翻轉(zhuǎn)TOV7TOV6TOV5TOV4TOV3TOV2TOV1TOV0TOVx–定時器溢出時,電平翻轉(zhuǎn)只有當(dāng)通道被配置成輸出比較時,才有效AddressOffset$0007RST:0……………….…..01.TTOV-定時器溢出時電平翻轉(zhuǎn)寄存器$000D2.TSCR2–定時器系統(tǒng)控制寄存器RST:00000000B7.....................................……………..............................................B0TOI000TCREPR2PR1PR01–定時器由OC7比較事件發(fā)生來復(fù)位0–定時器自由運行輸入捕捉,IC7-IC0(1of3)用途:1、測量事件發(fā)生的間隔時間2、對實時時間進行響應(yīng)輸入捕捉能感應(yīng)到引腳上的電平的變化如果發(fā)現(xiàn)電平變化,則:1、計數(shù)器的值被保存到到輸入捕捉寄存器中,狀態(tài)標(biāo)志位被置12、如果中斷允許,則向CPU發(fā)出中斷請求ABS應(yīng)用舉例PT0PT1PT2SENSOR1SENSOR2SENSOR3SENSOR4PB1PB2PB3PB4BRAKEFLUIDPUMPSYSTEMSIGNALCONDITIONINGLOGICIC/PASIGNALCONDITIONINGLOGICSIGNALCONDITIONINGLOGICSIGNALCONDITIONINGLOGICPT3左前輪右前輪

左后輪右后輪HCS12TIMER定時器輸入捕捉測量車輪轉(zhuǎn)速發(fā)送命令到剎車壓力調(diào)節(jié)閥來調(diào)節(jié)壓力IC/PAIC/PAIC/PA如果左右輪速脈沖周期不等則調(diào)節(jié)電磁閥輸入捕捉功能比較/捕捉單元16位自由運行計數(shù)器16位輸入捕捉鎖存器捕捉發(fā)生時,狀態(tài)位置1向CPU發(fā)出中斷請求Edge沿選擇檢測ICxCxFCxI上升/下降沿可選中斷屏蔽當(dāng)外部事件發(fā)生時,或外部信號輸入發(fā)生變化時,記錄當(dāng)前時間TCNTTCx延時計數(shù)器000000DLY1DLY0Bit76543210DLYCT–延時計數(shù)器控制寄存器DLY[1:0]-DelayCounterValues00=Disabled01=256MClocks10=512MClocks11=1024MClocksAddressOffset$0029注:如果輸入信號電平和跳變之前的電平相反時,延時計數(shù)器在當(dāng)前時鐘計數(shù)時刻產(chǎn)生一個脈沖,它用來去除噪聲OROR16位保持寄存器應(yīng)用:ABS剎車.雷達(dá)測距,發(fā)動機引腳?共有8個輸入捕捉通道?每個通道有自己的向量表和控制寄存器輸入捕捉,IC7-IC0(2of3)B2B1B0EDGxB

輸入捕捉沿控制(IC7–IC0)EDGxAICxEDGE0101無邊沿–ICx禁止上升沿下降沿任何沿4.TCTL3C7FC6FC5FC4FC3FC2FC1FC0FC7IC6IC5IC4IC3IC2IC1IC0I2.TFLG13.TIE1.TC7–TC0EDG7BEDG7AEDG6BEDG6AEDG5BEDG5AEDG4BEDG4A5.TCTL4EDG3BEDG3AEDG2BEDG2AEDG1BEDG1AEDG0BEDG0AB6B5B4B3B7B2B1B0RST:00000000RST:00000000RST:00000000RST:00000000B6B5B4B3B7B2B1B0B6B5B4B3B7B2B1B0B6B5B4B3B7B2B1B0$000E$000C$000A$000BAddressOffset$0010-$0011--$001E-$001F16位捕捉/比較寄存器

(TC7)16位捕捉比較寄存器(TC0)--

比較/捕捉標(biāo)志位寫‘1’清除中斷狀態(tài)標(biāo)志位

比較/捕捉屏蔽位

0=屏蔽中斷請求

1=中斷請求允許0011增強型捕捉ECT比標(biāo)準(zhǔn)的TIM增強的特點4個輸入捕捉通道有16位緩沖寄存器4個8位/2個16位脈沖累加器16位帶4位預(yù)分頻的模數(shù)向下計數(shù)器

4個用戶選擇的延時計數(shù)器用來消除噪聲

主定時器預(yù)分頻擴展至7位

隊列和鎖定模式

主定時器輸入捕捉寄存器保持寄存器外部事件拷貝拷貝拷貝讀取數(shù)據(jù)讀取數(shù)據(jù)外部事件輸入捕捉/輸出比較選擇IOS7IOS6IOS5IOS4IOS3IOS2IOS1IOS0TIOS–定時器輸入捕捉/輸出比較選擇寄存器IOSx=1輸出比較功能

=0輸入捕捉功能RST:00000000$0000B6B5B4B3B7B2B1B0TIMER定時器使能1–計數(shù)器使能0–計數(shù)器禁止TSCR1–定時器系統(tǒng)控制寄存器RST:0……………0$0006TENTSWAITSFRZTFFCAReservedTSWAI–在WAIT模式時,定時器停止

0=不停止

1=停止TSBCK–在DEBUG模式時,定時器停止0=不停止

1=停止TFFCA–定時器快速標(biāo)志位清除使能

0=定時器標(biāo)志位正常清零

1=輸入捕捉時讀取寄存器,輸出比較時寫寄存器,可以對相應(yīng)通道標(biāo)志位清零脈沖累加模式8–位計數(shù)器PAI脈沖累加器輸入引腳事件計數(shù)模式引腳作為計數(shù)器時鐘軟件選擇以什么沿來計數(shù)計數(shù)器溢出時,產(chǎn)生中斷(可選)

8位計數(shù)器PAI脈沖累加器輸入引腳時間累加模式引腳作為計數(shù)器軟件選擇主動電平作為門的輸入當(dāng)計數(shù)器溢出時產(chǎn)生中斷在使能的引腳上后面的邊緣時產(chǎn)生中斷

自由運行E/64時鐘PACNTPACNT對事件計數(shù)模式,PEDGE選擇哪個PAI的沿用來增加PACNT寄存器對門累加模式,PEDGE選擇哪個PAI狀態(tài)用來禁止計數(shù)(比如.PEDGE=1--

禁止計數(shù)當(dāng)PAI=HI).脈沖累加結(jié)構(gòu)PINTCxPINLogicDIVby64ControlReg.+8/16BITCNTRHoldingRegisterPOLARITYCONTROLPTxIRQDATABUS注1:PTx可以被用作脈沖累加,輸入捕捉或輸出比較這里PTx=PT0-PT3SELECTEDCLOCKDelayCounterEdgeDetector000000DLY1DLY0Bit76543210DLYCT-DelayCounterControlRegisterDLY[1:0]-DelayCounterValues00=Disabled01=256MClocks10=512MClocks11=1024MClocksAddressOffset$0029注:如果輸入信號電平和跳變之前的電平相反時,延時計數(shù)器在當(dāng)前時鐘計數(shù)時刻產(chǎn)生一個脈沖,它用來去除噪聲模向下計數(shù)器二進制向下計數(shù)器.可以完全控制計數(shù)起始值

應(yīng)用于精確事件計時-用于產(chǎn)生周期性的標(biāo)志位和中斷主定時器單獨運行。時鐘來自總線時鐘,并經(jīng)過預(yù)分頻。可以被設(shè)置為定時中斷或產(chǎn)生標(biāo)志位?;蜓b載初始值后向下計數(shù)到$0000。裝載向下計數(shù)至0執(zhí)行動作MCCNT:模數(shù)減法計數(shù)寄存器BIT76543210RMCZIMODMCRDMCLMCENMCPR1MCPR0WICLATFLMCRESET00000000MCCTL:16位模數(shù)減法計數(shù)控制寄存器MCZI:模數(shù)計數(shù)器減法溢出中斷允許:

0=禁止中斷。1=允許中斷。

MODMC:模數(shù)模式允許:0=計數(shù)器從寫入的數(shù)值計數(shù)一次到$0000。1=允許模數(shù)模式。當(dāng)計數(shù)器計到$0000時,則重新裝入最新寫入的計數(shù)值重新進行計數(shù)。RDMCL:模數(shù)計數(shù)器讀取選擇寄存器:0=對計數(shù)器讀操作,返回當(dāng)前的計數(shù)數(shù)值。

1=對計數(shù)器讀操作,返回預(yù)先加載的數(shù)值。ICLAT:輸入捕捉強制鎖存FLMC:強制把裝載寄存器中的值送入模數(shù)計數(shù)寄存器中MCEN:模數(shù)減法計數(shù)器允許:0=禁止。1=允許。

MCPR1、MCPR0:模數(shù)計數(shù)器預(yù)分頻因子設(shè)置MCPR1MCPR0預(yù)分頻因子0010141081116BIT76543210RMCZF000POLF3POLF2POLF1POLF0WRESET00000000MCFLG:16位模數(shù)減法計數(shù)器標(biāo)志寄存器MCZF:模數(shù)計數(shù)器減法溢出標(biāo)志位 當(dāng)計數(shù)器減法計數(shù)到$0000時,此位被置一。對這位人工置一可以進行清零,寫零無效。當(dāng)TSCR寄存器中的TFFCA位被置位時,對MCCNT寄存器的任何訪問將使MCZF標(biāo)志清零。

POLF3-POLF0:第一次輸入捕捉極性狀態(tài)位

POLF3-POLF0是只讀的,對它們進行寫操作無效。這四位指示了引起輸入捕捉操作的邊沿極性。POLF3-POLF0分別對應(yīng)了PORT3-PORT0的輸入。

0=第一次輸入捕捉由下降沿觸發(fā)。1=第一次輸入捕捉由上升沿觸發(fā)。

//利用模數(shù)減法計數(shù)器進行定時#include<hidef.h>/*commondefinesandmacros*/#include<mc9s12dg128.h>/*derivativeinformation*/#pragmaLINK_INFODERIVATIVE"mc9s12dg128b"unsignedintcount1=0;#pragmaCODE_SEGNON_BANKED//9S12中斷程序必須定位//于non-banked區(qū)域voidinterrupt26MDC_ISR(void){MCFLG=0x80;//清中斷標(biāo)志位

count1++;if(count1>=20)//1s閃爍一次

{PORTA=~PORTA;count1=0;}}#pragmaCODE_SEGDEFAULT//9S12中斷程序必須定位于non-//banked區(qū)域,必須有這兩個pragma語句voidSET_PLL(void)//總線時鐘頻率為8MHz{

CLKSEL=0x00;

PLLCTL=0xe1;

SYNR=3;//PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)=16MHz

//實驗板上OSCCLK=4MHz

REFDV=1;

PLLCTL=0x60;

asmNOP;asmNOP;asmNOP;while((CRGFLG&0x08)==0);//時鐘校正同步

CLKSEL=0x80;//選定PLL時鐘,BusClock=PLLCLK/2=8MHz}voidmain(void){SET_PLL();MCCTL=0xDF;//設(shè)定模數(shù)減法計數(shù)器工作方式,中斷使能,計數(shù)器使能

//分頻系數(shù)為16

MCCNT=25000;//定時器賦初值(1/8M)*16*25000=50ms

EnableInterrupts;//開中斷

DDRA=0xFF;PORTA=0xFF; for(;;) { }}定時器低功耗模式TSCR–定時器系統(tǒng)控制寄存器RST:0……………0$0006TENTSWAITSFRZTFFCAReservedTSWAI–在WAIT模式時,定時器停止

0=不停止

1=停止TSBCK–在DEBUG模式時,定時器停止0=不停止

1=停止TFFCA–定時器快速標(biāo)志位清除使能

0=定時器標(biāo)志位正常清零

1=輸入捕捉時讀取寄存器,輸出比較時寫寄存器,可以對相應(yīng)通道標(biāo)志位清零1–計數(shù)器使能0–計數(shù)器禁止三個例子舉三個例子講述本節(jié)內(nèi)容(定時器模塊寄存器太多,逐個講解太費時間,效果也不好)流水燈顯示使用輸入捕捉功能,對外來脈沖進行計數(shù)使用輸出比較功能,輸出一個具有一定寬度的高電平脈沖voidTimerOverflow(void){ unsignedchari=1,j=0x80; while((i!=0)&&(j!=0)) { PORTA=(i|j); i<<=1; j>>=1;

while(TCNT!=0x0000);//延時

while(TCNT==0x0000); }}voidmain(void){ EnableInterrupts;

TSCR1=0x80;//定時器使能

TSCR2=0x07;//分頻系數(shù)為128

DDRA=0xff;

PORTA=0xff;

for(;;)

{

TimerOverflow();

}}流水燈的顯示PORTA輸出調(diào)用函數(shù)設(shè)置控制寄存器1設(shè)置控制寄存器2延時控制這個可在實驗板上運行ECT控制寄存器一(TSCR1)

本例設(shè)置TSCR1=0x80。TEN=1:主定時器使能。0=主定時器禁止,進入低功耗狀態(tài)。TSWAI=0:等待模式時主定時器繼續(xù)工作,方便調(diào)試。0=停止工作。TSFRZ=0:凍結(jié)模式時主定時器繼續(xù)工作。0=停止工作。TFFCA=0:自動清除標(biāo)志位。1=手動清除。 必須設(shè)置TSCR1才可以使主定時器工作,需要在ECT模塊初始化時就設(shè)置好。ECT控制寄存器二(TSCR2)TOI:0=禁止定時器溢出中斷。1=允許。本例設(shè)置TOI=0。TCRE:定時計數(shù)器復(fù)位允許。0=禁止復(fù)位,計數(shù)器自由計數(shù)。1=允許復(fù)位。本例設(shè)置TCRE=0。PR2、PR1、PR0:預(yù)分頻因子選擇本例設(shè)置PR2=1、PR1=1、PR0=1:分頻系數(shù)=27=128??偩€時鐘(BusClock)頻率是多少?見課件“第3章MC9S12單片機的內(nèi)核及片上資源.ppt”第31和32頁。ECT計數(shù)寄存器(TCNT) TCNT為自由計數(shù)器的計數(shù)值,本例通過讀取它的值實現(xiàn)延時。這是一個16位的寄存器,最大值為65535。

while(TCNT!=0x0000);while(TCNT==0x0000);這兩句的含義是:TCNT開始計數(shù)后值不為0,等待直到TCNT溢出返回0,然后再等到TCNT不為0。為什么要弄兩個while?例二:輸入捕捉利用輸入捕捉0通道對外來的方波信號進行捕捉,采用中斷的形式。中斷發(fā)生后,讀取捕捉后的計數(shù)值,并通過PORTB口使LED燈點亮以指示中斷成功。通道0設(shè)置為輸入捕捉,采用雙沿觸發(fā)(上下沿均觸發(fā)),IC0開中斷,可以進入中斷服務(wù)程序。方波信號由PORTA_BIT6產(chǎn)生,PORTA_BIT6和IOC0硬件連接。例二:輸入捕捉IC0的初始化:voidic_init(void){ TSCR1=0x90;//主定時器使能

TSCR2=0x07;//分頻因子=128

ICSYS=0x02; //IC緩沖使能

TIOS=0;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論