嵌入式技術(shù)基礎(chǔ)與實踐(第2版)第03章_第1頁
嵌入式技術(shù)基礎(chǔ)與實踐(第2版)第03章_第2頁
嵌入式技術(shù)基礎(chǔ)與實踐(第2版)第03章_第3頁
嵌入式技術(shù)基礎(chǔ)與實踐(第2版)第03章_第4頁
嵌入式技術(shù)基礎(chǔ)與實踐(第2版)第03章_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第3 3章章 第一個樣例程序及第一個樣例程序及 CodeWarriorCodeWarrior工程組織工程組織主要內(nèi)容主要內(nèi)容v3.1 3.1 通用通用I/OI/O接口基本概念及連接方法接口基本概念及連接方法v3.2 AW603.2 AW60的的GPIOGPIOv3.3 3.3 開發(fā)套件開發(fā)套件CodeWarriorCodeWarrior開發(fā)環(huán)境與開發(fā)環(huán)境與 S08/S12/ColdFireS08/S12/ColdFire寫入器寫入器v3.4 CW3.4 CW環(huán)境環(huán)境C C語言工程文件的組織語言工程文件的組織v3.5 3.5 第一個第一個C C語言工程:控制小燈閃爍語言工程:控制小燈閃爍v3.

2、6 3.6 第一個匯編語言工程:控制小燈閃爍第一個匯編語言工程:控制小燈閃爍3.1 3.1 通用通用I/OI/O接口基本概念及連接方法接口基本概念及連接方法1. I/O1. I/O接口的概念接口的概念 I/OI/O接口,即輸入輸出接口,是微控制器同外界進行交互的接口,即輸入輸出接口,是微控制器同外界進行交互的重要通道。重要通道。這里的接口英文是這里的接口英文是portport,也可以翻譯為,也可以翻譯為“端口端口”,另一個英文單詞是另一個英文單詞是interfaceinterface,也翻譯為接口。在嵌入式系統(tǒng)中,也翻譯為接口。在嵌入式系統(tǒng)中,接口千變?nèi)f化,種類繁多,有顯而易見的人機交互接口,

3、如操接口千變?nèi)f化,種類繁多,有顯而易見的人機交互接口,如操縱桿、鍵盤、顯示器;也有無人介入的接口,如網(wǎng)絡(luò)接口、機縱桿、鍵盤、顯示器;也有無人介入的接口,如網(wǎng)絡(luò)接口、機器設(shè)備接口器設(shè)備接口2 2通用通用I/OI/O 所謂通用所謂通用I/OI/O,也記為,也記為GPIOGPIO(General Purpose I/OGeneral Purpose I/O),即基),即基本的輸入本的輸入/ /輸出,有時也稱并行輸出,有時也稱并行I/OI/O,或普通,或普通I/OI/O,它是,它是I/OI/O的最的最基本形式基本形式通用通用I/OI/O接口一般應(yīng)具備接口一般應(yīng)具備 放置輸入或輸出控制字的寄存器放置輸入

4、或輸出控制字的寄存器放置工作方式控制字的寄存器放置工作方式控制字的寄存器放置要交換數(shù)據(jù)的寄存器放置要交換數(shù)據(jù)的寄存器放置反映工作狀態(tài)的寄存器放置反映工作狀態(tài)的寄存器3 3上拉下拉電阻與輸入引腳的基本接法上拉下拉電阻與輸入引腳的基本接法 輸入引腳有三種不同的連接方式:帶上拉電阻的連接、輸入引腳有三種不同的連接方式:帶上拉電阻的連接、帶下拉電阻的連接和帶下拉電阻的連接和“懸空懸空”連接。連接。若若MCUMCU的某個引腳通過一個電阻接到電源(的某個引腳通過一個電阻接到電源(VccVcc)上,這)上,這個電阻被稱為個電阻被稱為“上拉電阻上拉電阻”。與之相對應(yīng),若。與之相對應(yīng),若MCUMCU的某個引的某

