天堂草原最受欢迎的角色,天堂动漫,天堂在线,色天堂下载,天堂中文在线资源,亚洲男人天堂

技術熱線: 4007-888-234
設計開發

專注差異化嵌入式產品解決方案 給智能產品定制注入靈魂給予生命

開發工具

提供開發工具、應用測試 完善的開發代碼案例庫分享

技術支持

從全面的產品導入到強大技術支援服務 全程貼心伴隨服務,創造無限潛能!

新品推廣

提供新的芯片及解決方案,提升客戶產品競爭力

新聞中心

提供最新的單片機資訊,行業消息以及公司新聞動態

PIC12C5XX單片機功能原理

更新時間: 2019-03-21
閱讀量:4606

單片機代理商深圳英銳恩為您介紹PIC12C5XX單片機功能原理。PIC12C5XX單片機是美國Microchip公司推出的8位單片機,也是世界上第一個8腳封裝的8位單片機系列,英銳恩科技有推出兼容PIC單片機的國產8位單片機。

§1.1  功能特點

一、高性能RISC結構CPU
      ·精簡指令集,僅33條單字節指令,易學易用
      ·除地址分支跳轉指令為雙周期指令外,其余所有指令皆為單周期指令
      ·執行速度: DC~1μs
      ·二級硬件堆棧
      ·直接、間接、相對三種尋址方式

二、功能部件特性
·8位定時器/計數器TIMER0,帶8位預分頻器
·大驅動電流,I/O腳可直接驅動數碼管(LED)顯示

  • 每個I/O引腳最大控電流25mA

  • 每個I/O引腳最大灌電流20mA
    ·內置上電復位電路(POR)
    ·復位定時器,保障復位正常
    ·內部MCLR復位端加上拉電路,無需外接上拉
    ·內置自振式看門狗,防程序死鎖
    ·程序保密位,可防止程序代碼的非法拷貝
    ·低功耗睡眠功能
    ·I/O引腳可喚醒睡眠
    ·內置4MHz RC型振蕩源,可省外接振蕩
    ·可選外接振蕩

  • RC:  低成本阻容振蕩

  • XT:  標準晶體/陶瓷振蕩

    • LP:  低速晶體,低功耗振蕩

三、CMOS工藝特性
      ·低功耗
         <2mA   @5V,4MHz
         -15μA  @3V,32KHz
         -<1μA  低功耗睡眠(Sleep)模式下
      ·全靜態設計
      ·寬工作電壓范圍:2.5V~5.5V
      ·寬工作溫度范圍:
         商用級:   0℃~+70℃
                  -工業級:-40℃~+85℃
                  -汽車級:-40℃~+125℃

§1.2  型號及引腳介紹

PIC12C5XX目前有二種型號,見下表:

型  號振  蕩EPROMRAM定時器輸入線I/O線電壓范圍封裝(DIP/SOIC)12C508DC~4Mhz512×1225×81152.5V-5.5V812C509DC~4Mhz1024×1241× 81152.5V-5.5V8

表1.1  PIC12C5XX型號功能表

各型號管腳圖如下:

PDIP,SOIC,Windowed CERDIP

VDD&mdash;&mdash;> GP5/OSC1/CLKIN<&mdash;&mdash;> GP4/OSC2<&mdash;&mdash;> GP3/MCLR/VPP&mdash;&mdash;><&mdash;&mdash;VSS <&mdash;&mdash;>GP0 <&mdash;&mdash;>GP1 <&mdash;&mdash;>GP2/T0CK1
圖1.1  12C508/509引腳

下表描述了各引腳的功能。

&emsp;&emsp;引腳名 引腳序號 屬性 緩沖類型 功能 GP07I/OTTL/ST雙向I/O口線,帶可編程弱上拉,并具電平變化喚醒睡眠功能GP16I/OTTL/ST雙向I/O口線,帶可編程弱上拉,并具電平變化喚醒睡眠功能GP2/T0CK15I/OST雙向I/O口線,并可設置為計數器TIMER0的外部信號輸入端GP3/MCLR4ITTL單向輸入口線,也可設置為芯片復位端。當設為復位端MCLR時,低電平有效。 當作為輸入口線時,帶可編程弱上拉及電平變化喚醒睡眠功能GP4/OSC23I/OTTL雙向I/O口線,(使用片內RC振蕩源時,也可作為晶振輸出端)GP5/OSC1/CLKIN2I/OTTL/ST雙向I/O口線,(使用片內RC振蕩源時,也可作為晶振輸入端或外部振蕩輸入端)VDD1電源&mdash;正電源VSS8電源&mdash;地注:ST ─ 斯密特觸發器
表1.2  PIC12C5XX引腳功能

從上表可看出,PIC12C5XX最多可以有5根I/O口線和1根輸入口線(GP3)。

