8051單晶片原理與程式設(shè)計(jì)_第1頁(yè)
8051單晶片原理與程式設(shè)計(jì)_第2頁(yè)
8051單晶片原理與程式設(shè)計(jì)_第3頁(yè)
8051單晶片原理與程式設(shè)計(jì)_第4頁(yè)
8051單晶片原理與程式設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩59頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

單晶片原理與程式設(shè)計(jì)

第一章

單晶片微電腦簡(jiǎn)介

第二章

程式與編譯

第三章

8051單晶片程式指令

第四章

暫存器與資料記憶體

第五章

8051基本電路與輸出輸入實(shí)例

第六章

計(jì)時(shí)/計(jì)數(shù)器

第七章

中斷服務(wù)與中斷設(shè)定

第八章

串列埠

第一章單晶片微電腦簡(jiǎn)介1.1 微電腦硬體結(jié)構(gòu) 微電腦硬體結(jié)構(gòu)包含中央處理單元、記憶體單元、輸入單元與輸出單元等四個(gè)主要單元,其結(jié)構(gòu)關(guān)係則如下圖所示。

其中,中央處理單元?jiǎng)t是由運(yùn)算單元與控制單元兩部分所組成的單元,即是一般所通稱的CPU(CenterProcessingUnit),此為微電腦最重要的部分。以下就微電腦中各單元的功能做簡(jiǎn)單介紹:1.運(yùn)算單元(ArithmeticLogicUnit,簡(jiǎn)稱ALU)運(yùn)算單元又稱為算數(shù)邏輯單元,在中央處理單元中可用於執(zhí)行算數(shù)運(yùn)算,(如:加、減、乘、除等),以及邏輯運(yùn)算(如:AND、OR、NOT等),能將記憶體單元或輸入單元送至中央處理單元的資料執(zhí)行各種運(yùn)算。當(dāng)運(yùn)算完成後再由控制單元將結(jié)果資料送至記憶體單元或輸出單元。2.控制單元(ControlUnit,簡(jiǎn)稱CU)此單元在中央處理單元中,負(fù)責(zé)協(xié)調(diào)與指揮各單元間的資料傳送與運(yùn)作,使得微電腦可依照指令的要求完成工作。在執(zhí)行一個(gè)指令時(shí),控制單元先予以解碼(Decode),瞭解指令的動(dòng)作意義後再執(zhí)行(Execute)該指令,因此控制單元將指令逐一執(zhí)行,直到做完整個(gè)程式的所有指令為止。3.輸入單元(InputUnit,簡(jiǎn)稱IU)此單元是用以將外部的資訊傳送到CPU做運(yùn)算處理或存入記憶體單元,一般在為電腦的輸入單元有鍵盤(pán)、磁碟機(jī)、光碟機(jī)、滑鼠、光筆、掃描器或讀卡機(jī)等週邊設(shè)備。4.輸出單元(OutputUnit,簡(jiǎn)稱OU)此單元是用以將CPU處理過(guò)的資料輸出或儲(chǔ)存?zhèn)魉屯獠窟L邊設(shè)備,一般在為電腦的輸出單元有顯示器、印表機(jī)、繪圖機(jī)、燒錄機(jī)或磁碟機(jī)等週邊設(shè)備。5.記憶體單元(MemoryUnit,簡(jiǎn)稱MU)記憶體單元是用來(lái)儲(chǔ)存輸入單元傳送來(lái)的資料,或儲(chǔ)存經(jīng)過(guò)中央處理單元處理完成的資料。記憶體單元之記憶體可分為主記憶體(MainMemory)與輔助記憶體(AuxiliaryMemory)兩種,而主記憶體依存取方式不同,又可分為唯讀記憶體(ReadOnlyMemory,簡(jiǎn)稱ROM)與隨機(jī)存取記憶體(RandomAccessMemory,簡(jiǎn)稱RAM)。ROM所儲(chǔ)存的資料,在微電腦中只能被讀出但不能被寫(xiě)入,也不會(huì)因?yàn)殛P(guān)機(jī)斷電而使資料流失;至於RAM在微電腦中,則可被讀出或?qū)懭胭Y料,但在關(guān)機(jī)斷電後儲(chǔ)存於RAM中的資料將會(huì)流失。輔助記憶體則是指磁片、硬碟或磁帶等週邊硬體,一般亦為輸出入單元,主要用來(lái)彌補(bǔ)主記憶體的不足,其容量可無(wú)限制擴(kuò)充。1-28051單片的內(nèi)部結(jié)構(gòu):8051為Intel公司所推出的MCS-51系列產(chǎn)品之一,其內(nèi)部結(jié)構(gòu)如下:

8051單片具有以下之特性:1.

專為控制使用所設(shè)計(jì)的8位元單晶片。2.

具有位元邏輯運(yùn)算能力。3.

具有128位元的RAM,以及4K位元的ROM。4.

具有4個(gè)8位元I/O埠。5.

具有2個(gè)16位元的計(jì)時(shí)/計(jì)數(shù)器。6.

具有全雙工的UART。7.

具有5個(gè)中斷源及兩層中斷優(yōu)先權(quán)結(jié)構(gòu)。8.

具有時(shí)脈產(chǎn)生電路。

具有外部電路擴(kuò)充64位元程式記憶體的能力。1-38051單晶片的接腳:8051為40支接腳之單晶片,其接腳圖與功能說(shuō)明如下:1.

Vcc:+5電源供應(yīng)接腳。2.

GND:接地接腳。

3.P0.0~P0.7:埠0,為開(kāi)洩極(OpenDrain)雙向I/O埠。在做為外部擴(kuò)充記憶體時(shí),可低八位元位址線

(A0~A7addressline)與資料匯流排(databus)雙重功能。在做為一般I/O埠時(shí)必須加上如下之外部提升電路。4.

P1.0~P1.7:埠1,為具有內(nèi)部提升電路的雙向I/O埠。5.

P2.0~P2.7:埠2,為具有內(nèi)部提升電路的雙向I/O埠。在做為外部擴(kuò)充記憶體時(shí),可為高八位元位址線(A8~A15addressline)。6.

P3.0~P3.7:埠3,為具有內(nèi)部提升電路的雙向I/O埠。此外,埠3的每支接腳都具有另一特殊功能,其功能如下:RXD(P3.0):串列傳輸?shù)慕邮斩恕XD(P3.1):串列傳輸?shù)妮敵龆恕?P3.2):外部中斷輸入端。(P3.3):外部中斷輸入端。T0(P3.4):計(jì)時(shí)/計(jì)數(shù)器外部輸入端。T1(P3.5):計(jì)時(shí)/計(jì)數(shù)器外部輸入端。(P3.6):外部資料記憶體寫(xiě)入激發(fā)信號(hào)(Strobe)。(P3.7):外部資料記憶體讀取激發(fā)信號(hào)(Strobe)。7.

RST:重置信號(hào)(Reset)輸入端。在單晶片工作時(shí),將此腳保持在“Hi”兩個(gè)機(jī)械週期,CPU將重置。8.