5、個引腳通過一個電阻接到地(腳通過一個電阻接到地(GNDGND)上,則相應(yīng)的電阻被稱為)上,則相應(yīng)的電阻被稱為“下拉電阻下拉電阻”。懸空的芯片引腳被上拉電阻或下拉電阻初。懸空的芯片引腳被上拉電阻或下拉電阻初始化為高電平或低電平。始化為高電平或低電平。I/OI/O輸入電路輸入電路4.4.輸出引腳的基本接法輸出引腳的基本接法 作為通用輸出引腳,作為通用輸出引腳,MCUMCU內(nèi)部程序內(nèi)部程序向該引腳輸出高電平或低電平來驅(qū)動向該引腳輸出高電平或低電平來驅(qū)動器件工作,即開關(guān)量輸出。如圖所示。器件工作,即開關(guān)量輸出。如圖所示。其中其中O1O1引腳是發(fā)光二極管引腳是發(fā)光二極管LEDLED的驅(qū)動引的驅(qū)動引腳,當

6、腳,當O1O1引腳輸出高電平時,引腳輸出高電平時,LEDLED不亮;不亮;當當O1O1引腳輸出低電平時,引腳輸出低電平時,LEDLED點亮。點亮。O2O2引腳接蜂鳴器驅(qū)動電路,當引腳接蜂鳴器驅(qū)動電路,當O2O2腳輸出高腳輸出高電平時,蜂鳴器響;電平時,蜂鳴器響;O2O2腳輸出低電平時,腳輸出低電平時,蜂鳴器不響蜂鳴器不響 I/O I/O口輸出電路口輸出電路內(nèi)部結(jié)構(gòu) 具有7個I/O端口(A,B,C,D,E,F,G) 最多54個通用I/O管腳 大多數(shù)I/O管腳和片內(nèi)其它外圍模塊功能復用 Slide 73.2 AW603.2 AW60的的GPIOGPIO外部管腳 具有7個I/O端口(A,B,C,D,

7、E,F,G) 最多54個通用I/O管腳(不同封裝有別) A:8; B:8; C:7; D:8; E:8; F:8; G:7Slide 83.2 AW603.2 AW60的的GPIOGPIO外部管腳 具有7個I/O端口(A,B,C,D,E,F,G) 38個通用I/O管腳(不同封裝有別) A:4; B:4; C:6; D:4; E:8; F:5; G:7Slide 93.2 AW603.2 AW60的的GPIOGPIO外部管腳 具有7個I/O端口(A,B,C,D,E,F,G) 34個通用I/O管腳(不同封裝有別) A:2; B:4; C:6; D:4; E:8; F:4; G:6Slide 103

8、.2 AW603.2 AW60的的GPIOGPIO外部管腳 I/O管腳功能復用 Slide 11復位之后,共享的外圍模塊功能被禁止,因此I/O端口的所有管腳都是作為并行I/O管腳使用。 3.2 AW603.2 AW60的的GPIOGPIOv管腳管腳方向控制方向控制 在MCU內(nèi)部每個并行端口都配有一個8位的數(shù)據(jù)寄存器(PTxD)和一個8位的數(shù)據(jù)方向寄存器(PTxDD, DD: Data Direction)。 PTxDD的每一位( PTxDDn)和每一個I/O管腳相對應(yīng),控制它作輸入還是作輸出。 PTxDDn = 0:對應(yīng)管腳PTxDn設(shè)為輸入(上電復位缺省值) PTxDDn = 1:對應(yīng)管腳P

9、TxDn設(shè)為輸出Slide 125.2 IO5.2 IO模塊結(jié)構(gòu)及功能模塊結(jié)構(gòu)及功能v內(nèi)部內(nèi)部輸入上拉輸入上拉 在MCU內(nèi)部每個并行端口都配有一個8位的輸入上拉控制寄存器(PTxPE),控制對應(yīng)的輸入管腳是否允許內(nèi)部輸入上拉。 PTxPEn = 0:對應(yīng)輸入管腳PTxDn禁止內(nèi)部輸入上拉(上電復位缺省值) PTxPEn = 1:對應(yīng)輸入管腳PTxDn允許內(nèi)部輸入上拉可避免懸空,降低功耗,提高系統(tǒng)可靠性Slide 135.2 IO5.2 IO模塊結(jié)構(gòu)及功能模塊結(jié)構(gòu)及功能v輸出驅(qū)動能力輸出驅(qū)動能力選擇選擇 在MCU內(nèi)部每個并行端口都配有一個8位的輸出驅(qū)動控制寄存器(PTxDS),控制對應(yīng)的輸出管腳

