《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > PIC16C84單片機介紹
PIC16C84單片機介紹
互聯(lián)網(wǎng)
摘要: PIC16C84是8位CMOS EEPROM單片機。它有高性能的類似于RISC 的指令,共有35條單字節(jié)的指令,所有的指令除程序分支指令需要兩個指令周期外,都只需要一個指令周期。當主振頻率為10MHZ時一個指令周期為400ns。程序指令的寬度為14位,在芯片內(nèi)有1K×14的EEPROM程序存儲器 。
關(guān)鍵詞: PIC PIC16C84
Abstract:
Key words :

概述

PIC16C84" title="PIC16C84">PIC16C848CMOS EEPROM單片機。它有高性能的類似于RISC 的指令,共有35條單字節(jié)的指令,所有的指令除程序分支指令需要兩個指令周期外,都只需要一個指令周期。當主振頻率為10MHZ時一個指令周期為400ns。程序指令的寬度為14位,在芯片內(nèi)有1K×14EEPROM程序存儲器 。

數(shù)據(jù)的寬度為8位,在芯片內(nèi)有36×8的靜態(tài)RAM的通用寄存器,64×8EEPROM的數(shù)據(jù)存儲器。8級深度的硬堆棧。具有直接、間接、相對尋址方式。有4個中斷源;外部RBOINT引腳;TMRO計時器溢出,PORTB7 4>引腳上信號的改變;數(shù)據(jù)寫入EEPROM完成。

數(shù)據(jù)存儲器的擦/寫可達1000000次,數(shù)據(jù)的保持大于40年。有13位的IO引腳,可以單獨直接控制。每一個IO引腳均可承受25mA的輸入/輸出電流,這樣就可以直接驅(qū)動LED。有8位的計時/計數(shù)器(TMRO)并帶有8位可編程的預(yù)分頻。有通電復(fù)位(POR);功耗上升(POWERUP)計時器(PWRT); 振蕩器起動計時器(OST);看門狗計時器(WDT),為了能可靠工作 ,它有自己的RC振蕩器。有代碼保證功能。有SLEEP(睡眠)方式,以節(jié)者功耗。有4種可供選擇的振蕩器:RC(低成本的RC振蕩器);XT(標準的晶體/諧振器);HS(高速晶體/諧振器);LP(低功耗,低 頻率的晶體)。工作電壓的范圍寬20V 60V。

PIC16C84單片機最大的特點是具有1K×14位的電可擦除的程序存儲器和64×8位的電可擦除的數(shù)據(jù)存儲器,這將為系統(tǒng)開發(fā)和各種應(yīng)用提供了 更多的方便。

時鐘和指令周期

OSCI來的時鐘輸入在內(nèi)部經(jīng)4分頻。產(chǎn)生互不疊加的時佛周期,每4個時鐘周期(θ1,θ2,θ3,θ4)組成一個指令周期。在內(nèi)部、程序計數(shù)內(nèi)對每一個θ11,然后從程序存儲器取指令,取出的指令在θ4時放入指令寄存內(nèi)。在下一個θ1利θ4期間指令被執(zhí)行。取指令和執(zhí)行指令采用流水線技術(shù),一個指令周期取指令,下一個指令周期執(zhí)行已取出的指令,同時又取出下一條指令。所以每條指令執(zhí)行,CPU的時間是一個指令周期。當某條指令要改變程序計數(shù)器的 內(nèi)容時(如分支指令),則需要兩個指令周期才能完成。被取出的指 令在執(zhí)行指令周期的θ1時放入指令寄存器,在θ2,θ3,θ4時譯碼 并執(zhí)行指令。在θ2期間讀操作在θ4期間寫操作數(shù)。

存貯器的結(jié)構(gòu)

PIC16C84單片機中有兩個存儲器塊。即程序存儲器和數(shù)據(jù)存儲器。每一塊具有它自己的總線,即可在同一時鐘周期訪問每一塊。數(shù)據(jù)存儲器被進一步分成通用RAM和專用功能寄存器(SFRs)。專 用功能寄存器用于控制外設(shè)模式。數(shù)據(jù)存儲器也包含有數(shù)據(jù)EEPROM 儲器。這個存儲器并不直接映象到數(shù)據(jù)存儲器,而是間接映象的。即由一個間接尋址的指針指明要讀/寫的數(shù)據(jù)EEPROM的地址。64個字節(jié) 的數(shù)據(jù)EEPROM具有的地址是03FH

31程序存儲器的結(jié)構(gòu)