ALE:位址鎖住致能(AddressLatchEnable),在每個(gè)機(jī)械週期都會(huì)出現(xiàn),可做為外部電路的時(shí)脈源。9.

:程式激發(fā)致能(ProgramStrobeEnable),可輸入外部程式記憶體的讀取信號(hào)。10.

:外部存取致能(ExternalAccessEnable),當(dāng)EA接腳為“L0”時(shí),則讀取外部程式記憶體執(zhí)行。11.

XTAL1:反相振盪放大器的輸入端。

12.XTAL2:反相振盪放大器的輸出端。其基本電路連接如下:基本電路圖12MHz8051XTAL1XTAL2RST193118912MHz8051XTAL1XTAL2RST1931189

第二章

程式與編譯§2-1程式編寫(xiě)流程8051單晶片應(yīng)用於控制上時(shí),整體系統(tǒng)的設(shè)計(jì)包括軟體程式及硬體電路兩方面。硬體電路設(shè)計(jì)是依受控系統(tǒng)之不同而異,雖然有時(shí)候系統(tǒng)的某些功能可以採(cǎi)用軟體或硬體來(lái)完成,但在考量硬體成本及8051單晶片運(yùn)算能力所及程度,以軟體程式來(lái)完成為較佳方法。對(duì)於8051單晶片之編譯流程如下:

編譯流程圖

§2-28051組合語(yǔ)言程式的格式8051組合語(yǔ)言程式是由一列一列的敘述(statement)所組成,而程式的執(zhí)行則須先經(jīng)8051組譯器編譯後,並經(jīng)燒錄器燒錄至8051單晶片中方可執(zhí)行。而8051組合語(yǔ)言的格式則是由4個(gè)欄位所構(gòu)成,其格式如下:〔Label〕〔Mnemonic〕〔Operand〕〔Comment〕標(biāo)記欄

指令欄

運(yùn)算元欄註解欄1.

標(biāo)記欄(Label)標(biāo)記的功用是用以替代繁複的記憶體位址計(jì)算,以方便程式的編寫(xiě)、分析與維護(hù)。標(biāo)記的編寫(xiě)必須從文書(shū)編輯軟體的第一格開(kāi)始,標(biāo)記可以由英文字母、阿拉伯?dāng)?shù)字、問(wèn)號(hào)及底線字元組合而成,長(zhǎng)度最多可以達(dá)32個(gè)位元,最後必須以冒號(hào)來(lái)結(jié)束。2.

指令欄(Mnemonic)指令可分為兩種,一種是8051單片指令,另一種則是編譯程式的虛指令,用以通知編譯器對(duì)程式作某些特定的處理。如果一列指令開(kāi)頭沒(méi)有標(biāo)記時(shí),則指令前必須保留一個(gè)以上的空格。3.

運(yùn)算元欄(Operand)運(yùn)算元依指令決定需要與否,且其需要長(zhǎng)度亦依指令而異。4.

註解欄(Comment)

註解欄是以分號(hào)起頭的一段說(shuō)明文字,直到該行結(jié)束??商峁┏淌皆O(shè)計(jì)師註解說(shuō)明。

第三章

8051單晶片程式指令8051單晶片程式指令依其功能,可分為以下5類:1.

算術(shù)指令2.

邏輯指令3.

資料轉(zhuǎn)移指令4.

布林(Boolean)運(yùn)算指令5.

程式跳躍指令以下就上列指令;分別說(shuō)明每個(gè)指令動(dòng)作、佔(zhàn)用的位元數(shù)及執(zhí)行時(shí)間週期:指令表

指令符號(hào)定義符號(hào)說(shuō)明Rn所選擇暫存器庫(kù)中之R0~R7,n=0~7。direct直接定址位址。@Ri間接定址位址,i=0或1。#data8位元資料常數(shù)。#data1616位元資料常數(shù)。addr1111位元位址常數(shù),使用於ACALL及AJMP指令。addr1616位元位址常數(shù),使用於LCALL及LJMP指令。rel8位元偏移位址常數(shù),使用於SJMP及相對(duì)跳躍指令中。bit位元定址位址?!杂曳劫Y料取代左方資料。(X)將X內(nèi)容取出。((X))以X內(nèi)容為位址,以間接定址方式取出資料。rrrn之2進(jìn)制值。如n=6,rrr=110。符號(hào)定義算數(shù)運(yùn)算指令指令說(shuō)明位元組機(jī)械週期ADDA,Rn將暫存器內(nèi)容加入A累加器11ADDA,direct將直接位址內(nèi)容加入A累加器21ADDA,@Ri將間接位址內(nèi)容加入A累加器11ADDA,#data將8位元常數(shù)資料加入A累加器21ADDCA,Rn將暫存器與進(jìn)位CF加入A累加器11ADDCA,direct直接位址內(nèi)容與進(jìn)位CF加入累加器21ADDCA,@Ri間接位址內(nèi)容與進(jìn)位CF加入累加器11ADDCA,#data將8位元常數(shù)資料與進(jìn)位加入累加器21SUBBA,RnA累加器內(nèi)容減暫存器與借位CF11SUBBA,directA累加器內(nèi)容減直接位址內(nèi)容與借位21SUBBA,@RiA累加器內(nèi)容減間接位址內(nèi)容與借位11SUBBA,#data累加器內(nèi)容減8位元常數(shù)資料與借位21INCAA累加器內(nèi)容加111INCRn暫存器內(nèi)容加111INCdirect直接位址內(nèi)容加121INC@Ri間接位址內(nèi)容加111INCDPTR資料指標(biāo)DPTR內(nèi)容加112DECAA累加器內(nèi)容減111DECRn暫存器內(nèi)容減111DECdirect直接位址內(nèi)容減121DEC@Ri間接位址內(nèi)容減111MULABA累加器乘以暫存器B,相乘結(jié)果之高8位元存入B,低8位元存入A14DIVABA累加器除以暫存器B,相除結(jié)果之商存入A,餘數(shù)存入B14DAAA累加器內(nèi)容調(diào)整成10進(jìn)制BCD數(shù)11算數(shù)運(yùn)算指令

邏輯運(yùn)算指令指令說(shuō)明位元組機(jī)械週期ANLA,Rn暫存器AND至A累加器內(nèi)11ANLA,direct直接位址內(nèi)容AND至A累加器內(nèi)21ANLA,@Ri間接位址內(nèi)容AND至A累加器內(nèi)11ANLA,#data8位元資料AND至A累加器內(nèi)21ANLdirect,AA累加器內(nèi)容AND至直接位址內(nèi)21ANLdirect,#data8位元資料AND至直接位址內(nèi)32ORLA,Rn暫存器OR至A累加器內(nèi)11ORLA,direct直接位址內(nèi)容OR至A累加器內(nèi)21ORLA,@Ri間接位址內(nèi)容OR至A累加器內(nèi)11ORLA,#data8位元資料OR至A累加器內(nèi)21ORLdirect,AA累加器內(nèi)容OR至直接位址內(nèi)21ORLdirect,#data8位元資料OR至直接位址內(nèi)32XRLA,Rn暫存器XOR至A累加器內(nèi)11XRLA,direct直接位址內(nèi)容XOR至A累加器內(nèi)21XRLA,@Ri間接位址內(nèi)容XOR至A累加器內(nèi)11XRLA,#data8位元資料XOR至A累加器內(nèi)21XRLdirect,AA累加器內(nèi)容XOR至直接位址內(nèi)21XRLdirect,#data8位元資料XOR至直接位址內(nèi)32CLRA清除A累加器11CPLAA累加器內(nèi)容取補(bǔ)數(shù)11RLAA累加器內(nèi)容向左旋轉(zhuǎn)1位元11RLCAA累加器與進(jìn)位CF一起左旋1位元11RRAA累加器內(nèi)容向右旋轉(zhuǎn)1位元11RRCAA累加器與進(jìn)位CF一起右旋1位元11SWAPAA累加器的高低4位元互相交換11邏輯運(yùn)算指令

