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

下載本文檔

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

文檔簡(jiǎn)介

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

S12MEBIV3.PDFS12DTB128PIMV2.PDF串行通信模塊

S12SCIV2.PDFS12SPIV4.PDFS12IICV2.PDFECT模塊

S12ECT16B8CV1.PDFA/D模塊

S12ATD10B8CV2.PDFPWM模塊

S12PWM8B8CV1.PDFMSCAN模塊

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

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

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

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

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

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

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

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

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

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

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

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

0=對(duì)應(yīng)x通道為左對(duì)齊模式第40頁(yè)/共96頁(yè)控制寄存器--PWMCTL

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

1=級(jí)聯(lián)模式

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

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

當(dāng)PWMSCLA=0時(shí),默認(rèn)比例因子為256,此時(shí)ClockSA的頻率等于ClockA的頻率除以512。第42頁(yè)/共96頁(yè)比例因子寄存器B--PWMSCLB

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

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

每個(gè)PWM通道都有一個(gè)獨(dú)立的加法/減法計(jì)數(shù)器,計(jì)數(shù)器的頻率跟時(shí)鐘源的頻率有關(guān)??梢栽谌我鈺r(shí)刻來讀取計(jì)數(shù)器里的值,而計(jì)數(shù)器的工作不會(huì)受到影響。★注意我們剛才講過的左/居中對(duì)齊方式時(shí),計(jì)數(shù)器的計(jì)數(shù)方式。 對(duì)計(jì)數(shù)寄存器進(jìn)行寫操作將使它復(fù)位,計(jì)數(shù)器會(huì)立即開始加法計(jì)數(shù),從周期寄存器和占空比寄存器的緩沖區(qū)里得到周期和占空比值,然后根據(jù)設(shè)置的極性來輸出。當(dāng)相應(yīng)的PWM通道被禁止輸出(PWMEx=0)時(shí),計(jì)數(shù)器不工作;當(dāng)PWM通道允許時(shí),計(jì)數(shù)器會(huì)以計(jì)數(shù)寄存器中的值為起點(diǎn)開始計(jì)數(shù)。第44頁(yè)/共96頁(yè)周期寄存器--PWMPERx

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

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

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

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

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

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

EnableInterrupts; TSCR1=0x80;//定時(shí)器使能

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

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

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

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

TIOS=0; //通道設(shè)置為輸入捕獲

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

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

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

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

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

ic4=TC0;

//通過讀TC0寄存器來響應(yīng)中斷,ic4為用戶設(shè)置的變量

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

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

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

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

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

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

TSCR1=0x90;//主定時(shí)器使能

TCTL2=0xaa;//TC0低電平

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

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

CFORC_FOC0=1; //OC0強(qiáng)制輸出比較

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

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

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

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

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

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

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

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

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

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論