MCS單片機IO接口和功能模塊_第1頁
MCS單片機IO接口和功能模塊_第2頁
MCS單片機IO接口和功能模塊_第3頁
MCS單片機IO接口和功能模塊_第4頁
MCS單片機IO接口和功能模塊_第5頁
已閱讀5頁,還剩91頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

會計學1MCS單片機IO接口和功能模塊本講內(nèi)容簡介1、通用I/O接口模塊2、模數(shù)轉換A/D模塊3、脈沖寬度調(diào)制PWM模塊4、增強型定時器ECT模塊5、同步外設接口SPI模塊6、串行通信接口SCI模塊第1頁/共96頁每個模塊對應的技術文檔I/O口模塊

S12MEBIV3.PDFS12DTB128PIMV2.PDF串行通信模塊

S12SCIV2.PDFS12SPIV4.PDFS12IICV2.PDFECT模塊

S12ECT16B8CV1.PDFA/D模塊

S12ATD10B8CV2.PDFPWM模塊

S12PWM8B8CV1.PDFMSCAN模塊

S12MSCANV2.PDF第2頁/共96頁1、通用I/O接口MC9S12DG128B單片機I/O口PORTA 連接按鍵PORTB 連接發(fā)光二極管PORTE 特殊功能PORTJ 中斷輸入,沒有PJ0-PJ5PORTP 中斷輸入,沒有PP6PORTM 沒有PM6-PM7PORTTPORTS 沒有PS4-PS7PORTAD 只能輸入第3頁/共96頁1、通用I/O接口I/O口作為輸入使用設置方向寄存器(DDRx)為輸入(0X00)隨時讀取I/O口的數(shù)據(jù)寄存器(PORTx)I/O口作為輸出使用設置方向寄存器(DDRx)為輸出(0XFF)設置驅動能力寄存器(非必須)拉電阻選擇(非必須)隨時寫入I/O口數(shù)據(jù)寄存器(PORTx)第4頁/共96頁1、通用I/O接口I/O口作為外部中斷接收使用開系統(tǒng)中斷(CLI)設置方向寄存器為輸入設置中斷有效邊沿(上升沿、下降沿)使能中斷編寫相關的中斷服務程序有效邊沿到來時,會自動進入中斷服務程序第5頁/共96頁1、通用I/O接口例一設計一個C語言程序,使教學板上發(fā)光二極管顯示花等效果顯示循環(huán)流水燈效果見exp12第6頁/共96頁1、通用I/O接口例二使用PORTJ中斷口功能的例子,本例的原理是:設置A口為輸出口,PTA的第6腳跟PTJ的第6腳硬件相連,PTB輸出,用來控制8個LED燈,PTJ開中斷,并且設置為上升沿觸發(fā)。首先PTA初始化為0,PTB為0xFF,此時等滅。在大循環(huán)沖設置PTA第6位為高電平,產(chǎn)生中斷,燈低4個亮,高4個不亮。使用單步運行查看效果。見exp13。第7頁/共96頁2、模數(shù)轉換ATD模塊A/D轉換的基本概念模數(shù)轉換定義: 將時間連續(xù)、幅值也連續(xù)的模擬信號轉換為間離散、幅值也離散的數(shù)字信號模數(shù)轉換精度 模數(shù)轉換精度是指二進制的位數(shù)。9S12的AD模塊有兩種精度可選,分別為8位精度(0—255)和10位精度(0—1023)。逐次逼近型A/D轉換器的原理 逐次逼近型A/D由一個比較器和D/A轉換器通過逐次比較邏輯構成,從MSB開始,順序地對每一位將輸入電壓與內(nèi)置D/A轉換器輸出進行比較,經(jīng)n次比較而輸出數(shù)字值。其電路規(guī)模屬于中等。第8頁/共96頁9S12的A/D模塊主要特性8位/10位可選擇的轉換精度;速度快,每進行一次10位的轉換,僅僅需要7nS;采樣時間可編程;左對齊/右對齊的數(shù)據(jù)格式,有符號/無符號的轉換結果;轉換完畢可產(chǎn)生中斷;使用PAD7外部觸發(fā)控制。第9頁/共96頁9S12的A/D模塊外部引腳

VRH(60)、VRL(61):A/D轉換模塊的參考高電壓和參考低電壓。實驗板上,VRH和VRL分別接VCC和GND。

VDDA(59)、VSSA(62):A/D模塊提供電源。實驗板上,VDDA接到VCC,VSSA接到GND。

AN7/ETRIG/PAD7(58):模擬量輸入通道7,通用數(shù)字輸入端口。它也可以被配置為A/D轉換的外部觸發(fā)引腳。