資料轉(zhuǎn)移指令指令說(shuō)明位元組機(jī)械週期MOVA,Rn將暫存器內(nèi)容移入A累加器11MOVA,direct將直接位址內(nèi)容移入A累加器21MOVA,@Ri暫存器間接位址內(nèi)容移入A累加器11MOVA,#data將8位元常數(shù)資料移入A累加器21MOVRn,A將A累加器內(nèi)容移入暫存器11MOVRn,direct將直接位址內(nèi)容移入暫存器22MOVRn,#data將8位元常數(shù)資料移入暫存器21MOVdirect,A將A累加器內(nèi)容移入直接位址內(nèi)21MOVdirect,Rn將暫存器內(nèi)容移入直接位址內(nèi)22MOVdirect,direct將直接位址內(nèi)容移入直接位址內(nèi)32MOVdirect,@Ri暫存器間接定址內(nèi)容移入直接位址內(nèi)22MOVdirect,#data將8位元常數(shù)資料移入直接位址內(nèi)32MOV@Ri,A將A累加器內(nèi)容移入間接位址內(nèi)11MOV@Ri,direct將直接位址內(nèi)容移入間接位址內(nèi)22MOV@Ri,#data將8位元常數(shù)資料移入間接位址內(nèi)21MOVDPTR,#data16將16位元常數(shù)資料移入資料指標(biāo)內(nèi)32MOVCA,@A+DPTR將程式記憶體內(nèi)容移入A累加器內(nèi)12MOVCA,@A+PC將程式記憶體內(nèi)容移入A累加器內(nèi)12MOVXA,@Ri將外部資料記憶體內(nèi)容移入A累加器12MOVXA,@DPTR將外部資料記憶體內(nèi)容移入A累加器12MOVX@Ri,A將A累加器內(nèi)容移入外部資料記憶體12MOVX@DPTR,A將A累加器內(nèi)容移入外部資料記憶體12PUSHdirect將直接位址內(nèi)容存入堆疊內(nèi)22POPdirect自堆疊頂端取出資料存入直接位址內(nèi)22XCHA,RnA累加器內(nèi)容與暫存器內(nèi)容互換11XCHA,directA累加器內(nèi)容與直接位址內(nèi)容互換21XCHA,@RiA累加器內(nèi)容與間接位址內(nèi)容互換11XCHDA,@Ri累加器與間接位址低4位元內(nèi)容互換11資料轉(zhuǎn)移指令布林運(yùn)算指令指令說(shuō)明位元組機(jī)械週期CLRC清除進(jìn)位旗標(biāo)CF=011CLRbit清除位元位址內(nèi)容21SETBC設(shè)定進(jìn)位旗標(biāo)CF=111SETBbit設(shè)定位元位址內(nèi)容21CPLC將進(jìn)位旗標(biāo)CF內(nèi)容取補(bǔ)數(shù)11CPLbit將位元位址內(nèi)容取補(bǔ)數(shù)21ANLC,bit將位元位址內(nèi)容AND至CF內(nèi)21ANLC,/bit將位元位址內(nèi)容取補(bǔ)數(shù)AND至CF內(nèi)22ORLC,bit將位元位址內(nèi)容OR至CF內(nèi)22ORLC,/bit將位元位址內(nèi)容取補(bǔ)數(shù)OR至CF內(nèi)22MOVC,bit將位元位址內(nèi)容移入進(jìn)位旗標(biāo)CF內(nèi)21MOVbit,C將進(jìn)位旗標(biāo)CF移入位元位址內(nèi)22JCrel若CF=1,則跳至相對(duì)位址rel22JNCrel若CF=0,則跳至相對(duì)位址rel22JBbit,rel若(bit)=1,則跳至相對(duì)位址rel32JNBbit,rel若(bit)=0,則跳至相對(duì)位址rel32JBCbit,rel若(bit)=1,則跳至相對(duì)位址rel,同時(shí)清除位元位址bit內(nèi)容32布林運(yùn)算指令程式分支指令指令說(shuō)明位元組機(jī)械週期ACALLaddrl1副程式呼叫(可定址2KB範(fàn)圍)22ACALLaddrl6副程式呼叫(可定址64KB範(fàn)圍)32RET自副程式返回主程式12RETI自中斷副程式返回主程式12AJMPaddrl1絕對(duì)跳躍(2KB範(fàn)圍)32LJMPaddrl6遠(yuǎn)程跳躍(64KB範(fàn)圍)32SJMPrel相對(duì)跳躍(-128byte~+127byte)22JMP@A+DPTR間接跳躍(64KB範(fàn)圍)12JZrel若A=0,則跳至rel位址範(fàn)圍-128byte~+127byte22JNZrel若A≠0,則跳至rel位址範(fàn)圍-128byte~+127byte22CJNEA,direct,rel若A累加器與直接位址內(nèi)容不相等,則跳至rel位址範(fàn)圍-128byte~+127byte32CJNEA,#data,rel若A≠data,則跳至rel位址,範(fàn)圍-128byte~+127byte32CJNERn,#data,rel若暫存器內(nèi)容≠data,則跳至rel位址範(fàn)圍-128byte~+127byte32CJNE@Ri,#data,rel若間接位址內(nèi)容≠data,則跳至rel位址,範(fàn)圍-128byte~+127byte32DJNZRn,rel暫存器內(nèi)容減1,若不等於0,則跳至rel位址22DJNZdirect,rel直接位址內(nèi)容減1,若不等於0,則跳至rel位址32NOP無(wú)動(dòng)作11程式分支指令資料表示形式:以資料的轉(zhuǎn)移為例,來(lái)說(shuō)明直接資料、直接定址位址、間接定址位址的差異:1.

假設(shè)Acc的值為0,執(zhí)行直接資料轉(zhuǎn)移。Mov A #FFH;十六進(jìn)制值表示法(或 Mov A #255);十進(jìn)制值表示法則Acc的值變?yōu)?552.

假設(shè)Acc的值為0,執(zhí)行直接定址位址之資料轉(zhuǎn)移。Mov A #40H(或 Mov A #64)則Acc的值變?yōu)?553.

