国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

MCS-51單片機(jī)三種編程方式的探討

2012-04-29 07:59:35李銳,呂瓊
電腦知識(shí)與技術(shù) 2012年20期
關(guān)鍵詞:匯編語言C語言單片機(jī)

李銳,呂瓊

摘要:MCS-51單片機(jī)是目前應(yīng)用最為廣泛的8位單片機(jī),單片機(jī)的編程方式主要有匯編、C語言以及兩者混合三種方式,掌握三種編程方式,在具體應(yīng)用中靈活運(yùn)用是非常重要的,該文通過這三種編程方式對(duì)MCS-51單片機(jī)的應(yīng)用進(jìn)行了詳細(xì)的討論。

關(guān)鍵詞:?jiǎn)纹瑱C(jī);匯編語言;C語言;混合編程

中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2012)20-4994-03

Discuss of Three Methods of Programming for MCS-51 Single Chip Microcomputer

LI Rui,LV Qiong

(College of Physics and Electronic Engineering, Qujing Normal University,Qujing 655011,China)

Abstract: MCS-51 is the most popular in the 8 bit single chip microcomputer at present. Single chip microcomputer are three ways for programming, they are assembly language, C language and complex programming. Used the techniques with great facility is very import. The document discuss the methods in detail.

Key words: single chip microcomputer; assembly language; C language; complex programming

MCS-51系列單片機(jī)是Intel公司的8位單片機(jī),其中DIP封裝的AT89S52單片機(jī)是美國(guó)Atmel公司生產(chǎn)的低電壓、高性能CMOS 8位單片機(jī),其片內(nèi)含有8KB可在線編程的Flash閃速存儲(chǔ)器,芯片采用Atmel公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),與標(biāo)準(zhǔn)的MCS-51單片機(jī)的指令系統(tǒng)及引腳兼容、功能強(qiáng)大,適合于許多較多較為復(fù)雜的控制應(yīng)用場(chǎng)合[1]。目前開發(fā)MCS-51系列單片機(jī)最流行的軟件是美國(guó)Keil Software公司出品的Keil軟件,這是一個(gè)功能強(qiáng)大的集成開發(fā)環(huán)境(μVision)。

1 MCS-51單片機(jī)的三種編程方式

1.1匯編方式

匯編語言是面向機(jī)器的程序設(shè)計(jì)語言,也稱為符號(hào)語言。匯編語言中,用符號(hào)代替機(jī)器語言的二進(jìn)制碼,使之比機(jī)器語言易于讀寫、易于調(diào)試和修改,同時(shí)也具有機(jī)器語言執(zhí)行速度快,占內(nèi)存空間少等優(yōu)點(diǎn),但在編寫復(fù)雜程序時(shí)具有明顯的局限性,匯編語言依賴于具體的機(jī)型,不能通用,也不能在不同機(jī)型之間移植。

1.2 C語言方式

C語言是一種高級(jí)語言,其編寫的程序比用匯編語言更符合人們的思考習(xí)慣,具有良好的模塊化,容易閱讀和維護(hù)等優(yōu)點(diǎn),開發(fā)者可以更專心地考慮算法而不是考慮一些細(xì)節(jié)問題,這樣就減少了開發(fā)和調(diào)試的時(shí)間。同時(shí)C語言不依賴于硬件,這使其具有了很好的移植性[2]。另外,C語言還還有豐富的庫(kù)函數(shù)支持,繪圖能力也比較強(qiáng)。但C語言代碼編譯后的目標(biāo)代碼體積大,意味著存在占用空間多,執(zhí)行速度較慢的問題。

1.3匯編與C語言混合方式

根據(jù)匯編和C語言的特點(diǎn),選擇編程語言的一種折中方式就是匯編和C語言混合編程?;旌暇幊谭绞街饕袃煞N形式,一種是在C語言中嵌入?yún)R編代碼,另一種是匯編和C語言相互調(diào)用函數(shù),實(shí)現(xiàn)方法是通過關(guān)鍵詞進(jìn)行標(biāo)識(shí),如果涉及參數(shù)傳遞,主要是通過R2—R7這幾個(gè)工作寄存器來存取。在應(yīng)用中,通常在對(duì)時(shí)效性要求比較嚴(yán)格的時(shí)候,這部分代碼使用匯編是唯一的選擇,比如時(shí)鐘的中斷計(jì)時(shí)服務(wù)程序等,而其它時(shí)候,使用C語言比較方便。