10、是否允許高驅(qū)動輸出。 PTxDSn = 0:對應(yīng)輸出管腳PTxDn選擇低驅(qū)動(缺省值,如和IC接口) PTxDSn = 1:對應(yīng)輸出管腳PTxDn選擇高驅(qū)動(如驅(qū)動LED)Slide 145.2 IO5.2 IO模塊結(jié)構(gòu)及功能模塊結(jié)構(gòu)及功能v輸出驅(qū)動能力輸出驅(qū)動能力選擇選擇 在MCU內(nèi)部每個并行端口都配有一個8位的輸出驅(qū)動控制寄存器(PTxDS),控制對應(yīng)的輸出管腳是否允許高驅(qū)動輸出。 PTxDSn = 0:對應(yīng)輸出管腳PTxDn選擇低驅(qū)動(缺省值,如和IC接口) PTxDSn = 1:對應(yīng)輸出管腳PTxDn選擇高驅(qū)動(如驅(qū)動LED)Slide 155.2 IO5.2 IO模塊結(jié)構(gòu)及功能模塊結(jié)

11、構(gòu)及功能v輸出擺率輸出擺率控制控制 在MCU內(nèi)部每個并行端口都配有一個8位的輸出擺率控制寄存器(PTxSE),控制對應(yīng)的輸出管腳是否允許擺率控制。 PTxSEn = 0:對應(yīng)輸出管腳PTxDn禁止擺率控制(缺省,信號跳變陡,如上圖黃) PTxSEn = 1:對應(yīng)輸出管腳PTxDn允許擺率控制(信號跳變平坦,如上圖粉)Slide 165.2 IO5.2 IO模塊結(jié)構(gòu)及功能模塊結(jié)構(gòu)及功能v輸出擺率輸出擺率控制控制 在MCU內(nèi)部每個并行端口都配有一個8位的輸出擺率控制寄存器(PTxSE),控制對應(yīng)的輸出管腳是否允許擺率控制。 PTxSEn = 0:對應(yīng)輸出管腳PTxDn禁止擺率控制(缺省,信號跳變陡

12、,40/11ns) PTxSEn = 1:對應(yīng)輸出管腳PTxDn允許擺率控制(信號跳變平坦,75/35ns)Slide 175.2 IO5.2 IO模塊結(jié)構(gòu)及功能模塊結(jié)構(gòu)及功能v每個每個I/OI/O管腳的功能受管腳的功能受5 5個寄存器的控制:個寄存器的控制:v PTxD (Port x Data Register) PTxDD (Data Direction for Port x Register) PTxPE (Port x Pullup Enable Register) PTxDS (Output Drive Strength Selection for Port x) PTxSE (O

13、utput Slew Rate Control Enable for Port x) v 對對I/OI/O管腳的控制正是通過對管腳的控制正是通過對I/OI/O寄存器的控制來實現(xiàn)寄存器的控制來實現(xiàn)v I/OI/O寄存器分布在寄存器分布在MCUMCU存儲區(qū)域的存儲區(qū)域的寄存器寄存器空間空間 PTxD和PTxDD分布于0頁寄存器空間 PTxPE、PTxDS和PTxSE分布于高頁寄存器空間 Slide 185.2 IO5.2 IO模塊內(nèi)部寄存器模塊內(nèi)部寄存器v每個每個I/OI/O管腳的功能受管腳的功能受5 5個寄存器的控制:個寄存器的控制: PTxD (Port x Data Register) Sl

