單片機代理商深圳英銳恩分享PIC16C84單片機數據手冊,PIC16C84是8位CMOS EEPROM單片機。它有高性能的類似于RISC 的指令,共有35條單字節的指令,所有的指令除程序分支指令需要兩個指令周期外,都只需要一個指令周期。當主振頻率為10MHZ時一個指令周期為400ns。程序指令的寬度為14位,在芯片內有1K×14的EEPROM程序存儲器 。
數據的寬度為8位,在芯片內有36×8的靜態RAM的通用寄存器,64×8的EEPROM的數據存儲器。8級深度的硬堆棧。具有直接、間接、相對尋址方式。有4個中斷源;外部RBO/INT引腳;TMRO計時器溢出,PORTB<7: 4>引腳上信號的改變;數據寫入EEPROM完成。
數據存儲器的擦/寫可達1000000次,數據的保持大于40年。有13位的I/O引腳,可以單獨直接控制。每一個I/O引腳均可承受25mA的輸入/輸出電流,這樣就可以直接驅動LED。有8位的計時/計數器(TMRO)并帶有8位可編程的預分頻。有通電復位(POR);功耗上升(POWER-UP)計時器(PWRT); 振蕩器起動計時器(OST);看門狗計時器(WDT),為了能可靠工作 ,它有自己的RC振蕩器。有代碼保證功能。有SLEEP(睡眠)方式,以節者功耗。有4種可供選擇的振蕩器:RC(低成本的RC振蕩器);XT(標準的晶體/諧振器);HS(高速晶體/諧振器);LP(低功耗,低 頻率的晶體)。工作電壓的范圍寬2.0V~ 6.0V。
PIC16C84單片機最大的特點是具有1K×14位的電可擦除的程序存儲器和64×8位的電可擦除的數據存儲器,這將為系統開發和各種應用提供了 更多的方便。
時鐘和指令周期
從OSCI來的時鐘輸入在內部經4分頻。產生互不疊加的時佛周期,每4個時鐘周期(θ1,θ2,θ3,θ4)組成一個指令周期。在內部、程序計數內對每一個θ1加1,然后從程序存儲器取指令,取出的指令在θ4時放入指令寄存內。在下一個θ1利θ4期間指令被執行。取指令和執行指令采用流水線技術,一個指令周期取指令,下一個指令周期執行已取出的指令,同時又取出下一條指令。所以每條指令執行,CPU的時間是一個指令周期。當某條指令要改變程序計數器的 內容時(如分支指令),則需要兩個指令周期才能完成。被取出的指 令在執行指令周期的θ1時放入指令寄存器,在θ2,θ3,θ4時譯碼 并執行指令。在θ2期間讀操作在θ4期間寫操作數。
存貯器的結構
在PIC16C84單片機中有兩個存儲器塊。即程序存儲器和數據存儲器。每一塊具有它自己的總線,即可在同一時鐘周期訪問每一塊。數據存儲器被進一步分成通用RAM和專用功能寄存器(SFRs)。專 用功能寄存器用于控制外設模式。數據存儲器也包含有數據EEPROM存 儲器。這個存儲器并不直接映象到數據存儲器,而是間接映象的。即由一個間接尋址的指針指明要讀/寫的數據EEPROM的地址。64個字節 的數據EEPROM具有的地址是0~3FH。
3-1程序存儲器的結構
PIC16C84單片機具有13位程序計數器,尋址能力為8K×14位的程序存儲器空間。實際上對于PIC16C84能供使用的只有1K×14位的程序存儲器(地址為0000~ 03FFH)。尋址上述單元,如超過了上述地址范圍, 地址將卷繞。例對20H單元與地址420H,820H,C20H,1020H,1420H, 1820H,1C20H都將訪問到它。系統復位時PC的值為0000H,中斷向量是 0004H。
PC<12:0>
CALL,RETURN 13
RETFIE,RETLW 1級堆棧
.
8級堆棧
復位地址 0000H
外部中斷向量 0004H
用戶存貯空間 3FFH
1FFFH
圖4-2程序存儲的映象和堆棧
3-2數據存儲器的結構
數據存儲器被分成兩個區域。第一個是專用功能寄存器(SFR)區域,第二是通用寄存器區域(GPR)。SFR控制著器件的操作。數據存儲器被分成0塊和1塊。通過程序時狀態寄存器STATUS中的RP1: RP0位 的設置來選擇0塊(RP1=0,RP0=0)或1塊(RP0=1)。
其中帶有斜線的部分是實際不存在的單元,帶有*號的單元沒有物理寄存。指令MOVWF和MOVF可以把W寄存器的值(W寄存器是器件內部的工作 寄存器)傳送到寄存器文件(“F”)中的任何單元,反之也可以。整個數據存儲器可以直接尋址或通過文件選擇寄存器(FSR)進行間接尋址。間接尋址要根據狀態寄存器的RP1:RP0位的狀態決定訪問數據存 儲器的某一塊,數據存儲器的兩塊中都被分成通用寄存器和專用寄存 器。其中每塊低地址單元留作專用寄存器,專用寄存器以上地址的單 元為通用寄存器,它們是靜態RAM。
1.通用寄存器文件 寄存器文件可以直接尋址或通過FSR間接尋址。所有器件都有一定 數量的通用寄存器(GPR),它們的數據寬度是8位。PIC16C84只有36個字節的通用寄存器,地址為0CH~ 2FH,對1塊對應的8CH~ AFH的訪問都將實際訪問0CH~ 2FH(地址的高位被忽略)。
文件地址
00 間接尋址地址(*) 間接尋址地址(*) 80
01 TMRO OPTION 81
02 PCL PCL 8 2
03 STATUS STATUS 83
04 FSR FSR 8 4
05 PORTA TRISA 85
06 PORTB TRISB 86
07 87
08 EEDATA EECON1 88
09 EEADR EECON2(*) 89
0A PCLATH PCLATH 8A
0B INTCON INTCON 8B
36個通用寄 映象到 存器(SRAM) 0塊 2F AF 7F FF 0塊 1塊
2.專用功能寄存器
CPU和外設使用專用寄存器以控制器件的操作。專用寄存是靜態RAM。下面介紹幾個重要的專用寄存器
①狀態寄存器
狀態寄存器包含有ALU(復術邏輯運算單元)的算術狀態,復位狀態和對數據存儲器的塊選擇,與任何寄存器一樣,狀態寄存器可以作為任何指令的目的寄存器。如果狀態寄存器作為某指令的目的寄存器 ,而那條指令要影響Z、DC,C位的狀態,則禁止寫這三位。圖4-4是 狀態寄存器及其狀態。
R/W R/W R/W R R R/W R/W R/W
IRP RP1 RP0 TO PD Z DC C bit7 bit0
其中C是進位位,對ADDWF和ADDLW指令,當這一位為1,表示指令 運算的結果的最高有效位產生了進位輸出。減法指令執行的是加第二 操作數的新碼。對于循環指令(RRF,RLF),這一位即可以來自于源寄存器的高位,也可以來自于低位。如果這一位為0,表明結果的最高有效位沒有產生進位輸出。對于減法,這一位的極性取反。DC是數字進位或數字借位位。當這一位為1時,結果的D3位向D4位有進位,否則無進位。對于減法,這位的極性取反。Z是結果為0標志。當這一位為1時,表明算術運算和邏輯運算的結果為0,否則這一位為0,表明運算結果不為0。PD:低功耗位。當這一位為1表明電源加上按正常供電或執行了C LRWDT指令以后,這一位為0表示執行了SLEEP指令(即器件進入了低功 耗狀態)。TO超時位。當這一位為1時,表明電源加上,進入了正常供電,且執行了CLRWDT和SLEEP指令,這一位為0表明產生了看門狗計時器超時。
RP1:RP0,作為直接尋址的數據存儲器的塊選擇位。
RP1:RP=00狀態,選擇0塊(地址00H~7FH)。
RP1:RP0=01狀態,選擇1塊(地址80H~FFH)。
RP1:RP0=10選擇2塊(地址100H~17FH)。
RP1:RP0=11選擇3塊(地址180H~1FFH)。
每塊128個字節,PIC16C84只使用RP0位,RP1編程時設置為0。不允許使用RP1為通用讀/寫位,這可能影響與將來產品的兼容性。IRP寄存器塊選擇位(作為間接尋址),當這一位設置為0,選擇 0.1塊(地址00H~FFH),當這一位為1時,選擇2.3塊(地址100H~1FFH)。PIC16C84不使用IRP位,IRP位在編程時為0。狀態寄存器中的Z、DC,C位是根據器件的邏輯來置1或清0。而TO,PD位是不可寫入的。狀態寄存器作為目的寄存器的指令的結果將有不同的內容。例如CLRF STATUS(清0狀態寄存器)。結果狀態寄存器的內容為000uuluu。其中u表示不改變。只有BCF,BSF,SWAPF和MOVW F這些指令可以用來改變STATUS寄存器的內容,因為這幾條指令不影響任何狀態位。
②OPTION寄存器
OPTION寄存器是可讀,可寫的寄存器,它包含了各種控制位以配 置TMRO/WDT的預分頻器,外部INT中斷,TMRO和在PORTB的微弱上拉。圖4-5是OPTION寄存器各位的功能。 R/W R/W R/W R/W R/W R/W R/ W R/W
RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0 bit7 bit0
其中PS2,PS1,PS0為預分頻器的值的選擇。(與PIC16C6X的規定 相同)。PSA位是將預分頻器分配給WDT(看門狗計時器,或TMR0)。
TOSE是為TMRO選擇跳變信號
INTEDG是為INT中斷引腳選擇跳變信號。
RBPU用來打開或關閉PORTB內部的上拉電阻。
OPTION的所有位的定義同PIC16C6X系列。
③INTCON寄存器
INTCON是可讀可寫的寄存器,它包含了各中斷源允許或禁止中斷 。圖4-6是PIC16C84的INTCON寄存器
R/W R/W R/W R/W R/W R/W R/W R/W
GIE EEIE TOIE INTE RBIF TOIF INTIF RB IF bit7 bit0
其中RBIF是RB端口改變中斷標志位。此位為1,表明RB<7:4>輸入中至少有一位發生了改變,它必須用軟件清0這一位。否則為0,即 RB<7:4>輸入中沒有改變。 ? ? ? ? ? INTIF是外部中斷標志位。當這一位為1時,表明有外部中斷發生 ,它必須用軟件將其清0,否則為0,表明沒有外部中斷發生。
TOIF是TMRO溢出中斷標志。這一位為1,表明TMRO發生了溢出,必須由軟件將這一位清0,否則為0,表明TMRO沒有溢出發生RBIE是RB端口改變中斷的允許或禁止位,設置此位為1,允許中斷,為0禁止。
INTE是INT中斷的允許或禁止位。設置為1允許中斷方式,為0禁止 。
TOIE為TMRO溢出中斷的允許或禁止位。設置為1允許TMRO溢出中斷,否則禁止。
EEIE是EE(電可擦除)的寫完成中斷的允許與禁止位。當設置為1時,允許EE寫完成中斷,否則禁止。
GIE是所有中斷的允許與禁止。設置為1時,允許所有不可屏蔽中斷,為0禁止。
四、PCL和PCLATH
程序計數器(PC)是13位。低字節PCL是可讀,可寫的寄存器。PC的高字節(PCH)不是直接可讀,可寫的。PCLATH(PC latch high) 是作為PC<12:8>的保持寄存器,這幾位的內容被傳送到程序計數器 的高位。當程序計數器在執行CALL,GOTO或寫PCL等指令時,即向PC裝入新的值。PC的高位由PCLATH裝入。
具有8個13位寬度的硬件堆棧。堆??臻g它既不是程序存儲器的一部分,也不是數據存儲器的一個部分,堆棧的指針是不可讀/寫的。當執行CALL指令或中斷被響應時,整個13位的PC被壓入堆棧。在執行RETURN,RETLW,RETFIE等指令時,堆棧被彈出。PUSH(壓入)和POP(彈出)不影響PCLATH。
堆棧是作為循環緩沖器。當堆棧被壓入38次后,第9次壓入將占據第一次壓入的位置,第十次壓入將占據第二次壓入的位置,等等。同樣當堆棧彈出第9次時,與第一次彈出是一樣的。注意,沒有狀態位來 指明堆棧上溢式下溢的條件。沒有PUSH,POP指令助記符,但CALL,R ETURN,RETLW,RETFIE等指令的執行或中斷發生,將實際發生壓棧退棧。
4-2程序存儲器的頁
PIC16C84具有1K的程序存儲器,CALL,GOTO指令只有11位的地址范圍,這11位的地址范圍允許分支在2K程序存儲器頁大小的范圍。
為將來PIC16C8X程序存儲器的擴展,必須由另外兩位來說明程序 存儲器的頁。這些頁位來自于PCLATH<4:3>。當執行CALL、GOTO指令時,用戶必須確保這些頁位的編程等指向要求的程序存儲器的頁。
如果執行CALL指令,整個13位被壓入堆棧。所以對于返回指令不要求 對PCLATH<4:3>位的管理。因為PC的值將會由退棧而獲得。注意:PIC16C84忽略了PCLATH<4:3>位,這些位用于程序存儲頁1,2,3(0800H-1FFFH),不可以把PIC16C84的PCLATH<4:3>位用作通用讀/寫位,這會影響將來產品的向上兼容。
4-3間接尋址,INDF和FSR的作用
INDF寄存器不是物理寄存器,只是被用來與FSR寄存器連接以執行間接尋址。
使用INDF寄存器,就可以實現間接尋址。
使用INDF寄存器的任何指令,實際尋址數據是由文件選擇寄存器(FSR)所決定的。讀INDF自身(FSR=0),將產生00H。向INDF寫,結果無操作(顯然可以提供狀態位)。8位FSR寄存器同狀態寄存器STATUS<7>(IRP)組合可以得到9位地址。
然而PIC16C84是不用IRP的。使用下面的例程序,通過間接尋址清零。2OH~2FH單位。
MOVLW 20H ;初始化RAM的指針
MOVF FSR ;到FSR
NEXT CLRF INDF ;通過間接尋址清0,由FSR的內容所指問的寄存器。
INCF FSR ;(FSR)+1→FSR
BIFSS FSR,4;當FSR的第4位為1跳過下一條指令
GOTO NEXT ;否則入。
五 I/O端口
PIC16C84具有兩個I/O端口,PORTA,PORTB。某些端口的引腳用來與另外一些功能復用。
5-1 PORTA和TRISA寄存器
PIC16C84的 PORTH是5位寬度的鎖存器。RA4是施密特觸發器輸入,一個集電極開路輸出。端口A的所有其它的引腳為TTL電平輸入,含CMOS輸出驅動。所有引腳有數據方向位(TRISA寄存器),可通過TRI SA來配置PORTA的引腳是輸入式輸出。設置TRISA的某位為1,則對應的 PORTA的位為輸入,若設置為0,對應的PORTA的某位為輸出。
讀PORTA寄存器,讀入引腳的狀態,向PORTA寫入,則寫到PORTA的鎖存器。所有的寫操作都是讀--修改--寫操作。當向端口寫時,它首先讀端口引腳,然后修改其位,再寫入端口的數據鎖存器。下面這段程序是對端口A的初始化:
CLRF PORTA;初始化端口A
BSF STATUS,RPO;選擇1塊
MovLW CFH ;用于初始化數據方向的值
MOVWF TRISA;設置RA<3:0>為輸入;RA<5:4>為輸出 ;< 7:6>總是為0(無用)
RA4是為TMRO的時鐘輸入復用。即如果這一位用作TMRO的時鐘輸入,則端口A就不能用RA4。
5-2 PROTB和TRISB寄存器
PORTB是8位寬度的雙向端口。相應的數據由TRISB決定,方法用端口A。
端口B的每一個引腳都具有內部弱的上拉電阻。通過一個控制位可以打開所有上拉電阻。這可通過對OPTION<7>RBPU位的置1,清0來控制。當端口引腳配置成輸出時,內部弱上拉電阻被自動關閉。上位是 端口需要的。PORTB的4個引腳RBT~RB4具有信號改變中斷的功能,只要將這幾個引腳配置為輸入,就可能引起中斷的發生。在輸入方式下,引腳的位與最后一次讀PORTB的值進行比較,這四個引腳中有任何一個或多個不相同,產生RBIF中端(置INTCON<0>)。這個中斷可能將 器件由SLEEP狀態下喚醒。用戶在中斷服務程序中可以用這樣的兩個方法之一來清除中斷。①通過清0RBIE(INT CON<3>位)關閉中斷,② 讀端口B,則清0 RBIF位。
不相等的條件將繼續配置1RBIF位為止。讀PORTB將結束不相等條件,并允許RBIF被清0。這一特征為軟件可配置上拉一起允許用戶非常容易的使用PORTB作為鍵盤輸入的接口。也就可以通過按鍵來喚醒系統。
注意:如果正在執行斂僮鰨琁/O引腳改變了信號,RBIF中斷標志不可能被置成1。
建議用改變信號中斷作為按鍵喚醒操作,PORTB只不用改變信號中斷,建議不要用查詢方式。圖4-7是用端口作鍵盤接口的原理圖其R1為ESD保護而新選擇的電阻。使用此接口時,通過軟件選擇保持內部上拉,即RB4~RB7為高,設置為輸入方式。RB0~RB3輸出。任何鍵被按下,RB4~RB7的某一根線將改變從而產生中斷。這個中斷可以喚醒芯片,用這種方法可以節省計時器資源。
16個鍵
RB4 100
RB5
RB6
RB7
RB0
RB1
RB2
BR3
Rf
圖4-7利用端口B的鍵盤接口圖。
5-3 I/O編程的考慮
任何對端口的寫操作,在內部都是讀-修改-寫。例如BCF,BSF 指令,先將寄存器讀入CPU,執行位操作,將結果寫回寄存器。例如對 PORTB執行BSF操作,首先將PORTB的8位讀入CPU,在Bit5上進行BSF操 作,將這一位置1,將PORTB寫回輸出鎖存器,如果這個時候PORTB的bit0用作輸入引腳,則先將PORTB讀入CPU,然后進行有關操作,結果寫回PORTB的鎖存器,并復蓋了先前的內容,如果bit0一直保持在輸入方式,這一操作是沒有問題,但如果bit0在銷后又改變成輸出方式,數據鎖存器的內容是未知的。
實際寫I/O端口發生在一個指令周期的結束,而讀一個I/O端口,其有效的數據必須在指令周期的開始就出現。因此,對一個I/O通道相斷執行讀,寫操作,要考慮數據的可靠性。為此,應在這兩條指令之間加入一條NOP指令就可以保證數據的可靠性。
六、計時器。
(TMRO)模式 TMRO計時/計數器模式具有如下特點:
8位計時計數器
可讀,可寫
8位軟件可編程的預分配器
從FFH到00H產生溢出中斷
具有外部時鐘的邊沿選擇
TMRO模式的簡單框圖與PIC16C6X系列相同。它可以經過清0 TOCs 位(即TION<5>)來選擇計時器方式。在計時器方式,TMRO模式對每個指令周期加1(沒有預分頻器),如果對TMRO寫操作,則計時器為加 (操作后兩個周期被禁止。)
量TOCS為1(OPTION<5>)選擇TMRO為計數器方式。這種方式下 TMRO將對RA4/TOCK1引腳上出現的上跳變或下跳變加1。清0TOSE(OPTION<4>)選擇上跳變否則為下跳變。有關預分頻器的使用與PIC16C6X系列相同。當TMRO在計時/計數器方式下其值由FFH到00H時產生溢出中斷,這個溢出中斷將置TOIF位為1。此中斷可以TOIE位為0來屏蔽。要能再次產生中斷,必須在中斷服務程序中,通過軟件使TOIF清0,TMRO中斷不可以用來喚醒芯片。因為在SLEEP狀態下,計時器是關閉的。
如何使用TMRO的外部時鐘,外部時鐘的同步問題,預分頻器的使用等,參看PIC16C6X系列關于TMRO的技術性能。
七、數據EEPROM存儲器
數據EEPROM存儲器在滿電源電壓(VDD)時,正常操作期間是可讀,可寫的,這部分存儲器不能直接映象到寄存器文件空間,只有通過專用功能寄存器經間接尋址來訪問,有四個SFR用于讀、寫這些存儲器,這些寄存器是EECON1;EECON2;EEDATA;EEDAR。
其中EEDATA用來保持8位的讀/寫數據。EEADR用來保持正在訪問 的EEPROM單元的地址。PIC16C84具有64個字節的EEPROM,其單元的地 址范圍是00H-3FH。
EEPROM允許一次讀/寫一個字節。一個字節的寫入將自動擦除該單元,寫入新的內容(在寫入之前擦除)。EEPROM數據存儲器是高 速率的擦/寫周期,寫入時間正常為10ms,由芯片的計時器控制。實 際寫入時間與所加電壓,溫度,芯片等有關。嚴格的時間請參看芯片的AC說明。當器件是在代碼保護時,只有CPU可以完成數據存儲器的讀 /寫。即器件的編程器的不再訪問存儲器(外部讀/寫被關閉)。
6 連接的考慮
因為模擬輸入用了ESD保護,它們有反偏二極管連到VDD和VSS。這就要求模擬輸入電壓應在VDD和VSS之間。
如果模擬輸入電壓超過了最大值的0.6V以上的范圍,二極管可能變為正向導通,如果輸入電流超過了說明書上的規定,它可能破壞器件。有些時候把外部的RC濾波器加在輸入信號上。要求選用的電阻R要保證總的信號源電阻不超過10K,任何在模擬信號上的其它的附加元件均應有非常小的漏電流。
7.變換功能
理論上A/D變換器的變換功能如下。
當模擬輸入信號電壓是1位L sb的電壓時(或是VREF/256)第一次變換就發生。
8 A/D變換工作的流程圖
表2-4 PIC16C74/73的A/D變換所涉及的寄存器
地址 名稱 bit7 bit6 bit5 bit4 bit3 bit 2 bit1 bit0
0B/8B INTCON GIE PEIE
0C PIR1 ADIF
8C PIE1 ADIE
0D PIR2 CCP2IF
8D PIE2 CCP2IE
1F ADCON0 ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE ADON
9F ADCON1 PCFG2 PCFG1 PCFG0
除上述所例寄存器外,還有ADRES(地址1EH)用于存放A/D變換 的結果。PORTA(地址 05H)用于輸入多路模擬信號,TRISA(地址85 H)用于設置PORTA的I/O方式,PORTE(地址09H)用于輸入多路模擬信號,TRISE(地址89H)用于設置PORTE的I/O方式。
表2-5 PIC16C71的A/D變換所涉及的寄存器
地址 名稱 bit7 bit6 bit5 bit4 bit3 bit 2 bit1 bit0
0B/8B INTCON GIE ADIE
08 AOCON0 ADCS1 ADCS0 CHS1 CHS0 GO /DONE ADIF ADON
88 ADCON1 PCFG1 PCFG0
此外還涉及ADRES(地址09H),PORTA,TRISA等。。
U U U U U U U U U R/P R/P R/P R /P R/P
- - - - - - - - - CP PWRTE WDTE FOSC 1 FOSC0 bit 13 bit0
圖4-10 PIC16C84的配置寄存器
7-3 寫EEPROM數據存儲器
與寫EEPROM的數據單元、用戶必須首先寫地址到EEADR寄存器,再送數據到EEDATA,最后用戶必須跟著一個專門的序列起動寫。例如:下面這段程序是寫EEPROM的程序。 ? ? BSF STATUS, RPO ;選擇1塊BCF INTCON,GIE ;關閉所有INT中斷
MOVLW 55H ;
MOVWF EECON2 ;寫55H
MOVLW AAH;
MOVWF EECON2;寫AAH
BSF EECON1,WR;置WR位為1,開始寫
BSF INTCON,GIE;允許INT中斷。
如果這個程序(即先寫55H 到EECON2,再寫AAH到EECON2,然后置 WK=1)未跟有嚴格的時間,寫將不能啟動。我們建議在執行這幾條指令期間關閉中斷。
此外,EECON1中的WREN位必須選置成1,允許寫。這樣的機構防止 了因錯誤指令的執行而寫數據EEPROM。用戶在所有的時間應保持WREN位為0,除了當要熱修改EEPROM以外。
寫序列開始以后,清0WREN位不影響這次寫周期。從開始設置,直到WREN=1為止WR位將被禁止。當完成了寫周期以后,WR位由硬件清0 。寫完成中斷標志EEIF被置1,EEIF必須由軟件將其清0。注意數據EEPROM存儲器E/W周期可能偶然超過10ms,為確保寫周期的完成,用戶使用的EE中斷或查詢WR位(EECON1<1>)。這兩個均可用來判斷寫周 期的完成。
除了上述提到的防止錯誤的寫數據EEPROM外,在電源剛加電期 間的72ms內也防止寫EEPROM數據存儲器。
八 CPU專門的特征
微控制器為其它處理器的區別是有專門的電路,這些電路涉及實時應用的需要。PIC16C84具有最大的系統可靠性,最低的價格,最少的外部元件,提供了低功能操作模式和代碼保護。
PIC16C84具有看門狗計時器,此計時器只可經配置位來關閉,為了增加其可靠性,關閉它的RC振蕩器。有兩個計時器提供加電時需要的延時。振蕩器起振計時器(OST)保持芯片在復位狀態直到石晶穩定為止。另外一個是加電計時器(POWER-UP Timer(PWRT))它提供了 固定的72ms的延時。這樣保證了器件復位以及電源的可靠供電,用了這兩個計時器,使多數應用不需要外接復位電路。
SLEEP方式提供了低功耗方式。用戶可經外部復位;看門狗計時器溢出;中斷來喚醒芯片。
8-1配置位
配置位分為可編程的位,讀作0,不可編程的位,讀作1。通過可編程的位來選拔各種配置。這些位映象到程序存儲器的2007H單元。注意地址2007H不等于用戶程序存儲器空間。事實上,它屬于專門的測試 /配置存儲空間(2000H~3FFH),只有在編程時可以訪問。圖4-10 是配置寄存器的結構(附后)
其中Fosc<1或0>為振蕩器選擇位。
11:選RC振蕩器
10:選HS振蕩器
01:選XT振蕩器
00:選CP振蕩器
WDTE是看門狗允許與禁止的選擇位。此位為1,允許看門狗工作。此位為0禁止看門狗工作。
PWRTE是加電計時器允許與禁止的選擇。此位為1,加電計時器允許工作,為0則禁止工作。
CP是代碼保護的選擇,此位為1代碼保護取消,這一位為0,所有程序存儲器的代碼被保護。其余位是不執行的。讀作1。
有關振蕩器的配置,振蕩器的選擇與連接電路與PIC16C6X系列相同。
8-2中斷
PIC16C84具有4個中斷源。即外部中斷RBO/INT引腳上的中斷,TMR0溢出中斷;PORTB改變中斷(RB7:RB4);EEPRDM寫完成中斷。
中斷控制寄存器(INTCON在其標志位,記錄了每一個中斷請求。它也包括了每個中斷的允許/禁止位。所有中斷的允許/禁止位(IN TCON<7>),它就開放所有中斷或禁止所有中斷。從中斷返回指令RETFLE返回時,退出中斷,并置GIE=1,重新開放所有中斷。 RBO/INT引腳中斷,RB端口改變中斷和TMRO溢出中斷,這些中斷的中斷標志在INTCON寄存器中。
當中斷的響應時,GIE位被清0,關閉任何新的中斷,返回地址被壓入堆棧,用0004H裝入PC。對于外部中斷文件,如RBO/INT引腳或PORTB改變中斷,這類中斷需3到4個指令周期。嚴格的時間,取決于中 斷事件的發生。一旦在中斷的中斷服務程序中可以通過查詢中斷標志 位來確定中斷源。中斷的標志位應在重新開發這個中斷之前,經軟件 將其清0。
注意:
①每一個中斷的標志位被置位,而與它相應的屏蔽位或GIE無關。
②如果中斷發生,而全部中的允許位GIE假設本是清0的,GIE可能被用戶中斷服務程序的RETFIE指令無意之間連成1。這種事情可能發生在
a、在中斷被響應時,指令清0GIE位。
b、程序分支到中斷向量并執行中斷服務程序。
c、中斷服務程序執行RETFIE指令而完成。這會引起GIE位被置1(允許中斷)。同時程序返回中斷關閉后的指令(實 際上由于上述原因引起中斷未能關閉)。為確保GIE清0,應有如下一段程序。
l00p BGF INT CON,GIE:關閉全部中斷
BTFSC INTCON,GIE;全部中斷允許位被關閉了嗎?
GOTO l00P;沒有返回到l00p,再清0GIE,否則程序繼續。
1.INT中斷
在RBO/INT上的外部中斷是邊沿觸發。如果INTEDG位(OPTION <6>)是置1,則上升沿有效,如果INTEDG位被清0,則下降沿有效。當有效跳變出現在RBO/INT引腳上時,INTF位(INTCON<1>)被置1。清0INTE控制位(INTCON<4>),關閉這個中斷。INTF在重新允許這個中斷之前應由中斷服務程序中的軟件來清0這一位。在芯片進入SLEEP之前,如果INTE位被置1,則INT中斷發生后可喚醒芯片。GIE位的狀態決定了處理器被喚醒后是否分支到中斷向量。
2.TMRO中斷
TMRO溢出(由FFH~00H)將置1 TOIF位(INTCON<2>)。這一位 的中斷可以對TOIE(INTCON<5>)位置1或清0而開放/關閉中斷。
3.PORTB中斷
在端口B的7~4位的輸入改變,就置1 RBIF(INTCON<0>)位。 這個中斷可以對RBIE(INTCON<3>)位置1或清0而開放或關閉。
注意 :當正在對RB端口進行讀操作時,RB7~RB4發生改變,RBIF標志位可 能不被置1。
4.中斷時如何保存W和STATUS寄存器。
中斷時,硬件自動將PC的值壓入堆棧,這叫保存斷點,用戶經常希望保存關鍵的寄存器的內容,(如W和STATUS寄存器)。為此,執行如下一段程序。
MOVWF W-TEMP ;將W寄存拷貝到W-TEMP寄存器,W-TEMP寄存器 可在1塊或0塊
SWAPF STATUS,W;狀態寄存器內容送入W
BCF STATUS,RPO;選0塊
MOVWF STATUS-TEMP;將狀態寄存器的內容(現在在W中的STATUS-TEMP寄存器中斷服務程序
SWAPF STATUS-TEMP,W;將STATUS-TEMP送入W(設置塊到原來 的狀態)
MOVWF STATUS ;W送入STATUS(恢復STATUS)
SWAPF W-TEMP,0;W-TEMP送W(恢復W的內容)
在上面這段程序中,W-TEMP寄存器,必須定義在兩個塊中,且要在定在同樣的塊基地址。例如將W-TEMP定義在0塊的20H,同時它也應定義在1塊的A0H。寄存器STATUS-TEMP必須定義在0塊。
5.看門狗計時器(WDT)
看門狗計時器實際使用的是在芯片上的RC振蕩器,這不要求任何外部元件。這個RC振蕩器與OSC1/CLKIN引腳上接的RC振蕩器(主振時鐘)是分開的。這樣即使OSC1/CLKIN和OSC2/CLKOUT引腳停振,(例在執行SLEEP指令后)WDT仍然能夠工作。在正常工作時,WDT計時器的輸出產生器件的RESET信號。如果器件處于SLEEP狀態下,WDT計時器的輸出將喚醒器件,使器件繼續正常的工作。WDT也可以通過編程的配置來關閉。其內容的框圖與PIC16C6X系列相同。
九、PIC16C84單片機的指令系統共有35條指令。與PIC16C6X系列的指令完全相同。
資料下載: