![8051單晶片原理與程式設(shè)計(jì)_第1頁(yè)](http://file4.renrendoc.com/view10/M01/29/30/wKhkGWW4-eiAP9_RAACTEjP-GKw249.jpg)
![8051單晶片原理與程式設(shè)計(jì)_第2頁(yè)](http://file4.renrendoc.com/view10/M01/29/30/wKhkGWW4-eiAP9_RAACTEjP-GKw2492.jpg)
![8051單晶片原理與程式設(shè)計(jì)_第3頁(yè)](http://file4.renrendoc.com/view10/M01/29/30/wKhkGWW4-eiAP9_RAACTEjP-GKw2493.jpg)
![8051單晶片原理與程式設(shè)計(jì)_第4頁(yè)](http://file4.renrendoc.com/view10/M01/29/30/wKhkGWW4-eiAP9_RAACTEjP-GKw2494.jpg)
![8051單晶片原理與程式設(shè)計(jì)_第5頁(yè)](http://file4.renrendoc.com/view10/M01/29/30/wKhkGWW4-eiAP9_RAACTEjP-GKw2495.jpg)
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 通訊網(wǎng)絡(luò)服務(wù)員工作總結(jié)
- 二零二五年度全國(guó)少兒藝術(shù)夏令營(yíng)參與合同3篇
- 二零二五年度基礎(chǔ)設(shè)施建設(shè)投資合作協(xié)議范本3篇
- 二零二五年度個(gè)人生物質(zhì)能利用合同范本4篇
- 二零二五版投標(biāo)承諾書(shū):太陽(yáng)能光伏發(fā)電設(shè)備采購(gòu)合同3篇
- 放假安全教育課教案
- 2025版物流園區(qū)轉(zhuǎn)包合作協(xié)議合同范本3篇
- 二零二五版物業(yè)小區(qū)居民生活繳費(fèi)代理服務(wù)協(xié)議3篇
- 二零二五版私人別墅買賣中介服務(wù)合同3篇
- 個(gè)人擔(dān)保合同范本(2025年度升級(jí)版)
- 人教版(2024)七年級(jí)上冊(cè)英語(yǔ)期中復(fù)習(xí)單項(xiàng)選擇100題(含答案)
- 2024年胡麻油市場(chǎng)前景分析:全球胡麻油市場(chǎng)規(guī)模達(dá)到了25.55億美元
- 《 西門塔爾牛臉數(shù)據(jù)集的研究》范文
- 八年級(jí)上冊(cè) 第三單元 11《簡(jiǎn)愛(ài)》公開(kāi)課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)
- 中小商業(yè)銀行數(shù)字化轉(zhuǎn)型現(xiàn)狀及對(duì)策研究
- 親子非暴力溝通培訓(xùn)講座
- 保險(xiǎn)投訴處理流程培訓(xùn)
- JJG 707-2014扭矩扳子行業(yè)標(biāo)準(zhǔn)
- 2025財(cái)年美國(guó)國(guó)防預(yù)算概覽-美國(guó)國(guó)防部(英)
- 2024年江西省南昌市中考一模數(shù)學(xué)試題(含答案)
- 《采暖空調(diào)節(jié)能技術(shù)》課件
評(píng)論
0/150
提交評(píng)論