AN6/PAD6-AN0/PAD0(51-57):模擬量輸入通道6-0,通用數(shù)字輸入端口。不可以被用作外部觸發(fā)引腳。PAD0通過50K滑動變阻器接到VCC,調(diào)可變電阻可以調(diào)試A/D轉換。第10頁/共96頁控制寄存器2—ATDCTL2ADPU:A/D模塊的電源管理。1=正常模式,0=低功耗模式。AFFC:標志位快速清零。1=對轉換結果寄存器訪問會自動清除標志位,0=正常模式,訪問結果寄存器前讀狀態(tài)寄存器1可以清楚轉換完成標志CCF。AWAI:等待時進入低功耗模式。1=進入,0=正常工作。ETRIGLE、ETRIGP:外部觸發(fā)的邊沿/極性控制。ETRIGE:上兩位的使能位。允許在PAD7輸入外部觸發(fā)信號。1=允許,0=禁止。ASCIE:A/D隊列轉換完成中斷允許。1=允許,并使標志位ASCIF=1;0=禁止。ASCIF:A/D隊列轉換完成中斷標志。第11頁/共96頁控制寄存器3—ATDCTL3S8C、S4C、S2C、S1C:定義轉換隊列的長度。默認長度為4。FIFO:結果寄存器先進先出模式。1=FIFO模式,轉換結果是連續(xù)存放的;0=非FIFO模式,轉換結果放在對應的寄存器中。FRZ1、FRZ0:背景調(diào)試凍結模式允許。這兩個控制位就決定了,當遇到斷點時,A/D模塊怎樣反應。第12頁/共96頁控制寄存器4—ATDCTL4SRES8:轉換精度選擇。1=8位精度,0=10位精度。SMP1、SMP0:采樣時間選擇。可選擇2、4、8、16個A/D時鐘周期。PRS4、PRS3、PRS2、PRS1、PRS0:A/D時鐘分頻因子的選擇。A/D時鐘的計算公式如右圖。注意,A/D模塊的時鐘頻率要在500KHz和2MHz之間,所以在選擇分頻因子時一定要注意。第13頁/共96頁控制寄存器5—ATDCTL5DJM:16位結果寄存器數(shù)據(jù)的對齊方式。1=右對齊,0=左對齊。DSGN:結果寄存器中數(shù)據(jù)有無符號。1=有符號,0=無符號。SRES8、DJM和DSGN三位配合起來使用,決定了結果寄存器中數(shù)據(jù)的格式,一共有8種情況。SCAN:連續(xù)轉換隊列的模式。此位定義了A/D轉換是連續(xù)進行還是只進行一次。1=連續(xù)隊列轉換;0=單次隊列轉換。MULT:當這位為0時,ATD的隊列控制器只從指定的輸入通道進行采樣,可以使用ATDCTL5寄存器中的CC、CB和CA三位來指定需要采樣的模擬量輸入通道。當這位為1時,則對多個的通道進行采樣,每次采樣的通道數(shù)量由S8C、S4C、S2C和S1C控制位來指定,第一個采樣通道由CC、CB和CA控制位來指定,其它采樣通道由通道選擇碼CC、CB和CA的增加來決定。CC、CB、CA:模擬輸入通道選擇碼。和MULT配合使用。第14頁/共96頁狀態(tài)寄存器0—ATDSTAT0SCF:隊列完成標志。置位條件:當一個隊列轉換完畢后;如果處在SCAN模式,則每次都置位。清零條件:對此位寫一;寫ATDCTL5,開始一個新的對列;AFFC=1(標志快速清除)且讀結果寄存器。ETORF:外部觸發(fā)溢出標志。置位條件:處于邊沿觸發(fā)模式時,如果第一個邊沿觸發(fā)的隊列轉換正在進行,而這時卻檢測到了第二個有效的邊沿。清零條件:對此位寫一;寫控制寄存器2、3或4,終止當前隊列;寫控制寄存器5,開始一個新隊列。FIFOR:FIFO溢出標志。如果轉換完成標志(CCF)在沒有被清零時結果寄存器被寫入新值(覆蓋),則置位。清零條件:對此位寫一;寫控制寄存器5,開始一個新隊列。1=有FIFO溢出,0=無FIFO溢出。CC2、CC1、CC0:轉換計數(shù)器。代表了哪個結果寄存器將要接收當前轉換的結果。非FIFO模式(FIFO=0),這3位的初始值為0,計數(shù)完成后又會回到初始值。FIFO模式(FIFO=1),轉換計數(shù)器處于循環(huán)計數(shù)狀態(tài)。第15頁/共96頁狀態(tài)寄存器1—ATDSTAT1CCFx:x通道的轉換完成標志。1=完成隊列中的第x個轉換,結果存儲在ATDDRx寄存器中;0=轉換未完成。清零條件:寫控制寄存器5,開始一個新隊列;AFFC=1,對結果寄存器訪問;AFFC=0,首先讀狀態(tài)寄存器1,然后訪問結果寄存器。第16頁/共96頁輸入允許寄存器--ATDDIENIENx:通道x輸入數(shù)字允許。這8個控制位控制了從模擬量輸入端口到數(shù)據(jù)寄存器的數(shù)字輸入緩沖區(qū)。1=緩沖區(qū)有效;0=無效。 當端口作為模擬量輸入端口時,也可以打開數(shù)字緩沖區(qū),但是會增加功耗。第17頁/共96頁數(shù)字輸入寄存器PORTADPTADx:A/D模塊的第x個通道(ANx)的數(shù)字輸入。當對應通道的數(shù)字輸入允許時,此位返回了相應引腳上的電平邏輯值。注意,引腳上的電平必須和VRH或VRL匹配,否則將返回一個不確定的值。如果響應通道的輸入緩沖區(qū)無效(IENx=0),讀取操作只返回1。復位后,寄存器值等于$FF。注意,PORTAD端口模擬量和數(shù)字量是可以復用的。當輸入模擬量時,會把模擬信號直接送到A/D轉換器;當輸入數(shù)字量時,會把外部數(shù)字信號送到PORTAD寄存器以供讀取。第18頁/共96頁A/D轉換結果寄存器—ATDDRxATDDR0—ATDDR7:0—7通道的結果寄存器。A/D轉換的結果需要從這幾個寄存器中讀取。每個16位寄存器可以分成2個8位的寄存器來讀取,分別為ATDDRxH和ATDDRxL。注意轉換結果在這8個16位寄存器中的存儲格式。以10位左、右對齊為例:左對齊10位數(shù)據(jù)右對齊10位數(shù)據(jù)另外還要注意有符號數(shù)據(jù)和無符號數(shù)據(jù)的區(qū)別?!獭獭獭獭獭獭獭獭獭獭痢痢痢痢痢痢痢痢痢痢痢痢獭獭獭獭獭獭獭獭獭痰?9頁/共96頁A/D轉換綜合舉例使用教學板上電位器調(diào)試并觀察A/D轉換結果。請見exp14。第20頁/共96頁3、脈沖寬度調(diào)制PWM模塊PWM的基本概念PWM(PulseWidthModulate)即脈寬調(diào)制,脈寬調(diào)制波是一種可用程序來控制波形占空比、周期、相位的波形。它在電動機驅動、D/A變換等場合有著廣泛的應用。周期,占空比,相位。 周期指上圖中的τ,占空比為t/τ,相位指高低電平。第21頁/共96頁9S12PWM模塊特性7個周期、占空比可編程的PWM通道專用的PWM計數(shù)器PWM功能的軟件使能和禁止軟件選擇脈沖極性PWM波形輸出對齊方式分為左對齊和居中對齊可以兩個通道級聯(lián)以獲得更高的精度可選擇4個時鐘源,4個時鐘源均為獨立的分頻設置緊急關斷功能第22頁/共96頁9S12PWM模塊外部引腳共7個外部引腳

