??? 單片機(jī)編程語(yǔ)言編寫(xiě)程序,即可使用單片機(jī)C語(yǔ)言編程,也可以使用單片機(jī)匯編語(yǔ)言。C語(yǔ)言編程具有模塊化管理特性、可移植性高,適合編寫(xiě)較大的程序。但作為單片機(jī)高級(jí)程序設(shè)計(jì),許多高級(jí)單片機(jī)ARM、很多新產(chǎn)品的單片機(jī)也是先需要經(jīng)過(guò)匯編語(yǔ)言編譯器之后才有C語(yǔ)言編輯器的。所以學(xué)好單片機(jī)匯編語(yǔ)言也是很重要的編程語(yǔ)言課程。
??? 此外,單片機(jī)有通用型和專(zhuān)用型之分。專(zhuān)用型是廠(chǎng)家為固定程序?qū)iT(mén)開(kāi)發(fā)的一種單片機(jī),其程序在研發(fā)時(shí)已經(jīng)寫(xiě)入,后期不可以修改。通用型單片機(jī)則是我們可以平常自主學(xué)習(xí)與編織程序的單片機(jī),其程序需要自己寫(xiě)入,可以更改。單片機(jī)根據(jù)其基本操作處理位數(shù)不同,還可以分為:1位、4位、8位、16、32位單片機(jī)。
正文:
在此我們主要講解美國(guó)ATMEL公司的89C51單片機(jī)。
一、89C51單片機(jī)PDIP(雙列直插式)封裝引腳圖:
其引腳功能如下:
P0口(p0.0—p0.7):為雙向三態(tài)口,可以作為輸入/輸出口。但在實(shí)際應(yīng)用中通常作為地址/數(shù)據(jù)總線(xiàn)口,即為低8位地址/數(shù)據(jù)總線(xiàn)分時(shí)復(fù)用。低8位地址在ALE信號(hào)的負(fù)跳變鎖存到外部地址鎖存器中,而高8位地址由P2口輸出。
P1口(p1.0—p1.7):其每一位都能作為可編程的輸入或輸出線(xiàn)。
P2口(p2.0—p2.7):每一位也都可作為輸入或輸出線(xiàn)用,當(dāng)擴(kuò)展系統(tǒng)外設(shè)時(shí),可作為擴(kuò)展系統(tǒng)的地址總線(xiàn)高8位,與P0口一起組成16位地址總線(xiàn)。對(duì)89c51單片機(jī)來(lái)說(shuō),P2口一般只作為地址總線(xiàn)使用,而不作為I/O線(xiàn)直接與外設(shè)相連。
P3口(p3.0—p3.7):其為雙功能口,作為第一功能使用時(shí),其功能與P1口相同。當(dāng)作為第二功能使用時(shí),每一位功能如下表所示。
P3口第二功能
?
XTAL1(xtal2):外接晶振一腳,分別接晶振的一端。
Gnd:電源地。
Vcc:電源正級(jí),接+5V。
PROG\ALE:地址鎖存控制端
PSEN:片外程序存儲(chǔ)器讀選通信號(hào)輸出端,低電平有效。
EA\vpp:訪(fǎng)問(wèn)外部程序儲(chǔ)存器控制信號(hào),低電平有效。當(dāng)EA為高電平時(shí)訪(fǎng)問(wèn)片內(nèi)存儲(chǔ)器,若超出范圍則自動(dòng)訪(fǎng)問(wèn)外部程序存儲(chǔ)器。當(dāng)EA為低電平時(shí)只訪(fǎng)問(wèn)外部程序存儲(chǔ)器。
二.? 常用指令及其格式介紹:
1、指令格式:
?? [標(biāo)號(hào):]操作碼 ?[?目的操作數(shù)][,操作源][;注釋]
?? 例如:LOOP:ADD ??A,#0FFH????;(A)←(A)+FFH
2、常用符號(hào):
?? Ri和Rn:R表示工作寄存器,i表示1和0,n表示0~7。
?? rel:相對(duì)地址、地址偏移量,主要用于無(wú)條件相對(duì)短轉(zhuǎn)移指令和條件轉(zhuǎn)移指令。
?? #data:包含于指令中的8位立即數(shù)。
?? #data16:包含于指令中的16位立即數(shù)。
?? addr16:16位目的地址。
?? direct:直接尋址的地址。
?? bit:內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM和特殊功能寄存器SFR中的可直接尋址位地址。
?? @:間接尋址寄存器或基地址寄存器的前綴。
? (X):表示X中的內(nèi)容。
? ((X)):表示由X尋址的單元中的內(nèi)容,也就是(X)作地址,該地址的內(nèi)容用((X))表示。
3、常用偽指令:
?? ORG:規(guī)定目標(biāo)程序段或數(shù)據(jù)塊的起始地址。????格式:ORG+空格+地址 ???例如:ORG ?0000H ?
?? END:結(jié)束指令,放在程序的末尾,單獨(dú)使用,一段程序只用一次。
?? DB(定義字節(jié)):從指定地址單元開(kāi)始,定義若干字節(jié)存儲(chǔ)單元并賦初始值。
4、常用尋址方式:
???直接尋址:?MOV ???A,30H
???立即數(shù)尋址:MOV ???A,#20H
???寄存器間接尋址:MOV ??A,@Ri(i=1,2)
???基址加變址寄存器尋址:MOV ??A,@A+DPTR
???寄存器尋址:MOV ???A,Rn(n=0—7)
5、指令大集合:
傳送類(lèi)指令:
傳送類(lèi)指令:
邏輯操作類(lèi)指令:
控制轉(zhuǎn)移類(lèi)指令:
位操作類(lèi)指令:
三、一般常用程序模式:
1、開(kāi)始程序:ORG ??0000H
?????????????JMP ???0030H
?????????????ORG ??0030H
?????????????…
?????????????…
2、軟件延時(shí)子程序:YANSHI: ?MOV ??R7,#25
????????????????????????D1: ?MOV ??R6,#50
????????????????????????D2: ?MOV ??R5,#200
?????????????????????????????DJNZ ??R5,$
?????????????????????????????DJNZ ??R6,D2
?????????????????????????????DJNZ ??R7,D1
?????????????????????????????RET
若12M晶振則延時(shí)時(shí)長(zhǎng)約為:25×50×200×2×10-6s,若為6M晶振則延時(shí)時(shí)長(zhǎng)為:25×50×200×2×2×10-6s
3、硬件延時(shí)子程序:(1)查詢(xún)方式:
?????????????????????YANSHI: ?MOV ?TMOD,#01H
???????????????????????????????MOV ??R0,#20
????????????????????????UP:????MOV ?TH0,#3CH
???????????????????????????????MOV ?TL0,#0B0H
???????????????????????????????SETB ?TR0
???????????????????????????????JNB ???TF0,$
???????????????????????????????CLR ??TF0
???????????????????????????????DJNZ ?R0,UP
???????????????????????????????RET
此延時(shí)程序?yàn)?0(R0)×50ms,即為一秒,若需要更長(zhǎng)的延時(shí)只需要改變R0的值。
4、一級(jí)中斷程序:外部定時(shí)器0中斷
????????????????????????????????????ORG ??0000H
????????????????????????????????????JMP ???002CH
????????????????????????????????????ORG ??0003H
????????????????????????????????????JMP ???ZHONGDUAN
????????????????????????????????????ORG ??002CH
?????????????????????????????MAIN: ?MOV ??TCON,#01H
????????????????????????????????????MOV ??IP,#01H
????????????????????????????????????MOV ???IE,#81H
????????????????????????????????????…
????????????????????????????????????…
?????????????????????????ZHONGDUAN: PUSH ?A
????????????????????????????????????PUSH ?PSW
????????????????????????????????????SETB ?RS0
????????????????????????????????????CLR ??RS1
????????????????????????????????????…
????????????????????????????????????…
????????????????????????????????????POP ?PSW
????????????????????????????????????POP ?A
????????????????????????????????????RETI
若不需要對(duì)主程序的值進(jìn)行保護(hù)則中斷的子程序只需直接載入中斷主程序需要執(zhí)行的子程序便可。
評(píng)論
查看更多