PIC16C84單片機具有13位程序計數(shù)器,尋址能力為8K×14位的程序存儲器空間。實際上對于PIC16C84能供使用的只有1K×14位的程序存儲器(地址為0000 03FFH)。尋址上述單元,如超過了上述地址范圍, 地址將卷繞。例對20H單元與地址420H820H,C20H,1020H,1420H, 1820H1C20H都將訪問到它。系統(tǒng)復(fù)位時PC的值為0000H,中斷向量是 0004H。

PC120

CALL,RETURN 13

RETFIE,RETLW 1級堆棧

8級堆棧

復(fù)位地址 0000H

外部中斷向量 0004H

用戶存貯空間 3FFH

1FFFH

42程序存儲的映象和堆棧

 

32數(shù)據(jù)存儲器的結(jié)構(gòu)

數(shù)據(jù)存儲器被分成兩個區(qū)域。第一個是專用功能寄存器(SFR)區(qū)域,第二是通用寄存器區(qū)域(GPR)。SFR控制著器件的操作。數(shù)據(jù)存儲器被分成0塊和1塊。通過程序時狀態(tài)寄存器STATUS中的RP1 RP0 的設(shè)置來選擇0塊(RP10RP00)或1塊(RP01)。

其中帶有斜線的部分是實際不存在的單元,帶有*號的單元沒有物理寄存。指令MOVWFMOVF可以把W寄存器的值(W寄存器是器件內(nèi)部的工作 寄存器)傳送到寄存器文件(“F”)中的任何單元,反之也可以。整個數(shù)據(jù)存儲器可以直接尋址或通過文件選擇寄存器(FSR)進行間接尋址。間接尋址要根據(jù)狀態(tài)寄存器的RP1RP0位的狀態(tài)決定訪問數(shù)據(jù)存 儲器的某一塊,數(shù)據(jù)存儲器的兩塊中都被分成通用寄存器和專用寄存 器。其中每塊低地址單元留作專用寄存器,專用寄存器以上地址的單 元為通用寄存器,它們是靜態(tài)RAM。

1.通用寄存器文件 寄存器文件可以直接尋址或通過FSR間接尋址。所有器件都有一定 數(shù)量的通用寄存器(GPR),它們的數(shù)據(jù)寬度是8位。PIC16C84只有36個字節(jié)的通用寄存器,地址為0CH 2FH,對1塊對應(yīng)的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和外設(shè)使用專用寄存器以控制器件的操作。專用寄存是靜態(tài)RAM。下面介紹幾個重要的專用寄存器

①狀態(tài)寄存器

狀態(tài)寄存器包含有ALU(復(fù)術(shù)邏輯運算單元)的算術(shù)狀態(tài),復(fù)位狀態(tài)和對數(shù)據(jù)存儲器的塊選擇,與任何寄存器一樣,狀態(tài)寄存器可以作為任何指令的目的寄存器。如果狀態(tài)寄存器作為某指令的目的寄存器 ,而那條指令要影響ZDC,C位的狀態(tài),則禁止寫這三位。圖44 狀態(tài)寄存器及其狀態(tài)。

RW RW RW R R RW RW RW

IRP RP1 RP0 TO PD Z DC C bit7 bit0

其中C是進位位,對ADDWFADDLW指令,當這一位為1,表示指令 運算的結(jié)果的最高有效位產(chǎn)生了進位輸出。減法指令執(zhí)行的是加第二 操作數(shù)的新碼。對于循環(huán)指令(RRFRLF),這一位即可以來自于源寄存器的高位,也可以來自于低位。如果這一位為0,表明結(jié)果的最高有效位沒有產(chǎn)生進位輸出。對于減法,這一位的極性取反。DC是數(shù)字進位或數(shù)字借位位。當這一位為1時,結(jié)果的D3位向D4位有進位,否則無進位。對于減法,這位的極性取反。Z是結(jié)果為0標志。當這一位為1時,表明算術(shù)運算和邏輯運算的結(jié)果為0,否則這一位為0,表明運算結(jié)果不為0。PD:低功耗位。當這一位為1表明電源加上按正常供電或執(zhí)行了C LRWDT指令以后,這一位為0表示執(zhí)行了SLEEP指令(即器件進入了低功 耗狀態(tài))。TO超時位。當這一位為1時,表明電源加上,進入了正常供電,且執(zhí)行了CLRWDTSLEEP指令,這一位為0表明產(chǎn)生了看門狗計時器超時。

RP1RP0,作為直接尋址的數(shù)據(jù)存儲器的塊選擇位。