PWM0—5(4、3、2、1、80、79)

PWM7(78)第23頁/共96頁9S12PWM模塊的時鐘四個時鐘源CLOCKA、CLOCKB、CLOCKSA、CLOCKSB。其中CLOCKA(B)可以把總線時鐘進行1、2、4、8、16、32、64、128分頻。ClockA的預分頻因子通過PWMPRCLK寄存器中的PCKA2、PCKA1和PCKA0來選擇,ClockB的預分頻因子通過PWMPRCLK寄存器中的PCKB2、PCKB1和PCKB0來選擇??偩€時鐘CLOCKACLOCKBCLOCKSACLOCKSB分頻分頻分頻分頻第24頁/共96頁9S12PWM模塊的時鐘,CLOCKSA(SB)從CLOCKA(B)進行分頻的比例因子可以為1、2、4、8、16、32、64、128、256,最大可以進行512分頻。計算公式為:CLOCKSA(SB)=CLOCKA(B)/2*PRESCALER通道0、1、4、5可選CLOCKA或CLOCKSA;通道2、3、6、7可選CLOCKB或CLOCKSB。第25頁/共96頁9S12PWM模塊的計數(shù)器每個通道的計時器都有一個8位計數(shù)器、一個8位周期寄存器和一個8位占空比寄存器。輸出波形的周期受周期寄存器的控制,當計數(shù)器的計數(shù)值等于周期寄存器的值時,PWM波周期結束。PWM的波形還跟占空比寄存器、輸出極性和對齊方式有關。PWMCNTx計數(shù)寄存器在PWM通道工作時也可以被寫入,但是暫時產(chǎn)生無效的波形。第26頁/共96頁9S12PWM模塊的允許控制PWM的允許位相當于“開關”,可以允許和禁止相應通道的PWM輸出。每個PWM通道都對應一個允許(PWMEx),只有PWMEx=1時,對應的通道才輸出波形。計數(shù)器計數(shù)結束的那一刻,只要PWMEx為高電平,則會自動開始下一個波形的輸出。第27頁/共96頁9S12PWM模塊的極性控制每個PWM通道都對應一個極性設置位,決定了PWM波的輸出首先是高電平還是低電平。當PPOLx被置位時,對應的通道首先輸出高電平,直到計數(shù)器計數(shù)到占空比寄存器的值后變?yōu)榈碗娖?;反之則首先輸出低電平,直到計數(shù)器計數(shù)到占空比寄存器的值后變?yōu)楦唠娖?。?8頁/共96頁左對齊的輸出波型PWMCAE寄存器中的CAEx位是輸出格式的控制位。CAEx=0,則對應通道的輸出格式是左對齊的。當使用左對齊格式輸出時,8位的計數(shù)器只使用加法計數(shù)。當計數(shù)器加法計數(shù)到占空比寄存器中的值時,PWM通道輸出波形的電平就發(fā)生變化;當計數(shù)器加法計數(shù)到周期寄存器中的值時,計數(shù)器復位,輸出波形電平發(fā)生變化,然后再次讀取占空比和周期寄存器中的值作為下次計數(shù)參考使用。注意,計數(shù)器是從0開始計數(shù)的,直到周期寄存器中的值-1。第29頁/共96頁左對齊的輸出波型PWM波形頻率和占空比的計算:PWMx頻率=Clock(A,B,SA,orSB)/PWMPERx若Polarity=0(PPOLx=0)DutyCycle=[(PWMPERx-PWMDTYx)/PWMPERx]×100%若Polarity=1(PPOLx=1)DutyCycle=[PWMDTYx/PWMPERx]×100%第30頁/共96頁左對齊的輸出波型下面舉一個左對齊輸出的例子:假設時鐘源頻率=10MHz(周期=100ns),PPOLx=0,PWMPERx=4,PWMDTYx=1。所以,PWMx的頻率=10MHz/4=2.5MHz,PWMx的周期=400ns,PWMx的占空比=3/4×100%=75%。第31頁/共96頁居中對齊的輸出波型CAEx=1,則對應通道的輸出格式是居中對齊的。在這個模式下,計數(shù)器既進行加法計數(shù)也進行減法計數(shù)。當計數(shù)器加法計數(shù)到占空比寄存器中的值時,PWM通道輸出波形的電平就發(fā)生變化;當加法計數(shù)到周期寄存器中的值時,計數(shù)器會從加法計數(shù)改變?yōu)闇p法計數(shù);當計數(shù)器再次減法計數(shù)到占空比寄存器中的值時,PWM通道輸出波形的電平再次發(fā)生變化;當計數(shù)器繼續(xù)減法計數(shù)到$00時,計數(shù)器重新變?yōu)榧臃ㄓ嫈?shù)器,然后再次讀取占空比和周期寄存器中的值作為下次計數(shù)參考使用。第32頁/共96頁居中對齊的輸出波型

