|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
[轉(zhuǎn)貼]HC08 C語言程序設(shè)計(jì)(4) |
| 作者:JerryBJ 欄目:單片機(jī) |
周末在www.mcu123.com上讀到劉玉宏同志的這篇文章,覺得寫得很好,基本上涵蓋了使用C語言對(duì)HC(S)08微控制器編程的基本知識(shí),推薦給大家。把這篇文章轉(zhuǎn)貼過來,沒有經(jīng)過原文作者和MCU123的允許,希望他們不會(huì)生氣。若作者和MCU123對(duì)此感到不適,請(qǐng)即告知,我們立刻刪除此轉(zhuǎn)貼。原文鏈接如下: http://www.mcu123.com/news/Article/uc/Motorola/200608/255.html 混和編程 1)內(nèi)嵌匯編 HCS08 C 語言提供一個(gè)很有用的功能,內(nèi)嵌匯編。凡是C語言程序段能出現(xiàn)的地方匯編語言源程序都可以出現(xiàn),但是匯編語言源程序必需位于一個(gè)C語言函數(shù)中。 語法格式 1) "asm" <匯編指令> ";" ["/*" 注釋 "*/"] 雙引號(hào)中的內(nèi)容為關(guān)鍵字,方括號(hào)中的內(nèi)容為可選項(xiàng)。 例如: asm sta COPCTL; /* 喂狗 */ 2) "asm" "{" <匯編指令 1> [";" 注釋] <匯編指令 2> [";" 注釋] "}" 要求:大括號(hào)內(nèi)每條匯編指令占一行;標(biāo)號(hào)以“:”結(jié)尾占一行;注釋以“;”開始;可以用變量名訪問全局變量和C 函數(shù)中的局部變量。匯編語言結(jié)束前要保證堆棧內(nèi)容與匯編開始前一致。 例如:用內(nèi)嵌匯編方法實(shí)現(xiàn)統(tǒng)計(jì)字符串中字符的個(gè)數(shù)。 int strlen (CHAR *str) /*** 'str' 參數(shù)由堆棧傳遞. 函數(shù)返回字符串'str'的長(zhǎng)度 假定字符串的長(zhǎng)度小于256! */ { asm { LDHX str ; 裝入指針 CLRA ; 初始化計(jì)數(shù)器 BRA TEST ; 跳到TEST loop: AIX #1 ; 指針加1 INCA ; 計(jì)數(shù)器加1 TEST: TST 0,X ; 字符串是否結(jié)束? BNE loop ; 下一字符 CLRX ; 返回值在 X:A(參見后文) }; /* 這里可以繼續(xù)寫 C 語言程序段 */ } 2)混和調(diào)用 混和調(diào)用指的是C語言函數(shù)調(diào)用匯編語言函數(shù)和匯編語言函數(shù)調(diào)用C語言函數(shù)。實(shí)現(xiàn)混和調(diào)用要解決兩個(gè)問題1:常量和變量的相互訪問;2調(diào)用協(xié)議 1常量和變量的相互訪問 C 語言函數(shù)訪問匯編語言常量、變量 在匯編語言源程序中采用匯編語法定義變量和常量;在C語言中把這些變量、常量聲明為外部常量變量,即可以用變量、常量名來訪問。匯編器和編譯器敏感段名的大小寫。 例如: 匯編源程序中 XDEF ASMData, ASMConst ;聲明 ASMData, ASMConst 可以在模塊外訪問 MyData: SECTION ASMData: DS.W 1 ; 定義變量 MyConst: SECTION ASMConst: DC.W $44A6 ; 定義常量 在 C 語言源程序中 #pragma DATA_SEG MyData /* 定義變量段 */ extern int ASMData; /* 變量 ASMData 是外部模塊聲明的 */ #pragma DATA_SEG DEFAULT /* 返回默認(rèn)變量段 */ #pragma CONST_SEG MyConst /* 定義常數(shù)段 */ extern const int ASMConst; /* 常量 ASMConst 是外部模塊聲明的*/ #pragma CONST_SEG DEFAULT /*返回默認(rèn)常數(shù)段 */ 匯編語言訪問C語言變量、常量 在C語言中用標(biāo)準(zhǔn)格式定義常量、變量,在匯編語言中聲明這些常量變量是外部定義即可。 例如: 在C語言源文件中: unsigned int CData; /* 定義變量 */ unsigned const int CConst; /* 定義常量 */ 在匯編語言源文件中: XREF CData ; 外部聲明的變量 XREF CConst; 外部聲明的常量 使用: LDD CConst STD CData 2)調(diào)用協(xié)議 調(diào)用協(xié)議,即函數(shù)參數(shù)傳遞和返回值的協(xié)議。對(duì)于HC08和HCS08調(diào)用協(xié)議是不同的。 HC08 參數(shù)傳遞:調(diào)用者函數(shù)把所需參數(shù)從左到右依次入棧,調(diào)用結(jié)束后由調(diào)用者函數(shù)從堆棧中清除傳遞的參數(shù)。在函數(shù)傳遞的是值參數(shù)的情況下,如果最后一個(gè)參數(shù)長(zhǎng)度為2字節(jié),則用X:A寄存器對(duì)傳遞;如果最后一個(gè)參數(shù)長(zhǎng)度為1字節(jié)且倒數(shù)第2個(gè)參數(shù)長(zhǎng)度超過1字節(jié),則最后一個(gè)參數(shù)用寄存器A傳遞;如果最后一個(gè)參數(shù)長(zhǎng)度為1字節(jié)且倒數(shù)第2個(gè)參數(shù)長(zhǎng)度也是1字節(jié),則最后一個(gè)參數(shù)用寄存器X傳遞,倒數(shù)第2個(gè)參數(shù)用寄存器A傳遞; |
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號(hào) |