14、ide 195.2 IO5.2 IO模塊內(nèi)部寄存器模塊內(nèi)部寄存器v每個每個I/OI/O管腳的功能受管腳的功能受5 5個寄存器的控制:個寄存器的控制: PTxDD (Data Direction for Port x Register)Slide 205.2 IO5.2 IO模塊內(nèi)部寄存器模塊內(nèi)部寄存器v每個每個I/OI/O管腳的功能受管腳的功能受5 5個寄存器的控制:個寄存器的控制: PTxPE (Port x Pullup Enable Register)Slide 215.2 IO5.2 IO模塊內(nèi)部寄存器模塊內(nèi)部寄存器v每個每個I/OI/O管腳的功能受管腳的功能受5 5個寄存器的控制:個

15、寄存器的控制: PTxDS (Output Drive Strength Selection for Port x) Slide 225.2 IO5.2 IO模塊內(nèi)部寄存器模塊內(nèi)部寄存器v每個每個I/OI/O管腳的功能受管腳的功能受5 5個寄存器的控制:個寄存器的控制: PTxSE (Output Slew Rate Control Enable for Port x) Slide 235.2 IO5.2 IO模塊內(nèi)部寄存器模塊內(nèi)部寄存器v管腳管腳復位狀態(tài)復位狀態(tài) PTxD = 0 PTxDD = 0 管腳方向:輸入 PTxPE = 0 上拉:禁止 PTxDS = 0 輸出驅(qū)動:低驅(qū)動 PTx

16、SE = 0 輸出擺率:禁止 MCU復位之后,所有I/O管腳都被配置為不帶內(nèi)部上拉電阻的高阻抗輸入管腳。為了避免懸空的輸入管腳產(chǎn)生而外的電流損耗,應(yīng)用程序中的復位初始化子程序要么允許片內(nèi)上拉電阻,要么改變未使用的管腳的方向為輸出,這樣管腳就不再懸空。 應(yīng)用中沒有用到的I/O管腳必須要端接,這可以避免由于輸入懸空而導致電流過載并提高抗噪能力。端接方法有: 把未使用管腳通過軟件配置為輸出,并輸出為高或低 把未使用管腳通過軟件配置為輸入,并使用內(nèi)部或外部上拉電阻 Slide 245.2 IO5.2 IO模塊內(nèi)部寄存器模塊內(nèi)部寄存器Slide 255.2 IO5.2 IO模塊應(yīng)用舉例模塊應(yīng)用舉例v 例

17、5.1 根據(jù)圖示電路編寫程序,實現(xiàn)下述功能:將根據(jù)圖示電路編寫程序,實現(xiàn)下述功能:將8 8位開關(guān)按鍵位開關(guān)按鍵SW7:0SW7:0的的狀態(tài)實時地由狀態(tài)實時地由8 8位發(fā)光二極管位發(fā)光二極管LED7:0LED7:0顯示出來。顯示出來。SWSW開關(guān)撥到左邊時,輸入開關(guān)撥到左邊時,輸入電平為低,要求電平為低,要求LEDLED滅;滅;SWSW開關(guān)撥到右邊時,輸入電平為高,要求開關(guān)撥到右邊時,輸入電平為高,要求LEDLED亮。亮。I/O Output LedsPowerCLKPORTDPORTGPORTFPORTCPORTBPORTAPORTEMC9S08AW60MC9S08AW 60CPUEPTC41

18、IRQ2RESET#3PTF0/TPM1CH24PTF1/TPM1CH35PTF2/TPM1CH46PTF3/TPM1CH57PTF4/TPM2CH08PTC69PTF710PTF5/TPM2CH111PTF612PTE0/TxD113PTE1/RxD114PTE2/TPM1CH015PTE3/TPM1CH116PTE4/SS1#17PTE5/MISO118PTE6/MOSI119PTE7/SPSCK120VSS2121VDD2222PTG0/KBI1P023PTG1/KBI1P124PTG2/KBI1P225PTA026PTA127PTA228PTA329PTA430PTA531PTA632

19、PTA733PTB0/AD1P034PTB1/AD1P135PTB2/AD1P236PTB3/AD1P337PTB4/AD1P438PTB5/AD1P539PTB6/AD1P640PTB7/AD1P741PTD0/AD1P842PTD1/AD1P943VDDAD4444VSSAD4545PTD2/KBI1P5/AD1P1046PTD3/KBI1P6/AD1P1147PTG3/KBI1P348PTG4/KBI1P449PTD4/TPM2CLK/AD1P1250PTD5/AD1P1351PTD6/TPM1CLK/AD1P1452PTD7/KBI1P7/AD1P1553VREFH54VREFL55B

20、KGD/MS56PTG5/XTAL57PTG6/EXTAL58VSS5959PTC0/SCL160PTC1/SDA161PTC2/MCLK62PTC3/TxD263PTC5/RxD264PTB5BKGDPTA0PTB7PTB6RST#GNDPTA2PTA1PTC0PTA3PTG4PTG0PTG1PTG2PTG3PTD4PTD5PTD6PTD7PTD0PTD1PTD2PTD3PTA5PTA4PTE5PTE6PTE0PTE1PTE2PTE3PTE4PTB1PTC3PTA7RST#PTC2PTB0PTA6PTC1PTF4PTF5PTF6PTF0PTF1PTF2PTF3PTC5BKGDPTB2PTC4

21、3.3VPTF7PTC6PTB3PTB4PTE710K213SW 2SW1243LED712213SW 00.1uF330ohmJUMP-2330ohm330ohm330ohm213SW 1330ohm4X10K12345678LED6124MHz1K22pF213SW 70.1uF330ohm330ohm213SW 4330ohmJ72HDR-2X3-Socket1234560.1uF213SW 3LED112LED2120.1uFLED312213SW 6213SW 510MLED412LED51222pF+10uF/Tan12LED012GNDGNDGNDGND3.3V3.3VGND3.

22、3VGNDI/O Input KeysBDM socketGND4X10K123456783.3VSlide 265.2 IO5.2 IO模塊應(yīng)用舉例模塊應(yīng)用舉例v 例5.1 根據(jù)圖示電路編寫程序,實現(xiàn)下述功能:將根據(jù)圖示電路編寫程序,實現(xiàn)下述功能:將8 8位開關(guān)按鍵位開關(guān)按鍵SW7:0SW7:0的的狀態(tài)實時地由狀態(tài)實時地由8 8位發(fā)光二極管位發(fā)光二極管LED7:0LED7:0顯示出來。顯示出來。SWSW開關(guān)撥到左邊時,輸入開關(guān)撥到左邊時,輸入電平為低,要求電平為低,要求LEDLED滅;滅;SWSW開關(guān)撥到右邊時,輸入電平為高,要求開關(guān)撥到右邊時,輸入電平為高,要求LEDLED亮。亮。INCL

23、UDEMC9S08AW60.inc; 包含頭文件 ORG ROMStartIO_Init:LDA#$FF; 為所有I/O管腳配置內(nèi)部輸入上拉,降低系統(tǒng)功耗STAPTAPE; 為PTA設(shè)定內(nèi)部輸入上拉STAPTBPE; 為PTB設(shè)定內(nèi)部輸入上拉STAPTCPE; 為PTC設(shè)定內(nèi)部輸入上拉STAPTDPE; 為PTD設(shè)定內(nèi)部輸入上拉STAPTEPE; 為PTE設(shè)定內(nèi)部輸入上拉STAPTFPE; 為PTF設(shè)定內(nèi)部輸入上拉STAPTGPE; 為PTG設(shè)定內(nèi)部輸入上拉RTSMain: CLRA ; 00HACLRX; 00HXCLRH; 00HHSTA$1802; 00hSOPT,Disable COP

24、JSRIO_Init; 配置I/O管腳內(nèi)部輸入上拉,可選MOV#$00, PTED; 初始化輸出端口的數(shù)據(jù)寄存器,LED全滅,習慣養(yǎng)成LDA#%11111111 STAPTEDD ; 初始化PTE口的八位管腳作為輸出STAPTEDS; PTE大電流驅(qū)動,使LED更亮,可選Again: LDAPTFD; 讀取PTF口的八位開關(guān)按鍵的值 STA PTED; 將按鍵值實時輸出至發(fā)光二極管BRAAgain; 死循環(huán)ORG VresetDC.W Main; 復位向量GPIOGPIO的基本編程方法:的基本編程方法: 通過通過“數(shù)據(jù)方向寄存器數(shù)據(jù)方向寄存器”設(shè)置相應(yīng)引腳為輸入或輸出設(shè)置相應(yīng)引腳為輸入或輸出

