項(xiàng)目9MCU之間的串行通信(_第1頁
項(xiàng)目9MCU之間的串行通信(_第2頁
項(xiàng)目9MCU之間的串行通信(_第3頁
項(xiàng)目9MCU之間的串行通信(_第4頁
項(xiàng)目9MCU之間的串行通信(_第5頁
已閱讀5頁,還剩98頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、項(xiàng)目9 MCU之間的串行通信(一)學(xué)習(xí)目標(biāo)學(xué)習(xí)目標(biāo)n通過本項(xiàng)目的學(xué)習(xí),能夠熟練闡述串行通信接口(SCI)模塊的特點(diǎn);能夠熟悉SCI 波特率寄存器 (SCIxBDH, SCIxBDL)的配置;能夠熟悉SCI控制寄存器1(SCIxC1)的配置;能夠熟悉SCI控制寄存器2 (SCIxC2)的配置;能夠熟悉SCI控制寄存器3 (SCIxC3)的配置;能夠熟悉SCI狀態(tài)寄存器1(SCIxS1)的配置;能夠熟悉SCI狀態(tài)寄存器2(SCIxS2)的配置;能夠熟悉數(shù)據(jù)寄存器(SCIxD)的配置;能夠應(yīng)用串行通信接口(SCI)模塊編寫相關(guān)的應(yīng)用程序。學(xué)習(xí)要求學(xué)習(xí)要求n能夠熟練闡述串行通信接口(SCI)模塊的特點(diǎn)

2、能n夠熟悉SCI 波特率寄存器 (SCIxBDH, SCIxBDL)的配置n能夠熟悉SCI控制寄存器1(SCIxC1)的配置n能夠熟悉SCI控制寄存器2 (SCIxC2)的配置能夠熟悉SCI狀態(tài)寄存器1(SCIxS1)的配置n能夠熟悉SCI狀態(tài)寄存器2(SCIxS2)的配置n能夠熟悉數(shù)據(jù)寄存器(SCIxD)的配置n能夠應(yīng)用串行通信接口(SCI)模塊編寫相關(guān)的應(yīng)用程序項(xiàng)目導(dǎo)入項(xiàng)目導(dǎo)入n在控制系統(tǒng)中,有時(shí)器件之間需要進(jìn)行通信,例如,單片機(jī)與外圍器件之間,單片機(jī)之間,單片機(jī)與計(jì)算機(jī)之間等,它們是怎么通信的呢?nMCU把從另一個(gè)MCU發(fā)送過來的數(shù)據(jù)接收存貯到變量TmpData中,同時(shí)接收計(jì)數(shù)變量Cou

3、nter加1,并把變量Counter的值送到端口PTAD(或PTBD)中,以顯示接收數(shù)據(jù)的次數(shù),然后再把變量TmpData中的數(shù)據(jù)發(fā)送出另一個(gè)MCU,電路原理圖如圖9-11所示。項(xiàng)目導(dǎo)入項(xiàng)目導(dǎo)入項(xiàng)目分析項(xiàng)目分析n1用最少的元器件構(gòu)成兩個(gè)單片機(jī)通信的最小應(yīng)用系統(tǒng)。n 2應(yīng)用MC9S08GB60型單片機(jī)的串行通信接口模塊(SCI),將兩個(gè)單片機(jī)的數(shù)據(jù)信息互相傳遞。n在動(dòng)手實(shí)現(xiàn)兩個(gè)單片機(jī)之間的通信之前,首先學(xué)習(xí)MC9S08GB60型單片機(jī)串行通信接口模塊(SCI)的相關(guān)知識(shí)及其寄存器的配置。相關(guān)知識(shí)相關(guān)知識(shí)n9.1 串行通信接口及其相關(guān)概念串行通信接口及其相關(guān)概念n9.2 串行通信接口串行通信接口S

4、CI模塊的概述模塊的概述n9.3 串行通信接口串行通信接口SCI模塊的應(yīng)用模塊的應(yīng)用9.1 串行通信接口及其相關(guān)概念串行通信接口及其相關(guān)概念n微控制器與外部設(shè)備的信息交換稱為通信。通信的基本方式有兩種,它們是并行通信和串行通信。并行通信通過并行輸入/輸出端口進(jìn)行,數(shù)據(jù)的各位同時(shí)進(jìn)行傳送,數(shù)據(jù)有多少位就要有同樣多少的傳送線。串行通信借助于串行輸入/輸出端口來實(shí)現(xiàn),串行通信是數(shù)據(jù)一位一位順序傳送,只需要一條傳輸線路。故串行通信節(jié)省傳輸線,特別是當(dāng)數(shù)據(jù)量多和進(jìn)行長(zhǎng)距離數(shù)據(jù)通信時(shí)宜采用串行傳送,可降低通信成本。9.1 串行通信接口及其相關(guān)概念串行通信接口及其相關(guān)概念n串行通信是用一條傳輸線按位傳送數(shù)據(jù)

5、,要傳送的每一個(gè)數(shù)據(jù)(字符)都要符合一定的格式。根據(jù)通信格式,串行通信可分為同步通信方式和異步通信方式。9.1 串行通信接口及其相關(guān)概念串行通信接口及其相關(guān)概念n(1)同步通信n同步通信是一種連續(xù)串行傳送數(shù)據(jù)的通信方式,一次通信只傳送一幀信息。這里的信息幀與異步通信中的字符幀不同,通常含有若干個(gè)數(shù)據(jù)字符。 9.1 串行通信接口及其相關(guān)概念串行通信接口及其相關(guān)概念n(2)異步通信n異步通信方式傳送數(shù)據(jù)時(shí),用一個(gè)起始位表示一個(gè)字符的開始,用一個(gè)停止位表示字符的結(jié)束。由起始位到停止位的所有位構(gòu)成了一個(gè)字符的全部信息,稱為一幀。 9.1 串行通信接口及其相關(guān)概念串行通信接口及其相關(guān)概念n每一幀包括以下

6、內(nèi)容:n起始位。起始位標(biāo)志著傳送數(shù)據(jù)的開始,一般為低電平,占一位。n數(shù)據(jù)位。數(shù)據(jù)位是要傳送的字符,一般是7位或8位,由低位到高位順序發(fā)送。n奇偶校驗(yàn)位。奇偶校驗(yàn)位用來校驗(yàn)串行傳送的正確性,分為奇校驗(yàn)、偶校驗(yàn),校驗(yàn)位占一位。n停止位。停止位標(biāo)志一個(gè)字符的傳送結(jié)束,一般為高電平,占一位,一位半或兩位。微控制器常采用一位停止位。9.1 串行通信接口及其相關(guān)概念串行通信接口及其相關(guān)概念n在進(jìn)行異步通信傳送數(shù)據(jù)時(shí),微控制器與外設(shè)之間必須事先約定以下內(nèi)容:n字符格式。雙方約定編碼格式,即上述各位的具體約定,例如數(shù)據(jù)位數(shù)、是否要奇偶校驗(yàn)位等內(nèi)容。n波特率。波特率是指串行通信數(shù)據(jù)傳送的速率,由于串行通信是按位

7、傳送數(shù)據(jù)的,因此定義每秒傳輸?shù)奈粩?shù)為波特率,即1波特率=1位/秒(1bps)。串行通信時(shí)要求兩個(gè)進(jìn)行數(shù)據(jù)傳送的設(shè)備要有相同的波特率。9.1 串行通信接口及其相關(guān)概念串行通信接口及其相關(guān)概念n異步通信中,接收端檢測(cè)到傳輸線上發(fā)送過來的低電平邏輯0(即字符幀起始位)時(shí),確定發(fā)送端已開始發(fā)送數(shù)據(jù),每當(dāng)接收端收到字符幀中的停止位時(shí),就知道一幀字符已經(jīng)發(fā)送完畢。n串行異步通信方式中,數(shù)據(jù)是在單條1位寬的傳輸線上一位接一位地順序傳送。這樣一個(gè)字節(jié)的數(shù)據(jù)要分8次由低位到高位按順序一位位地傳送。由此可見,串行通信的特點(diǎn)如下: n節(jié)省傳輸線,這是顯而易見的。尤其是在遠(yuǎn)程通信時(shí),此特點(diǎn)尤為重要。這也是串行通信的主

8、要優(yōu)點(diǎn)。 n數(shù)據(jù)傳送效率低。與并行通信比,這也這是顯而易見的。這也是串行通信的主要缺點(diǎn)。 9.1 串行通信接口及其相關(guān)概念串行通信接口及其相關(guān)概念n在串行通信中,二進(jìn)制數(shù)據(jù)以數(shù)字信號(hào)的形式出現(xiàn),不論是發(fā)送還是接收,都必須有時(shí)鐘信號(hào)對(duì)傳送的數(shù)據(jù)進(jìn)行定位。在TTL標(biāo)準(zhǔn)表示的二進(jìn)制數(shù)中,傳輸線上高電平表示二進(jìn)制1,低電平表示二進(jìn)制0,且每一位持續(xù)時(shí)間是固定的,由發(fā)送時(shí)鐘和接收時(shí)鐘的頻率決定。 9.1 串行通信接口及其相關(guān)概念串行通信接口及其相關(guān)概念n(1)發(fā)送時(shí)鐘 n發(fā)送數(shù)據(jù)時(shí),先將要發(fā)送的數(shù)據(jù)送入移位寄存器,然后在發(fā)送時(shí)鐘的控制下,將該串行數(shù)據(jù)逐位移位輸出。通常是在發(fā)送時(shí)鐘的下降沿將移位寄存器中的

9、數(shù)據(jù)串行輸出,每個(gè)數(shù)據(jù)位的時(shí)間間隔由發(fā)送時(shí)鐘的周期來劃分。 n 接收時(shí)鐘 n在接收串行數(shù)據(jù)時(shí),接收時(shí)鐘的上升沿對(duì)接收數(shù)據(jù)采樣,進(jìn)行數(shù)據(jù)位檢測(cè),并將其移入接收器的移位寄存器中,最后組成并行數(shù)據(jù)輸出。 n 波特率系數(shù)n接收時(shí)鐘和發(fā)送時(shí)鐘與波特率有如下關(guān)系:F = n B 這里F 是發(fā)送時(shí)鐘或接收時(shí)鐘的頻率; B 是數(shù)據(jù)傳輸?shù)牟ㄌ芈剩?n 稱為波特率因子。設(shè)發(fā)送或接收時(shí)鐘的周期為Tc,頻率為F的位傳輸時(shí)間為Td,則: Tc = 1/F , Td = 1/B 得到: Tc = Td /n。 在實(shí)際串行通信中,波特率系數(shù)可以設(shè)定。在異步傳送時(shí),n = 1,16,64,實(shí)際常采用n = 16,即發(fā)送或接收

10、時(shí)鐘的頻率要比數(shù)據(jù)傳送的波特率高n倍。在同步通信時(shí),波特率系數(shù)n必須等于1。9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nMC9S08GB60包含兩個(gè)獨(dú)立的串行通信接口模塊(SCI),該模塊有時(shí)也叫通用異步發(fā)送器/接收器(UARTs)。串行通信接口模塊1(SCI1)的相關(guān)引腳與端口E的PTE0、PTE1引腳共享,串行通信接口模塊2(SCI2)的相關(guān)引腳與端口C的PTC0、PTC1引腳共享。9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述n一般地,它們通過RS232串行通信接口與個(gè)人PC機(jī)或工作站進(jìn)行通信,SCI模塊也允許在MCU之間進(jìn)行全雙工、不歸零(NRZ)的異步通信

11、,它包含1個(gè)波特率發(fā)生器、發(fā)送器和接受器。雖然發(fā)送器和接收器共用1個(gè)波特率發(fā)生器,但是它們各自可以獨(dú)立操作。 9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nSCI 模塊的特性包括:n全雙工、標(biāo)準(zhǔn)的不歸零(NRZ)格式n具有獨(dú)立使能的雙緩沖發(fā)送器和接收器n可編程波特率(13 位模數(shù)分頻器)n中斷驅(qū)動(dòng)型或輪詢操作n 發(fā)送數(shù)據(jù)寄存器空,發(fā)送完成n 接收數(shù)據(jù)寄存器已滿n 接收溢出、奇偶效驗(yàn)錯(cuò)誤、成幀錯(cuò)誤和噪音錯(cuò)誤n 閑置接收器檢測(cè)n 接收管腳上的活動(dòng)邊沿n 支持LIN 的斷點(diǎn)檢測(cè)n硬件奇偶效驗(yàn)生成和檢查n可編程8 位或9 位字符長(zhǎng)度n閑置線路或地址標(biāo)記可喚醒接收器9.2 串行通信接口串行

12、通信接口SCI模塊的概述模塊的概述nSCI 通信要求發(fā)送器和接收器(一般情況下從獨(dú)立時(shí)鐘源中獲取波特率)使用相同的波特率。該波特頻率的允許容限取決于接收器與起始位的前沿,以及位采樣執(zhí)行的具體情況。每次從高電平轉(zhuǎn)換到低電平時(shí), MCU都重新同步位邊界,但在最壞的情況下,整個(gè)10或11位時(shí)間字符數(shù)據(jù)中沒有這種同步,所以波特率中的任何不匹配都累積到整個(gè)字符數(shù)據(jù)的時(shí)間。對(duì)于總線頻率由晶振驅(qū)動(dòng)的飛思卡爾半導(dǎo)體SCI 系統(tǒng),允許的波特率不匹配范圍是:8位數(shù)據(jù)格式大約為4.5%、9 位數(shù)據(jù)格式大約4%。盡管不會(huì)永遠(yuǎn)生成與標(biāo)準(zhǔn)速率嚴(yán)格匹配的波特率,但在一個(gè)可控制的范圍內(nèi),通信是可靠的。波特率發(fā)生器的時(shí)鐘源通過

13、總線時(shí)鐘來獲取,如圖9-1所示:9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述n發(fā)送器n圖9-2 為SCI發(fā)送器內(nèi)部結(jié)構(gòu)圖,SCI發(fā)送數(shù)據(jù)寄存器是位于內(nèi)部數(shù)據(jù)總線與發(fā)送移位寄存器之間的只寫緩沖器,發(fā)送時(shí)從移位寄存器移出一個(gè)字符至TxD引腳。9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述n發(fā)送器的使能是通過設(shè)置SCIxC2 寄存器中的TE 位,當(dāng)TE=1時(shí),內(nèi)部電路會(huì)產(chǎn)生一個(gè)邏輯高電平的前導(dǎo)字符,這個(gè)字符是一個(gè)處于閑置狀態(tài)的字符幀。如果發(fā)送數(shù)據(jù)寄存器中沒有數(shù)

14、據(jù),那么發(fā)送器將會(huì)保持閑置狀態(tài)。通過把數(shù)據(jù)寫入SCI 數(shù)據(jù)寄存器(SCIxD),就可把數(shù)據(jù)保存到發(fā)送數(shù)據(jù)寄存器。9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nSCI發(fā)送器的中心元件是長(zhǎng)度為10 或11 位(取決于M 控制位中的設(shè)置)的發(fā)送移位寄存器。假設(shè)M = 0,則為正常的8 位數(shù)據(jù)模式,在8 位數(shù)據(jù)模式中,移位寄存器中有1 個(gè)起始位、8 個(gè)數(shù)據(jù)位和1 個(gè)停止位。當(dāng)數(shù)據(jù)經(jīng)發(fā)送移位寄存器由TxD引腳發(fā)送完畢時(shí),發(fā)送數(shù)據(jù)寄存器空(TDRE)狀態(tài)標(biāo)志置1,如果SCIxC2寄存器的發(fā)送結(jié)束中斷使能位TCIE已置允許,那么還會(huì)產(chǎn)生發(fā)送完成中斷請(qǐng)求。當(dāng)發(fā)送數(shù)據(jù)寄存器傳送一個(gè)字節(jié)至發(fā)送移位寄

15、存器后,SCIx狀態(tài)寄存器的發(fā)送空標(biāo)志位TDRE置1,表示發(fā)送數(shù)據(jù)寄存器此時(shí)可以從內(nèi)部數(shù)據(jù)總路線接收新的數(shù)據(jù),如果SCIxC2寄存器中的發(fā)送中斷使能位TIE已置允許,那么還會(huì)產(chǎn)生發(fā)送寄存器空中斷請(qǐng)求。9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述n接收器n圖9-3 為SCI接收器內(nèi)部結(jié)構(gòu)圖,SCI在接收期間,接收器移位寄存器從RxD引腳移入字符數(shù)據(jù),SCI數(shù)據(jù)寄存器是位于內(nèi)部數(shù)據(jù)總線與接收移位寄存器之間的一個(gè)只讀緩沖器。一個(gè)完整的字符數(shù)據(jù)移入接收移位寄存器后,其數(shù)據(jù)部分立即傳送至接收數(shù)據(jù)寄存器,此時(shí)SCIxS1寄存器的接收器滿標(biāo)志位RDRF置1,表示收到的字節(jié)可以讀走了,如果SCI

16、xC2寄存器中的接收器中斷允許位RIE已置1,同時(shí)還會(huì)產(chǎn)生接收器滿中斷請(qǐng)求。9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述n接收器的使能是通過設(shè)置SCIxC2寄存器中的RE 位,當(dāng)RE=1時(shí)使能接收器。接收器接收到的字符數(shù)據(jù)是由邏輯0 的起始位、8 個(gè)(或9 個(gè))數(shù)據(jù)位(LSB 先發(fā))和邏輯1 的停止位組成。9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述n假設(shè)SCI被配置為8 位數(shù)據(jù)模式,當(dāng)字符數(shù)據(jù)從接收移位寄存器傳輸?shù)浇邮諗?shù)據(jù)寄存器(SCIxD)時(shí),則置位接收數(shù)據(jù)寄存器已滿(RDRF)狀態(tài)標(biāo)志;如果已經(jīng)置位了已