&sect;1.3  PIC12C5XX內部結構
&emsp;&emsp;PIC12C5XX 的總線結構采用的是數據總線(8位)和指令總線(12位)獨立分開的&rdquo;哈佛結構&rdquo;,所以它具有精簡指令集(RISC)的特點,速度快,效率高,并且功耗很低.
&emsp;&emsp;PIC12C5XX在一個芯片上集成了8位的算術邏輯運算單元(ALU),0.5K~1K的12位程序存儲器,25~41個8位數據寄存器以及8位的計數器,上電復位電路,復位定時器,看門狗等等。
圖1.2  PIC12C5XX內部結構8位單片機PIC12C5XX內部結構圖
&sect;1.4  指令周期和流水作業
   PIC12C5XX的指令周期被分頻成4個不重疊的節拍Q1~Q4,程序計數器PC在Q1節拍增1, 而指令是在Q4節拍從程序存儲器中取出并置入指令譯碼器,并在下一個指令周期被執行, 如下圖所示:


PIC12C5XX單片機指令周期執行圖

指令的執行貫穿Q1~Q4節拍。

如上所述,當CPU在執行一條指令的同時, 下一條指令的代碼也同時被取出置入指令譯碼器,準備在下一指令周期執行,這就是PIC的流水作業方式,也是RISC結構單片機的特點,這種特點使單片機的運行速度可以達到很高。

除了地址分支跳轉指令的執行周期是2個指令周期外,其余所有指令都是單周期指令, 見下圖:

圖1.4  流水作業

PIC12C5XX單片機流水作業圖

&sect;1.5  程序存儲器和堆棧

PIC12C5XX的程序存儲器為12位長,其中PIC12C508為512字節,而PIC12C509為1024字節。復位向量為地址0,因為最后一個字節(PIC12C508為地址1FFH,PIC12C509為地址3FFH)存放有片內RC實際振蕩的校正系數,其形式為指令MOVLW XX,用戶不要使用這個字節,所以用戶的程序應從地址000H開始存放,注意這點和PIC16C5X有所不同。

PIC12C5XX單片機程序存儲器和堆棧
圖1.5  程序存儲器和堆棧

PIC12C5XX把程序存儲器以512字節為單位進行分頁管理,這樣PIC12C508有一個頁面程序區,而PIC12C509有2個頁面程序區,由狀態寄存器STATUS中的PA0位(STATUS<5>) 確定程序區的頁面。這是因為PIC是RISC結構,所有指令都是單字節,在PIC12C5XX中, 一條指令中所包含的地址信息只有9位,只能直接尋址一個頁面(512字節);對于12C509,則還要由PA0位來輔助尋址2個頁面(1024字節)的程序空間,即程序當需從一個頁面跳轉到另一個頁面時(CALL、GOTO指令),應事先根據要跳轉去的頁面,把PA0位置為相應的值,請參閱狀態寄存器的描述。

PIC12C5XX的堆棧有2層,有自己獨立的空間,不占用程序存儲器。注意它只能容納二層子程序嵌套調用。堆棧的長度是12位,和PC長度一致,可以存放子程序調用時的PC值。

對堆棧的壓入操作由子程序調用指令CALL完成,出棧操作則由子程序返回指令RETLW完成,請參閱第二章中這二條指令的詳介。

&sect;1.6  數據存儲器

PIC12C5XX的數據存儲器(RAM)由一些寄存器組成,分為特殊寄存器和通用寄存器二種。在PIC單片機中,對任何部件的操作都表現為對某一寄存器的操作,所以編程非常簡單明了。

PIC12C5XX單片機寄存器結構圖

  • : 非實際存在的寄存器,參見&sect;1.6.1中詳介。
    圖1.6  寄存器結構

從上圖可看到,00h~06h為特殊寄存器,其余為通用寄存器。PIC12C508有25個通用寄存器,而PIC12C509則有41個通用寄存器,其中25個在Bank0,另16個在Bank1,關于寄存器的Bank方式,請參閱&sect;1.6.1的FSR寄存器描述。

&sect;1.6.1  特殊寄存器

一、INDF(地址:00h) ── 間址寄存器
INDF是一個物理上不存在的寄存器,只是一個邏輯寄存器,用來進行間接尋址,實際的尋址地址為FSR<4:0>的值。

例:      MOVLW       10h
         MOVWF       FSR                ;實際地址10h(F10寄存器)&rarr;FSR
         MOVLW     55h
         MOVWF     INDF           ;數據55h&rarr;F10
         INCF        FSR              ;FSR增1(FSR=11h)
         MOVWF     INDF            ;數據55h&rarr;F11

 參閱后面FSR寄存器的描述。

二、TMR0(地址:01h) ── 定時器/計數器寄存器

二、TMR0(地址:01h) ── 定時器/計數器寄存器
TMR0對應于TIMER0,它是一個8位的定時器/計數器(在PIC16C5X中稱其為RTCC),請參閱&sect;1.8詳介。

三、PCL(地址:02h) ── 程序計數器PC<7:0>

PIC12C5XX程序計數器PC最多可尋址1K(1024)程序區:

型      號PC長度尋址空間PC復位值PIC12C50895121FFhPIC12C5091010243FFh

單片機一復位,PC值被置為全&ldquo;1&rdquo;指向程序區的最后一個字節。前面我們提過,這個地址存放的是芯片出廠時已放入的MOVLW XX指令(其中XX是片內振蕩校正系數),所以單片機復位后會執行這條指令,然后PC馬上翻轉到000h,開始執行用戶的程序代碼。注意,頁面選擇位PA0 復位時也被清零,所以這時頁面處于0頁,請參閱有關狀態寄存器STATUS的描述。