用時鐘源的頻率除以周期寄存器中值的2倍,得到的結果就是當前PWM輸出波形的頻率。PWMxFrequency=Clock(A,B,SA,orSB)/(2×PWMPERx)若Polarity=0(PPOLx=0)DutyCycle=[(PWMPERx-PWMDTYx)/PWMPERx]×100%若Polarity=1(PPOLx=1)DutyCycle=[PWMDTYx/PWMPERx]×100%第33頁/共96頁居中對齊的輸出波型下面舉一個居中對齊輸出的例子:假設時鐘源頻率=10MHz(周期=10ns),PPOLx=0,PWMPERx=4,PWMDTYx=1。所以,PWMx的頻率=10MHz/4=2.5MHz,PWMx的周期=400ns,PWMx的占空比=3/4×100%=75%。第34頁/共96頁9S12PWM模塊的通道級聯(lián)如果需要PWM輸出波形的精度更高,則可以把2個8位PWM通道級聯(lián)起來組成1個16位通道。PWMCTL寄存器中有4個控制位,可以完成這個級聯(lián)的功能。CON67、CON45、CON23和CON01可以把相應的兩個通道級聯(lián)起來。注意級聯(lián)后高8位和低8位的區(qū)別,控制寄存器的區(qū)別。第35頁/共96頁允許控制寄存器--PWME

當PWMEx被置位后,PWM輸出就會立即開始。但是直到PWM模塊時鐘的下一個周期到來之時,才可以輸出正確的波形,而在這之前的波形可能會是無效的。 當處于級聯(lián)模式時,8個8位PWM通道組成4個16位的PWM通道,PWME1、PWME3、PWME5和PWME7對這4個通道進行控制,而其它控制位處于無效狀態(tài)。PWMEx:通道有效選擇位。1=允許PWM輸出,0=禁止。第36頁/共96頁極性寄存器--PWMPOL PWMPOL寄存器隨時都可以進行設置。如果某PWM通道在輸出波形的過程中,波形的極性發(fā)生了改變,那么在兩組波形的連接處可能會出現(xiàn)縮短或者拉伸了的不正常波形。PPOLx:通道x的輸出極性。1=先高后低,0=先低后高。第37頁/共96頁時鐘選擇寄存器--PWMCLKPCLK7:PWM通道7時鐘源選擇。1=ClockSB;0=ClockB。PCLK6:PWM通道6時鐘源選擇。1=ClockSB;0=ClockB。PCLK5:PWM通道5時鐘源選擇。1=ClockSA;0=ClockA。PCLK4:PWM通道4時鐘源選擇。1=ClockSA;0=ClockA。PCLK3:PWM通道3時鐘源選擇。1=ClockSB;0=ClockB。PCLK2:PWM通道2時鐘源選擇。1=ClockSB;0=ClockB。PCLK1:PWM通道1時鐘源選擇。1=ClockSA;0=ClockA。PCLK0:PWM通道0時鐘源選擇。1=ClockSA;0=ClockA。第38頁/共96頁預分頻時鐘選擇寄存器

此寄存器用來選擇ClockA和B的預分頻因子。

PWMPRCLK寄存器隨時都可以進行設置。如果某PWM通道在輸出波形的過程中,此通道的所使用時鐘的頻率發(fā)生了改變,那么在兩組波形的連接處可能會出現(xiàn)縮短或者拉伸了的不正常波形。PCKB2、PCKB1、PCKB0:ClockB預分頻因子的選擇PCKA2、PCKA1、PCKA0:ClockA預分頻因子的選擇第39頁/共96頁居中對齊允許寄存器--PWMCAE

此寄存器控制每個PWM通道輸出波形的對齊方式,可以是左對齊或者居中對齊。如果CAEx=1,則對應通道的輸出波形為居中對齊方式;如果CAEx=0,則為左對齊方式。注意只有當對應通道被禁止輸出時,才可以設置此寄存器。CAEx: 1=對應x通道為居中對齊模式

0=對應x通道為左對齊模式第40頁/共96頁控制寄存器--PWMCTL

此寄存器可以實現(xiàn)把8個8位PWM通道級聯(lián)為4個16位PWM通道。CONxy:x通道和y通道級聯(lián),以獲得更高的輸出精度。x通道作為高8位,y通道作為低8位。這時只有通道y的時鐘選擇位、極性控制位、輸出允許位和對齊方式選擇位才有效;通道x的相應寄存器均無效。

1=級聯(lián)模式

0=非級聯(lián)模式PFRZ:凍結模式PWM計數(shù)器停止。1=停止,0=繼續(xù)運行。第41頁/共96頁比例因子寄存器A--PWMSCLA

此寄存器用來提供產(chǎn)生時鐘ClockSA的比例因子,ClockSA是由ClockA經(jīng)過一系列運算得來的,公式:ClockSA=ClockA/(2×PWMSCLA)

當PWMSCLA=0時,默認比例因子為256,此時ClockSA的頻率等于ClockA的頻率除以512。第42頁/共96頁比例因子寄存器B--PWMSCLB

此寄存器用來提供產(chǎn)生時鐘ClockSB的比例因子,ClockSB是由ClockB經(jīng)過一系列運算得來的,公式如下:ClockSB=ClockB/(2×PWMSCLB)

當PWMSCLB=0時,默認比例因子為256,此時ClockSB的頻率等于ClockB的頻率除以512。第43頁/共96頁x通道計數(shù)寄存器--PWMCNTx

每個PWM通道都有一個獨立的加法/減法計數(shù)器,計數(shù)器的頻率跟時鐘源的頻率有關。可以在任意時刻來讀取計數(shù)器里的值,而計數(shù)器的工作不會受到影響?!镒⒁馕覀儎偛胖v過的左/居中對齊方式時,計數(shù)器的計數(shù)方式。 對計數(shù)寄存器進行寫操作將使它復位,計數(shù)器會立即開始加法計數(shù),從周期寄存器和占空比寄存器的緩沖區(qū)里得到周期和占空比值,然后根據(jù)設置的極性來輸出。當相應的PWM通道被禁止輸出(PWMEx=0)時,計數(shù)器不工作;當PWM通道允許時,計數(shù)器會以計數(shù)寄存器中的值為起點開始計數(shù)。第44頁/共96頁周期寄存器--PWMPERx