2三種編程方式的應(yīng)用——經(jīng)典流水燈實(shí)驗(yàn)

2.1匯編方式

ORG 0000H;標(biāo)記程序起始位置

SJMP MAIN;跳轉(zhuǎn)到主程序地址

ORG 000BH;計(jì)時(shí)/計(jì)數(shù)器0的中斷入口地址

AJMP TIMER0;跳轉(zhuǎn)到計(jì)時(shí)中斷服務(wù)程序

ORG 0033H;標(biāo)記主程序起始的絕對(duì)位置MAIN: MOV TMOD,#02H ;設(shè)置為計(jì)時(shí)器工作方式2

MOV TH0,#06H;預(yù)設(shè)溢出的自動(dòng)賦值數(shù)據(jù)MOV TL0,#06H;預(yù)設(shè)一次計(jì)時(shí)的初值

SETB ET0;打開計(jì)時(shí)/計(jì)數(shù)器中斷控制

SETB EA;打開總中斷控制

SETB TR0;開啟計(jì)時(shí)

MOV R1,#00H

MOV R0,#00H

MOV A,#01H;初始化狀態(tài)數(shù)據(jù)LOOP: MOV P0,A;點(diǎn)亮發(fā)光二極管

SJMP LOOP

TIMER0: INC R1;機(jī)器周期計(jì)時(shí)

CJNE R1,#250,EXT ;而方式2使用的是8位字長(zhǎng),因此使用了R0和R1擴(kuò)展

MOV R1,#00H

INC R0

CJNE R0,#32,EXT

MOV R0,#00H

RL A;循環(huán)左移點(diǎn)亮狀態(tài)數(shù)據(jù)

EXT:RETI;中斷返回

END;程序結(jié)束

2.2 C語言方式

unsigned int t=0;//計(jì)時(shí)變量

unsigned char s=0x01;//發(fā)光二極管點(diǎn)亮狀態(tài)數(shù)據(jù)變量void timer0() interrupt 1 using 1{ //中斷函數(shù)申明

t++;//每次中斷,計(jì)時(shí)變量加1

if(t==8000){//需要8000次中斷,時(shí)間才到1秒

s=_crol_(s,1);//點(diǎn)亮狀態(tài)數(shù)據(jù)變?yōu)橄乱粻顟B(tài)

t=0;//到1秒后,賦0重新計(jì)時(shí)

}

}

void main(){

TMOD=0x02;//設(shè)置計(jì)時(shí)/計(jì)數(shù)器的工作方式

TH0=0x06;//自動(dòng)賦值設(shè)置TL0=0x06;//設(shè)置計(jì)時(shí)初值

ET0=1;//打開計(jì)時(shí)中斷控制EA=1;//打開總中斷控制

TR0=1;//開啟計(jì)時(shí)

do{//死循環(huán)等待中斷

P0=s;//點(diǎn)亮發(fā)光二極管

}while(1);

}

2.3匯編和C語言混合方式

2.3.1 C語言中嵌入?yún)R編

實(shí)際應(yīng)用中,如果對(duì)中斷有嚴(yán)格的要求,可以把中斷程序代碼改為匯編,也就是嵌入?yún)R編語言的形式,這種方式實(shí)現(xiàn)比較簡(jiǎn)單,而且C語言下定義的變量也可以直接使用,只不過超過單字節(jié)長(zhǎng)度的變量的算法比較麻煩。

2.3.2 C語言和匯編相互調(diào)用

匯編代碼既可以直接嵌入C語言中,也可以單獨(dú)分離出來,下面的實(shí)例中把中斷函數(shù)單獨(dú)寫為匯編語言,另外,為了方便說明匯編對(duì)C語言的調(diào)用,把邏輯循環(huán)左移函數(shù)重新自定義。在應(yīng)用中,混合編程方式最麻煩就的相互代碼和變量的調(diào)用,在MCS-51系列單片機(jī)中,存在一套規(guī)則,如表1。

2.4編譯時(shí)需注意的問題

1)生成目標(biāo)程序文件