25、若是輸出引腳,則設(shè)置若是輸出引腳,則設(shè)置“端口引腳數(shù)據(jù)寄存器端口引腳數(shù)據(jù)寄存器”引腳輸出引腳輸出高電平或低電平高電平或低電平 若是輸入引腳,則通過若是輸入引腳,則通過“端口引腳數(shù)據(jù)寄存器端口引腳數(shù)據(jù)寄存器”獲得引腳獲得引腳的狀態(tài)的狀態(tài)3.2.2 3.2.2 GPIO GPIO模塊寄存器模塊寄存器 GPIO GPIO模塊的每個口最多對應(yīng)模塊的每個口最多對應(yīng)8 8個個GPIOGPIO引腳,但各個引腳,但各個GPIOGPIO口口的編程寄存器均為的編程寄存器均為8 8位,沒有對應(yīng)引腳的位無效。位,沒有對應(yīng)引腳的位無效。 GPIOGPIO模塊寄模塊寄存器的命名有一定的規(guī)范,所有寄存器都在存器的命名有一定

26、的規(guī)范,所有寄存器都在AW60AW60芯片寄存器及芯片寄存器及相關(guān)位定義頭文件相關(guān)位定義頭文件AW60.hAW60.h中定義。其中中定義。其中“端口數(shù)據(jù)寄存器端口數(shù)據(jù)寄存器”是是PT+PT+該端口的名稱該端口的名稱+D+D?!岸丝谳敵龇较蚣拇嫫鞫丝谳敵龇较蚣拇嫫鳌笔鞘荘T+PT+該端口的該端口的名稱名稱+DD+DD。所有寄存器的位編號從。所有寄存器的位編號從0 0開始,且最低位編號為開始,且最低位編號為0 0。例如,一個例如,一個8 8位寄存器的最低位編號為位寄存器的最低位編號為0 0,最高位編號為,最高位編號為7 7。1 1操作操作GPIOGPIO的基本寄存器的基本寄存器 端口數(shù)據(jù)方向寄存器

27、端口數(shù)據(jù)方向寄存器DDRDDR(Port Data Direction RegisterPort Data Direction Register) 這些位分別控制著端口引腳是輸入還是輸出,若為這些位分別控制著端口引腳是輸入還是輸出,若為0 0,則引,則引 腳為輸入,若為腳為輸入,若為1 1,則引腳為輸出。復位時為,則引腳為輸出。復位時為0 x000 x00 端口數(shù)據(jù)寄存器端口數(shù)據(jù)寄存器PORTPORT(Port Data RegisterPort Data Register) 若引腳被配置為輸出,若引腳被配置為輸出,PORTn PORTn 寄存器中每一位數(shù)據(jù)決定了對寄存器中每一位數(shù)據(jù)決定了對

28、應(yīng)引腳的輸出電平。應(yīng)引腳的輸出電平。2 2GPIOGPIO的基本編程方法舉例的基本編程方法舉例 以以D D口第口第3 3腳的腳的GPIOGPIO功能為例功能為例u 為了程序通用性,對要設(shè)置的引腳進行宏定義為了程序通用性,對要設(shè)置的引腳進行宏定義l #define RUN_PORT PORTD / #define RUN_PORT PORTD / 燈使用的端口燈使用的端口l #define RUNpin 3 / #define RUNpin 3 / 用用RUNpinRUNpin代替代替“3”3”u 當需要對寄存器的具體位進行設(shè)置,通常會使用位操作當需要對寄存器的具體位進行設(shè)置,通常會使用位操作l

