專業(yè)課-電信院單片機(jī)軟件第2章_第1頁
專業(yè)課-電信院單片機(jī)軟件第2章_第2頁
專業(yè)課-電信院單片機(jī)軟件第2章_第3頁
專業(yè)課-電信院單片機(jī)軟件第2章_第4頁
專業(yè)課-電信院單片機(jī)軟件第2章_第5頁
已閱讀5頁,還剩189頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第2章MCS-51系列單片機(jī)的硬件結(jié)構(gòu)2.151系列單片機(jī)結(jié)構(gòu)簡介2.251系列單片機(jī)內(nèi)部結(jié)構(gòu)與外部引腳說明2.3微處理器2.4存儲(chǔ)器2.5并行輸入/輸出接口2.6定時(shí)器/計(jì)數(shù)器2.7串行輸入/輸出口2.851系列單片機(jī)的中斷系統(tǒng)2.9復(fù)位狀態(tài)及復(fù)位電路2.10單片機(jī)的低功耗方式2.151系列單片機(jī)結(jié)構(gòu)簡介

微型計(jì)算機(jī)基本組成有三部份,即CPU+存儲(chǔ)器+I/O接口。若將這些部件和實(shí)時(shí)控制部件集成在一塊芯片上,則稱為單片機(jī)。

8051內(nèi)部結(jié)構(gòu)包括:運(yùn)算器、控制器、片內(nèi)存儲(chǔ)器、4個(gè)并行I/O口、串行口、定時(shí)器/計(jì)數(shù)器、中斷系統(tǒng)、振蕩器等功能部件。這些部件通過內(nèi)部總線連接起來,基本結(jié)構(gòu)仍然是通用CPU加上外圍芯片的結(jié)構(gòu)模式,但功能單元上的控制與先前相比有重大變化,采用了特殊功能寄存器(SFR)進(jìn)行集中控制的方法2.2MCS-51系列單片機(jī)內(nèi)部結(jié)構(gòu)與外部引腳說明2.2.1內(nèi)部結(jié)構(gòu)框圖51單片機(jī)PIC單片機(jī)鍵盤顯示器位控溫度

從機(jī)電機(jī)單片機(jī)512×8SPI用8位PIC單片機(jī)組成的系統(tǒng)MCS-51PIC16F87x數(shù)據(jù)與程序共享數(shù)據(jù)總線雙總線結(jié)構(gòu)單級(jí)順序執(zhí)行兩級(jí)指令流水線結(jié)構(gòu)A累加器W累加器PSW程序狀態(tài)字STATUSRAM中的軟堆棧8層嵌套硬件堆棧雙向I/O口拉電路小雙向I/O口拉電流可達(dá)20mA5個(gè)中斷源14個(gè)中斷源無間接尋址寄存器FSR兩個(gè)定時(shí)/計(jì)數(shù)器三個(gè)定時(shí)/計(jì)數(shù)器復(fù)位信號(hào)RST復(fù)位信號(hào)MCLR其它輸出控制信號(hào)PSEN、EA無MCS-51單片機(jī)與PIC單片機(jī)內(nèi)部結(jié)構(gòu)區(qū)別2.2.2外部引腳說明1.主電源引腳

VCC(40腳):接+5V電源正端。

VSS(20腳):接+5V電源地端。

2.外接晶體引腳

XTAL1(19腳):接外部石英晶體的一端。在單片機(jī)內(nèi)部,它是一個(gè)反相放大器的輸入端,這個(gè)放大器構(gòu)成了片內(nèi)振蕩器。當(dāng)采用外部時(shí)鐘時(shí),對于HMOS單片機(jī),該引腳接地;對于CHMOS單片機(jī),該引腳作為外部振蕩信號(hào)的輸入端。圖2.2MCS-51系列單片機(jī)引腳及總線結(jié)構(gòu)3.輸入/輸出引腳

(1)P0口(39~32腳):P0.0~P0.7統(tǒng)稱為P0口。在不接片外存儲(chǔ)器與不擴(kuò)展I/O口時(shí),可作為準(zhǔn)雙向輸入/輸出口。在接有片外存儲(chǔ)器或擴(kuò)展I/O口時(shí),P0口分時(shí)復(fù)用為低8位地址總線和雙向數(shù)據(jù)總線。

(2)P1口(1~8腳):P1.0~P1.7統(tǒng)稱為P1口,可作為準(zhǔn)雙向I/O口使用。對于52子系列,P1.0與P1.1還有第二功能:P1.0可用作定時(shí)器/計(jì)數(shù)器2的計(jì)數(shù)脈沖輸入端T2,P1.1可用作定時(shí)器/計(jì)數(shù)器2的外部控制端T2EX。(3)P2口(21~28腳):P2.0~P2.7統(tǒng)稱為P2口,一般可作為準(zhǔn)雙向I/O口使用;在接有片外存儲(chǔ)器或擴(kuò)展I/O口且尋址范圍超過256字節(jié)時(shí),P2口用作高8位地址總線。

(4)P3口(10~17腳):P3.0~P3.7統(tǒng)稱為P3口。除作為準(zhǔn)雙向I/O口使用外,還可以將每一位用于第二功能,而且P3口的每一條引腳均可獨(dú)立定義為第一功能的輸入輸出或第二功能。P3口的第二功能如表2.1所示。表2.1P3口第二功能表引腳第二功能P3.0串行口輸入端P3.1串行口輸出端P3.2外部中斷0請求輸入端,低電平有效P3.3外部中斷1請求輸入端,低電平有效P3.4定時(shí)器/計(jì)數(shù)器0計(jì)數(shù)脈沖輸入端P3.5定時(shí)器/計(jì)數(shù)器1計(jì)數(shù)脈沖輸入端P3.6外部數(shù)據(jù)存儲(chǔ)器寫選通信號(hào)輸出端,低電平有效P3.7RXDTXDINT0INT1T0T1WRRD4.控制線

(1)ALE/PROG(30腳):地址鎖存有效信號(hào)輸出端。ALE在每個(gè)機(jī)器周期內(nèi)輸出兩個(gè)脈沖。在訪問片外程序存儲(chǔ)器期間,下降沿用于控制鎖存P0輸出的低8位地址;在不訪問片外程序存儲(chǔ)器期間,可作為對外輸出的時(shí)鐘脈沖或用于定時(shí)目的。但要注意,在訪問片外數(shù)據(jù)存儲(chǔ)器期間,ALE脈沖會(huì)跳空一個(gè),此時(shí)作為時(shí)鐘輸出就不妥了(詳見2.3.3節(jié)CPU時(shí)序)。對于片內(nèi)含有EPROM的機(jī)型,在編程期間,該引腳用作編程脈沖PROG的輸入端。(2)PSEN(29腳):片外程序存儲(chǔ)器讀選通信號(hào)輸出端,低電平有效。當(dāng)從外部程序存儲(chǔ)器讀取指令或常數(shù)期間,每個(gè)機(jī)器周期該信號(hào)兩次有效,以通過數(shù)據(jù)總線P0口讀回指令或常數(shù)。在訪問片外數(shù)據(jù)存儲(chǔ)器期間,PSEN信號(hào)將不出現(xiàn)。

(3)RST/VPD(9腳):RST即為RESET,VPD為備用電源。該引腳為單片機(jī)的上電復(fù)位或掉電保護(hù)端。當(dāng)單片機(jī)振蕩器工作時(shí),該引腳上出現(xiàn)持續(xù)兩個(gè)機(jī)器周期的高電平,就可實(shí)現(xiàn)復(fù)位操作,使單片機(jī)回復(fù)到初始狀態(tài)。上電時(shí),考慮到振蕩器有一定的起振時(shí)間,該引腳上高電平必須持續(xù)10ms以上才能保證有效復(fù)位。當(dāng)VCC發(fā)生故障,降低到低電平規(guī)定值或掉電時(shí),該引腳可接上備用電源VPD(+5V)為內(nèi)部RAM供電,以保證RAM中的數(shù)據(jù)不丟失。(4)EA/VPP(31腳):EA為片外程序存儲(chǔ)器選用端。該引腳有效(低電平)時(shí),只選用片外程序存儲(chǔ)器,否則單片機(jī)上電或復(fù)位后選用片內(nèi)程序存儲(chǔ)器。對于片內(nèi)含有EPROM的機(jī)型,在編程期間,此引腳用作21V編程電源VPP的輸入端。綜上所述,MCS-51系列單片機(jī)的引腳可歸納為以下兩點(diǎn):

(1)單片機(jī)功能多,引腳數(shù)少,因而許多引腳都具有第二功能。

(2)單片機(jī)對外呈現(xiàn)3總線形式,由P2、P0口組成16位地址總線;由P0口分時(shí)復(fù)用為數(shù)據(jù)總線;由ALE、PSEN、RST、EA與P3口中的INT0、INT1、T0、T1、WR、RD共10個(gè)引腳組成控制總線,如圖2.2(b)所示。由于是16位地址線,因此,可使片外存儲(chǔ)器的尋址范圍達(dá)到64KB。 PIC16F877引腳

MCLRRA

OSC1RB

PIC16F877RC

OSC2RDV

GNDRE