假設(shè)Acc的值為0,且記憶體位址40H的內(nèi)容FFH與暫存器R0的內(nèi)容為40H。Mov A @R0則Acc的值變?yōu)?55以上三種資料轉(zhuǎn)移方式都會(huì)使Acc變?yōu)?55以圖示來(lái)說(shuō)明其差異:直接資料

AccFFH(或255)Acc間接定址位址

(暫存器)(內(nèi)容)R0:40H(位址)(內(nèi)容)40H:FFH直接定址定址

Acc(位址)(內(nèi)容)40H:FFH

第四章暫存器與資料記憶體§4-1累加器累加器(Accumulator)一般以A或Acc簡(jiǎn)稱,是使用頻率最高的暫存器,許多算數(shù)運(yùn)算、邏輯運(yùn)算及資料搬移等工作,都需要藉由累加器來(lái)完成。

§4-2工作暫存器在8051中共有8個(gè)8位元(bits)工作暫存器,分別為0、1、2、3、4、5、6及7。這些工作暫存器可用以輔助累加器在運(yùn)算上的不足,如儲(chǔ)存即將被處理的資料,或已完成的結(jié)果及迴圈數(shù)值控制等。由於在撰寫(xiě)較複雜程式尤其是呼叫副程式時(shí),為了避免工作暫存器之內(nèi)容遭到破壞,在8051中提供四個(gè)暫存器庫(kù),分別為RB、RB1、RB及RB3,每一個(gè)暫存器庫(kù)均有個(gè)8位元工作暫存器,並可經(jīng)由工作暫存器0~7來(lái)存取,但程式執(zhí)行中只能選擇四個(gè)暫存器庫(kù)中的一個(gè)暫存器來(lái)使用,而其選擇方法則可透過(guò)設(shè)定RS1與RS0此兩位元來(lái)選擇:

RS1RS0暫存器庫(kù)位址

00RB000H~07H

01RB108H~0FH

10RB210H~17H

11RB318H~1FH

當(dāng)8051選擇使用RB0時(shí),程式中存取R0~R7暫存器的值,實(shí)際上是在存取資料記憶體位址00H~07H的內(nèi)容;而使用RB1時(shí),程式中存取R0~R7暫存器的值,實(shí)際上是在存取資料記憶體位址08H~0FH的內(nèi)容;而使用RB2時(shí),程式中存取R0~R7暫存器的值,實(shí)際上是在存取資料記憶體位址10H~17H的內(nèi)容;而使用RB3時(shí),程式中存取R0~R7暫存器的值,實(shí)際上是在存取資料記憶體位址18H~1FH的內(nèi)容。所以在複雜程式中,主程式與副程式可分配使用不同暫存器庫(kù),即可避免暫存器的值被破壞?!?-3輸出/輸入埠暫存器8051具有4個(gè)8位元(bits)的輸出輸入埠,經(jīng)由這四個(gè)輸出輸入埠與外界進(jìn)行資料交換因此在8051內(nèi)部用個(gè)暫存器來(lái)記錄輸出/輸入接腳的狀態(tài),分別為資料記憶體80H、90H、A0H、B0H等四個(gè)位元組(byte),並一輸出/輸入埠分別命名為P0、P1、P2及P3。當(dāng)軟體程式對(duì)輸出輸入埠P0~3作輸出/輸入的動(dòng)作,即是對(duì)80H、90H、A0H及B0H等四個(gè)位元組作寫(xiě)入/讀出的動(dòng)作?!?-4資料記憶體8051的記憶體可分為兩大部份,一是程式記憶體,即是使用者撰寫(xiě)軟體程式的存放記憶體區(qū)塊;另一是資料記憶體,是用以存放程式執(zhí)行結(jié)果所使用的記憶體。而在8051中暫存器與資料記憶體則是結(jié)合在一起,均存放在資料記憶體中,及結(jié)構(gòu)如下圖所示:SFR的內(nèi)部結(jié)構(gòu)F8

FFF0B

F7E8

EFE0ACC

E7D8

DFD0PSW

D7C8

CFC0

C7B8IP

BFB0P3

B7A8IE

AFA0P2

A798SCONSBUF

9F90P1

9788TCONTMODTLOTL1TH0TH1

8F80P0SPDPL

PCON87此行記憶體位元組可做位元定址。在SFR內(nèi)部結(jié)構(gòu)圖中可以發(fā)現(xiàn)累加器Acc、四個(gè)輸出/輸入暫存器0、1、2及P3。其他暫存器的功能簡(jiǎn)介如下:B:用於乘、除法中所使用到之暫存器。PSW(ProgramStatusWord):程式狀態(tài)字元暫存器。IP(InterruptPriorityRegister):中斷優(yōu)先暫存器。IE(InterruptEnableRegister):中斷致能暫存器。SCON(SerialPortControlRegister):串列埠控制暫存器。SBUF(SerialPortBuffer):串列埠資料緩衝器。TCON(Timer/CounterControlRegister):計(jì)時(shí)/計(jì)數(shù)控制暫存器。TMOD(Timer/CounterModeControlRegister):計(jì)時(shí)/計(jì)數(shù)模式控制暫存器。TL0:Timer016位元計(jì)時(shí)/計(jì)數(shù)直之低8位元TL1:Timer116位元計(jì)時(shí)/計(jì)數(shù)直之低8位元TH0:Timer016位元計(jì)時(shí)/計(jì)數(shù)直之高8位元TH1:Timer116位元計(jì)時(shí)/計(jì)數(shù)直之高8位元SP(StackPointer):堆疊指標(biāo)暫存器。DPL:DPTR(DataPointer)資料指標(biāo)暫存器16位元值之低8位元值DPH:DPTR(DataPointer)資料指標(biāo)暫存器16位元值之高8位元值PCON(PowerControlRegister):電源控制暫存器。SFR內(nèi)各暫存器的值在8051重置(Reset)後,會(huì)自動(dòng)設(shè)如下:暫存器二進(jìn)位表示值*Acc00000000*B00000000*PSW00000000SP00000111DPTRDPHDPL

0000000000000000*P011111111*P111111111*P211111111*P311111111IPXXXX0000IE0XX00000TMOD00000000*TCOM00000000TH000000000TL000000000TH100000000TL100000000*SCON00000000SBUFXXXXXXXXPCONHMOS0XXXXXXXCHMOS0XXX0000X:未定*:可位元定址另外在資料記憶體中,亦可以位元定址00H~7共248個(gè)位元位址,其在記憶中之位址如下圖:F0H

F7F6F5F4F3F2F1F0BE0H

E7E6E5E4E3E2E1E0AccD0H

CYD7ACD6F0D5RS1D4RS0D30VD2D1PD0PSWB8H

---PSBCPT1BBPX1BAPT0B9PX0B8IPB0H

B7B6B5B4B3B2B1B0P3A8H

AF--ESACET1ABEX1AAET0A9EX0A8IEA0H

A7A6A5A4A3A2A1A0P298H

SM09FSM19ESM29DREN9CTB89BRB89ATI99RI98SCON90H

9796959493929190P188H

TF18FTR18ETF08DTR08CIE18BIT18AIE089IT088TCON80H