RP1RP00狀態(tài),選擇0塊(地址00H7FH)。

RP1RP001狀態(tài),選擇1塊(地址80HFFH)。

RP1RP010選擇2塊(地址100H17FH)。

RP1RP011選擇3塊(地址180H1FFH)。

每塊128個字節(jié),PIC16C84只使用RP0位,RP1編程時設(shè)置為0。不允許使用RP1為通用讀/寫位,這可能影響與將來產(chǎn)品的兼容性。IRP寄存器塊選擇位(作為間接尋址),當這一位設(shè)置為0,選擇 01塊(地址00HFFH),當這一位為1時,選擇23塊(地址100H1FFH)。PIC16C84不使用IRP位,IRP位在編程時為0。狀態(tài)寄存器中的ZDC,C位是根據(jù)器件的邏輯來置1或清0。而TO,PD位是不可寫入的。狀態(tài)寄存器作為目的寄存器的指令的結(jié)果將有不同的內(nèi)容。例如CLRF STATUS(清0狀態(tài)寄存器)。結(jié)果狀態(tài)寄存器的內(nèi)容為000uuluu。其中u表示不改變。只有BCF,BSF,SWAPFMOVW F這些指令可以用來改變STATUS寄存器的內(nèi)容,因為這幾條指令不影響任何狀態(tài)位。

OPTION寄存器

OPTION寄存器是可讀,可寫的寄存器,它包含了各種控制位以配 TMROWDT的預(yù)分頻器,外部INT中斷,TMRO和在PORTB的微弱上拉。圖45OPTION寄存器各位的功能。 RW RW RW RW RW RW R W RW

RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0 bit7 bit0

其中PS2,PS1,PS0為預(yù)分頻器的值的選擇。(與PIC16C6X的規(guī)定 相同)。PSA位是將預(yù)分頻器分配給WDT(看門狗計時器,或TMR0)。

TOSE是為TMRO選擇跳變信號

INTEDG是為INT中斷引腳選擇跳變信號。

RBPU用來打開或關(guān)閉PORTB內(nèi)部的上拉電阻。

OPTION的所有位的定義同PIC16C6X系列。

INTCON寄存器

INTCON是可讀可寫的寄存器,它包含了各中斷源允許或禁止中斷 。圖46PIC16C84INTCON寄存器

RW RW RW RW RW RW RW RW

GIE EEIE TOIE INTE RBIF TOIF INTIF RB IF bit7 bit0

其中RBIFRB端口改變中斷標志位。此位為1,表明RB74>輸入中至少有一位發(fā)生了改變,它必須用軟件清0這一位。否則為0,即 RB74>輸入中沒有改變。 ? ? ? ? ? INTIF是外部中斷標志位。當這一位為1時,表明有外部中斷發(fā)生 ,它必須用軟件將其清0,否則為0,表明沒有外部中斷發(fā)生。

TOIFTMRO溢出中斷標志。這一位為1,表明TMRO發(fā)生了溢出,必須由軟件將這一位清0,否則為0,表明TMRO沒有溢出發(fā)生

RBIERB端口改變中斷的允許或禁止位,設(shè)置此位為1,允許中斷,為0禁止。

INTEINT中斷的允許或禁止位。設(shè)置為1允許中斷方式,為0禁止 。

TOIETMRO溢出中斷的允許或禁止位。設(shè)置為1允許TMRO溢出中斷,否則禁止。

EEIEEE(電可擦除)的寫完成中斷的允許與禁止位。當設(shè)置為1時,允許EE寫完成中斷,否則禁止。

GIE是所有中斷的允許與禁止。設(shè)置為1時,允許所有不可屏蔽中斷,為0禁止。

四、PCLPCLATH

程序計數(shù)器(PC)是13位。低字節(jié)PCL是可讀,可寫的寄存器。PC的高字節(jié)(PCH)不是直接可讀,可寫的。PCLATHPC latch high 是作為PC128>的保持寄存器,這幾位的內(nèi)容被傳送到程序計數(shù)器 的高位。當程序計數(shù)器在執(zhí)行CALLGOTO或?qū)?/font>PCL等指令時,即向PC裝入新的值。PC的高位由PCLATH裝入。

具有813位寬度的硬件堆棧。堆??臻g它既不是程序存儲器的一部分,也不是數(shù)據(jù)存儲器的一個部分,堆棧的指針是不可讀/寫的。當執(zhí)行CALL指令或中斷被響應(yīng)時,整個13位的PC被壓入堆棧。在執(zhí)行RETURN,RETLW,RETFIE等指令時,堆棧被彈出。PUSH(壓入)和POP(彈出)不影響PCLATH。