68883A、RA端口RA端口由6個(gè)I/O位組成,他們有的具有2個(gè)功能或3個(gè)功能。RA5~RA0:雙向可編程I/O端口。AN4~AN0(RA5、RA3~RA0):ADC5路模擬信號(hào)輸入端。TOCKI(RA4):定時(shí)器0時(shí)鐘輸入端。

SS(RA5):在SPI通信中用于選擇從動(dòng)器件(外圍設(shè)備)。±VREF:參考電源,對應(yīng)+VREF(RA3)和

-VREF(RA2)B、RB端口RB端口由8個(gè)I/O位組成,他們有的具有2個(gè)功能。RB7~RB0:雙向可編程I/O端口INT(RB0):中斷請求輸入端PGM(RB3):低電壓編程輸入端PGC(RB6):在線調(diào)試輸入端或串行編程時(shí)鐘輸入端PGD(RB7):在線調(diào)試輸入端或串行編程數(shù)據(jù)輸入端C.RC端口RC端口由8個(gè)I/O位組成,他們有的具有2個(gè)功能或3個(gè)功能。RC7~RC0:雙向可編程I/O端口。TIOSO/TICKI(RC0):定時(shí)器1振蕩,輸出/定時(shí)器1時(shí)鐘輸入TIOSI/CCP2(RC1):定時(shí)器1振蕩,輸入/捕捉器2,輸入/比較器

2輸出/PWM2輸出。CCP1(RC2):捕捉器2,輸入/比較器2,輸出/PWM2輸出。SCK/SCL(RC3):SPI/IIC串行口同步時(shí)鐘輸入/輸出。SDI/SDA(RC4):SPI串行口數(shù)據(jù)輸入/IIC串行口數(shù)據(jù)輸入/輸出SDO(RC5):SPI串行口數(shù)據(jù)輸出。TX/CK(RC6):USART全雙工異步發(fā)送/USART半雙工同步傳送時(shí)RX/DT(RC7):USART全雙工異步接收/USART半雙工同步傳送數(shù)據(jù)D、RD端口RD端口由8個(gè)I/O位組成,他們具有2個(gè)功能。RD7~RD0:雙向可編程I/O端口。PSP7~PSP0(RD7~RD0):作從動(dòng)并行口與其他CPU數(shù)據(jù)總線連接。E、RE端口RE端口由3個(gè)I/O位組成,他們具有2個(gè)功能或3個(gè)功能。RE2~RE0:雙向可編程I/O端口。RD/AN5(RE0):并行口讀控制端RD/第5路模擬信號(hào)輸入AN5WR/AN6(RE1):并行口寫控制端WR/第6路模擬信號(hào)輸入AN6。CS/AN7(RE2):并行口片選控制端CS/第7路模擬信號(hào)輸入AN7。2.3微處理器2.3.1運(yùn)算部件運(yùn)算部件以算術(shù)邏輯單元ALU為核心,包括累加器ACC、寄存器B、暫存器、程序狀態(tài)字PSW等許多部件。它能實(shí)現(xiàn)數(shù)據(jù)的算術(shù)邏輯運(yùn)算、位變量處理和數(shù)據(jù)傳輸操作。微處理器(CPU)由運(yùn)算部件和控制部件兩大部件組成。1.算術(shù)邏輯單元ALU與累加器ACC、寄存器B(1)算數(shù)運(yùn)算:完成8位二進(jìn)制的加、減、乘、除、加1、減1及BCD加法的十進(jìn)制調(diào)整等算術(shù)運(yùn)算。(2)邏輯運(yùn)算:對8位變量進(jìn)行邏輯“與”、“或”、“異或”、循環(huán)移位、求補(bǔ)、清零等邏輯運(yùn)算。(3)數(shù)據(jù)傳輸、程序轉(zhuǎn)移等功能。2.程序狀態(tài)字程序狀態(tài)字PSW是一個(gè)8位的標(biāo)志寄存器,它保存指令執(zhí)行結(jié)果的特征信息,以供程序查詢和判別。其各位的定義如下:字節(jié)地址D0HCACF0RS1RS0OV---PPSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0

進(jìn)位標(biāo)志位C(PSW.7):在執(zhí)行某些算術(shù)操作類、邏輯操作類指令時(shí),可被硬件或軟件置位或清零。它表示運(yùn)算結(jié)果是否有進(jìn)位或借位。如果在最高位有進(jìn)位(加法時(shí))或有借位(減法時(shí)),則C=1,否則C=0。

輔助進(jìn)位(或稱半進(jìn)位)標(biāo)志位AC(PSW.6):它表示兩個(gè)8位數(shù)運(yùn)算,低4位有無進(jìn)(借)位的狀況。當(dāng)?shù)?位相加(或相減)時(shí),若D3位向D4位有進(jìn)位(或借位),則AC=1,否則AC=0。在BCD碼運(yùn)算的十進(jìn)制調(diào)整中要用到該標(biāo)志。用戶自定義標(biāo)志位F0(PSW.5):用戶可根據(jù)自己的需要對F0賦予一定的含義,通過軟件置位或清零,并根據(jù)F0=1或0來決定程序的執(zhí)行方式,或反映系統(tǒng)某一種工作狀態(tài)。

工作寄存器組選擇位RS1、RS0(PSW.4、PSW.3):可用軟件置位或清零,用于選定當(dāng)前使用的4個(gè)工作寄存器組中的某一組(詳見第2.4節(jié))。溢出標(biāo)志位OV(PSW.2):做加法或減法時(shí),由硬件置位或清零,以指示運(yùn)算結(jié)果是否溢出。OV=1反映運(yùn)算結(jié)果超出了累加器的數(shù)值范圍(無符號(hào)數(shù)的范圍為0~255,以補(bǔ)碼形式表示一個(gè)有符號(hào)數(shù)的范圍為-128~+127)。進(jìn)行無符號(hào)數(shù)的加法或減法時(shí),OV的值與進(jìn)位位C的值相同;進(jìn)行有符號(hào)數(shù)的加法時(shí),如最高位、次高位之一有進(jìn)位,或做減法時(shí),如最高位、次高位之一有借位,OV被置位,即OV的值為最高位和次高位的異或(C7⊕C6)。

執(zhí)行乘法指令MULAB也會(huì)影響OV標(biāo)志,積>255時(shí)OV=1,否則OV=0。執(zhí)行除法指令DIVAB也會(huì)影響OV標(biāo)志,如B中所放除數(shù)為0,OV=1,否則OV=0。奇偶標(biāo)志位P(PSW.0):在執(zhí)行指令后,單片機(jī)根據(jù)累加器A中1的個(gè)數(shù)的奇偶自動(dòng)給該標(biāo)志置位或清零。若A中1的個(gè)數(shù)為奇數(shù),則P=1,否則P=0。該標(biāo)志對串行通信的數(shù)據(jù)傳輸非常有用,通過奇偶校驗(yàn)可檢驗(yàn)傳輸?shù)目煽啃?。PIC單片機(jī)程序狀態(tài)寄存器STATUS0:執(zhí)行加法(或減法)指令時(shí),如果最高位無進(jìn)位(或借位);1:執(zhí)行加法(或減法)指令時(shí),如果最高位有進(jìn)位(或借位)。0:執(zhí)行加法(或減法)指令時(shí),如果低4位向高4位無進(jìn)位(或借位);1:執(zhí)行加法(或減法)指令時(shí),如果低4位向高4位有進(jìn)位(或借位)。0:算術(shù)或邏輯運(yùn)算結(jié)果不為0;1:算術(shù)或邏輯運(yùn)算結(jié)果為全0。0:選擇數(shù)據(jù)存儲(chǔ)器低位區(qū):即區(qū)0(FSR的BIT7=0)或區(qū)1(FSR的BIT7=1);1:選擇數(shù)據(jù)存儲(chǔ)器高位區(qū):即區(qū)2(FSR的BIT7=0)或區(qū)3(FSR的BIT7=1)。RP1、RP0=00選中區(qū)0RP1、RP0=01選中區(qū)1RP1、RP0=10選中區(qū)2RP1、RP0=11選中區(qū)3B7B6B5B4B3B2B1B0IPRPR1RP0TOPDZDCC3.布爾處理機(jī)實(shí)際上這是一個(gè)完整的一位微計(jì)算機(jī),它具有自己的CPU、寄存器、FO、存儲(chǔ)器和指令集。一位機(jī)在開關(guān)決策、邏輯電路仿真和實(shí)時(shí)控制方面非常有效。位處理器系統(tǒng)包括以下幾個(gè)功能部件:

(1)位累加器:借用進(jìn)位標(biāo)制位CY。即作為數(shù)據(jù)源之一又是運(yùn)算結(jié)果的存放處,位數(shù)據(jù)傳送的中心。

(2)位尋址的RAM:內(nèi)部RAM位尋址區(qū)0~127位(20H~2FH)(3)位尋址寄存器:SFR中可位尋址的位。

(4)位尋址的I/O口:并行I/O口中可以位尋址的位(如P1.0)

(5)位操作指令系統(tǒng):置位、清零、取反、位狀態(tài)判跳、位邏輯運(yùn)算、位輸入/輸出等。時(shí)鐘電路