17、滿(RDRF)狀態(tài)標(biāo)志,就設(shè)置溢出(OR)狀態(tài)標(biāo)志,這時(shí)新數(shù)據(jù)將會(huì)丟失。當(dāng)程序檢測(cè)到接收數(shù)據(jù)寄存器已滿(RDRF = 1)時(shí),它通過讀SCIxD寄存器械可從接收數(shù)據(jù)寄存器中獲取數(shù)據(jù)。RDRF 標(biāo)志由一個(gè)2 步式順序自動(dòng)清除,這個(gè)2 步式順序通常在處理接收數(shù)據(jù)的用戶程序中滿足。9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述n9.2.1 SCI 波特率寄存器波特率寄存器 (SCIxBDH, SCIxBDL)9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述n這兩個(gè)寄存器控制生成SCI 波特率的預(yù)分頻系數(shù)。若要更新波特率可設(shè)置控制位SBR12:SBR0,方法是先將數(shù)據(jù)寫入高8位的

18、SCIxBDH寄存器,然后再將數(shù)據(jù)寫入低8位的SCIxBDL寄存器。注意,SCIxBDH寄存器中的值在改變SCIxBDL寄存器后才會(huì)變化。復(fù)位時(shí),SCIxBDL寄存器為非零值,因此復(fù)位后,波特率發(fā)生器一直處于禁止?fàn)顟B(tài),直到第一次使能接收器或發(fā)送器(SCIxC2 中的RE 或TE 位被設(shè)置為1)。9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nSBR12:SBR0-波特率模數(shù)系數(shù)nSBR12:0 中的13個(gè)位統(tǒng)稱為BR,它們?yōu)镾CI 波特率發(fā)生器設(shè)置模數(shù)系數(shù)。當(dāng)BR =0,SCI 波特率發(fā)生器被禁止,以降低電源電流。當(dāng)BR = 18191 時(shí), SCI 波特率= BUSCLK (16

19、 x BR)。9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述n例:如果總線時(shí)鐘為4MHz,波特率模數(shù)除數(shù)為4,那么SCI 波特率是多少?分別用匯編語言和C語言實(shí)現(xiàn)。nSCI 波特率 = 4000000 (16 x 4)= 62500n匯編程序:nCLR SCI1BDH ;SCI1BD內(nèi)容為SBR12=0,SBR11=0,SBR10=0,SBR9=0,SBR8=0nMOV #$04,SCI1BDL ;SCI1BDL內(nèi)容為SBR7=0,SBR6=0,SBR5=0,SBR4=0n,SBR3=0,SBR2=1, SBR1=0,SBR0=0nC語言程序:nSCI1BDH=0 x00;/把十六