堆棧是作為循環(huán)緩沖器。當堆棧被壓入38次后,第9次壓入將占據(jù)第一次壓入的位置,第十次壓入將占據(jù)第二次壓入的位置,等等。同樣當堆棧彈出第9次時,與第一次彈出是一樣的。注意,沒有狀態(tài)位來 指明堆棧上溢式下溢的條件。沒有PUSHPOP指令助記符,但CALL,R ETURN,RETLW,RETFIE等指令的執(zhí)行或中斷發(fā)生,將實際發(fā)生壓棧退棧。

42程序存儲器的頁

PIC16C84具有1K的程序存儲器,CALL,GOTO指令只有11位的地址范圍,這11位的地址范圍允許分支在2K程序存儲器頁大小的范圍。

為將來PIC16C8X程序存儲器的擴展,必須由另外兩位來說明程序 存儲器的頁。這些頁位來自于PCLATH43>。當執(zhí)行CALL、GOTO指令時,用戶必須確保這些頁位的編程等指向要求的程序存儲器的頁。

如果執(zhí)行CALL指令,整個13位被壓入堆棧。所以對于返回指令不要求 PCLATH43>位的管理。因為PC的值將會由退棧而獲得。注意:PIC16C84忽略了PCLATH43>位,這些位用于程序存儲頁12,30800H1FFFH),不可以把PIC16C84PCLATH43>位用作通用讀/寫位,這會影響將來產(chǎn)品的向上兼容。

43間接尋址,INDFFSR的作用

INDF寄存器不是物理寄存器,只是被用來與FSR寄存器連接以執(zhí)行間接尋址。

使用INDF寄存器,就可以實現(xiàn)間接尋址。

使用INDF寄存器的任何指令,實際尋址數(shù)據(jù)是由文件選擇寄存器(FSR)所決定的。讀INDF自身(FSR0),將產(chǎn)生00H。向INDF寫,結(jié)果無操作(顯然可以提供狀態(tài)位)。8FSR寄存器同狀態(tài)寄存器STATUS7>(IRP)組合可以得到9位地址。

然而PIC16C84是不用IRP的。使用下面的例程序,通過間接尋址清零。2OH2FH單位。

MOVLW 20H ;初始化RAM的指針

MOVF FSR ;到FSR

NEXT CLRF INDF ;通過間接尋址清0,由FSR的內(nèi)容所指問的寄存器。

INCF FSR ;(FSR)+1FSR

BIFSS FSR,4;當FSR的第4位為1跳過下一條指令

GOTO NEXT ;否則入。

IO端口

PIC16C84具有兩個IO端口,PORTAPORTB。某些端口的引腳用來與另外一些功能復(fù)用。

51 PORTATRISA寄存器

PIC16C84 PORTH5位寬度的鎖存器。RA4是施密特觸發(fā)器輸入,一個集電極開路輸出。端口A的所有其它的引腳為TTL電平輸入,含CMOS輸出驅(qū)動。所有引腳有數(shù)據(jù)方向位(TRISA寄存器),可通過TRI SA來配置PORTA的引腳是輸入式輸出。設(shè)置TRISA的某位為1,則對應(yīng)的 PORTA的位為輸入,若設(shè)置為0,對應(yīng)的PORTA的某位為輸出。

PORTA寄存器,讀入引腳的狀態(tài),向PORTA寫入,則寫到PORTA的鎖存器。所有的寫操作都是讀--修改--寫操作。當向端口寫時,它首先讀端口引腳,然后修改其位,再寫入端口的數(shù)據(jù)鎖存器。下面這段程序是對端口A的初始化:

CLRF PORTA;初始化端口A

BSF STATUS,RPO;選擇1

MovLW CFH ;用于初始化數(shù)據(jù)方向的值

MOVWF TRISA;設(shè)置RA30>為輸入;RA54>為輸出 ;< 76>總是為0(無用)

RA4是為TMRO的時鐘輸入復(fù)用。即如果這一位用作TMRO的時鐘輸入,則端口A就不能用RA4

52 PROTBTRISB寄存器

PORTB8位寬度的雙向端口。相應(yīng)的數(shù)據(jù)由TRISB決定,方法用端口A。