8786858483828180P07FH∫30H一般資料存放區(qū)或堆疊區(qū)

2FH

7F7E7D7C7B7A7978

2EH

|

|

2DH

|

|

2CH

|

|

2BH

|

|

2AH

|

|

29H

|

|

28H

|

|

27H

|

|

26H

|

|

25H

2F------28

24H

27------20

23H

1F1E1D1C1B1A1918

22H

17------10

21H

0F------08

20H

0706050403020100

RB3

RB2

RB1

RB0

在上圖表中,最左側(cè)為可位元定址記憶體的位址;中間數(shù)字代表可畏原定址的位元位址,其中位元位址上之文字即為該位元的名稱;最右側(cè)為暫存器的名稱。在位原定址使用上,8051提供具彈性的使用方法,例如:1.

將位址20H的第0Bit設(shè)定為1,可以寫(xiě)成下面兩種方式:SETP00H;位元定址SETB20H.0;第20H位元組的第0位元2.

將P0的第3Bit清除為0,可以寫(xiě)成下面三種方式:CLR83H;位元位址CLR80H.3;第80H位元組的第3位元CLRP0.3;P0暫存暫存器的第3位元3.

將IT0位元的值反相,可以寫(xiě)成下面四種方式:CPL88H;位元位址CPL88H.0;第88位元組的第0位元CPLIT0;位元名稱CPLTCON.0;TCON暫存器的第0位元

第五章8051基本電路與輸出輸入實(shí)例§5-1基本電路8051單晶片是同步式的順序邏輯系統(tǒng),整個(gè)系統(tǒng)的工作完全是依賴系統(tǒng)內(nèi)部的時(shí)脈信號(hào),用以來(lái)產(chǎn)生各種動(dòng)作週期及同步信號(hào)。在8051單晶片中已內(nèi)建時(shí)脈產(chǎn)生器,在使用時(shí)只需接上石英振盪晶體及電容就可以讓系統(tǒng)產(chǎn)生正確的時(shí)脈信號(hào)。為方便說(shuō)明及應(yīng)用,對(duì)於往後章節(jié)中之實(shí)例均利用下列之基本硬體時(shí)脈振盪電路?;居搀w時(shí)脈振盪電路圖§5-2資料的輸出實(shí)例下圖是本例的電路圖:電路圖程式1:以邏輯旋轉(zhuǎn)指令,輸出P0到P3之走馬燈。;

;

本程式以P0到P3為輸出

程式下載

;

;

應(yīng)用指令:

;

旋轉(zhuǎn)指令RL

;

互斥或指令XRL

;

包括進(jìn)位旗標(biāo)之右旋轉(zhuǎn)指令RLC

;

邏輯相反指令CPL

;

;

動(dòng)作:當(dāng)LED全亮?xí)r則逐點(diǎn)暗掉,當(dāng)LED全暗時(shí)則逐點(diǎn)亮起

;

說(shuō)明:暫存器R0用以控制P0到P3為全亮或全暗,R1用以控制目前掃描的位置

;

ORG00H

JMPSTART

;規(guī)避00H至2FH間之中斷向量執(zhí)行位址

ORG30H

;

MOVSP,#30H

;將堆疊指標(biāo)重新指向

MOVA,#00H

MOVP3,A

;輸出資料至埠3

CALLDELAY

MOVP2,A

;輸出資料至埠2

CALLDELAY

MOVP1,A

;輸出資料至埠1

CALLDELAY

MOVP0,A

;輸出資料至埠0

CALLDELAY

START:

MOVA,#01H

RT0:

MOVR1,A

XRLA,P0

;與埠0執(zhí)行互斥或

MOVP0,A

;輸出資料至埠0

CALLDELAY

;呼叫0.2秒延遲副程式

MOVA,R1

CLRC

;清除進(jìn)位旗標(biāo)

RLCA

;與進(jìn)位旗標(biāo)一起向左旋轉(zhuǎn)

JNCRT0

;若進(jìn)位旗標(biāo)不為0則跳回再次執(zhí)行

MOVA,#01H

RT1:

MOVR1,A

XRLA,P1

;與埠1執(zhí)行互斥或

MOVP1,A

;輸出資料至埠1

CALLDELAY

;呼叫0.2秒延遲副程式

MOVA,R1

CLRC

;清除進(jìn)位旗標(biāo)

RLCA

;與進(jìn)位旗標(biāo)一起向左旋轉(zhuǎn)

JNCRT1

;若進(jìn)位旗標(biāo)不為0則跳回再次執(zhí)行

MOVA,#01H

RT2:

MOVR1,A

XRLA,P2

;與埠2執(zhí)行互斥或

MOVP2,A

;輸出資料至埠2

CALLDELAY

;呼叫0.2秒延遲副程式

MOVA,R1

CLRC

;清除進(jìn)位旗標(biāo)

RLCA

;與進(jìn)位旗標(biāo)一起向左旋轉(zhuǎn)

JNCRT2

;若進(jìn)位旗標(biāo)不為0則跳回再次執(zhí)行

MOVA,#01H

RT3:

MOVR1,A

XRLA,P3

;與埠3執(zhí)行互斥或

MOVP3,A

;輸出資料至埠3

CALLDELAY

;呼叫0.2秒延遲副程式

MOVA,R1

CLRC

;清除進(jìn)位旗標(biāo)

RLCA

;與進(jìn)位旗標(biāo)一起向左旋轉(zhuǎn)

JNCRT3

;若進(jìn)位旗標(biāo)不為0則跳回再次執(zhí)行

JMPSTART

DELAY:

MOVR5,#10

;延遲時(shí)間約為R5*20mS

D1:

MOVR6,#40

D2:

MOVR7,#249

DJNZR7,$

DJNZR6,D2

DJNZR5,D1

RET

END程式2:以查表法,輸出P0到P3之走馬燈。;

;

本程式以P0到P3為輸出(查表法運(yùn)用)

程式下載

;

;

應(yīng)用指令:

;

BD虛指令用以定義資料

;

間接資料指標(biāo)暫存器DPTR之設(shè)定與索引定指法應(yīng)用

;

比較是否相等指令CJNE,若不等則跳躍

;

暫存器累加1指令

;

;

動(dòng)作:LED逐一亮起後再逐一滅掉

;

說(shuō)明:利用間接資料指標(biāo)暫存器DPTR讀取資料庫(kù)之資料並顯示在各輸出埠上

;

ORG00H

JMP

START

;規(guī)避00H至2FH間之中斷向量執(zhí)行位址

ORG

30H

;

MOV

SP,#30H

;將堆疊指標(biāo)重新指向

START:

MOV

A,#00

MOV

P3,A

;輸出資料至埠3

CALL

DELAY

;呼叫0.2秒延遲副程式

MOV

P2,A

;輸出資料至埠2

CALL

DELAY

;呼叫0.2秒延遲副程式

MOV

P1,A

;輸出資料至埠1

CALL

DELAY

;呼叫0.2秒延遲副程式

MOV

P0,A

;輸出資料至埠0

CALL

DELAY