每個PWM通道都有一個獨立的周期寄存器,周期寄存器中的值對應PWM通道輸出波形的周期。 此寄存器具有雙重緩存功能,新輸入的值被送到緩沖區(qū),而不是立即生效,到下一個有效周期開始時才會有效,所以PWM輸出波形的周期在改變時不會產(chǎn)生無效波形。第45頁/共96頁占空比寄存器--PWMDTYx

每個PWM通道都有一個獨立的占空比寄存器,周期寄存器中的值對應PWM通道輸出波形的周期。 此寄存器同樣是雙重緩存的。 注意:讀取寄存器會得到最新一次寫入的值,而不會返回當前的周期值。第46頁/共96頁關斷寄存器--PWMSDNPWM7ENA:PWM緊急關斷允許 當此位為1時,通道7會被強制配置為輸入端口,并且允許緊急關斷。只有當此位為1時,寄存器中的其它位才有意義。PWM7INL: 緊急關斷通道7的有效電平。1=高電平,0=低電平。PWM7IN: PWM通道7的輸入電平狀態(tài)。PWMLVL: PWM緊急關斷后的輸出電平。1=高,0=低。PWMRSTRT: PWM重新啟動。只有在當PWM通道7處于無效狀態(tài)(非緊急關閉)時,才可以重新啟動PWM模塊。把PWMRSTRT置一,當計數(shù)器返回0時,PWM通道才開始運行。PWMIE: PWM中斷允許。1=允許,0=禁止。PWMIF: PWM中斷標志。當PWM7ENA被置位時,PWM通道7上電平的任意變化將產(chǎn)生中斷并使PWMIF置位。

1=PWM7IN輸入有變化。0=PWM7IN輸入無變化。第47頁/共96頁PWM的綜合舉例利用PWM5通道來做DA轉換輸出變化的電壓控制小燈的亮度。voidPWMInit(void){PWMPOL=0x20; //脈沖先高后低PWMCLK=0x20; //使用sa時鐘源PWMPRCLK=0x07; //時鐘a為總線8分頻PWMCAE=0x00; //通道5為左對齊輸出模式PWMCTL=0x00; //單獨使用通道5,非級聯(lián)PWMSCLA=0x05; //ClockSA=ClockA/(2*PWMSCLA),SA為3kHzPWMPER5=0x64; //設定周期}第48頁/共96頁PWM的綜合舉例voidmain(void){ unsignedchari; unsignedlongj=10000; SET_PLL(); //設置鎖相環(huán)

EnableInterrupts; PWMInit(); //初始化PWM for(i=0;i<0x64;i++) { while(j--); j=10000; while(j--); j=10000; PWMDTY5=i;//設定占空比

PWME=0x20;//使能PWM }}第49頁/共96頁4、增強型定時器ECT模塊IC/OC的定義:InputCapture/OutputCompare輸入捕獲和輸出比較IC—對外部的脈沖信號進行計數(shù)得到計數(shù)數(shù)值,根據(jù)數(shù)值可以計算出脈沖信號的寬度或周期。ECT模塊有8個IC通道分別為IC0-IC7,IC0-IC3是標準的帶有保持器的緩沖通道,而IC4-IC7不帶有保持器。OC—輸出具有精確寬度或周期的脈沖信號。通道為OC0-0C7。ECT模塊的外部引腳:共有8個外部引腳,分別為IOC0—IOC7,與PORTT復用。第50頁/共96頁ECT模塊的組成4個帶有16位緩存的輸入比較通道4個帶有8位緩存的脈沖累加器,也可以作為2個16位的累加器使用帶有4位預分頻因子的16位模數(shù)遞減計數(shù)器用戶可選可抵御噪音的延遲計數(shù)器第51頁/共96頁三個例子舉三個例子講述本節(jié)內(nèi)容流水燈顯示使用輸入捕捉功能,對外來脈沖進行計數(shù)使用輸出比較功能,輸出一個具有一定寬度的高電平脈沖第52頁/共96頁voidTimerOverflow(void){ unsignedchari=1,j=0x80; while((i!=0)&&(j!=0)) { PORTB=~(i|j); i<<=1; j>>=1; while(TCNT!=0x0000);//延時

while(TCNT==0x0000); }}voidmain(void){ //SET_PLL();//設置鎖相環(huán)

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

TSCR2=0x07;//分頻系數(shù)為128 DDRB=0xff; PORTB=0xff; for(;;) { TimerOverflow(); }} //請見exp15例一:流水燈的顯示例一:流水燈的顯示PORTB輸出調(diào)用函數(shù)設置控制寄存器1設置控制寄存器2延時控制第53頁/共96頁ECT控制寄存器一

本例設置TSCR1=0x80。TEN=1:主定時器使能。0=主定時器禁止,進入低功耗狀態(tài)。TSWAI=0:等待模式時主定時器繼續(xù)工作,方便調(diào)試。0=停止工作。TSFRZ=0:凍結模式時主定時器繼續(xù)工作。0=停止工作。TFFCA=0:自動清除標志位。1=手動清除。 必須設置TSCR1才可以使主定時器工作,需要在ECT模塊初始化時就設置好。第54頁/共96頁ECT控制寄存器二本例設置TOI=0:禁止定時器溢出中斷。1=允許。TCRE=0:定時器自由運行。1=輸出比較7引起復位。PR2=1、PR1=1、PR0=1:分頻系數(shù)=128。第55頁/共96頁ECT計數(shù)寄存器 TCNT為自由計數(shù)器的計數(shù)值,本例通過讀取它的值實現(xiàn)延時。這是一個16位的寄存器,最大值為65535。

while(TCNT!=0x0000);while(TCNT==0x0000);這兩句的含義是:TCNT開始計數(shù)后值不為0,等待直到TCNT溢出返回0后,第一句繼續(xù),然后再等到到TCNT不為0,第二句繼續(xù)。如果沒有第二句,則有可能燈“隔一個亮一個”。第56頁/共96頁例二:輸入捕捉利用輸入捕捉0通道對外來的方波信號進行捕捉,采用中斷的形式。中斷發(fā)生后,讀取捕捉后的計數(shù)值,并用LED燈指示中斷成功。通道0設置為輸入捕捉,采用雙沿觸發(fā),IC0開中斷,可以進入中斷服務程序。方波信號由PORTA_BIT6產(chǎn)生,PORTA_BIT6和IOC0硬件連接。第57頁/共96頁例二:輸入捕捉IC0的初始化:voidic_init(void){ TSCR1=0x90; //主定時器使能

TSCR2=0x07; //分頻因子=128 ICSYS=0x02; //IC緩沖使能

TIOS=0; //通道設置為輸入捕獲

TCTL4=0xff; //采用上升、下降沿觸發(fā)

TIE=0x00000001; //通道0開中斷}本例使用了例一未使用的過寄存器:ICSYS、TIOS、TCTL4和TIE。第58頁/共96頁輸入控制系統(tǒng)控制寄存器-ICSYSSHxy=0:正常操作。1=通道x在通道y上產(chǎn)生同樣的動作。TFMOD=0:只要產(chǎn)生正確的輸入捕獲事件,TFLG1中的CxF位就置一。1=隊列模式時才使用。PACMX=0:8位脈沖累加器溢出后自動回0。1=不自動回0,停留在0XFF。脈沖累加器對IC通道捕獲的有效邊沿數(shù)量進行計數(shù)。BUFEN=1:使用輸入捕獲緩沖區(qū)。0=不使用。LATQ=0:輸入捕獲隊列模式使能。產(chǎn)生一次成功的輸入捕獲時,IC通道寄存器中保留的計數(shù)值會被送到保持器中,然后IC寄存器會接收新的計數(shù)值。1=鎖存模式使能。第59頁/共96頁IC/OC選擇寄存器--TIOSTIOS=0: 設置相應的通道為輸入捕獲。IOSx: 1=通道x為輸出比較;

0=通道x為輸入捕獲。第60頁/共96頁控制寄存器3/4—TCTL3/4EDGnA/B:輸入捕捉邊沿控制。本例設置EDG0A=1,EDG0B=1。即IC0通道采用上升,下降沿都觸發(fā)。n代表通道序號。第61頁/共96頁定時器中斷使能寄存器-TIECxI:1=第x個通道中斷允許;0=第x個通道中斷禁止。 本例設置C0I=1,把通道0的中斷打開,這樣能夠使外部信號引發(fā)IC0中斷,并進入相應的服務程序進行處理。第62頁/共96頁例二:輸入捕捉初始化好后,需要在main函數(shù)中調(diào)用初始化函數(shù)ic_init()。以下是在main函數(shù)中,如何使用PORTA_BIT6來產(chǎn)生一個方波信號。DDRA=0xff; //設置PORTA的方向寄存器,為輸出PORTA=0x00; //PORTA的輸出初始化為低電平DDRB=0xff; //PORTB設置為LED燈的控制信號PORTB=0xff; //LED全滅for(;;){ for(i=0;i<6000;i++) { PORTA_BIT6=1;//循環(huán)中設置信號為高電平

} for(i=0;i<6000;i++) { PORTA_BIT6=0; //循環(huán)中設置信號為低電平,產(chǎn)生方波

}}第63頁/共96頁例二:輸入捕捉方波信號已經(jīng)成功得產(chǎn)生了,下面是中斷服務程序:#pragmaCODE_SEGNON_BANKEDvoidinterrupt8ic0_int(void){ TFLG1_C0F=1;//中斷標志清除