端口B的每一個引腳都具有內(nèi)部弱的上拉電阻。通過一個控制位可以打開所有上拉電阻。這可通過對OPTION7RBPU位的置1,清0來控制。當端口引腳配置成輸出時,內(nèi)部弱上拉電阻被自動關(guān)閉。上位是 端口需要的。PORTB4個引腳RBTRB4具有信號改變中斷的功能,只要將這幾個引腳配置為輸入,就可能引起中斷的發(fā)生。在輸入方式下,引腳的位與最后一次讀PORTB的值進行比較,這四個引腳中有任何一個或多個不相同,產(chǎn)生RBIF中端(置INTCON0>)。這個中斷可能將 器件由SLEEP狀態(tài)下喚醒。用戶在中斷服務(wù)程序中可以用這樣的兩個方法之一來清除中斷。①通過清0RBIEINT CON3>位)關(guān)閉中斷,② 讀端口B,則清0 RBIF位。

不相等的條件將繼續(xù)配置1RBIF位為止。讀PORTB將結(jié)束不相等條件,并允許RBIF被清0。這一特征為軟件可配置上拉一起允許用戶非常容易的使用PORTB作為鍵盤輸入的接口。也就可以通過按鍵來喚醒系統(tǒng)。

注意:如果正在執(zhí)行斂僮鰨琁/O引腳改變了信號,RBIF中斷標志不可能被置成1。

建議用改變信號中斷作為按鍵喚醒操作,PORTB只不用改變信號中斷,建議不要用查詢方式。圖47是用端口作鍵盤接口的原理圖其R1ESD保護而新選擇的電阻。使用此接口時,通過軟件選擇保持內(nèi)部上拉,即RB4RB7為高,設(shè)置為輸入方式。RB0RB3輸出。任何鍵被按下,RB4RB7的某一根線將改變從而產(chǎn)生中斷。這個中斷可以喚醒芯片,用這種方法可以節(jié)省計時器資源。

16個鍵

RB4 100

RB5

RB6

RB7

RB0

RB1

RB2

BR3

Rf

47利用端口B的鍵盤接口圖。

53 IO編程的考慮

任何對端口的寫操作,在內(nèi)部都是讀-修改-寫。例如BCFBSF 指令,先將寄存器讀入CPU,執(zhí)行位操作,將結(jié)果寫回寄存器。例如對 PORTB執(zhí)行BSF操作,首先將PORTB8位讀入CPU,在Bit5上進行BSF 作,將這一位置1,將PORTB寫回輸出鎖存器,如果這個時候PORTBbit0用作輸入引腳,則先將PORTB讀入CPU,然后進行有關(guān)操作,結(jié)果寫回PORTB的鎖存器,并復(fù)蓋了先前的內(nèi)容,如果bit0一直保持在輸入方式,這一操作是沒有問題,但如果bit0在銷后又改變成輸出方式,數(shù)據(jù)鎖存器的內(nèi)容是未知的。

實際寫IO端口發(fā)生在一個指令周期的結(jié)束,而讀一個IO端口,其有效的數(shù)據(jù)必須在指令周期的開始就出現(xiàn)。因此,對一個IO通道相斷執(zhí)行讀,寫操作,要考慮數(shù)據(jù)的可靠性。為此,應(yīng)在這兩條指令之間加入一條NOP指令就可以保證數(shù)據(jù)的可靠性。

六、計時器。

TMRO)模式 TMRO計時/計數(shù)器模式具有如下特點:

·8位計時計數(shù)器

·可讀,可寫

·8位軟件可編程的預(yù)分配器

·從FFH00H產(chǎn)生溢出中斷

·具有外部時鐘的邊沿選擇

TMRO模式的簡單框圖與PIC16C6X系列相同。它可以經(jīng)過清0 TOCs 位(即TION5>)來選擇計時器方式。在計時器方式,TMRO模式對每個指令周期加1(沒有預(yù)分頻器),如果對TMRO寫操作,則計時器為加 (操作后兩個周期被禁止。)

TOCS1OPTION5>)選擇TMRO為計數(shù)器方式。這種方式下 TMRO將對RA4TOCK1引腳上出現(xiàn)的上跳變或下跳變加1。清0TOSEOPTION4>)選擇上跳變否則為下跳變。有關(guān)預(yù)分頻器的使用與PIC16C6X系列相同。當TMRO在計時/計數(shù)器方式下其值由FFH00H時產(chǎn)生溢出中斷,這個溢出中斷將置TOIF位為1。此中斷可以TOIE位為0來屏蔽。要能再次產(chǎn)生中斷,必須在中斷服務(wù)程序中,通過軟件使TOIF0,TMRO中斷不可以用來喚醒芯片。因為在SLEEP狀態(tài)下,計時器是關(guān)閉的。