29、 RUN_PORT &= 0b11110111 /RUN_PORT &= 0b11110111 /表示將表示將RUN_PORTRUN_PORT的第的第3 3位設(shè)置為位設(shè)置為0 0l RUN_PORT |= 0b00001000 /RUN_PORT |= 0b00001000 /表示將表示將RUN_PORTRUN_PORT的第的第3 3位設(shè)置為位設(shè)置為1 1u 為了程序通用性,以上兩行代碼需要寫成:為了程序通用性,以上兩行代碼需要寫成:l RUN_PORT &= RUN_PORT &= (0 x01 RUNpin) /(0 x01 RUNpin) /將將RUN_PORTRUN_PORT的第的第3

30、 3位設(shè)置為位設(shè)置為0 0l RUN_PORT |= 0 x01 RUNpin /RUN_PORT |= 0 x01New ProjectFile-New Project,彈出新建對話框,選擇,彈出新建對話框,選擇“S08 S08A Family AW60S08 S08A Family AW60”,點擊,點擊“下一步下一步”,選中,選中“C C”的選項,如果程序中有匯編代碼則應(yīng)該選中的選項,如果程序中有匯編代碼則應(yīng)該選中“Relocatable assemblyRelocatable assembly”,在右側(cè),在右側(cè)Project nameProject name中中輸入工程名,在輸入工程名

31、,在LocationLocation中選擇工程所在目錄。單擊中選擇工程所在目錄。單擊確定即可確定即可 第二種方法是使用已存的工程來建立另一個工程。第二種方法是使用已存的工程來建立另一個工程。當在已有工程的基礎(chǔ)上,做另一個項目時,比如在當在已有工程的基礎(chǔ)上,做另一個項目時,比如在LightLight工程的基礎(chǔ)上編寫工程的基礎(chǔ)上編寫LCDLCD程序,需要進行如下設(shè)置程序,需要進行如下設(shè)置l更改工程文件夾名為更改工程文件夾名為LCDLCDl更改更改Light.mcpLight.mcp為為LCD.mcpLCD.mcpl文件夾文件夾Light_DataLight_Data更改為更改為LCD_DataLC

32、D_Datal將將binbin文件夾的所有內(nèi)容刪掉文件夾的所有內(nèi)容刪掉3.5 3.5 第一個第一個C C語言工程:控制小燈閃爍語言工程:控制小燈閃爍3.5.1 GPIO3.5.1 GPIO構(gòu)件構(gòu)件 GPIOGPIO構(gòu)件的頭文件構(gòu)件的頭文件GPIO.hGPIO.h GPIOGPIO構(gòu)件的程序文件構(gòu)件的程序文件GPIO.cGPIO.c3.5.2 Light3.5.2 Light構(gòu)件構(gòu)件 LightLight構(gòu)件的頭文件構(gòu)件的頭文件Light.hLight.h LightLight構(gòu)件的程序文件構(gòu)件的程序文件Light.cLight.c3.5.3 Light3.5.3 Light測試工程主程序測試工

33、程主程序3.5.4 3.5.4 理解第一個理解第一個C C工程的執(zhí)行過程工程的執(zhí)行過程 系統(tǒng)上電系統(tǒng)上電 執(zhí)行執(zhí)行Start08.cStart08.c文件中的文件中的_Startup_Startup函數(shù)函數(shù) 中斷程序的執(zhí)行中斷程序的執(zhí)行3.6 3.6 第一個匯編語言工程:控制小燈閃爍第一個匯編語言工程:控制小燈閃爍 基于匯編語言編程給人的第一感覺是難,相對于其它的基于匯編語言編程給人的第一感覺是難,相對于其它的高級語言編程,匯編語言在編程的直觀性、編程效率等方面高級語言編程,匯編語言在編程的直觀性、編程效率等方面有所欠缺,但針對資源相對較少的單片機以及時序要求嚴格有所欠缺,但針對資源相對較少的