ic4=TC0;

//通過讀TC0寄存器來響應中斷,ic4為用戶設置的變量

ic4=ic4-ic40;ic40=ic4;//得到脈沖寬度需要考慮溢出嗎?

PORTB=0x55; //用LED燈來指示已經(jīng)進入了中斷

/*以下放置其他代碼*/}第64頁/共96頁例三:輸出比較

這里講一個輸出比較例子,目的是通過OC0通道輸出一個有一定寬度的脈沖。OC0的初始化:voidoc_init(){ TSCR2=0x07;//128分頻,定時器溢出中斷禁止

TIOS=0xff;//所有通道作為輸出比較通道

TIE=0x00;//中斷全部禁止

TSCR1=0x90;//主定時器使能

TCTL2=0xaa;//TC0低電平

CFORC=0xff;//強制輸出比較}第65頁/共96頁例三:輸出比較voidmain(void){ EnableInterrupts; oc_init(); //初始化函數(shù)調(diào)用

asm_main(); TCTL2_OM0=1; TCTL2_OL0=1; //OC0高電平

CFORC_FOC0=1; //OC0強制輸出比較

TC0=TCNT+40000; //設置脈沖寬度,在自由計數(shù)器TCNT的基礎上加上脈沖寬度的計數(shù)值

TCTL2_OM0=1; TCTL2_OL0=0; //OC0低電平

for(;;){/*其他代碼*/}}第66頁/共96頁強制輸出比較寄存器--CFORCFOCx—x通道強制輸出比較在相應的寄存器位寫入強制輸出比較命令,會立即使相應的通道處于輸出比較狀態(tài)。第67頁/共96頁定時器控制寄存器1/2—TCTL1/2OMn:輸出模式OLn:輸出等級這8對控制位是用來指定輸出比較的輸出動作的,當OMn和OLn二者任意一個為1時,OCn對應的端口會有相應的輸出。如果需要用OMn和OLn來控制相應定時器端口的輸出,則OC7M中的對應位必須清零。第68頁/共96頁5、同步外設接口SPI模塊串行通信的概念:所謂串行通信是指外設和計算機間使用一根數(shù)據(jù)信號線一位一位地傳輸數(shù)據(jù)。串行通信的優(yōu)點:通信線路少,在遠距離通信時可以極大地降低成本,所以適合于遠距離數(shù)據(jù)傳送,也常用于速度要求不高的近距離數(shù)據(jù)傳送。第69頁/共96頁5、同步外設接口SPI模塊常見串行通信:異步串行通信SCI(通用異步收發(fā)UART)同步串行外設接口SPIIIC(Inter-IntegratedCircuit)總線控制局域網(wǎng)CAN總線USBPS/2LIN(LocalInterconnectNetwork)總線第70頁/共96頁同步和異步串行通信的區(qū)別