對于&ldquo;GOTO&rdquo;指令,它的指令碼中含有跳轉地址的低9位,即PC<8:0>,對于PIC12C509來說,狀態寄存器的第5位(STATUS<5>)還會被置入PC<9>,以選擇程序頁面,從而尋址1K的程序空間.

PIC12C5XX單片機

對于&ldquo;CALL&rdquo;指令或其他涉及會修改PCL的指令,它們的指令碼中僅包含目的地址的低8位,即PC<7:0>,而PC<8>總是會被硬件自動清零,狀態寄存器第5位(STATUS<5>)也會被置入PC<9>以選擇程序頁面(對于PIC12C509而言)。見下圖:

PIC12C5XX單片機美國微芯

從上圖可看出,由于執行這些指令硬件總會清PC<8>=0,所以它們的起始地址都必須限于放在每個程序頁面的上半區,即頭上的256個字節空間內(0h~FFh或200h~2FFh)。

四、STATUS(地址:03h) ── 狀態寄存器

STATUS寄存器包含了ALU的算術狀態、芯片復位狀態、程序頁面位等信息。STATUS 可以被讀/寫,但是其中的復位狀態位TO、PD不能由軟件設置,它們的狀態如何決定&sect;1.12.7 會有詳細描述。

圖1.9  狀態寄存器

在加法運算時,C是進位位;在減法運算時,C是借位的反。

例a:
         CLRF         F10          ;F10=0
         MOVLW       1             ;W=1
         SUBWF        F10              ;F10-W=-1(FFH),C=0(運算結果為負)

例b:
         MOVLW       1                ;W=1
         MOVWF       F10              ;F10=1
         CLRW                     ;W=0
         SUBWF        F10             ;F10-W=1,C=1(運算結果為正)

PD和TO兩位可用來判斷芯片復位的原因,GPWUF位也是用來判斷芯片復位類型,請參閱&sect;1.12.7描述。

五、FSR(地址:04h) ── 選擇寄存器

FSR和INDF寄存器(地址:00h)配合完成間接尋址,請參閱前面有關INDF寄存器的描述。FSR寄存器寬度為5位,FSR<4:0>用來間接尋址32個寄存器,FSR<5> 則用來選擇寄存器體(Bank),見下圖:

圖1.10  直接/間接尋址方式

      a、PIC12C508: 不存在寄存器體選,FSR<5>恒為&ldquo;1&rdquo;。
      b、PIC12C509: FSR<5>=1  Bank1,
      FSR<5>=0  Bank0。

六、OSCCAL(地址:05h) ── 內部振蕩校正系數寄存器

PIC12C5XX內部集成有RC振蕩供用戶選擇使用,OSCCAL<7:4> 包含了該振蕩電路的校正系數,其上電初始值為&ldquo;0111&rdquo;,請參閱&sect;1.11.4有關內部RC振蕩的描述。

七、GPIO(地址:06h) ── I/O寄存器

PIC12C5XX有一個6位的I/O口,它在寄存器中的映像就是GPIO寄存器,GPIO<5:0>對應于 I/O口線GP5:GP0,GPIO<7:6>未用,恒為&ldquo;0&rdquo;。

八、TRIS ── I/O方向控制寄存器

TRIS是GP口線方向控制寄存器,用戶不能直接尋址,必須通過執行&ldquo;TRIS  6&rdquo;指令來設置它。當執行&ldquo;TRIS     6&rdquo;指令后,W寄存器的內容即會被置入TRIS中。&ldquo;1&rdquo;將相應的I/O口線設為輸入態(高阻態),&ldquo;0&rdquo;則被設為輸出態。但是有二點例外,即GP3永遠是輸入態而GP2有可能由OPTION寄存器設置為輸入態(T0CKI),而不理會TRIS中的設置內容。請參閱&sect;1.2關于I/O口的描述。

例:
         MOVLW      0Fh          ;W=&ldquo;00001111&rdquo;
         TRIS             6             ;TRIS=&ldquo;001111&rdquo;,GP0:GP3為輸入態
         GP4:GP5為輸出態

各種復位都會置TRIS為全&ldquo;1&rdquo;。

九、OPTION ── 參數定義寄存器

OPTION用來定義一些芯片工作參數,見下圖所示:

圖1.11  OPTION寄存器

OPTION也是不能由用戶直接尋址的,必須由執行&ldquo;OPTION&rdquo;指令來把W寄存器中的內容置入OPTION寄存器,如下例:
         MOVLW       7                ;W=&ldquo;00000111&rdquo;
         OPTION                      ;W&rarr;OPTION
各種復位都會置OPTION為全&ldquo;1&rdquo;。

注意即使TRIS中相應的GP2方向位是&ldquo;0&rdquo;,如果將TOCS置為&ldquo;1&rdquo;,則GP2也會被強置為輸入態,即為T0CKI輸入線。

有關OPTION各位的定義,請參閱各自相應的章節。

十、W ── 工作寄存器

W寄存器用來存放指令中的第二個操作數,或用來進行內部數據傳送,或存放運算結果,是最常用的寄存器。