8051單片機(jī)的時(shí)鐘信號(hào)通常由兩種方式產(chǎn)生:一是內(nèi)部振蕩方式,二是外部時(shí)鐘方式。

(a)內(nèi)部方式時(shí)鐘電路(b)外部方式時(shí)鐘電路內(nèi)部振蕩方式內(nèi)部振蕩方式是在XTAL1和XTAL2引腳兩端跨接石英晶體振蕩器和兩個(gè)電容構(gòu)成穩(wěn)定的自激振蕩電路。電容C1和C2通常取30pF。晶振頻率fosc=1.2MHz~12MHz。表2.2單片機(jī)外部時(shí)鐘接法表芯片類型XTAL1XTAL2HMOS型接地接片外振蕩脈沖輸入端(帶上拉電阻)CHMOS型接片外振蕩脈沖輸入端(帶上拉電阻)懸浮接法在由許多單片機(jī)組成的系統(tǒng)中,為了各單片機(jī)之間時(shí)鐘信號(hào)的同步,應(yīng)當(dāng)引入唯一的公用外部脈沖信號(hào)作為各單片機(jī)的振蕩脈沖,這時(shí)部的脈沖信號(hào)應(yīng)經(jīng)XTAL2引腳入。片外時(shí)鐘方式PIC時(shí)鐘振蕩輸入/輸出端

晶體或陶瓷諧振器

一般CPU都是通過外接的晶體或陶瓷諧振器產(chǎn)生CPU的工作時(shí)鐘,PIC16F877是通過OSC1(Pin13)和OSC2(Pin14)外接晶體或陶瓷諧振器產(chǎn)生CPU的工作時(shí)鐘。SLEEP休眠控制CPU時(shí)鐘OSC1OSC2RS衰減電阻晶體RfC1C2

同其他CPU不同的是PIC振蕩器的增益是可調(diào)整的,即圖中的Rf。這是因?yàn)椴煌l率的晶體或不同廠家生產(chǎn)的晶體,在同輔助電路構(gòu)成振蕩器時(shí),所需的激勵(lì)功率是不同的。一般情況下,振蕩頻率越低所需的激勵(lì)功率越小,振蕩頻率越高所需的激勵(lì)功率越大。

SLEEP休眠控制CPU時(shí)鐘OSC1OSC2RS衰減電阻晶體RfC1C2LP低功耗晶體振蕩

XT晶體振蕩

HS高速晶體測試點(diǎn)2.3.3CPU時(shí)序

振蕩周期:振蕩脈沖的周期。

狀態(tài)周期:兩個(gè)振蕩周期為一個(gè)狀態(tài)周期,也稱為時(shí)鐘周期,用S表示。兩個(gè)振蕩周期作為兩個(gè)節(jié)拍分別稱為節(jié)拍P1和節(jié)拍P2。在狀態(tài)周期的前半周期P1有效時(shí),通常完成算術(shù)邏輯操作;在后半周期P2有效時(shí),一般進(jìn)行內(nèi)部寄存器之間的傳輸。

機(jī)器周期:一個(gè)機(jī)器周期包含6個(gè)狀態(tài)周期,用S1、S2、…、S6表示;共12個(gè)節(jié)拍,依次可表示為S1P1、S1P2、S2P1、S2P2、…、S6P1、S6P2。

指令周期:執(zhí)行一條指令所占用的全部時(shí)間,它以機(jī)器周期為單位。MCS-51系列單片機(jī)除乘法、除法指令是4周期指令外,其余都是單周期指令和雙周期指令。若用12MHz晶振,則單周期指令和雙周期指令的指令周期時(shí)間分別為1μs和2μs,乘法和除法指令為4μs。圖2.4單周期指令時(shí)序(a)單字節(jié)周期指令(如INCA);(b)雙字節(jié)單周期指令(如ADDA,#data)PIC16F877單片機(jī)CPU時(shí)序Q1從存儲(chǔ)器中取指令取指令、PC執(zhí)行指令、PC-1取指令、PC+1取指令、PC+2執(zhí)行指令、PC

執(zhí)行指令、PC+1

取指令、PC+3在Q2~Q4對指令進(jìn)行譯碼執(zhí)行,鎖存到指令寄存器Q1Q2Q3Q4Q1Q2Q3Q4Q1Q2Q3Q4

Q1Q2Q3Q4PC周期0周期1周期22.4存儲(chǔ)器

多數(shù)單片機(jī)系統(tǒng)的存儲(chǔ)器組織方式與通用微機(jī)不同,其程序存儲(chǔ)器地址空間和數(shù)據(jù)存儲(chǔ)器地址空間相互獨(dú)立。2.4.1程序存儲(chǔ)器1.編址與訪問PC(16位)0000H~FFFFH尋址范圍64K圖2.5程序存儲(chǔ)器編址圖(a)51子系列;(b)52子系列2.程序的7個(gè)特殊入口地址表2.3MCS-51單片機(jī)復(fù)位、中斷入口地址操作入口地址復(fù)位0000H外部中斷00003H定時(shí)器/計(jì)數(shù)器0溢出000BH外部中斷10013H定時(shí)器/計(jì)數(shù)器1溢出001BH串行口中斷0023H定時(shí)器/計(jì)數(shù)器0溢出或T2EX端負(fù)跳變(52子系列)002BHPIC16F877程序存儲(chǔ)器

程序計(jì)數(shù)器PC為13位尋址范圍8K2.4.2數(shù)據(jù)存儲(chǔ)器

1.編址與訪問

MCS-51單片機(jī)片內(nèi)、外數(shù)據(jù)存儲(chǔ)器是兩個(gè)獨(dú)立的地址空間,應(yīng)分別單獨(dú)編址。片內(nèi)數(shù)據(jù)存儲(chǔ)器除RAM塊外,還有特殊功能寄存器(SFR)塊。對于51子系列,前者有128個(gè)字節(jié),其編址為00H~7FH;后者有128個(gè)字節(jié),其編址為80H~FFH;二者連續(xù)而不重疊。對于52子系列,前者有256個(gè)字節(jié),其編址為00H~FFH;后者有128個(gè)字節(jié),其編址為80H~FFH。后者與前者高128個(gè)字節(jié)的編址是重疊的。由于訪問它們所用的指令不同,并不會(huì)引起混亂。片外數(shù)據(jù)存儲(chǔ)器一般是16位編址。數(shù)據(jù)存儲(chǔ)器的編址如圖2.6所示。圖2.6數(shù)據(jù)存儲(chǔ)器編址圖(a)51子系列;(b)52子系列2.片內(nèi)RAM圖2.751子系列單片機(jī)片內(nèi)RAM的配置1)工作寄存器區(qū)

00H~1FH單元為工作寄存器區(qū)。工作寄存器也稱通用寄存器,用于臨時(shí)寄存8位信息。工作寄存器分成4組,每組都有8個(gè)寄存器,用R0~R7來表示。程序中每次只用1組,其它各組不工作。使用哪一組寄存器工作由程序狀態(tài)字PSW中的PSW.3(RS0)和PSW.4(RS1)兩位來選擇,其對應(yīng)關(guān)系如表2.4所示。通過軟件設(shè)置RS0和RS1兩位的狀態(tài),就可任意選一組工作寄存器工作。這個(gè)特點(diǎn)使MCS-51單片機(jī)具有快速現(xiàn)場保護(hù)功能,對于提高程序效率和響應(yīng)中斷的速度是很有利的。表2.4工作寄存器組的選擇表PSW.4(RS1)PSW.3(RS0)當(dāng)前使用的工作寄存器組R0~R7000組(00H~07H)011組(08H~0FH)102組(10H~17H)113組(18H~1FH)2)位尋址區(qū)

20H~2FH單元是位尋址區(qū)。這16個(gè)單元(共計(jì)16×8=128位)的每一位都賦予了一個(gè)位地址,位地址范圍為00H~7FH。位尋址區(qū)的每一位都可當(dāng)作軟件觸發(fā)器,由程序直接進(jìn)行位處理。通常可以把各種程序狀態(tài)標(biāo)志、位控制變量存于位尋址區(qū)內(nèi)。3)數(shù)據(jù)緩沖區(qū)

30H~7FH是數(shù)據(jù)緩沖區(qū),也即用戶RAM區(qū),共80個(gè)單元。由于工作寄存器區(qū)、位尋址區(qū)、數(shù)據(jù)緩沖區(qū)統(tǒng)一編址,使用同樣的指令訪問,這三個(gè)區(qū)的單元既有自己獨(dú)特的功能,又可統(tǒng)一調(diào)度使用。因此,前兩個(gè)區(qū)未使用的單元也可作為用戶RAM單元使用,使容量較小的片內(nèi)RAM得以充分利用。

52子系列片內(nèi)RAM有256個(gè)單元,前兩個(gè)區(qū)的單元數(shù)與地址都和51子系列的一致,用戶RAM區(qū)卻為30H~FFH,有208個(gè)單元。4)堆棧和堆棧指針圖2.8MCS–51單片機(jī)堆棧PIC16F877CPU硬堆棧由8個(gè)單元組成,每個(gè)單元位長度是13位,堆棧深度固定,硬堆棧內(nèi)容出棧后棧中內(nèi)容丟失。第1次進(jìn)棧第2次進(jìn)棧第8次進(jìn)棧第1次出棧第2次出棧第7次出棧1XXXXXXXXXXXXXX(a)進(jìn)棧操作

