<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > PIC16C84單片機介紹

PIC16C84單片機介紹

作者: 時(shí)間:2011-02-22 來(lái)源:網(wǎng)絡(luò ) 收藏

概述

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

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

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

PIC16C84最大的特點(diǎn)是具有1K×14位的電可擦除的程序存儲器和64×8位的電可擦除的數據存儲器,這將為系統開(kāi)發(fā)和各種應用提供了 更多的方便。

時(shí)鐘和指令周期

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

存貯器的結構

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

31程序存儲器的結構

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

PC120

CALL,RETURN 13

RETFIE,RETLW 1級堆棧

8級堆棧

復位地址 0000H

外部中斷向量 0004H

用戶(hù)存貯空間 3FFH

1FFFH

42程序存儲的映象和堆棧

 

32數據存儲器的結構

數據存儲器被分成兩個(gè)區域。第一個(gè)是專(zhuān)用功能寄存器(SFR)區域,第二是通用寄存器區域(GPR)。SFR控制著(zhù)器件的操作。數據存儲器被分成0塊和1塊。通過(guò)程序時(shí)狀態(tài)寄存器STATUS中的RP1 RP0 的設置來(lái)選擇0塊(RP10,RP00)或1塊(RP01)。

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

1.通用寄存器文件 寄存器文件可以直接尋址或通過(guò)FSR間接尋址。所有器件都有一定 數量的通用寄存器(GPR),它們的數據寬度是8位。PIC16C84只有36個(gè)字節的通用寄存器,地址為0CH 2FH,對1塊對應的8CH AFH的訪(fǎng)問(wèn)都將實(shí)際訪(fǎng)問(wèn)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個(gè)通用寄 映象到 存器(SRAM 0 2F AF 7F FF 0 1

2.專(zhuān)用功能寄存器

CPU和外設使用專(zhuān)用寄存器以控制器件的操作。專(zhuān)用寄存是靜態(tài)RAM。下面介紹幾個(gè)重要的專(zhuān)用寄存器

①狀態(tài)寄存器

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

RW RW RW R R RW RW RW

IRP RP1 RP0 TO PD Z DC C bit7 bit0

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

RP1RP0,作為直接尋址的數據存儲器的塊選擇位。

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

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

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

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

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

OPTION寄存器

OPTION寄存器是可讀,可寫(xiě)的寄存器,它包含了各種控制位以配 TMROWDT的預分頻器,外部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為預分頻器的值的選擇。(與PIC16C6X的規定 相同)。PSA位是將預分頻器分配給WDT(看門(mén)狗計時(shí)器,或TMR0)。

TOSE是為TMRO選擇跳變信號

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

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

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

INTCON寄存器

INTCON是可讀可寫(xiě)的寄存器,它包含了各中斷源允許或禁止中斷 。圖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>輸入中沒(méi)有改變。 ? ? ? ? ? INTIF是外部中斷標志位。當這一位為1時(shí),表明有外部中斷發(fā)生 ,它必須用軟件將其清0,否則為0,表明沒(méi)有外部中斷發(fā)生。

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

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

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

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

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

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

四、PCLPCLATH

程序計數器(PC)是13位。低字節PCL是可讀,可寫(xiě)的寄存器。PC的高字節(PCH)不是直接可讀,可寫(xiě)的。PCLATHPC latch high 是作為PC128>的保持寄存器,這幾位的內容被傳送到程序計數器 的高位。當程序計數器在執行CALL,GOTO或寫(xiě)PCL等指令時(shí),即向PC裝入新的值。PC的高位由PCLATH裝入。

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

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

42程序存儲器的頁(yè)

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

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

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

43間接尋址,INDFFSR的作用

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

使用INDF寄存器,就可以實(shí)現間接尋址。

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

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

MOVLW 20H ;初始化RAM的指針

MOVF FSR ;到FSR

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

INCF FSR ;(FSR)+1FSR

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

GOTO NEXT ;否則入。

IO端口

PIC16C84具有兩個(gè)IO端口,PORTA,PORTB。某些端口的引腳用來(lái)與另外一些功能復用。

51 PORTATRISA寄存器

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

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

CLRF PORTA;初始化端口A

BSF STATUS,RPO;選擇1

MovLW CFH ;用于初始化數據方向的值

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

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

52 PROTBTRISB寄存器

PORTB8位寬度的雙向端口。相應的數據由TRISB決定,方法用端口A。

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

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

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

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

16個(gè)鍵

RB4 100

RB5

RB6

RB7

RB0

RB1

RB2

BR3

Rf

47利用端口B的鍵盤(pán)接口圖。

53 IO編程的考慮

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

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

六、計時(shí)器。

TMRO)模式 TMRO計時(shí)/計數器模式具有如下特點(diǎn):

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