&sect;1.6.2  通用寄存器

      PIC12C508: 07h ─ 1Fh        ;Bank0
      PIC12C509: 07h ─ 1Fh        ;Bank0
      30h ─ 3Fh                ;Bank1

通用寄存器在上電后的值是隨機的,所以它屬RAM性質。

&sect;1.7  I/O 口

PIC12C5XX只有一個I/O口,對應的映像寄存器為GPIO(地址:06h),其中GPIO< 5:0> 對應GP5:GP0,GPIO<7:6>未用,永為&ldquo;0&rdquo;。注意,GP3僅可作為輸入,是單向I/O口線。另外,GP5、GP4、GP3及GP2還可以由用戶定義成各種特殊功能口線,一旦它們被用作特殊用途,則永遠讀為&ldquo;0&rdquo;。GP0、GP1和GP3還帶有可編程的弱上拉和&ldquo;電平變化喚醒功能&rdquo;(即喚醒正處于睡眠狀態下的芯片),關于這點請參閱OPTION寄存器的描述。如果GP3被用戶定義為復位輸入端(MCLR),則它的弱上拉自動有效,但&ldquo;電平變化喚醒&rdquo;特性被自動關閉。

GPIO口線的方向由TRIS寄存器控制,詳情參見&sect;1.6.1中有關TRIS寄存器的描述。

&sect;1.7.1  I/O 口結構

一根I/O口線的結構如下圖所示:

圖1.12  I/O口結構

除了GP3只能單向作為輸入口外,其余的GPIO口皆可由用戶定義為輸入/輸出態。作為輸入口時沒有鎖存,外部信號必須保持到讓CPU讀入為止(例如:MOVF   GPIO,W)。作為輸出則有鎖存,可以保持直到被新的值取代為止。

I/O端的輸入/輸出態由TRIS寄存器的值控制,當TRIS將&ldquo;1&rdquo;置入I/O控制器時Q1和Q2 都處于截止態,所以I/O端即呈高阻態(輸入態)。當執行I/O讀指令(如MOVF          6,W),把當前I/O端的狀態讀入數據總線。當TRIS將&ldquo;0&rdquo;置入I/O控制器時,Q1和Q2的導通情況將要由數據鎖存器Q端的狀態來決定。當寫入數據為&ldquo;1&rdquo;時,Q端為低電平0,則Q1導通,I/O輸出為高電平。反之,當寫入數據為&ldquo;0&rdquo;時,Q端為&ldquo;1&rdquo;,則Q2導通,I/O端輸出為低電平。I/O讀寫時序如圖1.13所示。

&sect;1.7.2  I/O口使用注意事項

1、I/O方向轉置的問題

某時候可能需要一個I/O口一會做輸入,一會又做輸出。這就是I/O方向的轉置。在編寫這種I/O轉置程序時必須注意,有些指令如位設置指令(BSF、BCF)寫I/O口時是先從I/O讀入其狀態,執行位操作后再將結果寫回去覆蓋原來的內容(輸出的結果放在I/O口的數據鎖存器)。

舉個例子來說:&ldquo;BSF   6,5&rdquo; 這條指令的目的是要把B口的第6位置為高電平&ldquo;1&rdquo;。執行這條指令時,先把整個B口當前的狀態內容讀入到CPU,把第6位置成&ldquo;1&rdquo;后再把結果(8個位)重新輸出到B口。如果B口中的有一個I/O端是需要方向轉置的(比如說bit1),而這時是處于輸入態,那么B口的狀態值重新寫入后,B口的數據鎖存器1的鎖存值就是當前B口Bit1的狀態。 這可能和先前Bit1作為輸出時所鎖存的值不同,所以當Bit1 再轉置成輸出態時,出現在Bit1 端的狀態就可能和先前的輸出態不同了。

2、I/O的&ldquo;線或&rdquo;和&ldquo;線與&rdquo;

從圖1.12看出PIC I/O端輸出電路為CMOS互補推挽輸出電路。因此與其他這類電路一樣,當某個PIC I/O端設置為輸出狀態時,不能與其他電路的輸出端接成&ldquo;線或&rdquo;或&ldquo;線與&rdquo;的形式,否則可能引起輸出電流過載,燒壞PIC。如需要與其他電路接成&ldquo;線或&rdquo;電路時,PIC I/O 端必須置于&ldquo;1&rdquo;狀態或輸入狀態,并外接下拉電阻。電阻的阻值根據實際電路和PIC I/O 端最大電流來決定。

3、I/O口的連續操作

一條寫I/O的指令,對I/O真正寫操作是發生在指令的后半周期(參照圖1.13)。而讀I/O的指令卻是在指令的周期開始就讀取I/O端狀態。所以當你連續對一個I/O端寫入再讀出時,必須要讓I/O端上的寫入電平有一個穩定的時間,否則讀入的可能是前一個狀態,而不是最新的狀態值。一般推薦在兩條連續的寫,讀I/O口指令間至少加一條NOP指令。

例:
         MOVWF       6                  ;寫I/O
         NOP                                 ;穩定I/O電平
         MOVF        6,W         ;讀I/O

4、噪聲環境下的I/O操作