20、進(jìn)制立即數(shù)00傳送給SCI1BDH寄存器nSCI1BDL=0 x04;/把十六進(jìn)制立即數(shù)04傳送給SCI1BDL寄存器9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述n9.2.2 SCI 控制寄存器控制寄存器1(SCIxC1)n該寄存器是一個(gè)可讀可寫的寄存器,用于控制SCI 系統(tǒng)的各種可選功能。如圖9-5所示。9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nLOOPS-循環(huán)模式選擇位n循環(huán)模式只有當(dāng)發(fā)送和接收同時(shí)允許操作時(shí)才能使用。此時(shí)RxD引腳與SCI模塊斷開,發(fā)送器輸出在芯片內(nèi)部直接連接接收器輸入。它可以在循環(huán)模式和全雙工模式之間進(jìn)行選擇。當(dāng)LOOPS = 1,發(fā)送器

21、輸出內(nèi)部連接到接收器輸入。該位有兩種狀態(tài):n 1循環(huán)模式或單線模式,發(fā)送器輸出在芯片內(nèi)部連接到接收器輸入,SCI 不使用RxD 管腳n 0正常運(yùn)行 ,RxD 和TxD 使用獨(dú)立管腳9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nSCISWI-等待模式中的SCI停止位n該位有兩種狀態(tài):n 1SCI 時(shí)鐘在CPU 處于等待模式時(shí)凍結(jié)n 0SCI 時(shí)鐘繼續(xù)在等待模式中運(yùn)行,因此SCI 是喚醒CPU 的中斷源9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nRSRC-接收器源選擇位n如果LOOPS =0,則該位沒有任何意義或影響;當(dāng)LOOPS = 1 時(shí),接收器輸入內(nèi)部連接到Tx