同步串行通信-使用時鐘信號(SPI)。以數(shù)據(jù)塊(幀)為傳輸單位;雙方使用同一時鐘(主控方提供時鐘,被控方接收時鐘);數(shù)據(jù)格式:每個數(shù)據(jù)塊前加1~2個同步字符(同步頭)進行幀同步,一般采用CRC循環(huán)冗余校驗碼;同步通信的數(shù)據(jù)傳輸效率和傳輸速率較高,但硬件電路比較復雜; 異步串行通信-不使用時鐘信號(SCI)。串行通信時的數(shù)據(jù)、控制和狀態(tài)信息都使用同一根信號線傳送;收發(fā)雙方必須遵守共同的通信協(xié)議(通信規(guī)程);串行異步通信以字符為單位進行傳輸。第71頁/共96頁串行通信的數(shù)據(jù)傳輸方式方式圖示一句話總結全雙工同時收發(fā)半雙工分時收發(fā)單工只發(fā)不收,只收不發(fā)第72頁/共96頁9S12系列單片機SPI的定義SPI(SerialPeripheralInterface,串行外設接口)是一種高速高效的同步串行接口技術,這種接口技術主要用于MCU與外部的接口芯片交換數(shù)據(jù),已逐漸成為一種工業(yè)接口標準。MC9S12DG128有兩個SPI接口,分別占用PP口(0-3位)和PM口(2-5位),引腳號分別為1-4和70-73。第73頁/共96頁SPI引腳定義SPI引腳:SCK 主機產(chǎn)生的同步時鐘MOSI 主機發(fā)送,從機接收MISO 主機接收,從機發(fā)送SS 主從機選擇注意:注意,主從機選擇信號是低電平有效。1-主機,0=從機。系統(tǒng)中只能有一個主機。主機的MOSI、MISO分別和從機的MOSI,MISO連接。第74頁/共96頁SPI工作模式主機模式:主機產(chǎn)生時鐘信號,用來同步主從雙方的移位寄存器。對主機來說,數(shù)據(jù)的收發(fā)是同步的,數(shù)據(jù)流向有可能是一個方向。從機模式:需要在時鐘信號的作用下,SS必須有效。雙工模式(三線同步傳輸):無論是主機模式還是從機模式都只用一個引腳傳輸數(shù)據(jù)。第75頁/共96頁SPI模塊的寄存器SPI控制寄存器一 SPICR1SPI控制寄存器二 SPICR2SPI狀態(tài)寄存器 SPISRSPI波特率寄存器 SPIBRSPI數(shù)據(jù)寄存器 SPIDR第76頁/共96頁SPI控制寄存器一SPIE—SPI中斷使能位。1=中斷允許,0=中斷禁止。SPE—SPI系統(tǒng)使能位。1=使用SPI,0=不使用SPI。SPTIE—發(fā)送中斷使能。1=允許,0=禁止。MSTR—主從模式選擇位。1=主機,0=從機。CPOL—時鐘極性位。1=有效時鐘為低,空閑為高,0=有效時鐘為高,空閑為低。主從機必須匹配。第77頁/共96頁SPI控制寄存器1—SPICR1CPHA—SPI時鐘相位控制。1=主機在SPSCK的第一個跳變開始驅動MOSI,從機應用它來啟動數(shù)據(jù)發(fā)送。在連結幾次SPI傳送期間,從機的SS腳可保持為低電平;0=SS下跳用于啟動從機數(shù)據(jù)發(fā)送,而第一個SPSCK跳變捕捉最高位。在一次SPI傳送完畢,從機的SS腳必須返回高電平。SSOE—從機選擇輸出使能。跟MODF配合使用。LSBFE—最低位先發(fā)使能。1=先發(fā)最低位,0=先發(fā)最高位。SS非下降沿啟動時鐘信號啟動第78頁/共96頁SPI控制寄存器二MODFEN—模式錯誤使能位。主機模式MODFEN=0,則SS不作用于SPI。如8頁表。從機模式下,無論MODFEN為何值,SS只作為輸入。1-SS引腳使用,0-SS引腳不作用于SPI。BIDIROE--在雙工模式下(SPC0=1)輸出使能。1-輸出緩沖使能,0-輸出緩沖禁止。SPISWAI--SPI在等待模式下停止位。1-等待模式停止,0-等待模式正常工作。SPC0--串行引腳控制位0??刂普:碗p工模式。第79頁/共96頁SPI波特率寄存器波特率--每秒鐘數(shù)據(jù)傳輸?shù)亩M制位數(shù)bps。SPPR2-SPPR0--SPI波特率預分頻位SPR2-SPR0--SPI波特率選擇位組合使用第80頁/共96頁SPI狀態(tài)寄存器SPISR寄存器指示SPI的狀態(tài),并且只讀。SPIF--SPIF中斷標志。1-中斷發(fā)生,有數(shù)據(jù)存儲到SPI數(shù)據(jù)寄存器-SPIDR;0-傳輸未完成。注意對此位清零的方法:當SPIF=1時,首先讀SPISR的值,然后訪問數(shù)據(jù)寄存器SPIDR。SPTEF--SPI發(fā)送空中斷標志。1-SPI數(shù)據(jù)寄存器空(數(shù)據(jù)已發(fā)送);0-SPI數(shù)據(jù)寄存器非空。注意對此位清零的方法:當SPTEF=1時,首先讀SPISR的值,然后寫數(shù)據(jù)寄存器SPIDR。MODF--模式錯誤標志。1-發(fā)生錯誤,0-無錯誤。當SPI配置成主機模式并且模式錯誤檢測使能(SPICR2的MODFEN位置位)時,如果SS輸入變低,該位置位。注意對此位清零的方法:當MODF=1時,首先讀SPISR的值,然后寫SPI控制寄存器1。第81頁/共96頁SPI數(shù)據(jù)寄存器