在噪聲環境下(如靜電火花),I/O控制寄存器可能因受干擾而變化。比如I/O口可能會從輸入態自己變成輸出態,對于這種情形,WDT也是無法檢測出來的。因此如果你的應用環境是較惡劣的,建議你每隔一定的間隔,都重新定義一下I/O控制寄存器。最保險的方法當然是對I/O讀寫前都定義一下I/O控制寄存器(但是實踐證明對于大多數的應用都不必做到這樣,只是提請你注意噪聲干擾)。

圖1.13  I/O口連續讀/寫時序

&sect;1.8  定時器/計數器TIMER0

TIMER0是一個8位的定時器/計數器,其對應的映像寄存器是TMR0(地址:01h),可由用戶程序直接讀寫,并且可帶有8位的預分頻器。它用于對外加在GP2/T0CKI引腳上的外部信號進行計數(計數器)或對內部指令時鐘進行計時(定時器),在PIC16C5X中它被稱為RTCC。

TIMER0及其相關電路如圖1.14所示。從圖中可看出TIMER0工作狀態由OPTION寄存器控制,其中OPTION寄存器的T0SC位用來選擇TIMER0的計數信號源,當T0SC為&ldquo;1&rdquo;時,信號源為內部時鐘,T0SC為&ldquo;0&rdquo;時,信號源為來自T0CKI引腳的外部信號。OPTION寄存器的PSA位控制預分頻器(Prescaler)分配對象,當PSA位為&ldquo;1&rdquo;, 分配給TIMER0,即外部或內部信號經過預分頻器分頻后再輸出給TIMER0。 預分頻器的分頻比率由OPTION內的PS0~PS2決定。這時涉及寫TMR0寄存器的指令均同時將預分頻器清零,OPTION 寄存器內容保持不變,即分配對象、分頻比率等均不變。OPTION的T0SE 位用于選擇外部計數脈沖觸發沿。當T0SE為&ldquo;1&rdquo;時為下降沿觸發,為&ldquo;0&rdquo;時則上升沿觸發。

                      圖1.14  TIMER0 方塊圖

TIMER0計數器采用遞增方式計數,當計數至FFH時,在下一個計數發生后,將自動復零,重新開始計數,從此一直循環下去。TIMER0對其輸入脈沖信號的響應延遲時間為2個機器周期,不論輸入脈沖是內部時鐘、外部信號或是預分頻器的輸出。響應時序見圖1.15。

TIMER0對外部信號的采樣周期為2個振蕩周期,因此當不用預分頻器時,外加在T0CKI 引腳上的脈沖寬度不得小于2個振蕩周期即1/2指令周期。同時,當使用預分頻器時,預分頻器的輸出脈沖周期不得小于指令周期,因此預分頻器最大輸入頻率可達N,fosc/4,N 為預分頻器的分頻比,但不得大于50MHz。

圖1.15a.  TIMER0時序圖:內部時鐘/無預分頻器

圖1.15b.  TIMER0時序圖:內部時鐘/預分頻比1:2

應注意的是盡管PIC對外部加于T0CKI信號端上的信號寬度沒有很嚴格的要求,但是如果高電平或低電平的維持時間太短,也有可能使TIMER0檢測不到這個信號。一般要求信號寬度要大于10ns。

&sect;1.9  預分頻器

預分頻器是一個分頻倍數可編程的8位計數器。其結構如圖1.14 所示上節對預分頻參數已有描述,這里不再贅述。

預分預器的分配對象完全由程序控制,可以在程序中改變Prescaler分配對象。

1、從TIMER0到WDT的改變

                               MOVLW    B'XX0X0XXX'   ;選擇內部時鐘和新的預分頻值
      OPTION                          ;如果新的預分頻值='000'或者
      CLRF          1                 ;='001',則暫時先選一個另外的值
      MOVLW    B'XXXX1XXX'     ;清零TMR0和預分頻器
      OPTION                         ;選擇WDT為對象,但不要改變預分頻值
      CLRWDT                             ;清WDT和預分頻器
      MOVLW      B'XXXX1XXX'     ;選擇新的預分頻器
      OPTION

2、從WDT到TIMER0的改變

      CLRWDT                         ;清WDT 及Prescaler
      MOVLW    B'XXXX0XXX'     ;選擇TIMER0
      OPTION

圖1.16  預分頻器方塊圖

注意,預分頻器只能分配給TIMER0或WDT其中之一使用,而不能同時分配給二者。

&sect;1.10  看門狗WDT

看門狗計時器(Watch Dog Timer)是一個片內自振式的RC振蕩計時器,無需任何的外接元件。這意味著即使芯片振蕩停止了(例如執行指令SLEEP后),WDT照樣保持計時。WDT計時溢出將產生RESET。在PIC12C5XX芯片內有一個特殊的謂之&ldquo;系統定義字&rdquo;(Configuration EPROM)的單元,其中的一個位是用于定義WDT的,可以將其置&ldquo;0&rdquo;來抑制WDT使之永遠不起作用。這將在第六章的燒寫器介紹部分詳細說明。

1、WDT周期