22、D引腳, RSRC位決定該連接是否也連接到發(fā)送器輸出。該位有兩種狀態(tài):n 1單線SCI 模式,其中TxD 引腳連接到發(fā)送器輸出和接收器輸入n 0假設(shè)LOOPS = 1, RSRC = 0選擇內(nèi)部環(huán)回模式, SCI 不使用RxD1或TxD1管腳9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nM-8位或9位格式選擇位n該位有兩種狀態(tài):n 1接收器和發(fā)送器使用9 位數(shù)據(jù)格式字符:?jiǎn)?dòng)位+ 8 個(gè)數(shù)據(jù)位(LSB 先發(fā)) + 第9 個(gè)數(shù)據(jù)位+ 停止位n 0正常 :?jiǎn)?dòng)位 + 8 個(gè)數(shù)據(jù)位(LSB 先發(fā)) + 停止位9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nWAKE-接收喚醒

23、方法選擇位n該位有兩種狀態(tài):n 1地址標(biāo)記喚醒n 0閑置線路喚醒9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nILT-閑置線路類型選擇位n若將該位設(shè)置為1,可以確保數(shù)據(jù)字符末端的停止位和邏輯1 不會(huì)計(jì)數(shù)閑置線路檢測(cè)邏輯所需的邏輯高電平的10 或11 個(gè)位時(shí)間。該位有兩種狀態(tài):n 1停止位后閑置字符位計(jì)數(shù)開始n 0開始位后閑置字符位計(jì)數(shù)開始9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nPE-奇偶校驗(yàn)使能位n該位使能硬件奇偶效驗(yàn)。當(dāng)使能奇偶效驗(yàn)時(shí),數(shù)據(jù)字符(第8 或第9 數(shù)據(jù)位)的最高位(MSB)視為奇偶校驗(yàn)位。該位有兩種狀態(tài):n 1奇偶效驗(yàn)使能n 0無硬件奇偶效驗(yàn)生成

24、或檢9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nPT-奇偶效驗(yàn)類型位n如果使能奇偶效驗(yàn)(PE = 1),該位的狀態(tài)決定選擇的奇效驗(yàn)還是偶效驗(yàn)。奇效驗(yàn)表示數(shù)據(jù)字符中1 的總數(shù)(包括奇偶校驗(yàn)位)是奇數(shù)。偶數(shù)表示數(shù)據(jù)字符中1 的總數(shù)(包括奇偶校驗(yàn)位)是偶數(shù)。該位有兩種狀態(tài):n 1奇效驗(yàn)n 0偶效驗(yàn)9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述n9.2.3 SCI 控制寄存器控制寄存器2 (SCIxC2)n該寄存器是一個(gè)可讀可寫的8位寄存器,如圖9-6所示。9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nTIE-發(fā)送中斷使能位(用于發(fā)送寄存器空標(biāo)志TDRE)n該

25、位使能發(fā)送中斷請(qǐng)求。若該位允許,并且發(fā)送寄存器空標(biāo)志TDRE被置1,則響應(yīng)中斷發(fā)送請(qǐng)求。該位有兩種狀態(tài):n 1當(dāng)TDRE 標(biāo)志為1 時(shí)允許硬件中斷n 0來自TDRE 的硬件中斷禁止(使用輪詢)9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nTCIE-發(fā)送中斷使能位(用于發(fā)送完成標(biāo)志TC)n該位使能發(fā)送中斷請(qǐng)求。若該位允許,并且發(fā)送完成標(biāo)志TC被置1,則響應(yīng)中斷發(fā)送請(qǐng)求。該位有兩種狀態(tài):n 1當(dāng)TC 標(biāo)志為1 時(shí)允許硬件中斷n 0來自TC 的硬件中斷禁止(使用輪詢)9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nRIE-接收中斷使能(用于接收數(shù)據(jù)寄存器滿標(biāo)志RDRF)n該