876543217654321XX(b)出棧操作21XXXXXXXXXXXX1XXXXXXXXXXXXXX

654321XXXX特殊功能寄存器(SFR,即SpecialFunctionRegisters),又稱為專用寄存器,專用于控制、管理片內(nèi)算術(shù)邏輯部件、并行I/O口、串行I/O口、定時(shí)器/計(jì)數(shù)器、中斷系統(tǒng)等功能模塊的工作。51子系列有18個(gè)專用寄存器,占21個(gè)字節(jié),52子系列有21個(gè)專用寄存器,占26個(gè)字節(jié)。它們離散地分布在80H~0FFHRAM空間中。特殊功能寄存器地址不連續(xù),空閑地址無意義,對用戶來講,這些單元不存在。對特殊功能寄存器只能使用直接尋址方式,書寫時(shí)既可使用寄存器符合,也可使用寄存器單元地址。有12個(gè)SFR可位尋址。

3.特殊功能寄存器塊表2.5特殊功能寄存器名稱、表示符、地址一覽表表2.5特殊功能寄存器名稱、表示符、地址一覽表PIC16F877(A)數(shù)據(jù)RAM

數(shù)據(jù)存儲(chǔ)器分為4個(gè)存儲(chǔ)體,存儲(chǔ)體中包含通用寄存器和專用寄存器(SFR),存儲(chǔ)體的選擇采用狀態(tài)寄存器(STATUS)的位6(RPl)和位5(RP0),每個(gè)存儲(chǔ)體最多可包含128字節(jié),而每個(gè)存儲(chǔ)體專用寄存器放在低位存儲(chǔ)區(qū),專用寄存器上面是通用寄存器,通用寄存器采用靜態(tài)隨機(jī)訪問存儲(chǔ)器(SRAM)。所有的執(zhí)行存儲(chǔ)體都包含有專用寄存器(SFR),為減少編碼和快速訪問的目的,一些經(jīng)常訪問的專用寄存器可以從一個(gè)存儲(chǔ)體映射到另一個(gè)存儲(chǔ)體。注意:體1-體3的最后16個(gè)單元實(shí)際上是不存在的,但可以使用其地址來訪問,但是真正被訪問的單元不是地址所對應(yīng)的體1-體3的對應(yīng)單元,而是在體0中所“影射”的單元。

【例如】訪問體1中的F0H單元時(shí),真正被訪問的卻是體1中的70H單元。體2、體3也是如此。我們將體0中70H~7FH的16個(gè)單元稱之為體1-3的影射區(qū);影射區(qū)的好處是在一些較特殊的場合(如中斷響應(yīng)時(shí))對數(shù)據(jù)的保護(hù)可以省掉對RAM的體選操作)具體將在后面相關(guān)的章節(jié)中介紹。PIC16F877RAM中通用寄存器的結(jié)構(gòu)通用寄存器80B映射到70~7FH通用寄存器16B通用寄存器80B映射到70~7FH通用寄存器96B通用寄存器16B通用寄存器80B映射到70~7FH00H1FH20H70H7FH80H9FHA0HEFHF0HFFH100H10FH110H11FH120H16FH170H17FH180H18FH1A0H19FH18FH1EFH1F0H1FFHPIC16F87X特殊功能寄存器與通用寄存器不同,特殊功能寄存器在PIC16F87X系列中4個(gè)體中的布局保持了一致(重疊式設(shè)計(jì)),這是考慮到編程時(shí)節(jié)省選體操作、同時(shí)工程技術(shù)人員在使用PIC16F87X系列中不同產(chǎn)品之間編程時(shí)的兼容性(參見結(jié)構(gòu)圖)。將特殊功能寄存器劃分為:

①與CPU內(nèi)核相關(guān)的特殊功能寄存器; ②與外圍模塊相關(guān)的特殊功能寄存器。為了便于學(xué)習(xí)和掌握,先分析與CPU相關(guān)的特殊功能寄存器,而與外圍模塊相關(guān)的寄存器放到相關(guān)的章節(jié)中介紹。有六個(gè)比較常用、重要的特殊功能寄存器:狀態(tài)寄存器STATUS;間接尋址寄存器INDF;程序計(jì)數(shù)器低八位PCL;文件選擇寄存器FSR;程序計(jì)數(shù)器高位鎖存器PCLATH;中斷控制寄存器INCON。

它們在四個(gè)體上地址是互相映像的,在物理上是同一個(gè)寄存器單元。還有一些寄存器在體0、體1(或體2、體3)內(nèi)是相互映像的。這種設(shè)計(jì)的好處:訪問時(shí)不受“體選”的約束,簡化編程。MCS-51與PIC16F87X數(shù)據(jù)存儲(chǔ)器比較

存儲(chǔ)器內(nèi)都存在特殊功能寄存器與通用寄存器的劃分,51中的數(shù)據(jù)緩沖區(qū)在PIC中也屬于通用寄存器。51片內(nèi)RAM中有位尋址區(qū),PIC中沒有(整個(gè)存儲(chǔ)器基本都可以按位尋址)。存儲(chǔ)器都存在分組,但分組范圍不同。

為避免“體選”問題PIC16F87X中建有“影射區(qū)”。

數(shù)據(jù)EEPROM和Flash程序存儲(chǔ)器在正常的操作都可以讀/寫,對EEPROM的操作是單字節(jié),對程序存儲(chǔ)器的操作是字。對定義的字節(jié)或字進(jìn)行“寫”操作,實(shí)際的過程是“先擦除一然后寫”的操作。讀/寫兩種存儲(chǔ)器的操作都是通過一系列特殊寄存器(FSR)間接尋址的。這些寄存器包含EEDATA,EEDATH,EEADR,EEADRH,EECON1和EECON2。PIC16F877數(shù)據(jù)EEPROM和閃存的組織2.5并行輸入/輸出接口8051有四個(gè)8位并行接口P0~P3,共32根I/O線。它們都具有雙向I/O功能,均可以作為數(shù)據(jù)輸入/輸出使用。每個(gè)接口內(nèi)部都有一個(gè)8位數(shù)據(jù)輸出鎖存器、一個(gè)輸出驅(qū)動(dòng)器和一個(gè)數(shù)據(jù)輸入緩沖器,因此,CPU數(shù)據(jù)從并行I/O口輸出時(shí)可以得到鎖存,輸入可以得到緩沖。CPU鎖存器總線外設(shè)鎖存器CPU外設(shè)緩沖器CPU總線外設(shè)三態(tài)緩沖器CPU外設(shè)OE讀選通2.5.1P0口

1.P0口結(jié)構(gòu)

P0口是一個(gè)三態(tài)雙向口,可作為地址/數(shù)據(jù)分時(shí)復(fù)用口,也可作為通用I/O接口。其1位的結(jié)構(gòu)原理如圖2.9所示。P0口由8個(gè)這樣的電路組成。鎖存器起輸出鎖存作用,8個(gè)鎖存器構(gòu)成了特殊功能寄存器P0;場效應(yīng)管(FET)V1、V2組成輸出驅(qū)動(dòng)器,以增大帶負(fù)載能力;三態(tài)門1是引腳輸入緩沖器;三態(tài)門2用于讀鎖存器端口;與門3、反相器4及模擬轉(zhuǎn)換開關(guān)構(gòu)成了輸出控制電路。圖2.9P0口1位結(jié)構(gòu)圖P0口某位由1個(gè)輸出鎖存器、2個(gè)三態(tài)輸入緩沖器、1個(gè)輸出驅(qū)動(dòng)電路和1個(gè)輸出控制電路組成。輸出驅(qū)動(dòng)電路由一對FET(場效應(yīng)管)V1、V2組成。輸出控制電路由一個(gè)與門電路、1個(gè)反相器和1路多路開關(guān)MUX組成。2.通用I/O接口功能1.控制信號(hào)=0,V2截止,MUX接鎖存器。準(zhǔn)雙向口。2.P0口作輸出口:輸出鎖存,漏極開路輸出,需要接上拉電阻.

P0口中的輸出可以驅(qū)動(dòng)8個(gè)LSTTL負(fù)載。3.P0口作輸入口:懸浮狀態(tài),一個(gè)高阻抗的輸入口。

(1)讀鎖存器.適應(yīng)“讀一修改一寫”指令,如指令A(yù)NLP0,A(2)讀引腳.先輸出“1”,使V1截止,然后再讀。(1)在輸出數(shù)據(jù)時(shí),由于V2截止,輸出級(jí)是漏極開路電路,要使"1"信號(hào)正常輸出,必須外接上拉電阻。