;呼叫0.2秒延遲副程式

LOOP:

MOV

DPTR,#DAT

;載入資料DAT之位址至資料指標(biāo)暫存器DPTR中

RT0:

MOV

A,#0

MOVC

A,@A+DPTR

;載入DPTR所指位址之資料至累積器A中

MOV

P0,A

;輸出資料至埠0

CALL

DELAY

;呼叫0.2秒延遲副程式

INC

DPTR

;將DPTR加1,即用於指向下一筆資料

CJNE

A,#FFH,RT0

;比較A是否為值FFH,若否則跳回RT0重新執(zhí)行

RT1:

MOV

A,#0

MOVC

A,@A+DPTR

;載入DPTR所指位址之資料至累積器A中

MOV

P1,A

CALL

DELAY

INC

DPTR

CJNE

A,#FFH,RT1

RT2:

MOV

A,#0

MOVC

A,@A+DPTR

;載入DPTR所指位址之資料至累積器A中

MOV

P2,A

CALL

DELAY

INC

DPTR

CJNE

A,#FFH,RT2

RT3:

MOV

A,#0

MOVC

A,@A+DPTR

;載入DPTR所指位址之資料至累積器A中

MOV

P3,A

CALL

DELAY

INC

DPTR

CJNE

A,#FFH,RT3

RT4:

MOV

A,#0

MOVC

A,@A+DPTR

;載入DPTR所指位址之資料至累積器A中

MOV

P3,A

;輸出資料至埠3

CALL

DELAY

;呼叫0.2秒延遲副程式

INC

DPTR

;將DPTR加1,即用於指向下一筆資料

CJNE

A,#0,RT4

;比較A是否為值0,若否則跳回RT4重新執(zhí)行

RT5:

MOV

A,#0

MOVC

A,@A+DPTR;載入DPTR所指位址之資料至累積器A中

MOV

P2,A

CALL

DELAY

INC

DPTR

CJNE

A,#0,RT5

RT6:

MOV

A,#0

MOVCA,@A+DPTR;載入DPTR所指位址之資料至累積器A中

MOV

P1,A

CALL

DELAY

INC

DPTR

CJNE

A,#0,RT6

RT7:

MOV

A,#0

MOVC

A,@A+DPTR;載入DPTR所指位址之資料至累積器A中

MOV

P0,A

CALL

DELAY

INC

DPTR

CJNE

A,#0,RT7

JMP

LOOP

DELAY:MOV

R5,#10

D1:

MOV

R6,#40

D2:

MOV

R7,#249

DJNZ

R7,$

DJNZ

R6,D2

DJNZ

R5,D1

RET

DAT:

DB

01H,03H,07H,0FH,1FH,3FH,7FH,FFH

DB

01H,03H,07H,0FH,1FH,3FH,7FH,FFH

DB

01H,03H,07H,0FH,1FH,3FH,7FH,FFH

DB

01H,03H,07H,0FH,1FH,3FH,7FH,FFH

DB

7FH,3FH,1FH,0FH,07H,03H,01H,00H

DB

7FH,3FH,1FH,0FH,07H,03H,01H,00H

DB

7FH,3FH,1FH,0FH,07H,03H,01H,00H

DB

7FH,3FH,1FH,0FH,07H,03H,01H,00H

END程式技巧說(shuō)明:

在上列兩程式均將P0~P3做為輸出埠,程式中ORG為虛指令,用以告知編譯器將其下之程式,放置於程式記憶體中之位址。由於8051之中斷向量位址,如下圖,故程式撰寫(xiě)時(shí)應(yīng)養(yǎng)成不使用這部分之記憶體。

中斷源中斷向量ResetTimer0 Timer1UART(TXD)UART(RXD)0000H0003H000BH0013H001BH0023H002BH首先,8051啟動(dòng)後,須給予一Reset信號(hào),則程式由0000H位址開(kāi)始執(zhí)行,而程式中JMPSTART指令則是用以規(guī)避中斷向量,故ORG30H則指定另一程式記憶體放置起始點(diǎn)。

另外,CALLDELAY指令則是用以呼叫延遲副程式,而在副程式中是以RET做為結(jié)束,執(zhí)行到RET後則在跳回主程式中繼續(xù)執(zhí)行。§5-3資料的輸入實(shí)例:下圖示本例之電路圖:電路圖程式:以P3.7為切換開(kāi)關(guān)設(shè)定不同顯示P0~P2之走馬燈模式,當(dāng)P3.7為0時(shí)P0到P2為全亮或全暗,當(dāng)全亮則逐點(diǎn)暗掉,若全暗則會(huì)逐點(diǎn)亮起。P3.0~P3.6則用以設(shè)定走馬燈執(zhí)行的速度。;

;

本程式以P0到P2為輸出,P3為輸入,

程式檔

;

;

應(yīng)用指令:

;

旋轉(zhuǎn)指令RL

;

互斥或指令XRL

;

堆疊PUSH和POP

;

;

動(dòng)作:以P3.7為切換開(kāi)關(guān)設(shè)定不同顯示方式,

;

當(dāng)P3.7為0時(shí)LED全亮?xí)r則逐點(diǎn)暗掉,當(dāng)LED全暗時(shí)則逐點(diǎn)亮起,

;

P3.0~6為延遲時(shí)間長(zhǎng)短控制

;

;

說(shuō)明:暫存器R0用以控制P0到P3為全亮或全暗,R1用以控制目前掃描的位置

;

暫存器R2用以儲(chǔ)存延遲時(shí)間之設(shè)定

;

ORG00H

JMPINIT

;規(guī)避00H至2FH間之中斷向量執(zhí)行位址

ORG30H

INIT:

MOVSP,#30H

;將堆疊指標(biāo)重新指向

MOVR2,#25

;暫存器R2設(shè)定初始延遲時(shí)間25*20mS

MOVA,#00H

;將埠2至埠0設(shè)定為全滅

MOVR3,A

MOVA,R3

MOVP2,A

CALLDELAY

MOVA,R3

MOVP1,A

CALLDELAY

MOVA,R3

MOVP0,A

CALLDELAY

START:

MOVR2,#25

;暫存器R5設(shè)定初始延遲時(shí)間25*20mS

MOVA,R3

CPLA

MOVR3,A

MOVP2,A

CALLDELAY

MOVA,R3

MOVP1,A

CALLDELAY

MOVA,R3

MOVP0,A

CALLDELAY

LOOP:

MOVA,P3

;讀入埠3之設(shè)定資料

CPLA

;將資料作反相邏輯運(yùn)算

PUSHA

;將累積器A資料存入堆疊中

ANLA,#7FH

;將累積器A資料與值7FH做邏輯AND運(yùn)算

MOVR2,A

;將累積器A資料存入R5中做為延遲時(shí)間之設(shè)定值

MOVA,#01H

RT0:

MOVR1,A

XRLA,P0

MOVP0,A

CALLDELAY

MOVA,R1

CLRC

RLCA

JNCRT0

MOVA,#01H

RT1:

MOVR1,A

XRLA,P1

MOVP1,A

CALLDELAY

MOVA,R1