26、位使能接收中斷請(qǐng)求。若該位允許,并且接收數(shù)據(jù)寄存器滿標(biāo)志RDRF被置1,則響應(yīng)中斷發(fā)送請(qǐng)求。該位有兩種狀態(tài):n 1當(dāng)TDRE 標(biāo)志為1 時(shí)允許硬件中斷n 0來自TDRE 的硬件中斷禁止(使用輪詢)9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nILIE-閑置線路中斷使能位(用于閉置線路標(biāo)志IDLE)n該位使能閑置線路中斷請(qǐng)求。若該位允許,并且閉置線路標(biāo)志IDLE被置1,則響應(yīng)中斷發(fā)送請(qǐng)求。該位有兩種狀態(tài):n 1當(dāng)IDLE 標(biāo)志為1 時(shí)允許硬件中斷n 0來自IDLE的硬件中斷禁止(使用輪詢 9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nTE-發(fā)送器使能位n該位使能SCI

27、 發(fā)送器。當(dāng)TE = 1時(shí), SCI 強(qiáng)制TxD引腳作為SCI系統(tǒng)的輸出。當(dāng)SCI 配置用于單線運(yùn)行(LOOPS = 1,RSRC = 1)時(shí), TXDIR位控制單線運(yùn)行的SCI 通信線路(TxD 引腳)上的數(shù)據(jù)流方向。該位有兩種狀態(tài):n 1發(fā)送器打開n 0發(fā)送器關(guān)閉9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nRE-接收器使能位n該位使能接收器。當(dāng)SCI 接收器關(guān)閉時(shí),RxD 管腳恢復(fù)為通用端口I/O引腳。如果LOOPS = 1,不管RE = 1還是RE=0,RxD 管腳都會(huì)恢復(fù)為通用I/O引腳。該位有兩種狀態(tài):n 1接收器打開n 0接收器關(guān)閉9.2 串行通信接口串行通信接口S

28、CI模塊的概述模塊的概述nRWU-接收器喚醒控制位n該位為接收器喚醒控制位,若RWU =1,將SCI 接收器處于待機(jī)狀態(tài)并關(guān)閉接收中斷,SCIxC1寄存器中的WAKE位確定接收器以何種方式退出待機(jī)狀態(tài)(WAKE = 0,閑置線路喚醒;WAKE = 1,地址標(biāo)記喚醒),且在退出時(shí)將RWU位清0。該位有兩種狀態(tài):n 1處于待機(jī)狀態(tài)的SCI 接收器等待喚醒條件n 0正常的SCI 接收器運(yùn)行9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nSBK-發(fā)送中止位n發(fā)送中止位的方法是先將1寫入SBK位,再將0寫入SBK位。這樣即可在發(fā)送數(shù)據(jù)流中插入了一個(gè)中止字符。只要SBK=1, 多達(dá)10 或11

29、(如果BRK13 = 1,則為13 或14 位)位時(shí)間的邏輯0 中止字符被加入隊(duì)列。該位有兩種狀態(tài):n 1將發(fā)送的隊(duì)列中止字符n 0正常的發(fā)送器運(yùn)行9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述n9.2.4 SCIx控制寄存器控制寄存器3(SCIxC3)n該寄存器是一個(gè)可讀可寫的8位寄存器,如圖9-7所示。9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nR8-接收器的第9 個(gè)數(shù)據(jù)位n當(dāng)SCI 配置用于9 位數(shù)據(jù)格式(M = 1)時(shí), R8 可以視為SCIxD 數(shù)據(jù)寄存器中緩沖數(shù)據(jù)的MSB左側(cè)的第9個(gè)接收數(shù)據(jù)位。注意,讀取數(shù)據(jù)時(shí),要先讀取R8位再讀取SCIxD寄存器,這是

30、因?yàn)樽xSCIxD寄存器時(shí)自動(dòng)清除標(biāo)志,并允許R8位和SCIxD寄存器被新數(shù)據(jù)覆蓋。9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nT8-發(fā)送器的第9 個(gè)數(shù)據(jù)位n當(dāng)SCI 配置用于9位數(shù)據(jù)格式(M = 1)時(shí), T8 可以視為SCIxD數(shù)據(jù)寄存器中緩沖數(shù)據(jù)的MSB 左側(cè)的第9個(gè)發(fā)送數(shù)據(jù)位。注意,寫9位數(shù)據(jù)時(shí),先寫入T8位,再寫入SCIxD寄存器的數(shù)據(jù)。寫完后數(shù)據(jù)會(huì)被傳輸?shù)絊CI 移位寄存器。如果T8 不需要在新值(例如當(dāng)它用于生成標(biāo)志或奇偶效驗(yàn))中修改,它就不需要在每次寫SCIxD寄存器時(shí)寫入。9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nTXDIR-單線模式中的TxD

31、 引腳方向位n當(dāng)SCI 配置用于單線半雙工運(yùn)行(LOOPS = 1,RSRC = 1)時(shí),該位決定TxD 引腳上的數(shù)據(jù)流方向。該位有兩種狀態(tài):n 1TxD管腳是單線模式中的輸出n 0TxD管腳是單線模式中的輸入9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nORIE-溢出中斷使能位n該位使能溢出標(biāo)志(OR)以生成硬件中斷請(qǐng)求。該位有兩種狀態(tài):n 1允許OR硬件中斷n 0OR硬件中斷禁止(使用輪詢)9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nNEIE-噪音錯(cuò)誤中斷使能位n該位使能噪音標(biāo)志(NF)以生成硬件中斷請(qǐng)求。該位有兩種狀態(tài):n 1允許硬件中斷(NF = 1)n

32、0NF中斷禁止(使用輪詢)9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nFEIE-幀錯(cuò)誤中斷使能位n該位使能幀錯(cuò)誤標(biāo)志(FE)以生成硬件中斷請(qǐng)求。該位有兩種狀態(tài):n 1當(dāng)FE = 1 時(shí)允許硬件中斷n 0FE中斷禁止(使用輪詢)9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nPEIE-奇偶效驗(yàn)錯(cuò)誤中斷使能位n該位使能奇偶錯(cuò)誤標(biāo)志 (PF)以生成硬件中斷請(qǐng)求。該位有兩種狀態(tài):n 1當(dāng)PF = 1 時(shí)允許硬件中斷n 0PF中斷禁止(使用輪詢)9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述n9.2.5 SCIx狀態(tài)寄存器狀態(tài)寄存器1(SCIxS1)n該寄存器有8

33、 種只讀狀態(tài)標(biāo)志。寫入沒有影響狀態(tài)標(biāo)志,特殊軟件隊(duì)列(不包括寫入該寄存器)可用來清除這些狀態(tài)標(biāo)志,如圖9-8。9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nTDRE-發(fā)送數(shù)據(jù)寄存器空標(biāo)志n當(dāng)發(fā)送數(shù)據(jù)寄存器傳送1個(gè)字符至發(fā)送移位寄存器時(shí),該位置1,表明數(shù)據(jù)寄存器在傳輸數(shù)據(jù)給發(fā)送移位寄存器后為新的數(shù)據(jù)字符留出空間。若TIE位已置1則還能產(chǎn)生SCI發(fā)送器空中斷請(qǐng)求。要清除TDRE位,讀SCIxS寄存器,然后再將數(shù)據(jù)寫入SCI 數(shù)據(jù)寄存器(SCIxD)即可。該位有兩種狀態(tài):n 1發(fā)送數(shù)據(jù)寄存器空n 0發(fā)送數(shù)據(jù)寄存器滿9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nTDRE-發(fā)