(2)P0口作為通用I/O口使用時(shí),是準(zhǔn)雙向口。其特點(diǎn)是在輸入數(shù)據(jù)時(shí),應(yīng)先把口置1(寫1),此時(shí)鎖存器的Q端為0,使輸出級(jí)的兩個(gè)場效應(yīng)管V1、V2均截止,引腳處于懸浮狀態(tài),才可作高阻輸入。因?yàn)?,從P0口引腳輸入數(shù)據(jù)時(shí),V2一直處于截止?fàn)顟B(tài),引腳上的外部信號(hào)既加在三態(tài)緩沖器1的輸入端,又加在V1的漏極。假定在此之前曾輸出鎖存過數(shù)據(jù)0,則V1是導(dǎo)通的,這樣引腳上的電位就始終被箝位在低電平,使輸入高電平無法讀入。因此,在輸入數(shù)據(jù)時(shí),應(yīng)人為地先向口寫1,使V1、V2均截止,方可高阻輸入。所以說P0口作為通用I/O口使用時(shí),是準(zhǔn)雙向口。但在P0用作地址/數(shù)據(jù)分時(shí)復(fù)用功能連接外部存儲(chǔ)器時(shí),由于訪問外部存儲(chǔ)器期間,CPU會(huì)自動(dòng)向P0口的鎖存器寫入0FFH,對用戶而言,P0口此時(shí)則是真正的三態(tài)雙向口。3.端口操作MCS-51單片機(jī)有不少指令可直接進(jìn)行端口操作,例如:ANLP0,A ;(P0)←(P0)∧(A)ORLP0,#data ;(P0)←(P0)∨dataDELP0 ;(P0)←(P0)-1

這些指令的執(zhí)行過程分成"讀-修改-寫"三步,先將P0口的數(shù)據(jù)讀入CPU,在ALU中進(jìn)行運(yùn)算,運(yùn)算結(jié)果再送回P0。執(zhí)行"讀-修改-寫"類指令時(shí),CPU是通過三態(tài)門2讀回鎖存器Q端的數(shù)據(jù)來代表引腳狀態(tài)的。如果直接通過三態(tài)門1從引腳讀回?cái)?shù)據(jù),有時(shí)會(huì)發(fā)生錯(cuò)誤。例如,用一根口線去驅(qū)動(dòng)一個(gè)晶體管的基極,當(dāng)向此口線輸出1時(shí),鎖存器Q=1,V2導(dǎo)通驅(qū)動(dòng)晶體管。當(dāng)晶體管導(dǎo)通后,引腳上的電平被拉到低電平(0.7V),因而,若從引腳直接讀回?cái)?shù)據(jù),原為1的狀態(tài)則會(huì)錯(cuò)讀為0,所以要從鎖存器Q端讀取數(shù)據(jù)。4.地址/數(shù)據(jù)分時(shí)復(fù)用功能1.控制信號(hào)=1,P0端口作為地址/數(shù)據(jù)總線使用。2.輸出:地址/數(shù)據(jù),不需外接上拉電阻.3.輸入:數(shù)據(jù),通過“讀引腳”完成。*當(dāng)8051片外擴(kuò)展R腳、I/0口、ROM時(shí),P0口必須作為地址/數(shù)據(jù)總線使用。真雙向口。P0口在有外部擴(kuò)展存儲(chǔ)器時(shí)被作為地址/數(shù)據(jù)總線口,此時(shí)是一個(gè)真正的雙向口;在沒有外部擴(kuò)展存儲(chǔ)器時(shí),P0口也可作為通用的I/O接口,但此時(shí)只是一個(gè)準(zhǔn)雙向口。P0口的輸出級(jí)具有驅(qū)動(dòng)8個(gè)LSTTL負(fù)載的能力,即輸出電流不小于800μA。P0口特點(diǎn)2.5.2P1口

P1口為準(zhǔn)雙向口,其1位的內(nèi)部結(jié)構(gòu)如圖2.10所示。它在結(jié)構(gòu)上與P0口的區(qū)別在于輸出驅(qū)動(dòng)部分。其輸出驅(qū)動(dòng)部分由場效應(yīng)管V1與內(nèi)部上拉電阻組成。當(dāng)其某位輸出高電平時(shí),可以提供拉電流負(fù)載,不必像P0口那樣需要外接上拉電阻。

P1口只有通用I/O接口一種功能(對51子系列),其輸入輸出原理特性與P0口作為通用I/O接口使用時(shí)一樣,請讀者自己分析。P1口具有驅(qū)動(dòng)4個(gè)LSTTL負(fù)載的能力。另外,對于52子系列單片機(jī)P1口P1.0與P1.1除作為通用I/O接口線外,還具有第二功能,即P1.0可作為定時(shí)器/計(jì)數(shù)器2的外部計(jì)數(shù)脈沖輸入端T2,P1.1可作為定時(shí)器/計(jì)數(shù)器2的外部控制輸入端T2EX。圖2.10P1口1位結(jié)構(gòu)圖2.5.3P2口圖2.11P2口1位結(jié)構(gòu)圖

當(dāng)作為準(zhǔn)雙向通用I/O口使用時(shí),控制信號(hào)使轉(zhuǎn)換開關(guān)接向左側(cè),鎖存器Q端經(jīng)反相器3接V1,其工作原理與P1相同,也具有輸入、輸出、端口操作三種工作方式,負(fù)載能力也與P1相同。當(dāng)作為外部擴(kuò)展存儲(chǔ)器的高8位地址總線使用時(shí),控制信號(hào)使轉(zhuǎn)換開關(guān)接向右側(cè),由程序計(jì)數(shù)器PC來的高8位地址PCH,或數(shù)據(jù)指針DPTR來的高8位地址DPH經(jīng)反相器3和V1原樣呈現(xiàn)在P2口的引腳上,輸出高8位地址A8~A15。在上述情況下,口鎖存器的內(nèi)容不受影響,所以,取指或訪問外部存儲(chǔ)器結(jié)束后,由于轉(zhuǎn)換開關(guān)又接至左側(cè),使輸出驅(qū)動(dòng)器與鎖存器Q端相連,引腳上將恢復(fù)原來的數(shù)據(jù)。2.5.4P3口圖2.12P3口1位結(jié)構(gòu)圖

MCLRRA

OSC1RB

PIC16F877RC

OSC2RDV

GNDRE

16F877I/O端口68883RA端口RA端口由6個(gè)I/O位組成,他們有的具有2個(gè)功能或3個(gè)功能。RA5~RA0:雙向可編程I/O端口。AN4~AN0(RA5、RA3~RA0):ADC5路模擬信號(hào)輸入端。TOCKI(RA4):定時(shí)器0時(shí)鐘輸入端。

SS(RA5):在SPI通信中用于選擇從動(dòng)器件(外圍設(shè)備)?!繴REF:參考電源,對應(yīng)+VREF(RA3)和

-VREF(RA2)RA5、RA3~RA0結(jié)構(gòu)RA4結(jié)構(gòu)PIC16F877I/O端口特點(diǎn)幾乎全是真雙向口。每一個(gè)端n的每一個(gè)引腳在使用前應(yīng)該要明確是作為輸入還是輸出,這需要通過軟件設(shè)定其方向控制寄存器TRISx實(shí)現(xiàn)。引腳驅(qū)動(dòng)能力為灌入或拉出25A,當(dāng)輸出這么大電流時(shí),引腳上的實(shí)際電壓將發(fā)生變化,高電平輸出的電壓將被拉低,低電平輸出的電壓將被抬升,但變化后的電壓值還是符合TTL標(biāo)準(zhǔn)的。2.6定時(shí)器/計(jì)數(shù)器

實(shí)現(xiàn)定時(shí)或計(jì)數(shù),通常采用以下三種方法:

1.硬件法硬件定時(shí)功能完全由硬件電路完成,不占用CPU時(shí)間。但當(dāng)要求改變定時(shí)時(shí)間時(shí),只能通過改變電路中的元件參數(shù)來實(shí)現(xiàn),很不靈活。

2.軟件法軟件定時(shí)是執(zhí)行一段循環(huán)程序來進(jìn)行時(shí)間延時(shí),優(yōu)點(diǎn)是無額外的硬件開銷。但犧牲了CPU的時(shí)間。

3.可編程定時(shí)器/計(jì)數(shù)器

MCS一51系列單片機(jī)內(nèi)部提供2個(gè)可編程的定時(shí)器/計(jì)數(shù)器

T0和T1,它們可以用于定時(shí)或者對外部脈沖計(jì)數(shù),還可以作為串行口的波特率發(fā)生器。定時(shí)器達(dá)到預(yù)定定時(shí)時(shí)間或者計(jì)數(shù)器計(jì)滿數(shù)時(shí),給出溢出標(biāo)志以發(fā)出內(nèi)部中斷。組成:6個(gè)SFR寄存器,包括TMOD、TCON、TH0、TL0、TH1和TL1。定時(shí)器/計(jì)數(shù)器的核心:一個(gè)加1計(jì)數(shù)器,其基本功能是加1計(jì)數(shù)。計(jì)數(shù)功能:若是對單片機(jī)的T0、T1引腳輸入信號(hào)進(jìn)行計(jì)數(shù),即是計(jì)數(shù)功能。當(dāng)外部輸入信號(hào)由1至0跳變時(shí),計(jì)數(shù)器加l。定時(shí)功能:若是對單片機(jī)內(nèi)部的機(jī)器周期進(jìn)行計(jì)數(shù),從而得到定時(shí),這就是定時(shí)功能。每個(gè)機(jī)器周期(等于12個(gè)晶體振蕩周期)計(jì)數(shù)器加1。定時(shí)功能和計(jì)數(shù)功能的設(shè)定和控制都是通過軟件來設(shè)定的。定時(shí)器/計(jì)數(shù)器概述2.6.1定時(shí)器/計(jì)數(shù)器T0、T1的結(jié)構(gòu)圖2.13定時(shí)器/計(jì)數(shù)器T0、T1的結(jié)構(gòu)框圖1.16位加法器定時(shí)器/計(jì)數(shù)器的核心是16位加法計(jì)數(shù)器,圖中用特殊功能寄存器TH0、TL0及TH1、TL1表示。TH0、TL0是定時(shí)器/計(jì)數(shù)器0加法計(jì)數(shù)器的高8位和低8位,TH1、TL1是定時(shí)器/計(jì)數(shù)器1加法計(jì)數(shù)器的高8位和低8位。作計(jì)數(shù)器用時(shí),加法計(jì)數(shù)器對芯片引腳T0(P3.4)或T1(P3.5)上的輸入脈沖計(jì)數(shù)。每輸入一個(gè)脈沖,加法計(jì)數(shù)器增加1。加法計(jì)數(shù)溢出時(shí)可向CPU發(fā)出中斷請求信號(hào)。

作定時(shí)器用時(shí),加法計(jì)數(shù)器對內(nèi)部機(jī)器周期脈沖Tcy計(jì)數(shù)。由于機(jī)器周期是定值,所以對Tcy的計(jì)數(shù)就是定時(shí),如Tcy=1μs,計(jì)數(shù)值100,相當(dāng)于定時(shí)100μs。加法計(jì)數(shù)器的初值可以由程序設(shè)定,設(shè)置的初值不同,計(jì)數(shù)值或定時(shí)時(shí)間就不同。在定時(shí)器/計(jì)數(shù)器的工作過程中,加法計(jì)數(shù)器的內(nèi)容可用程序讀回CPU。GATE=l,T0、Tl的啟動(dòng)由INTi引腳和TRi位共同控制。只有INTi引腳為高電平時(shí),TRi置“l(fā)”才能啟動(dòng)定時(shí)器計(jì)數(shù)器。GATE=0,T0、T1由軟件設(shè)置TRi=1來控制啟動(dòng)。TRi=0,停止。

定時(shí)或計(jì)數(shù)功能選擇位,當(dāng)C/T=1時(shí)為計(jì)數(shù)方式;當(dāng)C/=0時(shí)為定時(shí)方式。

M1、M0:定時(shí)器/計(jì)數(shù)器工作方式選擇位,其值與工作方式對應(yīng)關(guān)系如表2.6所示。

GATE:門控位,用于控制定時(shí)器/計(jì)數(shù)器的啟動(dòng)是否受外部中斷請求信號(hào)的影響。如果GATE=1,定時(shí)器/計(jì)數(shù)器0的啟動(dòng)受芯片引腳(P3.2)控制,定時(shí)器/計(jì)數(shù)器1的啟動(dòng)受芯片引腳(P3.3)控制;如果GATE=0,定時(shí)器/計(jì)數(shù)器的啟動(dòng)與引腳、無關(guān)。一般情況下GATE=0。表2.6定時(shí)器/計(jì)數(shù)器工作方式M1M0工作方式方式說明00013位定時(shí)器/計(jì)數(shù)器01116位定時(shí)器/計(jì)數(shù)器102具有自動(dòng)重裝初值的8位定時(shí)器/計(jì)數(shù)器113

3.定時(shí)器/計(jì)數(shù)器控制寄存器TCONTCON控制寄存器各位定義如下:TF1TR1TF0TR0IE1IT1IE0IT0TCON字節(jié)地址88HD7D6D5D4D3D2D1D0TF0(TF1):T0(T1)定時(shí)器/計(jì)數(shù)器溢出中斷標(biāo)志位。當(dāng)T0(T1)計(jì)數(shù)溢出時(shí),由硬件置位,并在允許中斷的情況下,向CPU發(fā)出中斷請求信號(hào),CPU響應(yīng)中斷轉(zhuǎn)向中斷服務(wù)程序時(shí),由硬件自動(dòng)將該位清零。

TR0(TR1):T0(T1)運(yùn)行控制位。當(dāng)TR0(TR1)=1時(shí)啟動(dòng)T0(T1);TR0(TR1)=0時(shí)關(guān)閉T0(T1)。該位由軟件進(jìn)行設(shè)置。2.6.2定時(shí)器/計(jì)數(shù)器T0、T1的四種工作方式1.工作方式0圖2.14定時(shí)器/計(jì)數(shù)器方式0的邏輯結(jié)構(gòu)

可用程序?qū)?~8191(213-1)的某一數(shù)送入THx、TLx作為初值。THx、TLx從初值開始加法計(jì)數(shù),直至溢出。所以初值不同,定時(shí)時(shí)間或計(jì)數(shù)值不同。必須注意的是:加法計(jì)數(shù)器THx溢出后,必須用程序重新對THx、TLx設(shè)置初值,否則下一次THx、TLx將從0開始計(jì)數(shù)。如果C/T=1,圖2.14中開關(guān)S1自動(dòng)地接在下面,定時(shí)器/計(jì)數(shù)器工作在計(jì)數(shù)狀態(tài),加法計(jì)數(shù)器對Tx引腳上的外部脈沖計(jì)數(shù)。計(jì)數(shù)值由下式確定:N=213–x=8192–x

式中N為計(jì)數(shù)值,x是THx、TLx的初值。x=8191時(shí)為最小計(jì)數(shù)值1,x=0時(shí)為最大計(jì)數(shù)值8192,即計(jì)數(shù)范圍為1~8192。定時(shí)器/計(jì)數(shù)器在每個(gè)機(jī)器周期的S5P2期間采樣Tx腳輸入信號(hào),若一個(gè)機(jī)器周期的采樣值為1,下一個(gè)機(jī)器周期的采樣值為0,則計(jì)數(shù)器加1。由于識(shí)別一個(gè)高電平到低電平的跳變需兩個(gè)機(jī)器周期,所以對外部計(jì)數(shù)脈沖的頻率應(yīng)小于fosc/24,且高電平與低電平的延續(xù)時(shí)間均不得小于1個(gè)機(jī)器周期。C/T=0時(shí)為定時(shí)器方式,開關(guān)S1自動(dòng)地接在上面,加法計(jì)數(shù)器對機(jī)器周期脈沖Tcy計(jì)數(shù),每個(gè)機(jī)器周期TLx加1。定時(shí)時(shí)間由下式確定:T=N×Tcy=(8192-x)Tcy式中Tcy為單片機(jī)的機(jī)器周期。如果振蕩頻率fosc=12MHz,則Tcy=1μs,定時(shí)范圍為1~8192μs。

定時(shí)器/計(jì)數(shù)器的啟動(dòng)或停止由TRx控制。當(dāng)GATE=0時(shí),只要用軟件置TRx=1,開關(guān)S2閉合,定時(shí)器/計(jì)數(shù)器就開始工作;置TRx=0,S2打開,定時(shí)器/計(jì)數(shù)器停止工作。

GATE=1為門控方式。此時(shí),僅當(dāng)TRx=1且引腳上出現(xiàn)高電平(即無外部中斷請求信號(hào)),S2才閉合,定時(shí)器/計(jì)數(shù)器開始工作。如果引腳上出現(xiàn)低電平(即有外部中斷請求信號(hào)),則停止工作。所以,門控方式下,定時(shí)器/計(jì)數(shù)器的啟動(dòng)受外部中斷請求的影響,可用來測量引腳上出現(xiàn)正脈沖的寬度。2.工作方式1

當(dāng)M1M0=01時(shí),定時(shí)器/計(jì)數(shù)器設(shè)定為工作方式1,構(gòu)成了16位定時(shí)器/計(jì)數(shù)器。此時(shí)THx、TLx都是8位加法計(jì)數(shù)器。其它與工作方式0相同。在方式1時(shí),計(jì)數(shù)器的計(jì)數(shù)值由下式確定:

N=216-x=65536-x計(jì)數(shù)范圍為1~65536。定時(shí)器的定時(shí)時(shí)間由下式確定:T=N×Tcy=(65536-x)Tcy如果fosc=12MHz,則Tcy=1μs,定時(shí)范圍為1~65536μs。3.工作方式2圖2.15定時(shí)器/計(jì)數(shù)器方式2的邏輯結(jié)構(gòu)在工作方式2時(shí),計(jì)數(shù)器的計(jì)數(shù)值由下式確定:N=28-x=256-x計(jì)數(shù)范圍為1~256。定時(shí)器的定時(shí)值由下式確定:T=N×Tcy=(256-x)Tcy如果fosc=12MHz,則Tcy=1μs,定時(shí)范圍為1~256μs。4.工作方式3圖2.16定時(shí)器/計(jì)數(shù)器方式3的邏輯結(jié)構(gòu)P85例33要求用單片機(jī)內(nèi)部定時(shí)/計(jì)數(shù)器定時(shí)1分鐘。(設(shè)fosc=12MHZ)設(shè)計(jì)定時(shí)器/計(jì)數(shù)器應(yīng)用程序三步驟:

