




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 利用全局及外部變量實現(xiàn)C51無參數(shù)化調(diào)用A51函數(shù) 莊文斌1 林 穎2 時間:2009年04月28日 字 體: 大 中 小 關(guān)鍵詞:<"cblue" " target='_blank'>參數(shù)化<"cblue" " targ
2、et='_blank'>主程序<"cblue" " target='_blank'>無紙記錄儀<"cblue" " target='_blank'>I/O<"cblue" " target='_blank'>程序設(shè)計 ? 摘? 要: 利用C51全局及外部變量,可
3、實現(xiàn)無<"cblue" " title="參數(shù)化">參數(shù)化調(diào)用A51函數(shù),不但避開了傳統(tǒng)C51調(diào)用A51時繁瑣的接口約定,而且把在A51中所用到的變量全部放至C51程序中而不必考慮變量在內(nèi)存中的位置,使編程更加簡潔。用實例驗證了該方法的優(yōu)越性和有效性。? 關(guān)鍵詞: C51? A51? 匯編語言? 無參數(shù)化調(diào)用? 電子技術(shù)應(yīng)用2001年第7期發(fā)表茍帥的文章“ASM51無參數(shù)化調(diào)用C51函數(shù)的實現(xiàn)”,闡述了ASM51無參數(shù)化調(diào)用C51函數(shù)的實現(xiàn)原理并給出實例來驗證該方法的優(yōu)越性和可行性。作者在文章中表明這樣一種觀點:“利用匯編語言對&l
4、t;"cblue" " title="I/O">I/O接口、中斷向量及程序空間分配的巨大優(yōu)勢,讓程序員對MCS-51內(nèi)的每一個字節(jié)甚至是每一比特(可位尋址空間)全部進行統(tǒng)籌安排,設(shè)計好各個程序模塊,包括I/O口地址和中斷向量地址的處理;同時在具體數(shù)據(jù)處理、通信等不需要過多與硬件打交道的程序模塊中,充分利用C51語言強大高效的編程能力”。上述觀點并沒有錯,但是對I/O接口、中斷向量及程序空間分配及MCS-51內(nèi)的每一個字節(jié)甚至是每一比特(可位尋址空間)全部進行統(tǒng)籌安排,對于大多數(shù)程序員來講恰恰是件不容易的事。地址空間、棧的起始地址和中斷向量
5、地址的分配等,經(jīng)常顧此失彼,這邊可行,那邊又出問題。其實完全可以把上述繁重的工作交給C51去完成,由C51定義各個變量并自動分配各個變量的空間,而集中精力完成所需功能的A51<"cblue" " title="程序設(shè)計">程序設(shè)計。筆者在研制基于C51、插拔式FLASH存儲器的<"cblue" " title="無紙記錄儀">無紙記錄儀中,就是利用全局及外部變量實現(xiàn)C51無參數(shù)化調(diào)用A51函數(shù)的,取得了很好的效果。?1 C51無參數(shù)化調(diào)用A51函數(shù)的實現(xiàn)原理? 為了說明其
6、原理,必須理解局部變量、全局變量和外部變量的意義。? 局部變量:是在函數(shù)內(nèi)部定義的變量,只在定義它的函數(shù)內(nèi)部有效,僅在使用它時,才為它分配內(nèi)存單元。? 全局變量:又稱外部變量,是在函數(shù)外部定義的變量,可以為多個函數(shù)共同使用,其有效作用范圍是從它定義的位置開始直到整個程序文件結(jié)束。若一個全局變量不是在程序文件開始處定義的,但又希望在它的定義點之前的函數(shù)中引用該變量,這時應(yīng)在引用該變量的函數(shù)中用關(guān)鍵字EXTERN將其說明為外部變量。此外如果一個程序模塊文件中應(yīng)用另一個程序模塊中定義的變量時,也必須用EXTERN進行說明。全局變量在整個程序的執(zhí)行過程中都要占用內(nèi)存單元。? 外部變量(EXTERN):
7、使用存儲種類說明符EXTERN定義的變量稱為外部變量。按照缺省規(guī)則,凡在所有函數(shù)之前,在函數(shù)外部定義的變量都是外部變量,定義時可以不寫EXTERN說明符。但是,在一個函數(shù)體內(nèi)說明一個在該函數(shù)體外或別的程序模塊文件中定義過的外部變量時,則必須使用EXTERN說明符。一個外部變量被定義之后,它就被分配了固定的內(nèi)存空間。外部變量的生存期為程序的整個執(zhí)行時間。? C語言允許將大型的程序分解為若干個獨立的程序模塊,各個模塊可分別進行編譯,然后將它們連接在一起。如果某個變量需要在所有程序模塊文件中使用,只要在一個程序模塊中將該變量定義成全局變量,而在其它程序模塊中用EXTERN說明該變量是已被定義過的外部
8、變量就可以了。? 在C51中定義函數(shù)時如果冠以關(guān)鍵字EXTERN即將其明確定義為一個外部函數(shù)。? 具體方法是:在C51用unsigned char 定義的變量,則在A51中必須對應(yīng)聲明該變量在DATA區(qū);在C51用bit 定義位變量,則在A51中必須對應(yīng)聲明該變量在可位選區(qū)。A51 中用關(guān)鍵字EXTRN表示外部變量,對應(yīng)關(guān)系如下:? C51 定義? ?A51 聲明?unsigned char varible_nameEXTRN DATA(varible_name)?bit bit_name ? ?EXTRN BIT (bit_name)? 此外,C51編譯器支持在C語言源程序中直接編寫8051
9、單片機的中斷服務(wù)程序,從而減輕采用匯編語言編寫中斷服務(wù)程序的繁瑣程度。C51編譯器對函數(shù)的定義進行了擴展,增加了一個擴展關(guān)鍵字interrupt。定義中斷服務(wù)函數(shù)的一般格式為:? 函數(shù)類型 函數(shù)名(形式參數(shù)表) interrupt n using n? 關(guān)鍵字interrupt后面的n是中斷號,取值為031,編譯器從8n+3處產(chǎn)生中斷向量。using 后的n取值為03,表示選擇那一組寄存器。?2 C51無參數(shù)化調(diào)用A51函數(shù)的實例? 研制的無紙記錄儀實現(xiàn)的功能是:記錄儀有4個通道,每秒采樣1次,每個通道每次采樣需記錄兩個字節(jié),根據(jù)各個通道的轉(zhuǎn)儲速率(從1255可設(shè)定),把采樣的數(shù)據(jù)寫入外部數(shù)據(jù)
10、存儲器62256,一旦滿512字節(jié),就把512字節(jié)一次性寫入FLASH MEMORY中。? <"cblue" " title="主程序">主程序用C51編程,每秒中斷采樣程序由A51實現(xiàn)。主程序的主要工作是:把采集到的數(shù)據(jù)按曲線、棒圖和數(shù)據(jù)送到液晶顯示器顯示;根據(jù)一定的條件查詢數(shù)據(jù)等。中斷程序就是采樣4個通道,把在A51采樣所寫入的單元及所需要的一些位變量在C51定義為全局變量,在A51中這些變量聲明為外部變量,在C51調(diào)用A51的中斷函數(shù)必須聲明為外部函數(shù)。這樣就實現(xiàn)了C51無參數(shù)化調(diào)用A51。? C51主程序如下:?程序名為 M
11、YMAIN.C?#include ?#include ?#include ?#define? uchar? unsigned char?/以下3個函數(shù)在采樣程序模塊ZTDJLY.A51中,名稱就是標號?extern void sample();? /中斷采樣程序?extern void initial();? /AD7715初始化?extern void res_ram();? /外部存儲器62256地址指針復(fù)位?/以下變量為采樣程序模塊ZTDJLY.A51中所用到的變量?bit write_alw,vz_bit,fs_bit; /write_alw=1,寫入FLASH允許,vz_bit,fs
12、_bit 是零標定及滿刻度標定的標志?uchar sample_w12; /4路連零點采樣值,每路2個字節(jié)共10個字節(jié),另外2個字節(jié)作寫入62256前把采樣值添加通道號處理所需單元?uchar xdata *ram_point; /62256的指針?uchar? sa_p,sa_vzt8;?/sa_p為采樣當前路,sa_vzt8為4路的零點?uchar sa_timer8=1,1,1,1,1,1,1,1;? /4路的轉(zhuǎn)儲速率,前為子,后為母本? .?void disp_int0() interrupt 0 using 2? /用中斷0,使用寄存器2組? ? sample();/C51無參數(shù)化調(diào)
13、用A51函數(shù)?main()? .? initial();? while(1) /主循環(huán)? ? ? ? A51程序如下:?NAME ztdjly.a51?ram_cs ? bit 090h.2 ;p1.2? ;62256 片選?b373? ? bit 090h.1 ;p1.1?bit_dog? ? bit 0b0h.4 ;p3.4?;以下3個是AD7715的引腳定義?data_bit ? bit 0a0h.6 ;P2.6?adsclk_bit? ? bit 0b0h.5 ;P3.5?drdy_bit? ? bit 0b0h.3 ;p3.3?PR?sample?SAMPLE SEGMENT COD
14、E ;定義程序代碼段?EXTRN DATA (sample_w)? ;聲明外部變量,在C51程序定義分配在DATA區(qū)?EXTRN DATA (sa_p)?EXTRN DATA (ram_point)?EXTRN DATA (sa_timer)?EXTRN DATA (sa_vzt)?EXTRN BIT (write_alw)? ;聲明外部變量,在C51程序定義分配在可位尋址區(qū)?EXTRN BIT (vz_bit)?EXTRN BIT (fs_bit)?PUBLIC sample? ;公用符號說明?PUBLIC initial,res_ram?RSEG ?PR?sample?SAMPLE? us
15、ing 0 ?initial:;AD7715初始化,該標號即是C51定義外部函數(shù)? ? ?;initial()的入口地址? ? ret?;?sample: ;采樣程序,該標號即是C51定義外部函數(shù)? ? ;sample()的入口地址?ret?res_ram:? ;62256指針復(fù)位,該標號即是C51定義外部函數(shù)res_ram()的入口地址?ret?end ? 在研制無紙記錄儀之前,作者用MASM51開發(fā)了其他儀表,采樣部分有些相同,因此這次A51采樣程序并不是重新編寫,而是把以前的MASM51程序按A51的規(guī)則來修改。以前ASM的程序(數(shù)據(jù)段部分)如下所示:?bseg? ;? write_al
16、w? bit ? 00h;? vz_bit? bit ? 01h? fs_bit bit 02h? ce_bit? bit ? p1.6? ram_cs? bit ? p1.2? b373 ? bit ? p1.1? bit_dog ? bit ? p1.4? data_bit ? bit ? P2.6? sclk_bit ? bit ? P3.4? drdy_bit bit ? p3.3?ends? ;?dseg? org 08h? org 28h? sample_w: ? ds? 12? sa_p:? ds? 1? ;當前通道號? ram_point:? ds? 2? sa_timer:
17、? ds? 8? ;0,1,2,3 每通道兩字節(jié)? sa_vzt: ? ds? 8? ;0,1,2,3 vz?ends?;?cseg? org 0h?begin:? reti? org 03h? lcall? sample? reti?sample:? ?ends? 從上述程序可以看出,在采樣程序中所用到的變量并不少,定義在數(shù)據(jù)存儲區(qū)28H單元起始的空間中。這樣安排,對匯編程序沒什么問題,但與C51主程序連接的時候,并不一定好,很多時候碰到地址空間溢出的問題(C51主程序編譯連接后將近16K字節(jié),CPU采用ATMEL公司的AT89C55WD)。如何調(diào)整這些變量的分配,并非容易。另外,C51隨時要用到采樣單元sample_w12的值,如果采用一般的參數(shù)傳遞,將是相當復(fù)雜而繁瑣的;而采用全
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2《臘八粥》(教學(xué)設(shè)計)2023-2024學(xué)年統(tǒng)編版語文六年級下冊
- 某住宅小區(qū)工程施工組織設(shè)計范本
- 12 《富起來到強起來》教學(xué)設(shè)計-2023-2024學(xué)年道德與法治五年級下冊統(tǒng)編版
- 27《巨人的花園》教學(xué)設(shè)計-2024-2025學(xué)年統(tǒng)編版語文四年級下冊
- 13 垃圾的分類收集與處理 教學(xué)設(shè)計-2023-2024學(xué)年科學(xué)六年級下冊青島版
- 2《我學(xué)習(xí)我快樂》(教學(xué)設(shè)計 )2024-2025學(xué)年統(tǒng)編版道德與法治三年級上冊
- 10《傳統(tǒng)美德 源遠流長》 第1課時 教學(xué)設(shè)計-2023-2024學(xué)年道德與法治五年級上冊統(tǒng)編版
- 6 有多少浪費本可避免 教學(xué)設(shè)計-2023-2024學(xué)年道德與法治四年級下冊統(tǒng)編版
- 三起科學(xué)六年級上冊第三單元第二課鐵釘生銹了教學(xué)設(shè)計
- 8 美麗文字 民族瑰寶(教學(xué)設(shè)計)2023-2024學(xué)年統(tǒng)編版道德與法治五年級上冊
- 小沈陽《四大才子》歡樂喜劇人臺詞
- 學(xué)生個體差異
- 復(fù)合材料力學(xué)課件
- 合理使用抗菌藥物控制細菌耐藥增長課件
- 機修工基礎(chǔ)培訓(xùn)課件
- 交通安全設(shè)施作業(yè)指導(dǎo)書
- 陜旅版四年級英語下冊最新教案及各單元教材分析
- 萬科培訓(xùn)物業(yè)管理常識及萬科物業(yè)簡介(課件)
- 優(yōu)秀員工榮譽證書模板
- 《鹿角和鹿腿》 完整版課件
- 醫(yī)院實習(xí)生崗前培訓(xùn)課件
評論
0/150
提交評論