如何使用TMRO的外部時鐘,外部時鐘的同步問題,預(yù)分頻器的使用等,參看PIC16C6X系列關(guān)于TMRO的技術(shù)性能。

七、數(shù)據(jù)EEPROM存儲器

數(shù)據(jù)EEPROM存儲器在滿電源電壓(VDD)時,正常操作期間是可讀,可寫的,這部分存儲器不能直接映象到寄存器文件空間,只有通過專用功能寄存器經(jīng)間接尋址來訪問,有四個SFR用于讀、寫這些存儲器,這些寄存器是EECON1EECON2;EEDATA;EEDAR。

其中EEDATA用來保持8位的讀/寫數(shù)據(jù)。EEADR用來保持正在訪問 EEPROM單元的地址。PIC16C84具有64個字節(jié)的EEPROM,其單元的地 址范圍是00H3FH。

EEPROM允許一次讀/寫一個字節(jié)。一個字節(jié)的寫入將自動擦除該單元,寫入新的內(nèi)容(在寫入之前擦除)。EEPROM數(shù)據(jù)存儲器是高 速率的擦/寫周期,寫入時間正常為10ms,由芯片的計時器控制。實 際寫入時間與所加電壓,溫度,芯片等有關(guān)。嚴格的時間請參看芯片的AC說明。當器件是在代碼保護時,只有CPU可以完成數(shù)據(jù)存儲器的讀 /寫。即器件的編程器的不再訪問存儲器(外部讀/寫被關(guān)閉)。

6 連接的考慮

因為模擬輸入用了ESD保護,它們有反偏二極管連到VDDVSS。這就要求模擬輸入電壓應(yīng)在VDDVSS之間。

如果模擬輸入電壓超過了最大值的06V以上的范圍,二極管可能變?yōu)檎驅(qū)?,如果輸入電流超過了說明書上的規(guī)定,它可能破壞器件。有些時候把外部的RC濾波器加在輸入信號上。要求選用的電阻R要保證總的信號源電阻不超過10K,任何在模擬信號上的其它的附加元件均應(yīng)有非常小的漏電流。

7.變換功能

理論上AD變換器的變換功能如下。

當模擬輸入信號電壓是1L sb的電壓時(或是VREF256)第一次變換就發(fā)生。

8 AD變換工作的流程圖

24 PIC16C7473AD變換所涉及的寄存器

地址 名稱 bit7 bit6 bit5 bit4 bit3 bit 2 bit1 bit0

0B8B INTCON GIE PEIE

0C PIR1 ADIF

8C PIE1 ADIE

0D PIR2 CCP2IF

8D PIE2 CCP2IE

1F ADCON0 ADCS1 ADCS0 CHS2 CHS1 CHS0 GODONE ADON

9F ADCON1 PCFG2 PCFG1 PCFG0

除上述所例寄存器外,還有ADRES(地址1EH)用于存放AD變換 的結(jié)果。PORTA(地址 05H)用于輸入多路模擬信號,TRISA(地址85 H)用于設(shè)置PORTAIO方式,PORTE(地址09H)用于輸入多路模擬信號,TRISE(地址89H)用于設(shè)置PORTEIO方式。

25 PIC16C71AD變換所涉及的寄存器

地址 名稱 bit7 bit6 bit5 bit4 bit3 bit 2 bit1 bit0

0B8B INTCON GIE ADIE

08 AOCON0 ADCS1 ADCS0 CHS1 CHS0 GO DONE ADIF ADON

88 ADCON1 PCFG1 PCFG0

 

此外還涉及ADRES(地址09H),PORTATRISA等。。

U U U U U U U U U RP RP RP R P RP

CP PWRTE WDTE FOSC 1 FOSC0 bit 13 bit0

410 PIC16C84的配置寄存器

 

73 EEPROM數(shù)據(jù)存儲器

與寫EEPROM的數(shù)據(jù)單元、用戶必須首先寫地址到EEADR寄存器,再送數(shù)據(jù)到EEDATA,最后用戶必須跟著一個專門的序列起動寫。例如:下面這段程序是寫EEPROM的程序。 ? ? BSF STATUS, RPO ;選擇1

BCF INTCONGIE ;關(guān)閉所有INT中斷

MOVLW 55H ;

MOVWF EECON2 ;寫55H

MOVLW AAH

MOVWF EECON2;寫AAH

BSF EECON1,WR;置WR位為1,開始寫