(1)根據(jù)定時(shí)或計(jì)數(shù)要求確定適當(dāng)?shù)亩〞r(shí)/計(jì)數(shù)方式、計(jì)算初值,設(shè)定特殊功能寄存器TMOD、THx、TLx。

(2)根據(jù)對定時(shí)器/計(jì)數(shù)器的要求設(shè)置中斷系統(tǒng),即設(shè)置中斷允許控制寄存器IE和中斷優(yōu)先級(jí)控制寄存器IP

(3)啟動(dòng)定時(shí)器/計(jì)數(shù)器,即置位TCON中的TRx位。題目分析:①定時(shí)器/計(jì)數(shù)器一次溢出的最長定時(shí)時(shí)間為65.536ms。②可讓T0工作于方式1,定時(shí)1ms;T1工作于方式1溢出脈沖計(jì)數(shù)60000次,1ms×60000=60s。

計(jì)算初值:T0:65536-1000=64536=FC18HT1:65536-60000=5536=15A0H

GATEC/TMIM0GATEC/TM1M0TMOD字節(jié)地址89HD7D6D5D4D3D2D1D0T1T001010001EA—ET2ESET1EX1ET0EX0IE字節(jié)地址A8HD7D6D5D4D3D2D1D010001000③通過查詢方式獲取溢出脈沖計(jì)數(shù)。

PIC的定時(shí)/計(jì)數(shù)器及TMR0模塊的特征PIC16F87X單片機(jī)配置了3個(gè)定時(shí)/計(jì)數(shù)器,分別為: TMR0、TMR1和TMR2,它們都可實(shí)現(xiàn)“定時(shí)、計(jì) 數(shù)”的通用功能。

TMR0:8位寬,有一個(gè)可選的預(yù)分頻器,作通用目的;

TMR1:16位寬,附帶可編程的預(yù)分頻器,還附帶一個(gè)可選的低頻時(shí)基振蕩器。與CCP(捕捉/比較/PMW)模塊配合使用以實(shí)現(xiàn)“輸入捕捉/輸出比較”功能;

TMR2:8位寬,同時(shí)附帶一個(gè)可編程的預(yù)分頻器和一個(gè)可編程的后分頻器,還附帶一個(gè)周期寄存器PR2和 比較器,與CCP模塊配合實(shí)現(xiàn)PWM信號(hào)的產(chǎn)生。3個(gè)定時(shí)/計(jì)數(shù)器,其核心部分都是加一計(jì)數(shù)器。由內(nèi)部時(shí)鐘或外部信號(hào)作為計(jì)數(shù)脈沖,從0或某一個(gè)初值開始加一計(jì)數(shù),當(dāng)計(jì)數(shù)器由全“1”再加一后就會(huì)產(chǎn)生一個(gè)“溢出”信號(hào)并且計(jì)數(shù)器回零進(jìn)入下一輪計(jì)數(shù)。定時(shí)/計(jì)數(shù)器的“溢出”信號(hào)會(huì)建立一個(gè)相應(yīng)的“溢出標(biāo)志”即中斷標(biāo)志位(如:T0IF、TMR1IF和TMR2IF)。三個(gè)定時(shí)器的編程基本方法是一致的,這里以TMR0為主介紹其編程和使用方法。其它的將在后面的章節(jié)中介紹。加一計(jì)數(shù)器

計(jì)數(shù)脈沖CPTF溢出標(biāo)志TF利用計(jì)數(shù)器的溢出信號(hào)實(shí)現(xiàn)定時(shí)/延時(shí)的操作示意圖定時(shí)/計(jì)數(shù)器TMR0具有以下特征:核心是一個(gè)8位寬,由計(jì)數(shù)脈沖的上升沿觸發(fā)計(jì)數(shù)的循環(huán)累加計(jì)數(shù)寄存器TMR0;TMR0在文件寄存器區(qū)域內(nèi)統(tǒng)一編址的地址為01H或101H(參見51頁);用戶軟件可以直接讀出或?qū)懭胗?jì)數(shù)器的內(nèi)容;具有一個(gè)可選用的8位“預(yù)分頻器”(增加計(jì)數(shù)寬度);用于計(jì)數(shù)的脈沖信號(hào)源可以選擇內(nèi)部或外部,即可用于定時(shí)/計(jì)數(shù)兩種不同的工作方式;外信號(hào)計(jì)數(shù)時(shí),由軟件設(shè)定:上升或下降沿觸發(fā)計(jì)數(shù);具有溢出中斷功能;TMR0計(jì)數(shù)不可控,只要單片機(jī)上電,就處于計(jì)數(shù)狀態(tài)。返回相關(guān)寄存器的簡要說明TMR0:8位的加一計(jì)數(shù)器;INTCON:中斷控制寄存器。用于設(shè)定單片機(jī)總的中斷使能、TMR0的中斷時(shí)能和TMR0的溢出標(biāo)志;OPTION_REG:選項(xiàng)寄存器。用于設(shè)定TMR0的預(yù)分頻器的分頻比以及預(yù)分頻器的分配方向(TMR0或WDT);TRISA:在計(jì)數(shù)方式中用于設(shè)定外部計(jì)數(shù)脈沖輸入引腳為輸入狀態(tài)。表8.1與TMR0相關(guān)的寄存器(參見51頁)寄存器名稱寄存器符號(hào)寄存器地址寄存器內(nèi)容bit7bit6bit5bit4bit3bit2bit1bit0定時(shí)/計(jì)數(shù)器TMR001H101H8位累加計(jì)數(shù)寄存器選項(xiàng)寄存器OPTION_REG81H181HRBPUINTEDGT0CST0SEPSAPS2PS1PS0中斷控制寄存器INTCON0BH8BH10BH18BHGIEPEIET0IEINTERBIET0IFINTFRBIFA口方向寄存器TRISA85HTRIS5TRIS4TRIS3TRIS2TRIS1TRIS0(一)選項(xiàng)寄存器OPTION_REGPS2~PS0:預(yù)分頻器分頻比選擇位bit7bit6bit5bit4bit3bit2bit1bit0RBPUINTEDGT0CST0SEPSAPS2PS1PS0PS2~PS0TMR0比率WDT比率0000010100111001011101111:21:41:81:161:321:641:1281:2561:11:21:41:81:161:321:641:128返回上次預(yù)分頻器的作用預(yù)分頻器實(shí)際上也是一個(gè)計(jì)數(shù)器。預(yù)分頻器的分頻比決定了二進(jìn)制計(jì)數(shù)器的位數(shù)??梢岳斫鉃閷㈩A(yù)分頻器與加一計(jì)數(shù)器級(jí)聯(lián)起來,構(gòu)成一個(gè)寬度為兩者之和的計(jì)數(shù)器;預(yù)分頻器的作用:使用它時(shí)可以增加TMR0的計(jì)數(shù)范圍;預(yù)分頻器的分頻系數(shù)是可變的??梢愿鶕?jù)需要選擇。8位加一計(jì)數(shù)器T0IF預(yù)分頻器(計(jì)數(shù)器)分頻比設(shè)定fosc/4溢出標(biāo)志2.7串行輸入/輸出口計(jì)算機(jī)通信是計(jì)算機(jī)-計(jì)算機(jī)、計(jì)算機(jī)-外設(shè)之間的信息交換。常用的計(jì)算機(jī)通信方式:網(wǎng)絡(luò)通信、總線、串口等。通信種類:串行通信、并行通信

2.7.1串行通信的基本概念圖2.17通信的兩種基本方式(a)并行通信;(b)串行通信串行通信有同步和異步兩種方式

同步方式:傳送和接收有嚴(yán)格的同步時(shí)鐘控制??刂茝?fù)雜、成本高。

異步方式:不需要嚴(yán)格的同步信號(hào),也不需要數(shù)據(jù)流的連續(xù)性。在串行通信中常用。