·可讀,可寫(xiě)

·8位軟件可編程的預分配器

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

·具有外部時(shí)鐘的邊沿選擇

TMRO模式的簡(jiǎn)單框圖與PIC16C6X系列相同。它可以經(jīng)過(guò)清0 TOCs 位(即TION5>)來(lái)選擇計時(shí)器方式。在計時(shí)器方式,TMRO模式對每個(gè)指令周期加1(沒(méi)有預分頻器),如果對TMRO寫(xiě)操作,則計時(shí)器為加 (操作后兩個(gè)周期被禁止。)

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

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

七、數據EEPROM存儲器

數據EEPROM存儲器在滿(mǎn)電源電壓(VDD)時(shí),正常操作期間是可讀,可寫(xiě)的,這部分存儲器不能直接映象到寄存器文件空間,只有通過(guò)專(zhuān)用功能寄存器經(jīng)間接尋址來(lái)訪(fǎng)問(wèn),有四個(gè)SFR用于讀、寫(xiě)這些存儲器,這些寄存器是EECON1;EECON2;EEDATA;EEDAR。

其中EEDATA用來(lái)保持8位的讀/寫(xiě)數據。EEADR用來(lái)保持正在訪(fǎng)問(wèn) EEPROM單元的地址。PIC16C84具有64個(gè)字節的EEPROM,其單元的地 址范圍是00H3FH。

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

6 連接的考慮

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

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

7.變換功能

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

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

8 AD變換工作的流程圖

24 PIC16C7473AD變換所涉及的寄存器

地址 名稱(chēng) 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變換 的結果。PORTA(地址 05H)用于輸入多路模擬信號,TRISA(地址85 H)用于設置PORTAIO方式,PORTE(地址09H)用于輸入多路模擬信號,TRISE(地址89H)用于設置PORTEIO方式。

25 PIC16C71AD變換所涉及的寄存器

地址 名稱(chēng) 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),PORTA,TRISA等。。

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 寫(xiě)EEPROM數據存儲器

與寫(xiě)EEPROM的數據單元、用戶(hù)必須首先寫(xiě)地址到EEADR寄存器,再送數據到EEDATA,最后用戶(hù)必須跟著(zhù)一個(gè)專(zhuān)門(mén)的序列起動(dòng)寫(xiě)。例如:下面這段程序是寫(xiě)EEPROM的程序。 ? ? BSF STATUS, RPO ;選擇1

BCF INTCON,GIE ;關(guān)閉所有INT中斷

MOVLW 55H ;

MOVWF EECON2 ;寫(xiě)55H

MOVLW AAH;

MOVWF EECON2;寫(xiě)AAH

BSF EECON1,WR;置WR位為1,開(kāi)始寫(xiě)

BSF INTCON,GIE;允許INT中斷。

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

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

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

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

CPU專(zhuān)門(mén)的特征

微控制器為其它處理器的區別是有專(zhuān)門(mén)的電路,這些電路涉及實(shí)時(shí)應用的需要。PIC16C84具有最大的系統可靠性,最低的價(jià)格,最少的外部元件,提供了低功能操作模式和代碼保護。

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

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

81配置位

配置位分為可編程的位,讀作0,不可編程的位,讀作1。通過(guò)可編程的位來(lái)選拔各種配置。這些位映象到程序存儲器的2007H單元。注意地址2007H不等于用戶(hù)程序存儲器空間。事實(shí)上,它屬于專(zhuān)門(mén)的測試 /配置存儲空間(2000H3FFH),只有在編程時(shí)可以訪(fǎng)問(wèn)。圖410 是配置寄存器的結構(附后)

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

11:選RC振蕩器

10:選HS振蕩器

01:選XT振蕩器

00:選CP振蕩器

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

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

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

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

82中斷

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

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

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

注意:

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

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

a、在中斷被響應時(shí),指令清0GIE位。

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

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

l00p BGF INT CON,GIE:關(guān)閉全部中斷

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

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

1INT中斷

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

2TMRO中斷

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

3PORTB中斷

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

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

4.中斷時(shí)如何保存WSTATUS寄存器。

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

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

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

BCF STATUS,RPO;選0

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

SWAPF STATUSTEMP,W;將STATUSTEMP送入W(設置塊到原來(lái) 的狀態(tài))

MOVWF STATUS ;W送入STATUS(恢復STATUS

SWAPF WTEMP,0;WTEMPW(恢復W的內容)

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

5.看門(mén)狗計時(shí)器(WDT

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

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

分頻器相關(guān)文章:分頻器原理
塵埃粒子計數器相關(guān)文章:塵埃粒子計數器原理


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>