




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
MC9S12的C語(yǔ)言與標(biāo)準(zhǔn)C語(yǔ)言的區(qū)別控制科學(xué)與工程學(xué)院1、建立匯編語(yǔ)言工程建立一個(gè)匯編語(yǔ)言程序并完成LED點(diǎn)亮選擇“File〞—“New…〞選擇向?qū)?,輸入工程名“LED〞,設(shè)置工程目錄歡送屏幕選擇單片機(jī)“MC9S12DG128B〞選擇開(kāi)發(fā)語(yǔ)言“Assembly〞選擇“RelocatableAssembly〞選擇編譯目標(biāo)完成建立匯編語(yǔ)言工程選擇編譯目標(biāo)為T(mén)BDML,插好PCB板在“CLI〞后寫(xiě)上執(zhí)行一次的代碼: movb#$ff,DDRBmovb#$55,PORTB這兩句代碼只執(zhí)行一次,可以看到靜態(tài)花燈的效果程序進(jìn)入大循環(huán),花燈狀態(tài)不變2、建立C語(yǔ)言工程建立一個(gè)C語(yǔ)言程序并完成LED花燈閃亮選擇“File〞—“New…〞選擇向?qū)В斎牍こ堂癓ED〞,設(shè)置工程目錄歡送屏幕選擇單片機(jī)“MC9S12DG128B〞選擇開(kāi)發(fā)語(yǔ)言“Assembly〞和“C〞選擇不使用ProcessorExpert選擇不使用PC-Lint選擇ANSIStartupcode選擇浮點(diǎn)數(shù)支持為NONE建立C語(yǔ)言工程MemoryModule選擇banked編譯目標(biāo)選擇上TBDML完成初始化方向存放器和初始顯示 DDRB=0xff; PORTB=0x55;在無(wú)限for循環(huán)里寫(xiě) PORTB=~PORTB;編寫(xiě)延時(shí)函數(shù)delay1()建立C語(yǔ)言工程 voiddelay1() { unsignedinti=60000; while(i--); }在“PORTB=~PORTB;〞后調(diào)用該函數(shù) delay1();觀看演示效果,典型的無(wú)限循環(huán)程序C語(yǔ)言程序結(jié)構(gòu)voidmain(void){ EnableInterrupts; //開(kāi)中斷
asm_main(); //初始化硬件
//設(shè)置單片機(jī)I/O口的數(shù)據(jù)方向
for(;;) //無(wú)限循環(huán)
{ //循環(huán)執(zhí)行的程序
//花燈循環(huán)顯示
}}開(kāi)機(jī)執(zhí)行一次循環(huán)執(zhí)行到斷電為止3、Codewarrior4.6程序調(diào)試軟件仿真調(diào)試選擇編譯目標(biāo)為FullChipSimulation調(diào)試:全速執(zhí)行、斷點(diǎn)、執(zhí)行到光標(biāo)、單步等子窗口:source、data、register、assembly、memory、command等Codewarrior4.6程序調(diào)試BDM調(diào)試安裝BDM驅(qū)動(dòng)撥碼開(kāi)關(guān)1提供供電方式選擇編譯目標(biāo)TBDML進(jìn)入調(diào)試界面需要進(jìn)行相關(guān)設(shè)置,如晶振頻率、MCU型號(hào)等等單步全速調(diào)試與仿真根本相同,不同的是這個(gè)屬于在線調(diào)試,必須有MCU連接。Lecture5Page
11微控制器開(kāi)發(fā)技術(shù)FileprocesstreeC源文件匯編源文件庫(kù)文件目標(biāo)文件C編譯器匯編編譯器鏈接器執(zhí)行文件映射文件列表文件匯編反編譯文件反編譯器鏈接配置文件*.h*.c*.c++*.asm*.inc*.prm*.lib*.obj*.lst*.map*.sx*.abs4、S格式文件將程序和數(shù)據(jù)用ASCII碼表示,包含了根本協(xié)議,包括出錯(cuò)校驗(yàn)功能。程序編譯完成后,在bin文件夾生成“xxx.abs.s19〞文件。行-S記錄,由記錄類(lèi)型、記錄長(zhǎng)度、存儲(chǔ)地址、程序/數(shù)據(jù)校驗(yàn)和構(gòu)成。記錄類(lèi)型〔S0、S1、S9〕S0:包含本S文件的名字,在PC上有意義。如P167,S0表示記錄類(lèi)型,18為記錄長(zhǎng)度〔0X18〕,最后一個(gè)字節(jié)80為校驗(yàn)碼。S1:S1后接記錄長(zhǎng)度,接裝載地址,32個(gè)機(jī)器碼字節(jié),最后為校驗(yàn)碼。S格式文件S9:最后一個(gè)記錄,表示文件傳送結(jié)束。S記錄類(lèi)型S0:S格式文件的起始記錄S1:地址為2字節(jié)的程序數(shù)據(jù)記錄S2:地址為3字節(jié)的程序數(shù)據(jù)記錄〔>64K〕S3:地址為4字節(jié)的程序數(shù)據(jù)記錄〔>16M〕S5:標(biāo)記本文件的S1、S2或S3記錄個(gè)數(shù)〔可選〕S7:S3格式,用S7記錄結(jié)束S8:S2格式,用S8記錄結(jié)束S9:S1格式,用S9記錄結(jié)束S0510000433A5C446F63756D656E747320616E642053657474696E67735C41646D696E6973747261746F725C4D7920446F63756D656E74735C50726F6A6563745F335C62696E5C50726F6A6563742E616273BDS123C000CF050010EF180BFF0003180B550001CE00017E0500070E7C0502FE0500088E0028S119C0202126EF20EACD0000CC000104050719EEB7C60435F93D32S105FFFEC0003DS9030000FC2、MC9S12的C編程與標(biāo)準(zhǔn)C的不同9S12C語(yǔ)言的不同變量資源映射用C語(yǔ)言處理中斷〔中斷向量表64〕標(biāo)準(zhǔn)C庫(kù)C語(yǔ)言入口程序鏈接與定位變量的不同根本數(shù)據(jù)類(lèi)型的定義P185特有類(lèi)型的變量volatile更加特殊的constvolatile2.1變量各種類(lèi)型的數(shù)據(jù)占的字節(jié)數(shù),在不同的系統(tǒng)中有所不同自定義CodeWarrior數(shù)據(jù)類(lèi)型在CodeWarrior環(huán)境下按ALT+F7翻開(kāi)工程的通用設(shè)置,選擇“CompilerforHC12〞面板然后點(diǎn)按鈕“TypeSizes〞。CodeWarrior編譯器標(biāo)準(zhǔn)類(lèi)型設(shè)置建議不要隨意更改數(shù)據(jù)類(lèi)型的設(shè)置16位微控制器內(nèi)部的數(shù)據(jù)長(zhǎng)度是16位〔2字節(jié)〕,所以首選的數(shù)據(jù)類(lèi)型是“int〞。16位機(jī)處理16位數(shù)據(jù)比8位數(shù)據(jù)的效率更高。對(duì)于9S12單片機(jī)來(lái)說(shuō),16位數(shù)據(jù)類(lèi)型效率最高,因此在使用中,盡量選擇int類(lèi)型數(shù)據(jù)。假設(shè)可能,選用無(wú)符號(hào)類(lèi)型。數(shù)據(jù)類(lèi)型的真相存儲(chǔ)類(lèi)修飾符以下關(guān)鍵字用于聲明變量,以指定特定需要或內(nèi)存中變量存儲(chǔ)的相關(guān)條件。static〔靜態(tài)變量〕volatile〔可變變量〕const〔只讀變量〕Constvolatile可變〔volatile〕變量volatile的本意是“易變的〞,
就是該變量會(huì)以編譯器無(wú)法預(yù)知的方式發(fā)生變化.所有的編譯器的優(yōu)化均假設(shè)編譯器知道變量的變化規(guī)律,請(qǐng)編譯器不要做優(yōu)化。也就是說(shuō)是其值在正常程序流程以外可能改變的變量。在嵌入式系統(tǒng)中,這種情況通過(guò)兩種主要途徑發(fā)生:一是中斷效勞程序,二是硬件動(dòng)作。例子static
int
i=0;
int
main(void)
{
...
while
(1)
{
if
(i)
dosomething();
}
}
/*
Interrupt
service
routine.
*/
void
ISR_2(void)
{
i=1;
}
程序的本意是希望ISR_2中斷產(chǎn)生時(shí),在main當(dāng)中調(diào)用dosomething函數(shù),但是,由于編譯器判斷在main函數(shù)里面沒(méi)有修改正i,因此可能只執(zhí)行一次對(duì)從i到某存放器的讀操作,然后每次if判斷都只使用這個(gè)存放器里面的“i副本〞,導(dǎo)致dosomething永遠(yuǎn)也不會(huì)被調(diào)用。如果將變量加上volatile修飾,那么編譯器保證對(duì)此變量的讀寫(xiě)操作都不會(huì)被優(yōu)化〔肯定執(zhí)行〕。此例中i也應(yīng)該如此說(shuō)明。
Lecture5Page
24微控制器開(kāi)發(fā)技術(shù)volatile(2)volatile用在如下的幾個(gè)地方中斷效勞程序中修改的供其它程序檢測(cè)的變量需要加volatile;
存儲(chǔ)器映射的硬件存放器通常也要加volatile說(shuō)明,因?yàn)槊看螌?duì)它的讀寫(xiě)都可能由不同意義const關(guān)鍵字“const〞,并不表示恒量,而是代表“只讀〞。Const聲明可用于任何變量,它告訴編譯器將其存儲(chǔ)在ROM區(qū)。編譯器保存了那個(gè)位置程序存儲(chǔ)器地址。由于位于ROM中,其值不能改變。constunsignedshorta;unsignedshortconsta;constunsignedshort*a;unsignedshort*consta;Constvolatile變量只讀變量這個(gè)修飾符應(yīng)該用于能出乎意料地改變的任何存儲(chǔ)器位置,因此需要volatile限定語(yǔ),由于const該變量是只讀的。最明顯的例子是硬件狀態(tài)存放器,像SCI狀態(tài)存放器SCS1。這個(gè)存放器包含信號(hào)狀態(tài)標(biāo)志,如發(fā)送空、發(fā)送完成、接收滿以及其它。這是一個(gè)可變存放器由于這些標(biāo)志的改變依賴(lài)于串行通信的狀態(tài);這也是只讀,由于標(biāo)志不能被程序直接改寫(xiě),它們只對(duì)模塊的狀態(tài)作出響應(yīng)。這個(gè)狀態(tài)存放器最正確聲明方法是:constvolatileunsignedcharSCS1@0x00162.2資源的映射訪問(wèn)固定的內(nèi)存位置訪問(wèn)I/O存放器訪問(wèn)固定內(nèi)存位置在某個(gè)工程中需要將絕對(duì)地址0x2FFA處整型變量的值設(shè)為0xAA55。完成這個(gè)任務(wù)的代碼是:與PC機(jī)不同,嵌入式系統(tǒng)通常的特點(diǎn)是需要編程者訪問(wèn)一個(gè)指定的存儲(chǔ)器位置。int*ptr;ptr=(int*)0x2FFA;*ptr=0xAA55;訪問(wèn)固定內(nèi)存位置在某個(gè)工程中需要將絕對(duì)地址0x2FFA處整型變量的值設(shè)為0xAA55。完成這個(gè)任務(wù)的代碼是:〔2〕unsignedintptr@0x2FFA;intptr@0x2FFA;ptr=0xAA55;訪問(wèn)I/O存放器一個(gè)方法是使用如下的#define指示:#definePortA(*(volatileunsignedchar*)0x0000)這種情況下,PortA為地址0x0000處字符型變量。在codewarrior中的頭文件中已經(jīng)給出了存放器的宏定義。例如:mc9s12dg128.hunsignedcharpta;pta=PORTA; 或 PORTA=pta;另一種方法是在變量聲明中使用符號(hào)“@〞:constvolatileunsignedcharSCS1@0x00162.3C語(yǔ)言的中斷ANSIC里并沒(méi)有定義如何用C寫(xiě)中斷效勞程序表達(dá)式以interrupt關(guān)鍵字開(kāi)始,接著是中斷向量號(hào),最后是函數(shù)原型。以下定義了中斷向量號(hào)為7的實(shí)時(shí)中斷interrupt7voidRTI_ISR(void) { /*RTI_ISRFunctionCodes*/ }9S12中斷源有55個(gè),中斷向量號(hào)越小,優(yōu)先級(jí)越大。見(jiàn)課本64頁(yè)。在codewarrior環(huán)境下,中斷向量號(hào)在頭文件中,例如mc9s12dg28.h2.4標(biāo)準(zhǔn)C庫(kù)標(biāo)準(zhǔn)庫(kù)如stdio.h通常包含在大局部輸入輸出函數(shù),大局部可以直接使用。#include<stdio.h>voidmain(void){Printf(“HelloWorld!\n〞)}標(biāo)準(zhǔn)C語(yǔ)言與硬件無(wú)關(guān),I/O的輸入輸出并不是標(biāo)準(zhǔn)C語(yǔ)言的一局部。在標(biāo)準(zhǔn)C語(yǔ)言中,I/O操作是通過(guò)操作系統(tǒng)實(shí)現(xiàn)的。在標(biāo)準(zhǔn)C中,printf()缺省的控制臺(tái)是顯示器,但9S12沒(méi)有顯示器作為片外外設(shè)。在嵌入式編程中,如果需要使用這個(gè)功能,那么需要修改根底庫(kù)函數(shù)才能正確輸出。但凡需要顯示在顯示終端的,可以使用SCI〔異步串行通信〕發(fā)送到PC機(jī)的超級(jí)終端顯示。2.5C語(yǔ)言入口在MC9S12的C程序中,程序的入口在什么地方?程序是怎樣起動(dòng)的呢?開(kāi)機(jī)進(jìn)入0號(hào)復(fù)位中斷初始化〔堆棧、硬件初始化、看門(mén)狗等等〕調(diào)用main函數(shù)Codewarrior中的Start12.c程序員可以自己編寫(xiě)啟動(dòng)代碼,可以將應(yīng)用程序中的硬件初始化程序都放在啟動(dòng)代碼里面,這樣就可以比較專(zhuān)注地在應(yīng)用程序中做要做的事情。void_Startup(){
asm{LDS0x1000JSRHardInitJSRmain}}一個(gè)啟動(dòng)代碼的例子
2.6程序的鏈接與定位對(duì)于MC9S12單片機(jī)來(lái)說(shuō),由于RAM,EEPROM,存放器可以重新映射,而且不同型號(hào)的單片機(jī)內(nèi)部FLASH大小也不一樣,這樣程序編譯后存放在什么位置,成了我們必須告訴鏈接器的內(nèi)容,因?yàn)殒溄悠鞑恢滥阌玫膯纹瑱C(jī)RAM放在什么地方,ROM放在什么地方。為了方便管理,CodeWarrior自動(dòng)生成一個(gè).prm文件,用于定義目標(biāo)代碼的裝載地址。詳見(jiàn)課本192頁(yè)。C語(yǔ)言與匯編語(yǔ)言的混合編程在絕大多數(shù)場(chǎng)合采用C語(yǔ)言編程可完成預(yù)期的目的,但是對(duì)一些特殊情況進(jìn)行編程時(shí)要結(jié)合匯編語(yǔ)言。匯編語(yǔ)言具有直接和硬件打交道、執(zhí)行代碼的效率高等特點(diǎn),可以做到C語(yǔ)言所不能做到的一些事情:一個(gè)程序中的關(guān)鍵局部對(duì)執(zhí)行速度有很高要求,實(shí)時(shí)性強(qiáng)。用匯編編程可以更有效的利用CPU的存放器和指令集,用其產(chǎn)生的代碼比用編譯器產(chǎn)生的代碼運(yùn)行更快。對(duì)特定硬件接
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年上半年寧夏石嘴山市礦業(yè)(集團(tuán))限責(zé)任公司人員招聘27名易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 【2025】貴州錦屏縣金森林業(yè)投資開(kāi)發(fā)有限公司招聘合同制員筆試考點(diǎn)考試試題及答案
- 2024西安市自來(lái)水有限公司招聘擬初錄人員筆試參考題庫(kù)附帶答案詳解
- 2024福建輕紡集團(tuán)秋季招聘筆試參考題庫(kù)附帶答案詳解
- 小學(xué)英語(yǔ)寫(xiě)作技巧如何提高小學(xué)英語(yǔ)寫(xiě)作能力
- 浙江鴨2025版高考化學(xué)二輪復(fù)習(xí)選擇題提升練五含解析
- 2025年個(gè)體防護(hù)裝備項(xiàng)目可行性研究報(bào)告
- 2025年P(guān)E吹塑薄膜項(xiàng)目可行性研究報(bào)告
- 江蘇專(zhuān)版2024中考道德與法治復(fù)習(xí)方案第二部分七下第05課時(shí)青春時(shí)光提分訓(xùn)練
- 四年級(jí)心理降上冊(cè)4我是情緒的主人教案北師大版
- (二模)長(zhǎng)春市2025屆高三質(zhì)量監(jiān)測(cè)(二)地理試卷(含答案)
- 2025年河南省高職單招計(jì)算機(jī)類(lèi)職業(yè)技能測(cè)試題(附答案)
- GB/T 18936-2025禽流感診斷技術(shù)
- 《主題四 雞蛋撞地球》教學(xué)設(shè)計(jì)-2023-2024學(xué)年六年級(jí)下冊(cè)綜合實(shí)踐活動(dòng)遼師大版
- 2025年國(guó)航機(jī)務(wù)系統(tǒng)AMECO工程師崗位校園招聘筆試參考題庫(kù)附帶答案詳解
- 巨量千川中級(jí)營(yíng)銷(xiāo)師認(rèn)證考試題(附答案)
- 2025中智集團(tuán)招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 金融公司早會(huì)內(nèi)容
- 藥劑學(xué)第9版課件:第一章-緒論
- 《下載-綜合布線》課件
- 可穿戴生理傳感器驅(qū)動(dòng)的深度學(xué)習(xí)情緒識(shí)別模型在心理健康評(píng)估中的應(yīng)用
評(píng)論
0/150
提交評(píng)論