/script> PIC系列單片機(jī)是美國Microchip公司推出的具有精簡(jiǎn)指令集高性能8位單片機(jī),其優(yōu)點(diǎn)是引腳少,性能優(yōu)越,可直接帶LED負(fù)載,具有低功耗省電模式,可廣泛應(yīng)用于復(fù)雜程度較低的場(chǎng)合。十多年來PIC系列單片正以迅猛的速度發(fā)展。
在這一章節(jié)里我們將以PIC16C5X系列單片機(jī)為例,詳細(xì)講解PIC單片機(jī)的內(nèi)部結(jié)構(gòu)及工作原理。
[1].PIC16C5X單片機(jī)概況
PIC16C5X屬CMOS單片機(jī),是一個(gè)低價(jià)位高性能8位單片機(jī),使用了僅有33條精簡(jiǎn)指令集、單字節(jié)單周期指令,每條指令執(zhí)行時(shí)間最快可達(dá)200ns。易于記憶和使用的指令系統(tǒng)可大大減少產(chǎn)品的開發(fā)時(shí)間。多種時(shí)鐘振蕩電路睡眠低功耗省電模式及WDT(看門狗)帶碼保護(hù)功能,這些特性具有較大優(yōu)勢(shì)。PIC16C5X系列單片機(jī)可廣泛應(yīng)用于電機(jī)控制、汽車電路、家用電器等領(lǐng)域。
[2].PIC16C5X單片機(jī)主要性能
RISC精簡(jiǎn)指令集,指令僅有33條,指令長(zhǎng)度為12位。 絕大部分均為單機(jī)器周期指令。 工作速度高,最快可達(dá)200ns(20MHz時(shí)鐘時(shí))。 數(shù)據(jù)長(zhǎng)度為8位。 片內(nèi)程序存儲(chǔ)器容量為512-2kbyte。 片內(nèi)靜態(tài)數(shù)據(jù)存儲(chǔ)器(SRAM)為25-73byte 硬件組成7個(gè)專用寄存器 兩級(jí)硬件堆棧。 有直接、間接、相對(duì)和位尋址功能。 12-20條I/O引腳,每條引腳均可設(shè)置為輸入和輸出態(tài)。 多種時(shí)鐘振蕩電路及WDT定時(shí)器電路。 寬工作電壓范圍和低功耗模式:工作電壓為2.5V-6.0V,典型工作電流為2mA,睡眠狀態(tài)僅為3uA。 程序保密位,有效地保護(hù)用戶的產(chǎn)權(quán)。
PIC16C5X系列單片機(jī)有多種不同的程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)、I/O引腳、振蕩類型、振蕩頻率及封裝形式。這些器件可為研發(fā)實(shí)驗(yàn)提供方便,四種振蕩方式是RC、XT、HS和LP,所需的振蕩器是通過對(duì)片內(nèi)的EPROM編程實(shí)現(xiàn)的,未編程狀態(tài)器件為默認(rèn)的RC振蕩方式。
下表是PIC16C5X系列單片機(jī)一覽表:
|
| PIC16C5X系列單片機(jī)一覽表 |
| 型號(hào) | EPROM | RAM | 時(shí)鐘頻率 | 定時(shí)器 | 工作電壓V | I/O口數(shù) | 封裝形式 |
| PIC16C52 | 384x12 | 25 | DC-4MHz | 1 | 2.5-6.0 | 12 | 18DIP/SOIC |
| PIC16C54 | 512x12 | DC-20MHz | 1+WDT |
| PIC16C55 | 20 | 28DIP/SOIC |
| PIC16C56 | 1024 | 12 | 18DIP/SOIC |
| PIC16C57 | 2048 | 72 | 20 | 28DIP/SOIC |
| PIC16C58 | 73 | 12 | 18DIP/SOIC |
[3].PIC16C5X單片機(jī)引腳圖
| |
|
PIC16C5X系列單片機(jī)有兩種封裝形式,一種是雙列直插方式,另一種是表面貼裝方式。其引腳如上圖所示,F(xiàn)對(duì)其功能引腳簡(jiǎn)述如下:
[1].RA0-RA3 I/O輸入輸出口A,對(duì)應(yīng)內(nèi)部的f5,是一個(gè)4位I/O端口,可位控。
[2].RB0-RB7 I/O輸入輸出口B,對(duì)應(yīng)內(nèi)部的f6,是一個(gè)8位I/O端口,可位控。
[3].RC0-RC3 I/O輸入輸出口C,對(duì)應(yīng)內(nèi)部的f7,是一個(gè)8位I/O端口,可位控。只有PIC16C55和PIC16C57才有。
[4].RTCC 實(shí)時(shí)時(shí)鐘/計(jì)數(shù)器輸入端,在此端口輸入信號(hào)的上升沿或下降沿計(jì)數(shù),邊沿可通過軟件選擇。
[5].MCLR 主復(fù)位端,當(dāng)MCLR為低電平時(shí)對(duì)單片機(jī)復(fù)位。
[6].OSC1 振蕩信號(hào)輸入端。這個(gè)端口用于外部振蕩信號(hào)的輸入,用RC振蕩時(shí),它接RC電路,用石英振蕩電路時(shí),接石英晶體一端。
[7].OSC2 振蕩信號(hào)輸出端。在用石英晶體振蕩器或陶瓷振蕩器時(shí)通過一個(gè)串聯(lián)電阻R接振蕩晶體一端,在RC振蕩時(shí)常作CLKOUT輸出(CLKOUT=1/4fosc)。
[8].VDD 電源電壓。一般為5V,其范圍在2.5-6.25V之間。
[9].Vss 地端。
[10].NC 空引腳。PIC16C5X系列單片機(jī)是一個(gè)低功耗、高速、全靜態(tài)CMOS單片機(jī),含ROM、RAM、I/O及中央處理器單元。這種結(jié)構(gòu)基于寄存器文件概念,有獨(dú)立的數(shù)據(jù)和程序存儲(chǔ)器總線。數(shù)據(jù)總線及數(shù)據(jù)器(RAM)是8位字寬,程序總線及程序存儲(chǔ)器(ROM)是12位字寬。這種概念強(qiáng)調(diào)位、字節(jié)和寄存器操作,CPU能在指令讀取和執(zhí)行過程的重疊中高速工作,即當(dāng)一條指令執(zhí)行時(shí),下一條指令已經(jīng)從程序存儲(chǔ)器讀出,有效地提高CPU的運(yùn)算速度,同時(shí),通用寄存器和操作寄存器同屬于一個(gè)數(shù)據(jù)存儲(chǔ)區(qū),采用相同的尋址方式,這樣寄存器的存取就非常簡(jiǎn)單,這樣的結(jié)構(gòu)體系決定了其指令系統(tǒng)相對(duì)簡(jiǎn)單但功能卻十分強(qiáng)大。
數(shù)據(jù)寄存器文件
PIC16C5X的8位數(shù)據(jù)總線連接兩個(gè)基本的功能部件,由32個(gè)或80個(gè)可尋址的位寄存器與I/O端口組成的寄存器文件和一個(gè)8位字寬的算術(shù)邏輯單元(ALU),32字節(jié)的RAM可直接用塊結(jié)構(gòu)尋址,每個(gè)塊為16個(gè)字節(jié),如下圖所示。使用文件選擇寄存器(f4),數(shù)據(jù)可直接尋址或間接尋址。工作寄存器w可執(zhí)行立即尋址,這種指令結(jié)構(gòu)從程序存儲(chǔ)器讀取數(shù)據(jù)送入w寄存器。
PIC16C5X的寄存器文件分為兩個(gè)功能組,操作寄存器和通用寄存器,操作寄存器包括實(shí)時(shí)時(shí)鐘/計(jì)數(shù)器RTCC、PC、狀態(tài)寄存器、I/O寄存器(PORTS)和文件選擇寄存器,通用寄存器存放數(shù)據(jù)及控制數(shù)據(jù)。
|
|
|
|
|
算術(shù)/邏輯運(yùn)算單元
8位算術(shù)/邏輯運(yùn)算單元ALU連接一個(gè)工作寄存器(w寄存器),它是通過w寄存器對(duì)數(shù)據(jù)進(jìn)行算術(shù)和邏輯運(yùn)算,也可對(duì)w寄存器或任何文件寄存器進(jìn)行操作。 PIC16C5X系列單片機(jī)內(nèi)部有一定容量的程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器,程序存儲(chǔ)器的字節(jié)寬度為12位,用于存放用戶程序和數(shù)據(jù)表格。PIC16C52有384字節(jié)的程序存儲(chǔ)空間,PIC16C54/55的ROM空間為512字節(jié),PIC16C56的地址空間為1024字節(jié),PIC16C57/58則為2048個(gè)字節(jié)。PIC16C5X單片機(jī)采用的是分頁尋址方式,每頁位512字節(jié),頁面地址由狀態(tài)寄存器f3的PA0、PA1選擇。512字節(jié)的12位頁內(nèi)可直接尋址,較大的程序存儲(chǔ)器可通過選擇4個(gè)頁、每頁512字節(jié)頁面來尋址,如下圖所示。
但當(dāng)頁面之間跳轉(zhuǎn)(GOTO CALL指令)必須先把f3的PA0、PA1設(shè)置為相應(yīng)的頁面。需要注意的是:在系統(tǒng)復(fù)位時(shí),程序計(jì)數(shù)器PC將指向程序存儲(chǔ)器最后一個(gè)頁面的最后一個(gè)單元。例如PIC16C54/55指向1FFH,PIC16C56指向3FFH,PIC16C57/58則指向7FFH。狀態(tài)寄存器f3的PA0、PA1指向零頁空間,所以程序員在編程時(shí)需要在程序存儲(chǔ)器底部放置一條跳轉(zhuǎn)指令,跳到程序入口。
單片機(jī)執(zhí)行程序時(shí),程序計(jì)數(shù)器(PC)自動(dòng)加1,程序操作支持直接、間接、相對(duì)尋址方式,能由測(cè)試、跳轉(zhuǎn)指令、子程序調(diào)用指令、轉(zhuǎn)移指令或把算出的地址裝入PC來實(shí)現(xiàn)程序的跳轉(zhuǎn)。片內(nèi)兩級(jí)堆棧為子程序嵌套提供服務(wù)。
|
|
|
堆棧
PIC16C5X系列單片機(jī)提供兩級(jí)堆棧,參考上圖。CALL指令把程序計(jì)數(shù)器加1壓入堆棧1,棧1自動(dòng)壓入棧2,當(dāng)多于兩級(jí)子程序調(diào)用指令執(zhí)行時(shí),堆棧中只有存儲(chǔ)最近兩個(gè)返回地址,所以主程序中調(diào)用的子程序最多只能嵌套一次,當(dāng)執(zhí)行一條CALL指令,PIC16C56/57/58的f3之頁面選擇位PA1、PA0被裝入程序計(jì)數(shù)器的最高兩位,第9位清“0”,也就是子程序入口地址必須位于存儲(chǔ)頁的低半頁000-0FF、200-2FF、400-4FF、600-6FF地址。但這里指的是子程序主體的起始位置,而子程序體是可以延伸到下半頁面的。
PIC16C56/57/58,由于程序空間分別為1k和2k,可能存在跨頁面子程序調(diào)用,所以調(diào)用子程序前須先把f3的PA1、PA0設(shè)置成該子程序所在頁面地址。誠然,如果子程序與調(diào)用程序同在一個(gè)頁面,則無需這個(gè)步驟。由于堆棧和PC的寬度是一樣的,所以可在程序的任何地方執(zhí)行CALL指令來調(diào)用子程序。當(dāng)然跨頁面的調(diào)用還須考慮頁面地址PA1、PA0。
RETLW(子程序返回指令)把棧1內(nèi)容送到程序計(jì)數(shù)器PC,同時(shí)棧2內(nèi)容復(fù)制到棧1,多于兩個(gè)RETLW指令運(yùn)行時(shí),棧1只會(huì)裝入先前存在棧2的地址,對(duì)于PIC16C56/57,程序總是返回調(diào)用它的同一頁面,不管它是處在哪個(gè)頁面,也不管f3的頁面選擇位的設(shè)置狀態(tài)如何。但是執(zhí)行RETLW指令并不會(huì)改變f3中的PA1、PA0的值。w寄存器會(huì)被裝入RETLW指令中所指向的數(shù)值,即立即數(shù)。這在程序存儲(chǔ)器中實(shí)現(xiàn)數(shù)據(jù)查表時(shí)就非常有用。 |
數(shù)據(jù)存儲(chǔ)器分為操作寄存器、I/O寄存器、通用寄存器和專用寄存器四種。由于專用寄存器地址對(duì)用戶不透明,我們將在后面的章節(jié)中論述。操作寄存器和I/O寄存器占用的物理地址是01H—07H,通用寄存器從地址08H開始。
1.操作寄存器文件
操作寄存器文件是寄存器文件的一種,它是專用的寄存器。它和通用寄存器文件有很大的區(qū)別。通用寄存器文件是用于存放數(shù)據(jù)的,而操作寄存器文件則用于尋址、定時(shí)等各種特殊用途。操作寄存器文件包括間接數(shù)據(jù)尋址寄存器f0、實(shí)時(shí)時(shí)鐘/計(jì)數(shù)器f1(RTCC)、程序計(jì)數(shù)器f2(PC)、狀態(tài)寄存器f3(STATUS)、文件選擇寄存器f4(FSR)等。下面我們分別介紹這些寄存器。
[1].間接尋址寄存器f0
這不是一個(gè)物理寄存器,尋址f0則會(huì)讀出文件選擇寄存器f4的內(nèi)容,并對(duì)f4所指定的文件寄存器進(jìn)行間接尋址操作。f0常用作間接尋址指針。例如指令A(yù)DDWF f0,W把f4(FSR)所指的寄存器的內(nèi)容和W寄存器相加,結(jié)果存于w,f0本身不存任何價(jià)值。
[2].實(shí)時(shí)時(shí)鐘/計(jì)數(shù)器f1(RTCC)
該寄存器和其它寄存器一樣,可通過程序?qū)懭牒妥x出。它用于對(duì)加在RTCC引腳上的脈沖計(jì)數(shù)(用作計(jì)數(shù)器)或?qū)?nèi)部時(shí)鐘計(jì)數(shù)(對(duì)fOSC4分頻后計(jì)數(shù),做定時(shí)器用)。RTCC的結(jié)構(gòu)框圖如下圖所示。
|
|
OPTION寄存器的PSA位控制預(yù)分頻器(prescaler)的分配對(duì)象,當(dāng)PSA位為“0”,8位可編程預(yù)分頻器分配給RTCC,這時(shí)外部或內(nèi)部信號(hào)經(jīng)過預(yù)分頻器分頻后再輸出給RTCC。預(yù)分頻器的分頻比由OPTION寄存器的PS0-PS2位決定。OPTION寄存器不在數(shù)據(jù)存儲(chǔ)器內(nèi),是一個(gè)可由“OPTION”指令尋址的特別寄存器,如果預(yù)分頻器被分配給RTCC,則寫f1會(huì)對(duì)預(yù)分頻器清“0”,但OPTION寄存器內(nèi)容保持不變,則分配對(duì)象、分頻比等均不變。
OPTION寄存器的RTS位決定是對(duì)外部還是內(nèi)部計(jì)數(shù),當(dāng)RTS=1時(shí),對(duì)來自RTCC引腳的信號(hào)計(jì)數(shù),當(dāng)RTS=0時(shí),對(duì)fOSC/4計(jì)數(shù)。OPTION寄存器的RTE位決定RTCC腳的信號(hào)是上升沿(RTE=0)還是下降沿(RTE=1)時(shí)增1。當(dāng)RTS=0,內(nèi)部時(shí)鐘(頻率為fOSC/4)作為計(jì)數(shù)對(duì)象,RTE位、RTCC引腳與內(nèi)部電路無關(guān)。為減少功耗,RTCC腳必須連接VDD或Vss。
當(dāng)預(yù)分頻器分配給計(jì)數(shù)器/定時(shí)器RTCC后,RTCC將計(jì)數(shù)到預(yù)分頻器值后加1,例如,如預(yù)分頻器值為1:4,則RTCC將計(jì)數(shù)4次加1。
無論內(nèi)部還是外部時(shí)鐘是否連接預(yù)分頻器,一旦有時(shí)鐘供給RTCC,f1將加1。在計(jì)數(shù)到達(dá)FFH時(shí),在下一個(gè)計(jì)數(shù)發(fā)生后將自動(dòng)清零,重新開始計(jì)數(shù),一直循環(huán)下去。所有令f1(RTCC)加1的脈沖都將延時(shí)2個(gè)指令周期。例如在寫f1后,隨后的兩個(gè)指令周期就不加1。這獨(dú)立于外部或內(nèi)部時(shí)鐘的選取。如預(yù)分頻器分配給RTCC,預(yù)分頻器的輸出將在f1(RTCC)加1前延時(shí)兩個(gè)指令周期。對(duì)于寫或讀RTCC的指令(例如MOVF RTCC,W或CLRF RTCC)都是一樣的,在應(yīng)用RTCC時(shí),在不影響其計(jì)數(shù)情況下測(cè)試,可用MOVF f1,W指令。
應(yīng)注意外部時(shí)鐘用于RTCC時(shí)鐘的有關(guān)情況。
當(dāng)外部時(shí)鐘用于RTCC時(shí),它與內(nèi)部時(shí)鐘同步。所以,外部時(shí)鐘必須符合一定的要求,同樣在外部時(shí)鐘輸入邊沿到RTCC加1,存在著延時(shí),在預(yù)分頻后實(shí)現(xiàn)同步。在每個(gè)指令周期,PSOUT的輸出被采樣兩次以檢測(cè)上升或下降沿。因此,這需要PSOUT至少保持2TOSC高電平和至少保持2TOSC低電平。TOSC是振蕩周期。
當(dāng)不用預(yù)分頻器時(shí),PSOUT輸出與RTCC時(shí)鐘輸入一樣,要求如下:
TRTH=RTCC 高電平時(shí)間≥2TOSC+20ns TRTL=RTCC 低電平時(shí)間≥2TOSC+20ns
當(dāng)用預(yù)分頻器時(shí),RTCC輸入被異步脈沖計(jì)數(shù)器型的預(yù)分頻器分頻,預(yù)分頻器輸出是對(duì)稱的。
PSOUT=RTCC 高電平時(shí)間=PSOUT低電平時(shí)間=N.TRT/2 當(dāng)TRT是RTCC輸入周期和N是預(yù)分頻器的值(2,4,8,……256)時(shí),要求:
N.TRT/2≥2TOSC+20ns 或 TRT≥2(TOSC+20ns)/N 用戶不需要確定RTCC高、低電平時(shí)間,但是如果RTCC的高、低電平持續(xù)時(shí)間太小,脈沖有可能不被采集。一般要求最小的高、低電平時(shí)間為10ns。RTCC輸入要求為:
TRT=周期≥(4TOSC+40ns)/N TRTH=RTCC 高電平時(shí)間≥10ns TRTL=RTCC 低電平時(shí)間≥10ns
外部時(shí)鐘的延時(shí),預(yù)分頻器的輸出由內(nèi)部時(shí)鐘同步,RTCC在Q4時(shí)加1,從外部時(shí)鐘邊沿出現(xiàn)到RTCC實(shí)際加1,存在著一個(gè)較小的延時(shí),在3TOSC至 7TOSC之間。例如,測(cè)量?jī)蓚(gè)邊沿之間的時(shí)間間隔,其精度在±4TOSC之間。 |
3.程序計(jì)數(shù)器f2(PC)
程序計(jì)數(shù)器給出片內(nèi)2048x12的ROM地址,不同的型號(hào)程序計(jì)數(shù)器與它們的兩層堆棧為9-11位寛,如表1所示。
| 表1 程序計(jì)數(shù)器PC與堆棧大小 |
| 型號(hào) | PC寬度/位 | 堆棧寬度/位 |
| PIC16C54/55 | 9 | 9 |
| PIC16C56 | 10 | 10 |
| PIC16C57 | 11 | 11 |
|
系統(tǒng)復(fù)位后,PC為全“1”,程序執(zhí)行每一條指令PC自動(dòng)加“1”,除非程序指令本身改變PC的內(nèi)容(例如程序跳轉(zhuǎn),中斷服務(wù)等),下面的指令將改變PC的值。
[1].“GOTO”指令:允許直接裝入程序計(jì)數(shù)器的低8位,對(duì)于PIC16C56/57/58,PC的最高位由PA0、PA1兩個(gè)頁面選擇位(也即狀態(tài)寄存器的5、6位確定),此指令允許跳到任一頁的任意位置。
[2].“CALL”指令:先把當(dāng)前PC的值壓入堆棧,然后使第9位清“0”,并把低8位裝入程序計(jì)數(shù)器PC,對(duì)于PIC16C56/57/58,PC的高兩位被裝入頁面選擇位PA0、PA1。
[3].“RETLW”指令:該返回指令直接把棧頂內(nèi)容重裝入PC。
[4].程序計(jì)數(shù)器可由某位指令改變(例如MOVWF f2,ADDWF f2或BSF f2,5)計(jì)算結(jié)果將裝入PC低8位,第9位清“0”。對(duì)于PIC16C56/57/58,PC的高兩位被裝入頁面選擇位PA0、PA1。
需要注意的是:在執(zhí)行“CALL”或其它改變PC值指令時(shí),第9位會(huì)被清“0”,所有子程序調(diào)用指令和需要計(jì)算的跳轉(zhuǎn)指令時(shí),要把分支程序放在任何頁面(512字節(jié))的前256個(gè)單元(地址分別為000-0FFH、200-2FFH、400-4FFH、600-6FFH)。
多個(gè)程序存儲(chǔ)器頁面選擇(對(duì)PIC16C56/57/58有效)情況下,當(dāng)程序計(jì)數(shù)器指向所在存儲(chǔ)頁的最后地址時(shí),它仍能加1,并繼續(xù)執(zhí)行到下一頁面,但PA0,PA1頁面選擇位不會(huì)改變,以后的“GOTO”、“CALL”、“ADDWF f2”、“MOVWFf2”等指令會(huì)返回原來的頁面,除非頁面選擇位在程序中被更改。例如NOP指令位于1FFH(0頁),PC加1變?yōu)?00(1頁),一條在200的“GOTO XXX”指令將返回0頁的XXX地址(若f3的頁預(yù)選位“0”)。
RESET狀態(tài)下,PA0、PA1清“0”,0頁會(huì)成為預(yù)選頁。同時(shí)程序計(jì)數(shù)器PC會(huì)對(duì)最后一頁的最后一個(gè)單元尋址。因此,在這個(gè)位置的“GOTO”指令會(huì)自動(dòng)返回至0頁執(zhí)行。
|
4.狀態(tài)寄存器f3
該寄存器包含有ALU的算術(shù)狀態(tài)位,RESET狀態(tài)位、大于512字節(jié)程序存儲(chǔ)器的頁面預(yù)選位。
狀態(tài)寄存器f3可以用作目標(biāo)寄存器。某些標(biāo)志位通過相應(yīng)的寫來設(shè)定,而另外一些位是不能通過指令來改變的。TO、PD位是不可寫的。因此一條指令對(duì)狀態(tài)寄存器執(zhí)行的結(jié)果會(huì)有所不同。例如CLR f3被除了TO和PD位之外的所有位清“0”,并把“Z”位置“1”,所以得到的狀態(tài)寄存器內(nèi)容為“000UU100”,其中,U表示不變化。
建議用BCF、BSF或MOVWF指令來改變狀態(tài)寄存器的內(nèi)容,這些指令只改變相應(yīng)的位,而不影響其它狀態(tài)位。
其它影響狀態(tài)位的指令可參考指令系統(tǒng)的說明。
狀態(tài)寄存器包含8位數(shù)據(jù)位,其中低5位是狀態(tài)標(biāo)志位,高3位中的最高位PA2未用。PA0和PA1是存儲(chǔ)器頁面選擇位,其結(jié)構(gòu)如下表所示。
| 表1 狀態(tài)寄存器的結(jié)構(gòu) |
| PA2 | PA1 | PA0 | TO | PD | Z | DC | C |
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|
下面我們介紹各位的意義。
[1].C(D0):進(jìn)位/借位標(biāo)志位。在執(zhí)行ADDWF和SUBWF指令時(shí),最高位產(chǎn)生進(jìn)位或借位時(shí),C=“1”,在減法采用補(bǔ)碼運(yùn)算。
[2].DC(D1):輔助進(jìn)位位。當(dāng)執(zhí)行ADDWF和SUBWF指令時(shí),低4位產(chǎn)生進(jìn)位或借位時(shí),DC=“1”。
[3].Z(D2):零標(biāo)志位。當(dāng)算術(shù)操作結(jié)果為0時(shí),Z="1"。
[4].PD(D3):低功耗標(biāo)志位。上電或執(zhí)行CLR WDT指令時(shí),PD=“1”。執(zhí)行SLEEP指令時(shí),PD=“0”。
[5].TO(D4):WDT溢出標(biāo)志位。當(dāng)上電或執(zhí)行CLR WDT、SLEEP指令時(shí),TO=“1”,WDT溢出時(shí),TO=“0”。
[6].PA0,PA1(D5,6):程序存儲(chǔ)器頁面選擇位。對(duì)于PIC16C56單片機(jī),PA0是程序存儲(chǔ)器頁面選擇位。PA1是通用讀寫位。在PA=0時(shí),選擇0頁面,即000H-1FFH。PA0=1時(shí),選中1頁,地址為200H-3FFH。
對(duì)于PIC16C57/58單片機(jī),PA0、PA1是程序存儲(chǔ)器頁面選擇位。它們的值從00-11H分別選中0-3頁,即地址為000-1FFH、200H-3FFH、400H-5FFH、600H-7FFH。
[7].PA2(D7):通用讀寫位,未使用。
在復(fù)位時(shí),PA2,PA1,PA0被清“0”,上電或執(zhí)行CLR WDT指令時(shí),TO、PD都被置“1”,這兩位的變化如表2所示。上電復(fù)位時(shí),Z、DC、C標(biāo)志位狀態(tài)不定。在其它復(fù)位情況下(如WDT溢出)Z、DC、C狀態(tài)不變。上電復(fù)位TO、PD的狀態(tài)見表3。 |
|
| 表2 事件對(duì)TO、PD標(biāo)志位的影響 |
| 事件 | TO | PD | 說明 |
| 上電 | 1 | 1 | 不影響PD標(biāo)志位 |
| WDT超時(shí)溢出 | 0 | X |
| SLEEP指令 | 1 | 0 |
| CLR WDT指令 | 1 | 1 |
|
| 表3 復(fù)位后TO、PD標(biāo)志位的狀態(tài) |
| TO | PD | 復(fù)位原因 |
| 0 | 0 | WDT超時(shí)溢出使SLEEP喚醒 |
| 0 | 1 | WDT超時(shí)溢出(不在SLEEP狀態(tài)時(shí)) |
| 1 | 0 | MCLR加低電平使SLEEP喚醒 |
| 1 | 1 | 上電時(shí) |
| X | X | MCLR加低電平 |
|
| ADDWF指令后,進(jìn)位位C=1表示產(chǎn)生進(jìn)位,執(zhí)行SUBWF指令后,進(jìn)位位C=0表示借位,執(zhí)行ADDWF或SUBWF指令也將影響輔助進(jìn)位位DC狀態(tài)。DC表示低半字節(jié)到高半字節(jié)的進(jìn)位和借位。 |
|
通用寄存器文件是用于存放數(shù)據(jù)的寄存器。一般用于中間數(shù)據(jù)或結(jié)果數(shù)據(jù)存放。所有的通用寄存器構(gòu)成了通用寄存器文件。
專用寄存器是單片機(jī)內(nèi)的物理寄存器,它們與數(shù)據(jù)存儲(chǔ)器無關(guān),專用寄存器用于特殊用途,例如I/O斷口控制等。
1.通用寄存器 PIC16C52/54/56的通用寄存器地址分配為F07H—F1FH,PIC16C55則為F08H—F1FH,這些地址組成了通用寄存器文件。PIC16C57/58的通用寄存器地址分配如下:
F08H—F0FH:常用的并與存儲(chǔ)器塊無關(guān)的通用寄存器文件。
F10H—F1FH:Bank0的通用寄存器文件。
F20H—F2FH:等同于F00—F0FH。
F30H—F3FH:Bank1的通用寄存器文件。
F40H—F4FH:等同于F00—F0FH。
F50H—F5FH:Bank2的通用寄存器文件。
F60H—F6FH:等同于F00—F0FH。
F70H—F7FH:Bank3的通用寄存器文件。
2.專用寄存器 [1].W工作寄存器 在兩個(gè)操作量的指令中用于存放第二個(gè)操作量,同時(shí),也用于內(nèi)部數(shù)據(jù)傳送。
[2].TRISA:A口(f5)I/O控制寄存器0-3位有效,對(duì)應(yīng)于I/O(f5)4位寬度。 [3].TRISB:B口(f6)I/O控制寄存器。 [4].TRISC:C口(f7)I/O控制寄存器。 執(zhí)行TRIS指令時(shí),w寄存器的內(nèi)容將傳送至I/O控制寄存器,以此來定義各I/O口的輸入/輸出狀態(tài)。 I/控制寄存器的某位為“1”,使相應(yīng)的I/O線置于高阻抗?fàn)顟B(tài),即輸入態(tài),某位為“0”,使相應(yīng)的I/O線置輸出態(tài)。I/O控制寄存器是只寫寄存器,復(fù)位時(shí)全為“1”。
[5].OPTION:預(yù)分頻器/RTCC選擇寄存器。 分配預(yù)分頻器(prescaler)給RTCC或WDT。預(yù)分頻器只能分配給RTCC或WDT其中之一使用,不能同時(shí)使用。OPTION寄存器是用于定義預(yù)分頻器的預(yù)分頻系數(shù),RTCC信號(hào)源及作用于RTCC的信號(hào)邊緣。OPTION寄存器是一個(gè)只寫6位寬度寄存器。執(zhí)行OPTION指令時(shí),會(huì)把W寄存器內(nèi)容傳送至OPTION寄存器中。在復(fù)位時(shí),OPTION寄存器被置為全“1”。
|
| RTS | RTE | PSA | PS2 | PS1 | PS0 |
| D5 | D4 | D3 | D2 | D1 | D0 |
|
寄存器OPTION各位定義如下:
[1]. RTS(D5):RTCC信號(hào)選擇位,RTS=0時(shí),選中內(nèi)部指令周期時(shí)鐘(CLKOUT)為輸入信號(hào),在RTS=1時(shí),選中RTCC引腳輸入的信號(hào)。
[2]. RTE(D4):RTCC信號(hào)邊沿選擇位,RTE=0時(shí),選中RTCC引腳輸入信號(hào)的上升沿計(jì)數(shù),RTE=1時(shí),RTCC引腳輸入信號(hào)下降沿觸發(fā)。
[3]. RTS(D3):預(yù)分頻器分配位。PSA=0時(shí),把預(yù)分頻器分配給RTCC,PSA=1時(shí),把預(yù)分頻器分配給WDT。
[4]. PS0-PS2(D2-D0):預(yù)分頻值,它用于確定分頻器的分頻比,定義如下表所示。
|
| 預(yù)分頻值 | RTCC時(shí)分頻比 | WDT時(shí)分頻比 |
| 0 0 0 | 1:2 | 1:1 |
| 0 0 1 | 1:4 | 1:2 |
| 0 1 0 | 1:8 | 1:4 |
| 0 1 1 | 1:16 | 1:8 |
| 1 0 0 | 1:32 | 1:16 |
| 1 0 1 | 1:64 | 1:32 |
| 1 1 0 | 1:128 | 1:64 |
| 1 1 1 | 1:256 | 1:128 |