BSF INTCONGIE;允許INT中斷。

如果這個程序(即先寫55H EECON2,再寫AAHEECON2,然后置 WK1)未跟有嚴格的時間,寫將不能啟動。我們建議在執(zhí)行這幾條指令期間關(guān)閉中斷。

此外,EECON1中的WREN位必須選置成1,允許寫。這樣的機構(gòu)防止 了因錯誤指令的執(zhí)行而寫數(shù)據(jù)EEPROM。用戶在所有的時間應(yīng)保持WREN位為0,除了當要熱修改EEPROM以外。

寫序列開始以后,清0WREN位不影響這次寫周期。從開始設(shè)置,直到WREN1為止WR位將被禁止。當完成了寫周期以后,WR位由硬件清0 。寫完成中斷標志EEIF被置1EEIF必須由軟件將其清0。注意數(shù)據(jù)EEPROM存儲器EW周期可能偶然超過10ms,為確保寫周期的完成,用戶使用的EE中斷或查詢WR位(EECON11>)。這兩個均可用來判斷寫周 期的完成。

除了上述提到的防止錯誤的寫數(shù)據(jù)EEPROM外,在電源剛加電期 間的72ms內(nèi)也防止寫EEPROM數(shù)據(jù)存儲器。

CPU專門的特征

微控制器為其它處理器的區(qū)別是有專門的電路,這些電路涉及實時應(yīng)用的需要。PIC16C84具有最大的系統(tǒng)可靠性,最低的價格,最少的外部元件,提供了低功能操作模式和代碼保護。

PIC16C84具有看門狗計時器,此計時器只可經(jīng)配置位來關(guān)閉,為了增加其可靠性,關(guān)閉它的RC振蕩器。有兩個計時器提供加電時需要的延時。振蕩器起振計時器(OST)保持芯片在復(fù)位狀態(tài)直到石晶穩(wěn)定為止。另外一個是加電計時器(POWERUP TimerPWRT))它提供了 固定的72ms的延時。這樣保證了器件復(fù)位以及電源的可靠供電,用了這兩個計時器,使多數(shù)應(yīng)用不需要外接復(fù)位電路。

SLEEP方式提供了低功耗方式。用戶可經(jīng)外部復(fù)位;看門狗計時器溢出;中斷來喚醒芯片。

81配置位

配置位分為可編程的位,讀作0,不可編程的位,讀作1。通過可編程的位來選拔各種配置。這些位映象到程序存儲器的2007H單元。注意地址2007H不等于用戶程序存儲器空間。事實上,它屬于專門的測試 /配置存儲空間(2000H3FFH),只有在編程時可以訪問。圖410 是配置寄存器的結(jié)構(gòu)(附后)

其中Fosc10>為振蕩器選擇位。

11:選RC振蕩器

10:選HS振蕩器

01:選XT振蕩器

00:選CP振蕩器

WDTE是看門狗允許與禁止的選擇位。此位為1,允許看門狗工作。此位為0禁止看門狗工作。

PWRTE是加電計時器允許與禁止的選擇。此位為1,加電計時器允許工作,為0則禁止工作。

CP是代碼保護的選擇,此位為1代碼保護取消,這一位為0,所有程序存儲器的代碼被保護。其余位是不執(zhí)行的。讀作1。

有關(guān)振蕩器的配置,振蕩器的選擇與連接電路與PIC16C6X系列相同。

82中斷

PIC16C84具有4個中斷源。即外部中斷RBOINT引腳上的中斷,TMR0溢出中斷;PORTB改變中斷(RB7RB4);EEPRDM寫完成中斷。

