<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          PIC16C84單片機(jī)介紹

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

          概述

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

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

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

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

          時(shí)鐘和指令周期

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

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

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

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

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

          PC120

          CALL,RETURN 13

          RETFIE,RETLW 1級(jí)堆棧

          8級(jí)堆棧

          復(fù)位地址 0000H

          外部中斷向量 0004H

          用戶存貯空間 3FFH

          1FFFH

          42程序存儲(chǔ)的映象和堆棧

           

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

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

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

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

          ①狀態(tài)寄存器

          狀態(tài)寄存器包含有ALU(復(fù)術(shù)邏輯運(yùn)算單元)的算術(shù)狀態(tài),復(fù)位狀態(tài)和對(duì)數(shù)據(jù)存儲(chǔ)器的塊選擇,與任何寄存器一樣,狀態(tài)寄存器可以作為任何指令的目的寄存器。如果狀態(tài)寄存器作為某指令的目的寄存器 ,而那條指令要影響ZDC,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)位位,對(duì)ADDWFADDLW指令,當(dāng)這一位為1,表示指令 運(yùn)算的結(jié)果的最高有效位產(chǎn)生了進(jìn)位輸出。減法指令執(zhí)行的是加第二 操作數(shù)的新碼。對(duì)于循環(huán)指令(RRF,RLF),這一位即可以來(lái)自于源寄存器的高位,也可以來(lái)自于低位。如果這一位為0,表明結(jié)果的最高有效位沒(méi)有產(chǎn)生進(jìn)位輸出。對(duì)于減法,這一位的極性取反。DC是數(shù)字進(jìn)位或數(shù)字借位位。當(dāng)這一位為1時(shí),結(jié)果的D3位向D4位有進(jìn)位,否則無(wú)進(jìn)位。對(duì)于減法,這位的極性取反。Z是結(jié)果為0標(biāo)志。當(dāng)這一位為1時(shí),表明算術(shù)運(yùn)算和邏輯運(yùn)算的結(jié)果為0,否則這一位為0,表明運(yùn)算結(jié)果不為0。PD:低功耗位。當(dāng)這一位為1表明電源加上按正常供電或執(zhí)行了C LRWDT指令以后,這一位為0表示執(zhí)行了SLEEP指令(即器件進(jìn)入了低功 耗狀態(tài))。TO超時(shí)位。當(dāng)這一位為1時(shí),表明電源加上,進(jìn)入了正常供電,且執(zhí)行了CLRWDTSLEEP指令,這一位為0表明產(chǎn)生了看門(mén)狗計(jì)時(shí)器超時(shí)。

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

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

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

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

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

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

          OPTION寄存器

          OPTION寄存器是可讀,可寫(xiě)的寄存器,它包含了各種控制位以配 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

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

          TOSE是為TMRO選擇跳變信號(hào)

          INTEDG是為INT中斷引腳選擇跳變信號(hào)。

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

          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端口改變中斷標(biāo)志位。此位為1,表明RB74>輸入中至少有一位發(fā)生了改變,它必須用軟件清0這一位。否則為0,即 RB74>輸入中沒(méi)有改變。 ? ? ? ? ? INTIF是外部中斷標(biāo)志位。當(dāng)這一位為1時(shí),表明有外部中斷發(fā)生 ,它必須用軟件將其清0,否則為0,表明沒(méi)有外部中斷發(fā)生。

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

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

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

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

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

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

          四、PCLPCLATH

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

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

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

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

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

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

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

          43間接尋址,INDFFSR的作用

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

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

          使用INDF寄存器的任何指令,實(shí)際尋址數(shù)據(jù)是由文件選擇寄存器(FSR)所決定的。讀INDF自身(FSR0),將產(chǎn)生00H。向INDF寫(xiě),結(jié)果無(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的內(nèi)容所指問(wèn)的寄存器。

          INCF FSR ;(FSR)+1FSR

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

          GOTO NEXT ;否則入。

          IO端口

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

          51 PORTATRISA寄存器

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

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

          CLRF PORTA;初始化端口A

          BSF STATUSRPO;選擇1

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

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

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

          52 PROTBTRISB寄存器

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

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

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

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

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

          16個(gè)鍵

          RB4 100

          RB5

          RB6

          RB7

          RB0

          RB1

          RB2

          BR3

          Rf

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

          53 IO編程的考慮

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

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

          六、計(jì)時(shí)器。

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

          ·8位計(jì)時(shí)計(jì)數(shù)器

          ·可讀,可寫(xiě)

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

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

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

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

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

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

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

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

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

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

          6 連接的考慮

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

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

          7.變換功能

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

          當(dāng)模擬輸入信號(hào)電壓是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變換 的結(jié)果。PORTA(地址 05H)用于輸入多路模擬信號(hào),TRISA(地址85 H)用于設(shè)置PORTAIO方式,PORTE(地址09H)用于輸入多路模擬信號(hào),TRISE(地址89H)用于設(shè)置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數(shù)據(jù)存儲(chǔ)器

          與寫(xiě)EEPROM的數(shù)據(jù)單元、用戶必須首先寫(xiě)地址到EEADR寄存器,再送數(shù)據(jù)到EEDATA,最后用戶必須跟著一個(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 EECON1WR;置WR位為1,開(kāi)始寫(xiě)

          BSF INTCON,GIE;允許INT中斷。

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

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

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

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

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

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

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

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

          81配置位

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

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

          11:選RC振蕩器

          10:選HS振蕩器

          01:選XT振蕩器

          00:選CP振蕩器

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

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

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

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

          82中斷

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

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

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

          注意:

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

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

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

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

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

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

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

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

          1INT中斷

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

          2TMRO中斷

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

          3PORTB中斷

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

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

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

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

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

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

          BCF STATUS,RPO;選0

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

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

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

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

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

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

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

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

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


          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();