WDT有一個基本的溢出周期18ms(無預設倍數),如果需要更長的WDT周期,可以把預分頻器分配給WDT,最大分頻比可達1:128,這時的WDT溢出周期約為2.5S。WDT溢出周期和環境溫度、VDD等參數有關系,請參閱附錄的圖表。

&ldquo;CLRWDT&rdquo;和&ldquo;SLEEP&rdquo;指令將清除WDT計時器以及預分頻器(當預分頻器分配給WDT時)。WDT一般用來防止系統失控或者說防止單片機程序&ldquo;失控&rdquo;。在正常情況下,WDT應在計時溢出前被CLRWDT指令清零,以防止產生RESET。如果程序由于某種干擾而失控,那么不能在WDT溢出前執行一條CLRWDT指令,就會使WDT溢出而產生RESET,使系統重新啟動運行而不至失去控制。若WDT溢出產生RESET,則狀態寄存器F3的&ldquo;TO&rdquo;位會被清零,用戶可藉此判斷復位是否由WDT溢時所造成。

2、WDT編程注意事項

如果使用WDT,一定要仔細在程序中的某些地方放一條&ldquo;CLRWDT&rdquo;指令,以保證在WDT在溢出前能被清零,否則會造成芯片不停地產生RESET,使系統無法正常工作。

在噪聲工作環境下,OPTION寄存器可能會因受干擾而改變,所以最好每隔一段時間就將其重新設置一下。

&sect;1.11  振蕩

PIC12C5XX可以運行在以下四種振蕩方式下:

    a、LP                    低功耗低速晶體振蕩
    b、XT            標準晶體/陶瓷振蕩
    c、INTRC        內部4MHz RC振蕩
    d、EXTRC        外部RC振蕩

以上四種振蕩方式可由&ldquo;系統定義字&rdquo;中的Fosc1:Fosc2 兩位來選擇,請讀者參閱后面&sect;1.12.9的詳述。

&sect;1.11.1  晶體/陶瓷振蕩

這種振蕩包括XT和LP,其電路連接是在GP5/OSC1/CLKIN和GP4/OSC2兩端加一晶體/陶瓷振蕩,如下圖所示:

圖1.17  晶體/陶瓷振蕩電路

下表是使用各種頻率的晶體和陶瓷振蕩所需的C1、C2電容值。

振蕩類型頻率C1C2  振蕩類型頻率C1C2XT455KHz68-100P68-100PLP32KHz15P15P  2MHz15-33P15-33PXT100KHz15-30P200-300P200KHz15-30P100-200P  4MHz10-22P10-22P  1MHz15-30P15-30P  2MHz15P15P  4MHz15P15P
              a. 陶瓷振蕩                               b.晶體振蕩

表1.3  各種振蕩下的C1和C2值

&sect;1.11.2  外部RC振蕩

這種振蕩類型成本最低,但頻率的精確性較差,適用于時間精確度要求不高的應用場合。RC振蕩的頻率是VDD、RC值以及環境溫度的函數。請參閱附錄的RC頻率函數圖。RC 振蕩的連接如圖1.18所示。

圖1.18  RC振蕩電路

RC振蕩是在OSC1端連接一個串聯的電阻電容。這個電阻如果低于2.2K,振蕩不穩定,甚至不能振蕩,但是電阻高于1M時,則振蕩又易受干擾。所以電阻值最好取5K~100K之間。盡管電容C為0時,電路也能振蕩,但也易受干擾且不穩定,所以電容值應取20P以上。RC值和頻率關系如表1.4所示。RC振蕩時OSC2端輸出一OSC1的4分頻脈沖(f=1/4OSC1)。

RestCextVDDFosc/25℃5k&Omega;0PF5.04.0MHz5k&Omega;20PF6.02.2MHz5k&Omega;20PF3.52.5MHz10k&Omega;130PF5.0480MHz10k&Omega;290PF5.0245MHz100k&Omega;300PF3.530MHz

表1.4  RC與頻率的關系

&sect;1.11.3  外部振蕩

PIC12C5XX也可以接受外部振蕩源(僅適合于XT和LP類型振蕩),連接時將外部振蕩接入GP5/OSC1/CLKIN端,見下圖:

圖1.19  外部振蕩源輸入電路

&sect;1.11.4  內部RC振蕩

PIC12C5XX內部提供有4MHz的RC振蕩源供用戶選擇使用,選擇振蕩方式和振蕩源的方法見&sect;1.12.9詳介。

在PIC12C5XX的程序區最頂端(12C508:1FFh,12C509:3FFh)放了一條MOVLW XX的指令, XX是內部RC振蕩的校正系數。芯片上電后,PC指針指向程序區最頂端,執行完這條指令后PC 值加1變為000h。這時W寄存器中存放即是內部RC振蕩的校正系數,用戶可以把這個系數置入OSCCAL寄存器(05h)以便使其起校正作用,也可以忽略不管它。

 例:                
      0                   ;定義存儲區地址0
      MOVWF      OSCCAL             ;把W中的校正系數置入OSCCAL。

&sect;1.12  復 位(RESET)

PIC12C5XX有各種各樣原因造成的芯片復位:

     1、芯片上電
     2.、MCLR端加低電平
     3、看門狗WDT超時溢出
     4、睡眠中某些I/O口線電平發生變化