中斷控制寄存器(INTCON在其標志位,記錄了每一個中斷請求。它也包括了每個中斷的允許/禁止位。所有中斷的允許/禁止位(IN TCON7>),它就開放所有中斷或禁止所有中斷。從中斷返回指令RETFLE返回時,退出中斷,并置GIE1,重新開放所有中斷。 RBOINT引腳中斷,RB端口改變中斷和TMRO溢出中斷,這些中斷的中斷標志在INTCON寄存器中。

當中斷的響應(yīng)時,GIE位被清0,關(guān)閉任何新的中斷,返回地址被壓入堆棧,用0004H裝入PC。對于外部中斷文件,如RBOINT引腳或PORTB改變中斷,這類中斷需34個指令周期。嚴格的時間,取決于中 斷事件的發(fā)生。一旦在中斷的中斷服務(wù)程序中可以通過查詢中斷標志 位來確定中斷源。中斷的標志位應(yīng)在重新開發(fā)這個中斷之前,經(jīng)軟件 將其清0。

注意:

①每一個中斷的標志位被置位,而與它相應(yīng)的屏蔽位或GIE無關(guān)。

②如果中斷發(fā)生,而全部中的允許位GIE假設(shè)本是清0的,GIE可能被用戶中斷服務(wù)程序的RETFIE指令無意之間連成1。這種事情可能發(fā)生在

a、在中斷被響應(yīng)時,指令清0GIE位。

b、程序分支到中斷向量并執(zhí)行中斷服務(wù)程序。

c、中斷服務(wù)程序執(zhí)行RETFIE指令而完成。這會引起GIE位被置1(允許中斷)。同時程序返回中斷關(guān)閉后的指令(實 際上由于上述原因引起中斷未能關(guān)閉)。為確保GIE0,應(yīng)有如下一段程序。

l00p BGF INT CONGIE:關(guān)閉全部中斷

BTFSC INTCON,GIE;全部中斷允許位被關(guān)閉了嗎?

GOTO l00P;沒有返回到l00p,再清0GIE,否則程序繼續(xù)。

1INT中斷

RBOINT上的外部中斷是邊沿觸發(fā)。如果INTEDG位(OPTION 6>)是置1,則上升沿有效,如果INTEDG位被清0,則下降沿有效。當有效跳變出現(xiàn)在RBOINT引腳上時,INTF位(INTCON1>)被置1。清0INTE控制位(INTCON4>),關(guān)閉這個中斷。INTF在重新允許這個中斷之前應(yīng)由中斷服務(wù)程序中的軟件來清0這一位。在芯片進入SLEEP之前,如果INTE位被置1,則INT中斷發(fā)生后可喚醒芯片。GIE位的狀態(tài)決定了處理器被喚醒后是否分支到中斷向量。

2TMRO中斷

TMRO溢出(由FFH00H)將置1 TOIF位(INTCON2>)。這一位 的中斷可以對TOIEINTCON5>)位置1或清0而開放/關(guān)閉中斷。

3PORTB中斷

在端口B74位的輸入改變,就置1 RBIFINTCON0>)位。 這個中斷可以對RBIEINTCON3>)位置1或清0而開放或關(guān)閉。

注意 :當正在對RB端口進行讀操作時,RB7RB4發(fā)生改變,RBIF標志位可 能不被置1。

4.中斷時如何保存WSTATUS寄存器。

中斷時,硬件自動將PC的值壓入堆棧,這叫保存斷點,用戶經(jīng)常希望保存關(guān)鍵的寄存器的內(nèi)容,(如WSTATUS寄存器)。為此,執(zhí)行如下一段程序。

MOVWF WTEMP ;將W寄存拷貝到WTEMP寄存器,WTEMP寄存器 可在1塊或0

SWAPF STATUS,W;狀態(tài)寄存器內(nèi)容送入W

BCF STATUSRPO;選0

MOVWF STATUSTEMP;將狀態(tài)寄存器的內(nèi)容(現(xiàn)在在W中的STATUSTEMP寄存器中斷服務(wù)程序

SWAPF STATUSTEMPW;將STATUSTEMP送入W(設(shè)置塊到原來 的狀態(tài))

MOVWF STATUS ;W送入STATUS(恢復(fù)STATUS

SWAPF WTEMP,0WTEMPW(恢復(fù)W的內(nèi)容)

在上面這段程序中,WTEMP寄存器,必須定義在兩個塊中,且要在定在同樣的塊基地址。例如將WTEMP定義在0塊的20H,同時它也應(yīng)定義在1塊的A0H。寄存器STATUSTEMP必須定義在0塊。

5.看門狗計時器(WDT

看門狗計時器實際使用的是在芯片上的RC振蕩器,這不要求任何外部元件。這個RC振蕩器與OSC1CLKIN引腳上接的RC振蕩器(主振時鐘)是分開的。這樣即使OSC1CLKINOSC2CLKOUT引腳停振,(例在執(zhí)行SLEEP指令后)WDT仍然能夠工作。在正常工作時,WDT計時器的輸出產(chǎn)生器件的RESET信號。如果器件處于SLEEP狀態(tài)下,WDT計時器的輸出將喚醒器件,使器件繼續(xù)正常的工作。WDT也可以通過編程的配置來關(guān)閉。其內(nèi)容的框圖與PIC16C6X系列相同。

九、PIC16C84單片機的指令系統(tǒng)共有35條指令。與PIC16C6X系列的指令完全相同。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。