SPI數(shù)據(jù)寄存器是SPI數(shù)據(jù)的輸入和輸出寄存器。寫該寄存器會允許一個字節(jié)進入隊列并發(fā)送。如果SPI被配置成主機,當前面的數(shù)據(jù)發(fā)送完成,排在隊列的數(shù)據(jù)會立即被發(fā)送。SPISR寄存器中的發(fā)送空標志SPTEF表明SPI數(shù)據(jù)寄存器準備接收新的數(shù)據(jù)。當SPIF=1時SPIDR中接收的數(shù)據(jù)是有效的,這時才可以讀到有效數(shù)據(jù)。注意,SPIEF=0時表示當前數(shù)據(jù)并未發(fā)送完成,不可寫SPIDR寄存器,當SPIEF=1時,才可以寫SPIDR寄存器以發(fā)送新數(shù)據(jù)。第82頁/共96頁SPI綜合舉例

單片機MC9S12DG128的SPI1接口和74HC164連接,74HC164是串入并出的8位移位寄存器,用其來擴展并行輸出口,74HC164的輸出作為數(shù)碼管顯示電路的段碼,采用動態(tài)掃描顯示。PT5做74HC164的片選信號。微控制器工作于主模式,向SPIDR寫入數(shù)據(jù)啟動SPI發(fā)送模塊后,MCU發(fā)送的數(shù)據(jù)進入74HC164的移位寄存器中。請見exp17。SPI1的MOSI,時鐘,片選,接到74HC16474HC164,串入并出。74HC244八同相三態(tài)線驅動器接8段LED的驅動電路,低電平使某段發(fā)光。第83頁/共96頁SCI(串行通信接口)總線接口 MC9S12DG128單片機有兩個SCI模塊。SCI模塊僅僅復用了PS口的4個I/O引腳(0-3位)作為RXD0、TXD0、RXD1、TXD1。當SCI接收器/發(fā)送器被允許時,SCI將控制TxD和RxD進入相應的操作,否則它們只能用作普通的I/O口。注意SCI是異步串行通信口。

SCI的發(fā)送器與接收器都是雙緩沖的。各自有工作使能和中斷控制??晒ぷ饔谌p工模式。SCI的主要特性:1、異步2、全雙工3、不歸零格式(NRZ)4、13個波特率控制位,選擇更廣5、收、發(fā)雙緩沖6、具有8個中斷標志位的中斷驅動操作SCI的其他特性可以在寄存器的講解時體會。第84頁/共96頁SCI的寄存器

波特率寄存器SCIBDH和SCIBDL波特率計算公式:BR=兩寄存器組合值,1-8191

注意此寄存器的賦值方法:如果只對SCIBDH賦值是無效的,必須先對SCIBDH賦值,再對SCIBDL賦值才可以產(chǎn)生有效的BR。如果不使用SCIBDH,則可以直接給SCIBDL賦值,因為SCIBDH復位后默認為0,相當于賦0值。 下面舉個設置波特率為9600的例子。第85頁/共96頁波特率寄存器SCIBDH和SCIBDL

設置波特率實質(zhì)上是計算公式中BR的值,再把BR的值賦給波特率寄存器。BR的值計算是有技巧的,可以用一個公式完成。BR值=((PLL頻率/2)/目標波特率/16)注意PLL頻率/2即總線頻率。使用PLL,總線頻率=PLL頻率/2,不使用,則總線頻率=晶振頻率/2。所以,如果需要設置SCI0波特率為9600,并假設PLL時鐘頻率=40M的話,賦值程序為:SCI0BDL=(unsignedchar)((40000000UL/2)/9600/16);SCI0BDH不使用。第86頁/共96頁SCI控制寄存器1-SCICR1LOOPS-SCI回送模式。即“自發(fā)自收”。1=回送模式,0=正常模式。SCISWAI-等待模式停止控制。1=等待模式SCI工作,0=不工作。RSRC-接收器來源。1=來源于外部,0=來源于內(nèi)部。和LOOPS配合。M-數(shù)據(jù)字符長度。1=數(shù)據(jù)位9位,0=數(shù)據(jù)位8位。WAKE-喚醒條件位。1=地址位喚醒(接收數(shù)據(jù)的最大顯著位為1),0=空閑線喚醒(RXD腳滿足空閑條件)。ILT-空閑線類型。這位決定SCI什么時候開始計數(shù)“空閑字符”的位數(shù)。計數(shù)可從“起始位”或從“停止位”開始。從“起始位”開始計數(shù),則“停止位”前的一串“1”可能產(chǎn)生錯誤的空閑線條件。從“停止位”開始計數(shù),可避免錯誤的空閑線識別,但需要適當?shù)赝桨l(fā)送操作。PE-奇偶校驗使能。1=允許,0=禁止。第87頁/共96頁SCI控制寄存器1-SCICR1PT-奇偶校驗類型。1=奇校驗,0=偶校驗。一般此寄存器可以按默認值設置。第88頁/共96頁SCI控制寄存器

溫馨提示

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

評論

0/150

提交評論