當芯片處于復位狀態時,所有I/O口線都處于輸入狀態(高阻態),看門狗WDT和預分頻器都被清零。

圖1.20  片內復位電路(暫缺)

&sect;1.12.1  復位定時器(DRT)

復位定時器DRT(在PIC16C5X 中我們稱其為OST)是為了使芯片的復位可靠安全而設計。在PIC12C5XX中,對于XT和LP振蕩方式,上電后它們還需要一定的時間來建立穩定的振蕩。有鑒于此,PIC12C5XX內部設計了一個復位定時器DRT。DRT在MCLR端到達高電平(VIHMC)后,即啟動計時18ms,這樣可以使芯片保持在復位狀態約18ms以便讓振蕩電路起振及穩定下來,然后芯片即脫離復位狀態進入正常運行狀態。DRT的振蕩源是芯片內專有的RC振蕩電路,所以外圍電路并不能改變其18ms的計時時間。

當WDT計時溢出后,DRT也是啟動18ms使芯片保持在復位狀態,然后再重新開始運行程序。

注意,在振蕩方式是外部RC或內部RC時,DRT都關閉不起作用。

&sect;1.12.2  芯片上電復位(POR)

PIC12C5XX在芯片內集成有上電復位電路,見圖1.20所示。當芯片電源電壓VDD上升到一定值時(1.5V-2.1V),檢測電路即會發出復位脈沖使芯片復位。

&sect;1.12.3  MCLR復位

PIC12C5XX的GP3/MCLR端可以由用戶定義為普通輸入口GP3或復位端MCLR,如下圖:

圖1.21  GP3/MCLR端電路(暫缺)

具體方法參見&sect;1.12.9有關描述。

一旦用戶選擇MCLR功能,則該端輸入低電平會使芯片進入復位狀態。

&sect;1.12.4  外部復位電路

在某種情況下,DRT計時18ms后,芯片的振蕩電路還不能穩定或供電電壓(VDD)還不能達到標準值,這時如果芯片脫離復位狀態進入運行,則芯片就有可能失控或運行不正常。為了使芯片脫離復位狀態時各部分都處于正常,可以在MCLR端上加外部RC復位電路來延長復位時間,如下圖:

圖1.22  外部復位電路

這個電路可以使VDD上升到標準值一段時間后,MCLR才會上升到高電平,從而啟動DRT計時18ms后才進入運行。這樣可以延長整個復位過程,保障芯片復位后進入正常運行。

&sect;1.12.5  掉電復位鎖定

當單片機的供電電壓掉到最小標準值以下后,可能會使芯片的運行出現異常,從而擾亂整個控制系統,所以在某些應用中,我們希望一旦VDD掉到某個值時使芯片自動進入復位狀態(所有I/O口都變成高阻態)以免擾亂系統,下面是一個PIC12C5XX掉電復位鎖定的電路:

圖1.23  掉電復位鎖定

當VDD電壓恢復上升到標準值以上后,MCLR端恢復為高,從而使芯片恢復正常運行。

&sect;1.12.6  復位對寄存器的影響

對于通用寄存器來說,上電復位后它們的值是隨機不定的,其他類型的復位后則保持原值不變。

對于特殊寄存器,各種復位后它們都會等于一個固定的復位值,見以下二表:

寄存器地址上電復位值MCLR復位 WDT復位 引腳變化喚起復位W&mdash;qqqq  xxxx(注1)qqqq  uuuu(注1)INDF00hxxxx  xxxxuuuu  uuuuTMR001hxxxx  xxxxuuuu  uuuuPC02h1111  11111111  1111STATUS03h0001  1xxx?00?  ?uuu(注2)FSR(12C508)04h111x  xxxx111u  uuuuFSR(12C509)04h110x  xxxx11uu  uuuuOSCCAL05h0111  ——Uuuu  ——GPIO06h—xx  xxxx—uu  ——-OPTION&mdash;1111  11111111  1111TRIS&mdash;—11  1111—11  1111

u: 未變;       x: 隨機值;        -: 未用;         ?: 其值取決于復位方式

注1:由于在復位向量處存放著MOVLW    XX指令,其中XX為內部RC振蕩校正系數,所以復位后W<7:4>即會等于這個值。

注2:參見表1.6。

a.  各特殊寄存器復位后的值

 復  位  類  型   狀態寄存器STATUS程序計數器PC芯片上電復位     0000  1xxx1111  1111運行時MCLR端加低電平復位     000u  uuuu1111  1111睡眠時MCLR端加低電平復位     0001  0uuuu1111  1111 睡眠時看門狗WDT超時復位     0000  0uuu1111  1111  運行時看門狗WDT超時復位       0000  1uuu 1111  1111睡眠時I/O腳電平變化喚醒復位     1001  0uuuu   1111  1111
 u:未變;      x:隨機.

b.        復位對STATUS和PC的影響
表1.5  各種復位對特殊寄存器的影響

&sect;1.12.7  復位的鑒別

PIC12C5XX有多種原因都可引起芯片復位。在程序中判斷芯片復位的原因有時是非常必要的,例如上電復位后程序一般都要做一些寄存器初始化工作,而別的復位后則可以不做初始化而直接進入控制運行。