CLRC

RLCA

JNCRT1

MOVA,#01H

RT2:

MOVR1,A

XRLA,P2

MOVP2,A

MOVR3,A

CALLDELAY

MOVA,R1

CLRC

RLCA

JNCRT2

POPA

;將之前堆疊中資料取出

JBA.7,LOOP

;若累積器A為1則跳回到LOOP重新執(zhí)行

JMPSTART

;若累積器A為0則跳回到START重新執(zhí)行

DELAY:

MOVA,R2

;載入R2之延遲時(shí)間設(shè)定

MOVR5,A

JNZD1

;若累積器A不為0則跳到D0執(zhí)行

MOVR5,#25

;當(dāng)R5為0時(shí)則重設(shè)延遲時(shí)間為25*20mS

D1:

MOVR6,#40

D2:

MOVR7,#249

DJNZR7,$

DJNZR6,D2

DJNZR5,D1

RET

END

第六章計(jì)時(shí)/計(jì)數(shù)器

§6-1計(jì)時(shí)/計(jì)數(shù)器的功能在8051單晶片的內(nèi)部有2個(gè)計(jì)時(shí)/計(jì)數(shù)器,可接收外界輸入的驅(qū)動(dòng)信號(hào),而能產(chǎn)生一個(gè)輸出信號(hào)以供讀取外界輸入信號(hào)發(fā)生的次數(shù)。如果這個(gè)外界輸入信號(hào)代表某一事件發(fā)生的次數(shù),則計(jì)時(shí)/計(jì)數(shù)器即是在作事件的計(jì)數(shù);如果這個(gè)外界輸入信號(hào)是一個(gè)固定頻率的信號(hào),則計(jì)時(shí)/計(jì)數(shù)器則可用以作計(jì)算時(shí)間的工作。因此,8051單晶片的計(jì)時(shí)/計(jì)數(shù)器為一體兩面,完全取決於驅(qū)動(dòng)信號(hào)的特質(zhì)而定。

§6-2計(jì)時(shí)/計(jì)數(shù)器的驅(qū)動(dòng)與使用Timer0與Timer1是8051單晶片的兩個(gè)16位元計(jì)時(shí)/計(jì)數(shù)器,其計(jì)數(shù)值是存放於兩個(gè)8位元暫存器中,Timer0的計(jì)數(shù)是由TH0(Highbyte)及TL0(Lowbyte)來(lái)執(zhí)行,Timer1的計(jì)數(shù)是由TH1(Highbyte)及TL1(Lowbyte)來(lái)執(zhí)行。其位址分別位於SFR內(nèi)部記憶體的8CH、8AH、8DH及8BH中,如第四章之SFR記憶體圖所示。在程式撰寫(xiě)上,編輯器允許直接使用暫存器的名稱TH0、TL0、TH1及TL1,亦可直接使用其暫存器位址,來(lái)作直接定址。在使用8051單晶片計(jì)時(shí)/計(jì)數(shù)器前須先設(shè)定計(jì)時(shí)/計(jì)數(shù)器模式控制暫存器(Timer/counterModeControlRegister,簡(jiǎn)稱TMOD)及計(jì)時(shí)/計(jì)數(shù)器控制暫存器(Timer/counterControlRegister,簡(jiǎn)稱TCON)兩個(gè)暫存器,此二暫存器分別用來(lái)決定Timer0及Timer1的工作模式及中斷執(zhí)行的控制設(shè)定。

§6-3TMOD模式控制暫存器之設(shè)定Timer的計(jì)時(shí)時(shí)脈來(lái)源有兩種,一種是8051單晶片的內(nèi)部時(shí)脈,一種是從T0與T1接腳所輸入的外部時(shí)脈。在8051單晶片接收時(shí)脈計(jì)時(shí)/計(jì)數(shù)時(shí),會(huì)在每個(gè)機(jī)械週期值由〝1〞變?yōu)楱?〞時(shí),將Timer的值累加1。而8051單晶片對(duì)時(shí)脈來(lái)源的選擇是由TMOD暫存器中的C/T位元來(lái)決定。當(dāng)C/T設(shè)定為1時(shí),Timer使用外部時(shí)脈;當(dāng)C/T設(shè)定為0時(shí),Timer使用內(nèi)部時(shí)脈。TMOD的結(jié)構(gòu)如下:TMOD檔當(dāng)TCON暫存器中的TR0(或TR1)為1時(shí),則Timer0(或Timer1)由TMOD暫存器的GATE位元與INT0(或INT1)接腳構(gòu)成Timer的軟體控制;當(dāng)TCON暫存器中的TR0(或TR1)為0時(shí),則Timer0(或Timer1)將停止計(jì)時(shí)/計(jì)數(shù)。若以布林帶數(shù)表示則為Y=(GATE+INTx)。Timer0與Timer1一共有四種模式,是由TMOD暫存器中的M0與M1位元來(lái)設(shè)定。以下為四種工作模式:1.模式0:(M1=M0=0,13位元計(jì)時(shí)/計(jì)數(shù)器)將Timer設(shè)定為模式0時(shí),會(huì)形成一個(gè)13位元計(jì)時(shí)/計(jì)數(shù)器,計(jì)時(shí)/計(jì)數(shù)暫存器是由THx的8位元與TLx的低5位元所組成。當(dāng)TR0(或TR1)設(shè)定為1時(shí),計(jì)時(shí)/計(jì)數(shù)器開(kāi)始作動(dòng),若13個(gè)位元由全部為〝1〞變?yōu)槿繛楱?〞時(shí),則會(huì)將Timer溢位旗號(hào)TFx設(shè)定為1。結(jié)合IE暫存器(中斷致能暫存器,InterruptEnableRegister)致能Timer0(或Timer1),則8051單晶片會(huì)擷取TF0(或TF1)的資料,以偵測(cè)是否要產(chǎn)生中斷。當(dāng)8051單晶片執(zhí)行中斷副程式時(shí)會(huì)自動(dòng)將TF0(或TF1)清除為0。將在下一章介紹8051單晶片中斷服務(wù)。Timer工作模式0時(shí),13位元計(jì)時(shí)/計(jì)數(shù)值最大為8192(2的13次方),因此,THx的值應(yīng)為計(jì)時(shí)/計(jì)數(shù)值除以32的商,TLx的值則為計(jì)時(shí)/計(jì)數(shù)值除以32的餘數(shù)。若計(jì)時(shí)/計(jì)數(shù)值為5000時(shí),即TL0=#(8192-5000)×MOD×32TH0=#(8192-5000)/32則程式可寫(xiě)為:MOVTL0,#(8192-5000)×MOD×32MOVTH0,#(8192-5000)/322.模式1:(M1=0,M0=1,16位元計(jì)時(shí)/計(jì)數(shù)器)模式0與模式1的動(dòng)作幾乎相同,兩者之間的差別在於Timer工作在模式1時(shí)是16位元的計(jì)時(shí)/計(jì)數(shù)器。模式1計(jì)時(shí)/計(jì)數(shù)最大值為65536(2的16次方),因此,THx的值應(yīng)為計(jì)時(shí)/計(jì)數(shù)值除以256的商,TLx的值則為計(jì)時(shí)/計(jì)數(shù)值除以256的餘數(shù)。若計(jì)時(shí)/計(jì)數(shù)值為5000時(shí),即TH0=#(65536-5000)/256TL0=#(65536-5000)×MOD×256則程式可寫(xiě)為:MOVTH0,#(65536-5000)/256MOVTL0,#(65536-5000)×MOD×256或?qū)懗桑篗OVTH0,#>(65536-5000)MOVTL0,#<(65536-5000)其中,〝<〞符號(hào)是通知編譯器將後面的值取16位元的低位元組,而〝>〞符號(hào)是通知編譯器將後面的值取16位元的高位元組。3.模式2:(M1=1,M0=0,8位元自動(dòng)重新載入計(jì)時(shí)器)將Timer設(shè)定成模式2時(shí),會(huì)形成一個(gè)8位元自動(dòng)重新載入計(jì)時(shí)/計(jì)數(shù)器。當(dāng)計(jì)時(shí)/計(jì)數(shù)完畢後會(huì)產(chǎn)生TFx溢位旗號(hào)設(shè)定為1,並會(huì)將THx的值自動(dòng)載入TLx中,因此,THx的值須事先由軟體設(shè)定。此模式適合用在需要固定時(shí)間的計(jì)時(shí)。模式2計(jì)時(shí)/計(jì)數(shù)最大值為256(2的8次方),因此計(jì)時(shí)/計(jì)數(shù)值須同時(shí)存放於THx與TLx中。若計(jì)時(shí)/計(jì)數(shù)值為200時(shí),即TH0=#(256-200)TL0=#(256-200)則程式可寫(xiě)成MOVTH0,#(256-200)MOVTL0,#(256-200)4.模式3:(M1=1,M0=1,兩個(gè)8位元的計(jì)時(shí)器)Timer在模式3時(shí),會(huì)將TH0與TL0分成兩個(gè)獨(dú)立的8位元計(jì)時(shí)器。TL0的計(jì)時(shí)器使用Timer0的控制信號(hào),即C/T、GATE、TR0、INT0與TF0。而TH0則為計(jì)數(shù)機(jī)械週期的計(jì)數(shù)器,且使用Timer1的TR1及TF1做控制信號(hào),因此TH0是控制Timer1計(jì)時(shí)/計(jì)數(shù)器。若使用Timer0的TL0計(jì)時(shí)/計(jì)數(shù)值為200時(shí),即TL0=#(256-200)則程式可寫(xiě)成MOVTL0,#(256-200)