34、單片機以及時序要求嚴格的硬件接口編程,掌握匯編語言還是必不可少的。使用匯編的硬件接口編程,掌握匯編語言還是必不可少的。使用匯編語言編程是基本功,學習和掌握匯編語言編程可以增加編程語言編程是基本功,學習和掌握匯編語言編程可以增加編程者的者的“內(nèi)力內(nèi)力”,為使用高級語言編程打下堅實的基礎(chǔ)。,為使用高級語言編程打下堅實的基礎(chǔ)。3.6.1 3.6.1 匯編工程文件的組織匯編工程文件的組織 小燈閃爍匯編工程相關(guān)源文件的樹型結(jié)構(gòu)小燈閃爍匯編工程相關(guān)源文件的樹型結(jié)構(gòu)u主函數(shù)文件主函數(shù)文件(main.asm)(main.asm)主程序文件主程序文件main.asmmain.asm,包含有:,包含有: 工程描述

35、:工程名、硬件連接索引、程序描述、目的、說工程描述:工程名、硬件連接索引、程序描述、目的、說明、注意、日期等明、注意、日期等 總頭文件總頭文件 主程序:主程序一般包括初始化與主循環(huán)兩大部分。初始主程序:主程序一般包括初始化與主循環(huán)兩大部分。初始化包括堆棧初始化、系統(tǒng)初始化、內(nèi)存變量初始化、化包括堆棧初始化、系統(tǒng)初始化、內(nèi)存變量初始化、I/OI/O端端口初始化、中斷初始化等口初始化、中斷初始化等 內(nèi)部直接調(diào)用子程序:若有不單獨存盤的子程序,建議放內(nèi)部直接調(diào)用子程序:若有不單獨存盤的子程序,建議放在此處在此處 外部子程序:若程序使用獨立存盤的子程序,可在此處使外部子程序:若程序使用獨立存盤的子程序

36、,可在此處使用用“INCLUDEINCLUDE子程序文件名子程序文件名”將其包含。注意,獨立存盤的將其包含。注意,獨立存盤的子程序必須與主程序在同一個目錄中子程序必須與主程序在同一個目錄中u中斷處理程序文件中斷處理程序文件(isr.asm(isr.asm)u框架程序文件框架程序文件u匯編軟件構(gòu)件文件匯編軟件構(gòu)件文件u通用程序文件通用程序文件3.6.2 3.6.2 LightLight構(gòu)件匯編程序構(gòu)件匯編程序包含:包含:uLightLight構(gòu)件的匯編頭文件構(gòu)件的匯編頭文件Light.incLight.incuLightLight構(gòu)件的匯編程序文件構(gòu)件的匯編程序文件Light.asmLight.

37、asm3.6.3 Light3.6.3 Light測試工程主程序測試工程主程序 首先調(diào)用首先調(diào)用LightInitLightInit函數(shù),初始化所需的每一盞指示燈。注函數(shù),初始化所需的每一盞指示燈。注意初始化時,要讓每一盞燈初始狀態(tài)為意初始化時,要讓每一盞燈初始狀態(tài)為“暗暗”。隨后,通。隨后,通過過Light_L_ALight_L_A函數(shù)控制指示燈亮、暗。在指示燈亮暗之間增函數(shù)控制指示燈亮、暗。在指示燈亮暗之間增加適當?shù)难訒r后,就能夠在程序運行時,較明顯的看到指加適當?shù)难訒r后,就能夠在程序運行時,較明顯的看到指示燈閃爍的現(xiàn)象示燈閃爍的現(xiàn)象3.6.4 3.6.4 理解第一個匯編工程的執(zhí)行過程理解第一個匯編工程的執(zhí)行過程 系統(tǒng)上電系統(tǒng)上電 系統(tǒng)在加電過后,芯片內(nèi)的硬件機制會產(chǎn)生加電復位中斷,系統(tǒng)在加電過后,芯片內(nèi)的硬件機制會產(chǎn)生加電復位中斷,這時系統(tǒng)到向量表中查找復位向量地址,并轉(zhuǎn)向這個地址繼續(xù)這時系統(tǒng)到向量表中查找復位向量地址,并轉(zhuǎn)向這個地址繼續(xù)執(zhí)行。在本書所有工程樣例,到執(zhí)行。在本書所有工程樣例,到* *.prm.prm文件中都可以找到異常文件中都可以找到異常向量表,在該表的第一行是復位中斷向量地址:向量表,在該表的第一行是復

溫馨提示

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

評論

0/150

提交評論