使用Keil編譯,可以生成16進(jìn)制的后綴為.HEX的目標(biāo)程序文件,這個(gè)文件可以直接寫入單片機(jī)運(yùn)行,但Keil默認(rèn)是不生成. HEX文件的,需要進(jìn)行設(shè)置,方法是在選中“Project Workspace”窗口中的“Target 1”,點(diǎn)鼠標(biāo)右鍵,選擇“Options for……”,在“Output”選項(xiàng)下進(jìn)行設(shè)置。

2)編譯混合方式的程序

首先,在Project窗口中的C文件上點(diǎn)鼠標(biāo)右鍵,選擇“Options for……”,使“Generate Assembler SRC File”和“Assemble SRC File”選項(xiàng)變成黑色(有效)狀態(tài);然后,根據(jù)選擇的編譯模式,把相應(yīng)的庫(kù)文件(如Small模式時(shí),是KeilC51LibC51S.Lib)加入工程中,該文件必須作為工程的最后文件;最后進(jìn)行編譯,即可生成目標(biāo)代碼。

3結(jié)束語

以上代碼均通過Keil的編譯,并通過在線編程系統(tǒng)寫入AT89S52單片機(jī)內(nèi)部程序存儲(chǔ)中,使用單片機(jī)最小系統(tǒng)能正常運(yùn)行。三種編程方式在具體的應(yīng)用中是很靈活的,需要根據(jù)其特點(diǎn)和使用者的經(jīng)驗(yàn)來選擇使用。對(duì)于初學(xué)者,熟練掌握前兩種方式是非常必要的,而對(duì)于經(jīng)驗(yàn)豐富的程序員,第三種方式不失為一種高效實(shí)用的方法。

參考文獻(xiàn)

[1]鄧興成,姜寶鈞.單片機(jī)原理與實(shí)踐指導(dǎo)[M].北京:機(jī)械工業(yè)出版社,2009:1.

[2]趙亮,侯國(guó)銳.單片機(jī)C語言編程與實(shí)例[M].北京:人民郵電出版社,2003:1.

[3] Keil Elektronik GmbH. and Keil software. Cx51 Compiler, Users Guide 2001:118-132.

[4] Keil Elektronik GmbH. and Keil software. Macro Assembler and Utilities, Users Guide 2001:99-137.

猜你喜歡
匯編語言C語言單片機(jī)
基于Visual Studio Code的C語言程序設(shè)計(jì)實(shí)踐教學(xué)探索
高等學(xué)校計(jì)算機(jī)專業(yè)課程教學(xué)改革實(shí)踐——以匯編語言與接口技術(shù)課程為例
基于單片機(jī)的SPWM控制逆變器的設(shè)計(jì)與實(shí)現(xiàn)
電子制作(2019年13期)2020-01-14 03:15:28
基于單片機(jī)的層次漸變暖燈的研究
電子制作(2019年15期)2019-08-27 01:12:10
匯編語言與C語言的混合程序設(shè)計(jì)技術(shù)研究
電子制作(2019年10期)2019-06-17 11:45:16
基于單片機(jī)的便捷式LCF測(cè)量?jī)x
電子制作(2019年9期)2019-05-30 09:42:02
基于C語言的計(jì)算機(jī)軟件編程
電子制作(2018年16期)2018-09-26 03:27:08
提高《匯編語言程序設(shè)計(jì)》教學(xué)效率的思考與實(shí)踐
高職高專院校C語言程序設(shè)計(jì)教學(xué)改革探索
論子函數(shù)在C語言數(shù)據(jù)格式輸出中的應(yīng)用
瓦房店市| 友谊县| 锡林郭勒盟| 延安市| 稻城县| 阳谷县| 克拉玛依市| 重庆市| 绥滨县| 丹寨县| 房山区| 明水县| 潼南县| 城固县| 洛川县| 米泉市| 中西区| 鲁甸县| 砚山县| 曲松县| 托克逊县| 黄浦区| 天津市| 伽师县| 新化县| 上虞市| 鄂温| 宁乡县| 调兵山市| 潞西市| 鸡西市| 崇左市| 延吉市| 上蔡县| 民乐县| 明溪县| 潜山县| 茶陵县| 凌云县| 云龙县| 汉中市|