TMOD暫存器在各種情形下的設(shè)定值:1.Timer0做計(jì)時(shí)器模式功能內(nèi)部控制外部控制013位元計(jì)時(shí)器00000000B00001000B116位元計(jì)時(shí)器00000001B00001001B28位元自動(dòng)重新載入00000010B00001010B3兩個(gè)8位元計(jì)時(shí)器00000011B00001011B

2.Timer0做計(jì)數(shù)器模式功能內(nèi)部控制外部控制013位元計(jì)數(shù)器00000100B00001100B116位元計(jì)數(shù)器00000101B00001101B28位元自動(dòng)重新載入00000110B00001110B3一個(gè)8位元計(jì)數(shù)器00000111B00001111B

3.Timer1做計(jì)時(shí)器模式功能內(nèi)部控制外部控制013位元計(jì)時(shí)器00000000B10000000B116位元計(jì)時(shí)器00010000B10010000B28位元自動(dòng)重新載入00100000B10100000B3(TH0計(jì)時(shí)器)00110000B10110000B

4.Timer1做計(jì)數(shù)器模式功能內(nèi)部控制外部控制013位元計(jì)數(shù)器01000000B11000000B116位元計(jì)數(shù)器01010000B11010000B28位元自動(dòng)重新載入01100000B11100000B3無(wú)--------

§6-4TCON控制暫存器之設(shè)定TCON為Timer的計(jì)時(shí)控制暫存器,其結(jié)構(gòu)如下:

TCON之圖

§6-5計(jì)時(shí)/計(jì)數(shù)器實(shí)例1.利用模式1做為計(jì)時(shí),其電路圖如下:

電路圖

計(jì)時(shí)模式1程式;

;

本程式以計(jì)時(shí)方式掃描驅(qū)動(dòng),以P0.0為0.05秒的閃爍,

;

P1到P3分別為秒分時(shí)的輸出

;

;

應(yīng)用指令:

;

位元設(shè)定指令SETB用以設(shè)定位元為1

;

比較跳躍指令CJNE若暫存器與參數(shù)值比較不相等實(shí)則跳躍

;

位元為1時(shí)清除並跳躍指令JBC若暫存器位元為1則清除並跳躍

;

;

動(dòng)作:P0.0之LED閃爍20Hz,秒分時(shí)以十進(jìn)制二進(jìn)位法顯示

;

說(shuō)明:利用Timer0做0.05秒計(jì)時(shí),並為求執(zhí)行時(shí)間控制,進(jìn)位累加.

;

顯示秒.顯示分與顯示時(shí)分四次迴路執(zhí)行,以求可分別在0.05秒內(nèi)

;

執(zhí)行完畢

;

ORG00H

JMPSTART

ORG30H

MOVSP,#30H

;將堆疊指標(biāo)重新指向

START:

MOVTMOD,#01

;設(shè)定16位元計(jì)時(shí)模式

MOVP0,#0

;將埠0設(shè)定為全滅

MOVR6,#0

;頻率記數(shù)初值設(shè)定為0

MOVR0,#0

;時(shí)R2分R1秒R0初值設(shè)定為0

MOVR1,#0

MOVR2,#0

LOOP:

MOVTL0,#<(65536-46079)

;儲(chǔ)存16位元之低8位元

MOVTH0,#>(65536-46079)

;儲(chǔ)存16位元之高8位元

SETBTR0

;啟動(dòng)計(jì)時(shí)

CJNER6,#20,SHOW

MOVR6,#0

SECINCR0

CJNER0,#60,WAIT

MOVR0,#0

INCR1

CJNER1,#60,WAIT

MOVR1,#0

INCR2

CJNER2,#12,WAIT

MOVR2,#0

JMPWAIT

SHOW:

CJNER6,#10,SHOW1

MOVA,R0

CALLBCD

;呼叫轉(zhuǎn)換為二進(jìn)位時(shí)進(jìn)制副程式

MOVP1,A

SHOW1:

CJNER6,#11,SHOW2

MOVA,R1

CALLBCD

;呼叫轉(zhuǎn)換為二進(jìn)位時(shí)進(jìn)制副程式

MOVP2,A

SHOW2:

CJNER6,#12,WAIT

MOVA,R2

CALLBCD

;呼叫轉(zhuǎn)換為二進(jìn)位時(shí)進(jìn)制副程式

MOVP3,A

WAIT:

JBCTF0,OVERFLOW

;測(cè)試是否計(jì)時(shí)完畢產(chǎn)生溢位

JMPWAIT

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論