34、送數(shù)據(jù)寄存器空標(biāo)志n當(dāng)發(fā)送數(shù)據(jù)寄存器傳送1個(gè)字符至發(fā)送移位寄存器時(shí),該位置1,表明數(shù)據(jù)寄存器在傳輸數(shù)據(jù)給發(fā)送移位寄存器后為新的數(shù)據(jù)字符留出空間。若TIE位已置1則還能產(chǎn)生SCI發(fā)送器空中斷請(qǐng)求。要清除TDRE位,讀SCIxS寄存器,然后再將數(shù)據(jù)寫入SCI 數(shù)據(jù)寄存器(SCIxD)即可。該位有兩種狀態(tài):n 1發(fā)送數(shù)據(jù)寄存器空n 0發(fā)送數(shù)據(jù)寄存器滿9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nTC-發(fā)送完成標(biāo)志位nTC 設(shè)置于復(fù)位,當(dāng)TDRE = 1時(shí)但沒有數(shù)據(jù)等待發(fā)送時(shí)該位置1。當(dāng)TC = 1 時(shí)讀取SCIxS1寄存器時(shí)可以自動(dòng)清除TC位,然后可以進(jìn)行以下其中操作的一種:n 將數(shù)據(jù)

35、寫入SCI 數(shù)據(jù)寄存器(SCIxD),以發(fā)送新數(shù)據(jù)n 通過把TE 從0 變?yōu)?,排隊(duì)前導(dǎo)信號(hào)n 將1寫入SCIxC2 中的SBK,排隊(duì)中止字符。n該位有兩種狀態(tài):n 1發(fā)送器閑置(發(fā)送活動(dòng)完成)n 0發(fā)送器活動(dòng)(發(fā)送數(shù)據(jù)、前導(dǎo)信號(hào)或中止字符)。9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nRDRF-接收數(shù)據(jù)寄存器滿標(biāo)志位n當(dāng)數(shù)據(jù)從接收移位寄存器傳輸?shù)浇邮諗?shù)據(jù)寄存器(SCIxD)時(shí),RDRF位置1,表示數(shù)據(jù)寄存器中的數(shù)據(jù)可用。若RIE位已置1則還能產(chǎn)生SCIRU接收器滿中斷請(qǐng)求。在8位數(shù)據(jù)格式中,要清除RDRF位,先讀SCIxS1寄存器,然后讀SCI數(shù)據(jù)寄存器(SCIxD);在9位

36、數(shù)據(jù)格式中,要清除RDRF,先讀SCIxS1寄存器,然后讀SCI 數(shù)據(jù)寄存器(SCIxD)和SCI控制寄存器3(SCIxC3)。注意,SCIxD和SCIxC3也用其他命令進(jìn)行讀取,但是標(biāo)志則要在兩個(gè)寄存器被讀取后才能清除。該位有兩種狀態(tài):n 1接收數(shù)據(jù)寄存器已滿n 0接收數(shù)據(jù)寄存器空9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nIDLE-閉置線路標(biāo)志位n在一段時(shí)間的活動(dòng)后,當(dāng)SCI 接收線路已經(jīng)閑置了一個(gè)全字符時(shí)間時(shí),IDLE位置1。當(dāng)ILT =0,接收器在起始位后開始計(jì)算閑置位時(shí)間,因此如果接收的字符都為1,則這些位時(shí)間和停止位時(shí)間都被計(jì)入接收器;當(dāng)ILT = 1,接收器直到停

37、止位后才開始計(jì)算閑置位時(shí)間。因此停止位和前一字符末端的任何邏輯高電平時(shí)間不會(huì)被計(jì)入接收器。要清除IDLE,先讀取SCIxS1寄存器,然后讀取SCI 數(shù)據(jù)寄存器(SCIxD)。清除IDLE位后,不能再次進(jìn)行設(shè)置,直到接收到新字符且已設(shè)置了RDRF位為止。該位有兩種狀態(tài):n 1檢測(cè)到閑置線路n 0沒有檢測(cè)到閑置線路9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述n接收器移位寄存器收到下一個(gè)字符之前,倘若讀取SCI 數(shù)據(jù)寄存器(SCIxD)當(dāng)前數(shù)據(jù)遭遇失敗即將OR位置1,如果此時(shí)ORIE位已置1,則還會(huì)產(chǎn)生SCI接收器溢出錯(cuò)誤中斷請(qǐng)求。此時(shí)移位寄存器中的數(shù)據(jù)丟失,但不會(huì)影響SCI 數(shù)據(jù)寄存

38、器(SCIxD)中的數(shù)據(jù)。要清除OR位,先讀SCIxS1,然后讀SCI 數(shù)據(jù)寄存器(SCIxD)即可。該位有兩種狀態(tài):n 1接收溢出(新SCI 數(shù)據(jù)丟失)n 0沒有溢出9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nNF-噪聲標(biāo)志位n接收器采用了先進(jìn)的采樣技術(shù),它在起始位中提取7 個(gè)樣本,在每個(gè)數(shù)據(jù)位和停止位中提取3個(gè)樣本,如果這些樣本中的任何一個(gè)樣本與幀中任何位時(shí)間內(nèi)的其余樣本不一致,則RDRF位置1 ,同時(shí)NF位也置1。即是接收器在RxD引腳上檢測(cè)到噪聲。如果此時(shí)SCIxC3寄存器的NEIE位已置1,則還會(huì)產(chǎn)生SCI接收器噪聲錯(cuò)誤中斷請(qǐng)求。若要清除NF位,先讀SCIxS1寄存器

39、,然后讀SCI 數(shù)據(jù)寄存器 (SCIxD)即可。該位有兩種狀態(tài):n 1SCIxD中的已接收字符中檢測(cè)到噪音n 0沒有檢測(cè)到噪音9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nFE-幀錯(cuò)誤標(biāo)志位nSCI接收器在停止位收到邏輯0時(shí)顯然出現(xiàn)幀錯(cuò)誤,此時(shí)FE位置1,如果此時(shí)SCIxC3寄存器的FE位已置1,則還會(huì)產(chǎn)生SCI接收器幀錯(cuò)誤中斷請(qǐng)求。要清除FE位,先讀SCIxS1寄存器,然后讀SCI 數(shù)據(jù)寄存器 (SCIxD)即可。該位有兩種狀態(tài):n 1檢測(cè)到幀錯(cuò)誤n 0未檢測(cè)到幀錯(cuò)誤,這不能保證幀正確9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nPE-奇偶效驗(yàn)錯(cuò)誤標(biāo)志位 nSCI