在狀態寄存器STATUS有三個位(GRWUF、TO、PD)可用來標識各種復位狀態,見下表:

GPWUFTOPD復 位 原 因000睡眠中WDT超時溢出001運行時WDT超時溢出010睡眠中MCLR拉低011芯片上電0uu運行時MCLR拉低110睡眠中GP0,GP1或GP3電平變化
u:未變

a.           復位后TO、PD及GPWUF的狀態

事   件GRWUFTOPD注 芯片上電011  WDT超時溢出   00u不影響PD位執行Sleep指令(進入睡眠)u10  執行CLRWDT指令(清看門狗)  u11  睡眠中GP0,GP1或GP3電平發生變化110
   u:未變

b.   影響TO、PD及GPWUF位狀態的事件
表1.6  復位對STATUS的影響

 例:要判斷是否芯片上電。

      BTFSS        STATUS,TO          ;TO=1 ?
      GOTO           NO_POWERUP
      BTFSS               STATUS,PD         ;PD=1 ?
      GOTO         NO_POWERUP
     INIT    &hellip;                                   ;TO=1,PD=1。芯片上電,做初始化。

&sect;1.12.8  睡眠模式(Sleep)

1、進入SLEEP

執行一條&ldquo;SLEEP&rdquo;指令即可進入低功耗睡眠模式。當進入SLEEP后,WDT被清零,然后重新開始計數。狀態寄存器STATUS中的PD位被置成&ldquo;0&rdquo;,TO位置成&ldquo;1&rdquo;,同時振蕩停止(指OSC1端的振蕩電路)。所有的I/O口保持原來的狀態。這種工作模式功耗最低。為使耗電流最小,進入SLEEP前,應使所有的I/O口處于高電平VDD或低電平VSS,而不應使其處于高阻態,以免產生開關電流損耗。可以在I/O口加上拉或下拉電阻,或者把I/O口都置成輸出態來避免其處于高阻態(浮態)。

RTCC端亦應置為VDD或VSS(通過上拉或下拉)。

MCLR必須處于高電平狀態。

2、喚醒SLEEP

SLEEP可被WDT溢出喚醒,或在MCLR端加低電平喚醒SLEEP或GP0、GP1、GP3電平發生變化。第二種喚醒方法經常用在以下應用場合:在系統主電源掉電,并由后備電源(電池)供電后,執行&ldquo;SLEEP&rdquo;指令進入低功耗模式,這樣電池就可長時間保持系統數據。當主電源恢復供電時,讓其在MCLR產生一低電平喚醒SLEEP,并重新復位。這樣需在MCLR端加一外部復位電路。第三種方法則在需要使用系統時喚醒睡眠中的單片機,它常通過按鍵輸入來實現。系統上電時,STATUS的PD被置為&ldquo;1&rdquo;,而執行&ldquo;SLEEP&rdquo;指令后,PD位被置成&ldquo;0&rdquo;。所以通過PD位可以判斷系統是從SLEEP模式喚醒而復位,還是上電后的復位。STATUS中的TO位則可判斷當處于SLEEP狀態的系統是由WDT溢時喚醒或是由外界給MCLR端一個低電平喚醒。這些區別有時是很重要的,特別是對系統的一些初始化工作來說。

&sect;1.12.9  系統定義字(Configuration)

在PIC12C5XX中有一個12位長的系統定義字單元,其中只用了前5位(bit0~bit4),用來定義單片機的一些系統性能選擇,如下圖:

圖1.24 系統定義字

系統定義字屬特殊的空間,不占用芯片的程序存儲器,不能由程序指針(用戶程序)訪問,用戶可以用燒寫器對其進行編程,參見燒寫器章節中的描述。

程序保密位被置為&ldquo;0&rdquo;后,程序存儲區中的程序代碼(12位)中的高8位將被遮沒。具體地說,就是加密后再用燒寫器讀該芯片的程序區時,每一個程序代碼都呈現00X的形式,這樣別人就無法恢復這些被加密的代碼,因此也就無法進行復制拷貝。加密后的單片機的功能不會受任何影響,加密后的程序代碼并不影響其在芯片內的運行,而只是不能再被還原讀出來。

&sect;1.12.10 ID碼

PIC12C5XX芯片中有一個16位的標識碼(稱為ID碼),用來作芯片標識。ID碼僅起芯片識別作用,用戶可在燒寫器上將其燒入和讀出作芯片識別(如燒入日期等),但不會對芯片功能產生任何影響,即不使用它也沒有關系。

联系我们: 思南县| 盐山县| 桃园市| 蓝田县| 马鞍山市| 德昌县| 汉寿县| 长岛县| 贵港市| 昌邑市| 潢川县| 张家港市| 聊城市| 湾仔区| 舟山市| 花垣县| 清水县| 河间市| 曲松县| 唐河县| 渑池县| 昔阳县| 阜新市| 秦安县| 兴义市| 永定县| 伊宁市| 湄潭县| 隆昌县| 清流县| 容城县| 濉溪县| 台北县| 伊宁市| 磴口县| 正定县| 鄂温| 民县| 依安县| 昂仁县| 建始县|