數(shù)據(jù)幀(一幀數(shù)據(jù)):包含起始位(“0”電平)、數(shù)據(jù)位、奇偶校驗(yàn)位、停止位("1”電平)等組成。1.異步傳送方式圖2.18串行異步傳送的字符格式(a)字符格式;(b)有空閑位的字符格式

在串行異步傳送中,通信雙方必須事先約定:

(1)字符格式。雙方要事先約定字符的編碼形式、奇偶校驗(yàn)形式及起始位和停止位的規(guī)定。例如用ASCII碼通信,有效數(shù)據(jù)為7位,加一個(gè)奇偶校驗(yàn)位、一個(gè)起始位和一個(gè)停止位共10位。當(dāng)然停止位也可以大于1位。

(2)波特率(Baudrate)。波特率就是數(shù)據(jù)的傳送速率,即每秒鐘傳送的二進(jìn)制位數(shù),單位為位/秒。它與字符的傳送速率(字符/秒)之間有以下關(guān)系:波特率=一個(gè)字符的二進(jìn)制編碼位數(shù)×字符/秒要求發(fā)送端與接收端的波特率必須一致。異步串行通信的傳送速率一般為50~9600波特,常用于計(jì)算機(jī)到CRT終端和字符打印機(jī)之間的通信、直通電報(bào)以及無線電通信的數(shù)據(jù)發(fā)送等。2.同步傳送圖2.19同步通信的格式圖2.20串行通信數(shù)據(jù)傳送的三種方式(a)單工方式;(b)半雙工方式;(c)全雙工方式2.7.2MCS-51單片機(jī)的串行口通用異步接收發(fā)送器(UART)1.功能與結(jié)構(gòu)表2.7串行口的工作方式SM0SM1工作方式功能波特率00方式0移位寄存器方式,用于并行I/O擴(kuò)展fosc/1201方式18位通用異步接收器/發(fā)送器可變10方式29位通用異步接收器/發(fā)送器fosc/32或fosc/6411方式39位通用異步接收器/發(fā)送器可變串行口控制寄存器SCON的格式如下:SM0SM1SM2RENTB8RB8T1RISCON字節(jié)地址98HD7D6D5D4D3D2D1D0SM0、SM1:由軟件置位或清零,用于選擇串行口四種工作方式。

SM2:多機(jī)通信控制位。在方式2和方式3中,如SM2=1,則接收到的第9位數(shù)據(jù)(RB8)為0時(shí)不啟動(dòng)接收中斷標(biāo)志RI(即RI=0),并且將接收到的前8位數(shù)據(jù)丟棄;RB8為1時(shí),才將接收到的前8位數(shù)據(jù)送入SBUF,并置位RI,產(chǎn)生中斷請求。當(dāng)SM2=0時(shí),則不論第9位數(shù)據(jù)為0或1,都將前8位數(shù)據(jù)裝入SBUF中,并產(chǎn)生中斷請求。在方式0時(shí),SM2必須為0。REN:允許串行接收控制位。若REN=0,則禁止接收;REN=1,則允許接收,該位由軟件置位或復(fù)位。

TB8:發(fā)送數(shù)據(jù)D8位。在方式2和方式3時(shí),TB8為所要發(fā)送的第9位數(shù)據(jù)。在多機(jī)通信中,以TB8位的狀態(tài)表示主機(jī)發(fā)送的是地址還是數(shù)據(jù):TB8=0為數(shù)據(jù),TB8=1為地址;也可用作數(shù)據(jù)的奇偶校驗(yàn)位。該位由軟件置位或復(fù)位。

RB8:接收數(shù)據(jù)D8位。在方式2和方式3時(shí),接收到的第9位數(shù)據(jù),可作為奇偶校驗(yàn)位或地址幀或數(shù)據(jù)幀的標(biāo)志。方式1時(shí),若SM2=0,則RB8是接收到的停止位。在方式0時(shí),不使用RB8位。TI:發(fā)送中斷標(biāo)志位。在方式0時(shí),當(dāng)發(fā)送數(shù)據(jù)第8位結(jié)束后,或在其它方式發(fā)送停止位后,由內(nèi)部硬件使TI置位,向CPU請求中斷。CPU在響應(yīng)中斷后,必須用軟件清零。此外,TI也可供查詢使用。

RI:接收中斷標(biāo)志位。在方式0時(shí),當(dāng)接收數(shù)據(jù)的第8位結(jié)束后,或在其它方式接收到停止位的中間由內(nèi)部硬件使RI置位,向CPU請求中斷。同樣,在CPU響應(yīng)中斷后,也必須用軟件清零。RI也可供查詢使用。電源控制寄存器的格式如下:SMOD---------CF1CF0PDIDLD7D6D5D4D3D2D1D0PCON字節(jié)地址97HPCON的最高位SMOD是串行口波特率系數(shù)控制位。SMOD=1時(shí),波特率增大一倍。其余各位與串行口無關(guān)。2.串行口的工作方式1)方式0:方式0以8位數(shù)據(jù)為一幀進(jìn)行傳輸,不設(shè)起始位和停止位,先發(fā)送或接收最低位。其一幀數(shù)據(jù)格式如下:使用方式0實(shí)現(xiàn)數(shù)據(jù)的移位輸入/輸出時(shí),實(shí)際上是把串行口變成為并行口使用。串行口作為并行輸出口使用時(shí),要有“串人并出”的移位寄存器(例如CD4094、74Lsl64等)配合。方式0時(shí),移位操作(串人或串出)的波特率是固定的,波特率為單片機(jī)晶振頻率的1/12,如晶振頻率fosc表示,則波特率為fosc/12。按此波特率也就是一個(gè)機(jī)器周期進(jìn)行一次移位,如fosc=12MH:,則波特率為1Mb/s,即1ūs移位一次。圖2.21串行口方式0結(jié)構(gòu)示意圖發(fā)送接收工作方式1以10位數(shù)據(jù)為一幀進(jìn)行傳輸,設(shè)有1個(gè)起始位(0)、8個(gè)數(shù)據(jù)位,l個(gè)停止位(1),其一幀數(shù)據(jù)格式如下:2)方式1發(fā)送時(shí),數(shù)據(jù)從TXD(P3.0)端輸出,當(dāng)TI=0,執(zhí)行數(shù)據(jù)寫入發(fā)送緩沖器SBUF指令時(shí),就啟動(dòng)了串行口數(shù)據(jù)的發(fā)送操作。指令為:MOVSBUF,A接收時(shí),數(shù)據(jù)從RXD(P3.0)端輸入,SCON的REN位應(yīng)處于允許接收狀態(tài)(REN=1)。在此前提下,串行口采樣RXD端,當(dāng)采樣到從l向0的狀態(tài)跳變時(shí),就認(rèn)定是接收到起始位。①如果RI=0、SM2=0,接收控制器發(fā)出"裝載SBUF"信號(hào),將8位數(shù)據(jù)裝入接收數(shù)據(jù)緩沖器SBUF,停止位裝入RB8,并置RI=1,向CPU申請中斷。②如果RI=0、SM2=1,那么只有停止位為1才發(fā)生上述操作。③RI=0、SM2=1且停止位為0,所接收的數(shù)據(jù)不裝入SBUF,數(shù)據(jù)將會(huì)丟失。④如果RI=1,則所接收的數(shù)據(jù)在任何情況下都不裝入SBUF,即數(shù)據(jù)丟失。無論出現(xiàn)哪一種情況,跳變檢測器將繼續(xù)采樣RXD引腳的負(fù)跳變,以便接收下一幀信息。圖2.22串行口方式1、2、3結(jié)構(gòu)示意圖3)方式2與方式3

方式2、方式3都是9位異步通信接口,其結(jié)構(gòu)示意圖如圖2.22所示。發(fā)送或接收一幀信息由11位組成,其中1位起始位、9位數(shù)據(jù)位和1位停止位。方式2與方式3僅波特率不同,方式2的波特率為fosc/32(SMOD=1時(shí))或fosc/64(SMOD=0時(shí)),而方式3的波特率由定時(shí)器/計(jì)數(shù)器T1及SMOD決定。在方式2、方式3時(shí),發(fā)送、接收數(shù)據(jù)的過程與方式1基本相同,所不同的僅在于對第9位數(shù)據(jù)的處理上。發(fā)送時(shí),第9位數(shù)據(jù)由SCON中的TB8位提供。接收數(shù)據(jù)時(shí),當(dāng)?shù)?位數(shù)據(jù)移入移位寄存器后,將8位數(shù)據(jù)裝入SBUF,第9位數(shù)據(jù)裝入SCON中的RB8。在工作方式2下,字符還是8個(gè)數(shù)據(jù)位,只不過增加了一個(gè)第9個(gè)數(shù)據(jù)位(D8),而且其功能由用戶確定,是一個(gè)可編程位。在發(fā)送數(shù)據(jù)時(shí),應(yīng)預(yù)先在SCON的TB8位中把第9個(gè)數(shù)據(jù)位的內(nèi)容準(zhǔn)備好。這可使用如下指令完成:

SETBTB8;TB8位置1

CLRTB8;TB8位清0發(fā)送數(shù)據(jù)(D0一D7)由MOV指令向SBUF寫人,而D8位的內(nèi)容分別由硬件電路從TBS中直接送到發(fā)送移位寄存器的第9位,并以此來啟動(dòng)串行發(fā)送。一個(gè)字符幀發(fā)送完畢后,將Tl位置l,其他過程與工作方式l相同。工作方式2的接收過程也與方式1基本類似,所不同的只在第9數(shù)據(jù)位上,串行口把接收到的前8個(gè)數(shù)據(jù)位送人SBUF,而把第9數(shù)據(jù)位送入RB8。3.波特率設(shè)置串行口的4種工作方式對應(yīng)著三種波特率模式。對于方式0,波特率是固定的,為fosc/12。對于方式2,波特率由振蕩頻率fosc和SMOD(PCON.7)所決定。其對應(yīng)公式為波特率=2SMOD×fosc/64

當(dāng)SMOD=0時(shí),波特率為fosc/64;當(dāng)SMOD=1時(shí),波特率為fosc/32。對于方式1和方式3,波特率由定時(shí)器/計(jì)數(shù)器T1的溢出

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論