40、接收器在輸入的數(shù)據(jù)中檢測(cè)到奇偶錯(cuò)誤時(shí),PE位置1,如果此時(shí)SCIxC3寄存器的PE位已置1,則還會(huì)產(chǎn)生SCI接收器奇偶效驗(yàn)錯(cuò)誤中斷請(qǐng)求。要清除PF位,讀SCIxS1寄存器,然后讀SCI 數(shù)據(jù)寄存器(SCIxD)即可。該位有兩種狀態(tài):n 1奇偶效驗(yàn)錯(cuò)誤n 0沒有奇偶效驗(yàn)錯(cuò)誤9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述n9.2.6 SCIx狀態(tài)寄存器狀態(tài)寄存器2(SCIxS2)n該寄存器只有1個(gè)狀態(tài)標(biāo)志位,其余的位作擴(kuò)展使用。任何寫入操作對(duì)該狀態(tài)標(biāo)志位都無影響,如圖9-9。9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述nRAF-接收器活動(dòng)標(biāo)志位n當(dāng)SCI 接收器檢測(cè)到有效

41、起始位時(shí),RAF置1;當(dāng)接收器檢測(cè)到閑置線路時(shí),RAF被自動(dòng)清除。該狀態(tài)標(biāo)志可以用來檢查在引導(dǎo)MCU進(jìn)入停止模式前,是否正在接收SCI 字符數(shù)據(jù)。該位有兩種狀態(tài):n 1SCI 接收器活動(dòng)(RxD 輸入不閑置)n 0SCI 接收器閑置,正在等待起始位9.2 串行通信接口串行通信接口SCI模塊的概述模塊的概述n9.2.7 SCIx數(shù)據(jù)寄存器(數(shù)據(jù)寄存器(SCIxD)n該寄存器實(shí)際上是兩個(gè)獨(dú)立的寄存器。讀取數(shù)據(jù)時(shí),返回只讀接收數(shù)據(jù)緩沖器的內(nèi)容;寫入數(shù)據(jù)時(shí),寫進(jìn)只寫發(fā)送數(shù)據(jù)緩沖器。該寄存器的讀寫還涉及SCI 狀態(tài)標(biāo)志的自動(dòng)標(biāo)志清除機(jī)制,如圖9-10所示。9.2 串行通信接口串行通信接口SCI模塊的概述

42、模塊的概述n例:把十六進(jìn)制立即數(shù)#$A5寫入數(shù)據(jù)寄存器中。分別用匯編語言和C語言實(shí)現(xiàn)。n匯編程序:n MOV #$A5,SCI1D ;十六進(jìn)制立即數(shù)#$A5傳送給數(shù)據(jù)寄存器SCI1DnC語言程序:nSCI1D=0 xa5;/十六進(jìn)制立即數(shù)#$A5傳送給數(shù)據(jù)寄存器SCI1D9.3 串行通信接口串行通信接口SCI模塊的應(yīng)用模塊的應(yīng)用n串行通信接口SCI模塊的應(yīng)用十分廣泛,主要用于MCU之間的通信、MCU與外圍設(shè)備的通信以及MCU與計(jì)算機(jī)的通信。n下面的例子是兩個(gè)MCU之間的數(shù)據(jù)通信。n例:MCU之間的數(shù)據(jù)通信。MCU把從另一個(gè)MCU發(fā)送過來的數(shù)據(jù)接收存貯到變量TmpData中,同時(shí)接收計(jì)數(shù)變量Co

43、unter加1,并把變量Counter的值送到端口PTAD(或PTBD)中,以顯示接收數(shù)據(jù)的次數(shù),然后再把變量TmpData中的數(shù)據(jù)發(fā)送出另一個(gè)MCU,電路原理圖如圖9-11所示。兩個(gè)MCU中的程序一樣,程序方框圖如圖9-12所示。nMCU1匯編語言源程序:n INCLUDE derivative.incn ; XREF MCU_initn XDEF _Startup, mainn XREF _SEG_END_SSTACK nMY_ZEROPAGE: SECTION SHORT ; 變量定義區(qū)n nCounter: DS.B 1 ; 計(jì)算接收次數(shù)的變量 nTmpData: DS.B 1 ; 存

44、儲(chǔ)接收變量nMyCode: SECTION ;代碼區(qū)nmain:n_Startup:n LDHX #_SEG_END_SSTACK ;初始化堆棧n TXSn JSR MCU_init ;調(diào)用初始化子程序n n CLC n LDA #1 ; n STA Counter ; 初始化變量nmainLoop: nwaitToReceive: n BRCLR 5,SCI1S1,waitToReceive ;有接收滿標(biāo)志嗎n LDA SCI1D ; 有記取數(shù)據(jù)到變量TmpData n STA TmpData n INC Counter ; 變量counter加1 n LDA Counter n NEGA

45、; 取反n STA PTAD ; 送到端口A以顯示接收次數(shù) nwaitToSend: n BRCLR 7,SCI1S1,waitToSend;是否可以發(fā)送數(shù)據(jù),否,一直在等待 n LDA TmpData ;是,發(fā)送數(shù)據(jù) n STA SCI1D n BRA mainLoop nMCU_init: ;初始化子程序 n ;SCI1C2: TIE=0,TCIE=0,RIE=0,ILIE=0,TE=0,RE=0,RWU=0,SBK=0 n CLR SCI1C2 ; 禁止SCI1模塊 n LDA SCI1S1 ; 讀取寄存器 SCI1S1 以清除寄存器 SCI1S1的標(biāo)志 n LDA SCI1D ; 讀取

46、寄存器 SCI1D 以清除其他標(biāo)志 n ; SCI1BDH: SBR12=0,SBR11=0,SBR10=0,SBR9=0,SBR8=0 n CLR SCI1BDH ;設(shè)置波特率為65200 n ;SCI1BDL:SBR7=0,SBR6=0,SBR5=1,SBR4=1,SBR3=0,SBR2=0,SBR1=1,SBR0=1 n MOV #$33,SCI1BDL n ;SCI1C1:LOOPS=0,SCISWAI=0,RSRC=0,M=0,WAKE=0,ILT=0,PE=0,PT=0 n CLR SCI1C1 ;RxD 和TxD 使用獨(dú)立管腳,8位,無硬件奇偶效驗(yàn) n ; SCI1C3: R8=

47、0,T8=0,TXDIR=0,ORIE=0,NEIE=0,FEIE=0,PEIE=0 n CLR SCI1C3 ;中斷禁止 n ;SCI1C2: TIE=0,TCIE=0,RIE=0,ILIE=0,TE=1,RE=1,RWU=0,SBK=0 n MOV #$0C,SCI1C2 ;發(fā)送器打開,接收器打開 n LDA PTAD ;初始化端口值為FF n ORA #$FFn STA PTADn n LDA PTADD ;端口A設(shè)置為輸出 n ORA #$FFn STA PTADDn ; n CLI ; 全局中斷使能 n RTSn ;-n END nMCU1 C語言源程序:n#include n#in

48、clude derivative.h n byte Counter = 0; /變量n byte TmpData = 0;nvoid MCU_init(void); /初始化子程序聲明nvoid main(void) /主程序nn n MCU_init(); /調(diào)用初始化子程序n for(;)n n while(!SCI1S1_RDRF); / 等待接收滿標(biāo)志 n TmpData = SCI1D; / 接收滿了就讀取數(shù)據(jù)存儲(chǔ)入變量TmpData *n Counter+; / 計(jì)數(shù)變量加1 n PTAD = Counter; / 端口A顯示計(jì)數(shù)變量的值 n while(!SCI1S1_TC);

49、/ 等待發(fā)送標(biāo)志 n SCI1D = TmpData; / 可發(fā)送就將變量TmpData的值發(fā)送出去 n nn void MCU_init(void) /初始化子程序nn /* SCI1C2: TIE=0,TCIE=0,RIE=0,ILIE=0,TE=0,RE=0,RWU=0,SBK=0 */n SCI1C2 = 0 x00; /先禁止SCI模塊 n (void)(SCI1S1 = 0); /讀取寄存器 SCI1S1 可清除SCI1S1 中的標(biāo)志 */n (void)(SCI1D = 0); /* 讀取寄存器 SCI1D 可清除其他的標(biāo)志 */n /* SCI1BDH: SBR12=0,SBR

50、11=0,SBR10=0,SBR9=0,SBR8=0 */n SCI1BDH = 0 x00; /設(shè)置波特率65200 n /*SCI1BDL: SBR7=0,SBR6=0,SBR5=0,SBR4=0,SBR3=0,SBR2=1,SBR1=0,SBR0=0 */n SCI1BDL = 0 x04; n /*SCI1C1: LOOPS=0,SCISWAI=0,RSRC=0,M=0,WAKE=0,ILT=0,PE=0,PT=0 */n SCI1C1 = 0 x00; /RxD 和TxD 使用獨(dú)立管腳,8位,無硬件奇偶效驗(yàn) n /* SCI1C3: R8=0,T8=0,TXDIR=1,ORIE=0,

51、NEIE=0,FEIE=0,PEIE=0 */n SCI1C3 = 0 x20; /中斷禁止 n /* SCI1C2: TIE=0,TCIE=0,RIE=0,ILIE=0,TE=1,RE=1,RWU=0,SBK=0 */n SCI1C2 = 0 x0C; /發(fā)送器打開,接收器打開 n/PTAD:PTAD7=1,PTAD6=1,PTAD5=1,PTAD4=1,PTAD3=1,PTAD2=1,PTAD1=1,PTAD0=1 n PTAD = 0 xFF; /初始化端口值為FF n/*PTADD:PTADD7=1,PTADD6=1,PTADD5=1,PTADD4=1,PTADD3=1,PTADD2=

52、1,PTADD1=1,PTADD0=1 */n PTADD = 0 xFF; /端口A設(shè)置為輸出 n asm CLI; /全局中斷使能 ,nnMCU2匯編語言源程序:n INCLUDE derivative.incn ; XREF MCU_initn XDEF _Startup, mainn XREF _SEG_END_SSTACK nMY_ZEROPAGE: SECTION SHORT ; 變量定義區(qū)n nCounter: DS.B 1 ; 計(jì)算接收次數(shù)的變量 nTmpData: DS.B 1 ; 存儲(chǔ)接收變量n;-nMyCode: SECTION ;代碼區(qū)nmain:n_Startup:n

53、 LDHX #_SEG_END_SSTACK ;初始化堆棧n TXSn JSR MCU_init ;調(diào)用初始化子程序n n CLC n LDA #1 ; n STA Counter ; 初始化變量nmainLoop: nwaitToReceive: n BRCLR 5,SCI1S1,waitToReceive ;有接收滿標(biāo)志嗎n LDA SCI1D ; 有記取數(shù)據(jù)到變量TmpData n STA TmpData n INC Counter ; 變量counter加1 n LDA Counter n NEGA ; 取反n STA PTBD ; 送到端口A以顯示接收次數(shù) nwaitToSend:

54、n BRCLR 7,SCI1S1,waitToSend;是否可以發(fā)送數(shù)據(jù),否,一直在等待 n LDA TmpData ;是,發(fā)送數(shù)據(jù) n STA SCI1D n BRA mainLoop nMCU_init: ;初始化子程序 n ;SCI1C2: TIE=0,TCIE=0,RIE=0,ILIE=0,TE=0,RE=0,RWU=0,SBK=0 n CLR SCI1C2 ; 禁止SCI1模塊 n LDA SCI1S1 ; 讀取寄存器 SCI1S1 以清除寄存器 SCI1S1的標(biāo)志 n LDA SCI1D ; 讀取寄存器 SCI1D 以清除其他標(biāo)志 n ; SCI1BDH: SBR12=0,SBR1

55、1=0,SBR10=0,SBR9=0,SBR8=0 n CLR SCI1BDH ;設(shè)置波特率為65200 n ;SCI1BDL:SBR7=0,SBR6=0,SBR5=1,SBR4=1,SBR3=0,SBR2=0,SBR1=1,SBR0=1 n MOV #$33,SCI1BDL n ;SCI1C1:LOOPS=0,SCISWAI=0,RSRC=0,M=0,WAKE=0,ILT=0,PE=0,PT=0 n CLR SCI1C1 ;RxD 和TxD 使用獨(dú)立管腳,8位,無硬件奇偶效驗(yàn) n ; SCI1C3: R8=0,T8=0,TXDIR=0,ORIE=0,NEIE=0,FEIE=0,PEIE=0 n CLR SCI1C3 ;中斷禁止 n ;SCI1C2: TIE=0,TCIE=0,RIE=0,ILIE=0,TE=1,RE=1,RWU=0,SBK=0 n MOV #$0C,SCI1C2 ;發(fā)送器打開,接收器打開 n n LDA PTBD ;初始化端口值為FF n ORA #$FFn STA PTBDn n LDA PTBDD ;端口B設(shè)置為輸出 n ORA #$F

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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)論