




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第一章 PIC16C5X硬件結(jié)構(gòu)第一節(jié) PIC16C5X主要功能特點 采用精簡指令集(RISC),僅33條指令。指令字長12位,全部指令都是單字節(jié)指令。除涉及PC值改變的指令外(如跳轉(zhuǎn)指令等),其余指令都是單周期指令。 工作頻率為DC20MHZ。 系統(tǒng)為哈佛結(jié)構(gòu)。數(shù)據(jù)總線和指令總線各自獨立分開,數(shù)據(jù)總線寬度為8位,指令總線寬度為12位。 內(nèi)部程序存儲器(ROM)從3842K字節(jié)不等。內(nèi)部寄存器組(RAM)有2572個。 7個特殊功能寄存器。 2級子程序堆棧。 工作電源 - 商用級:2.5V6.25V - 工業(yè)級:2.5V6.25V - 軍工級:2.5V6.0V 內(nèi)部自振式看門狗(WDT) 低功
2、耗模式(Sleep),耗電小于10uA。 內(nèi)部復(fù)位電路 內(nèi)帶一個8位定時器/計數(shù)器(RTCC) 具備保密位。保密熔絲可在程序燒寫時選擇將其熔斷,則程序不能被讀出拷貝。 提供四種可選振蕩方式 - 低成本的阻容(RC)振蕩-RC - 標(biāo)準(zhǔn)晶體/ 陶瓷振蕩-XT - 高速晶體/ 陶瓷振蕩-HS - 低功耗,低頻晶體振蕩LP 1220根雙向可獨立編程I/O口。每根I/O口都可由程序來編程決定其輸入/輸出方向。 低功耗 2mA5V,4MHz 15uA 3V,32KHz 3uA低功耗模式3V,0C70C第二節(jié) PIC16C5X型號介紹及引腳介紹PIC16C5X有五種型號,見下表:PIC16C5X管腳圖如下
3、:圖 1.1 PIC16C5X 管腳圖表 1.2描述了各引腳的功能:注:RTCC設(shè)置成內(nèi)部定時器時(由程序設(shè)定),這時應(yīng)將RTCC端接VSS或VDD,以避免干擾。采用RC振蕩時,OSC2端輸出一OSC1的4分頻信號。第三節(jié) PIC16C5X內(nèi)部結(jié)構(gòu)PIC16C5X在一個芯片上集成了一個8位算術(shù)邏輯單元ALU和工作寄存器(W);3842K的12位程序存儲器(ROM);3280個8位數(shù)據(jù)寄存器(RAM);1220個I/ O口端;8位計數(shù)器及預(yù)分頻器;時鐘、復(fù)位、及看門狗計數(shù)器等。內(nèi)部結(jié)構(gòu)如圖1.2所示:圖1.2PIC16C5X內(nèi)部結(jié)構(gòu)從圖中可以看到,PIC16C5X有個特點,就是把數(shù)據(jù)存儲器RAM
4、當(dāng)作寄存器來尋址使用以方便編程。寄存器組按功能分成二部分,即特殊寄存器組和通用寄存器組。特殊寄存器組包括實時時鐘計數(shù)器RTCC,程序計數(shù)器PC,狀態(tài)寄存器Status,I/O口寄存器以及存儲體選擇寄存器FSR。這些寄存器稍后我們還要詳細(xì)論述。PIC總線結(jié)構(gòu)采取數(shù)據(jù)線(8位)和指令線(12位)獨立分離的哈佛(Harvard)結(jié)構(gòu)。這樣可使單片機的指令速度得到提高。當(dāng)一條指令在ALU中執(zhí)行時,下一條指令已經(jīng)被取出放到指令寄存器等待執(zhí)行了。算術(shù)邏輯單元ALU和工作寄存器(W)承擔(dān)算術(shù)邏輯操作任務(wù)。 PIC16C5X提供二級堆棧(Stack),所以子程序調(diào)用只有二層。使用時一定要注意這點,否則程序運行
5、將失去控制。第四節(jié) 程序存儲器及堆棧PIC16C5X內(nèi)部有3842K的只讀程序存貯器,下面論述其結(jié)構(gòu)和堆棧。1.4.1程序存儲器結(jié)構(gòu)PIC16C5X程序存儲器結(jié)構(gòu)如圖1.3所示:圖1.2PIC16C5X內(nèi)部結(jié)構(gòu) 從上圖可看出,PIC程序存儲器采用分頁結(jié)構(gòu),每頁長0.5K。因此對于PIC16C52程序存儲器在1頁之內(nèi),而對于PIC16C54和PIC15C55程序存儲器容量為1頁,PIC16C56和PIC16C57 的容量則分別為2頁和4頁。頁面地址由狀態(tài)寄存器f3的第5位和第6位(PA0、PA1)確定。程序轉(zhuǎn)移時,在本頁內(nèi)可直接進行;在需跨頁跳轉(zhuǎn)時(GOTO、CALL指令),則必須根據(jù)將要跳轉(zhuǎn)去
6、的頁面,把f3中的PA0、PA1位置成相應(yīng)的值。具體請參考f3寄存器描述及2.7.2 程序設(shè)計基礎(chǔ)的程序技巧例子。1.4.2堆棧PIC16C5X設(shè)有二層堆棧,堆棧1和堆棧2,供子程序調(diào)用。涉及堆棧操作的指令有二條。1、CALL-在主程序中第一次執(zhí)行CALL指令時,將PC值加1后推入堆棧1,堆棧1 原有的內(nèi)容則被推入堆棧2中。這時子程序中還可再做一次子程序嵌套,即再執(zhí)行一次 CALL指令。如果子程序調(diào)用多于二層時,堆棧中只存放最近的二個返回地址。當(dāng)執(zhí)行一條CALL指令時,狀態(tài)寄存器f3中的將頁面尋址位PA1、PA0將被置入到PC的最高二位(第11位和第10位),而PC的第9位總是被置為0,如圖1
7、.3所示。所以這時PC 值將是這意味著在PIC16C5X中,子程序起始地址只能放在每個程序存儲頁面的上半頁,即低地址的那一半(0000FF、2002FF、4004FF、6006FF)。注意,這里指的是子程序的起始地址,即子程序頭。而子程序體是可以延伸到下半頁去的。對于PIC16C56和PIC16C57,由于程序空間分別為1K和2K,可能存在跨頁面子程序調(diào)用。所以調(diào)用子程序前必須先把f3中的PA0、PA1設(shè)置成該子程序所在的頁面地址。返回后再將其恢復(fù)成當(dāng)前的頁面值。當(dāng)然如果這時子程序是在同一頁面,則可省去這一過程。 2、RETLW-該指令把棧頂(堆棧1)的值寫入PC,同時還把堆棧2的值拷貝到堆棧
8、1 去。子程序總是返回到調(diào)用它時所在的地方,不管它是處在什么頁面,也不管f3寄存器中的PA0、PA1這時是指在什么頁面。但是執(zhí)行RETLW(子程序返回)指令并不會改變f3中PA0、PA1的值,所以當(dāng)你從一次跨頁面的子程序調(diào)用返回時,不要忘了恢復(fù)f3中的原先的PA0和PA1值。請參考上面關(guān)于CALL指令的敘述。由于堆棧和PC的寬度是相同的,所以你可以在程序的任何地方執(zhí)行一條CALL 指令來調(diào)用子程序。但是對于跨頁面的調(diào)用,你要小心處理f3中的頁面地址位PA0和PA1,請參考第二章指令詳解中的CALL實例。第五節(jié) 數(shù)據(jù)存儲器PIC16C5X把數(shù)據(jù)存儲器RAM都當(dāng)作寄存器來使用以使尋址簡單明潔,它們
9、功能上可分為操作寄存器、I/O寄存器、通用寄存器和特殊功用寄存器。它們的組織結(jié)構(gòu)如圖1.4所示:這些寄存器用代號F0F79來表示。F0F4是操作寄存器,F(xiàn)5F7是I /O寄存器,其余為通用寄存器。特殊功用寄存器地址對用戶不透明。1.5.1操作寄存器1、F0間址寄存器尋址F0實際上意味著間址尋址。實際地址為寄存器選擇寄存器F4的內(nèi)容。例: MOVLW 10MOVWF f4 ;10f4MOVLW 55MOVWF f0 ;55f102、F1實時時鐘/計數(shù)寄存器(RTCC)此寄存器是一個8位計數(shù)器。和其他寄存器一樣可由程序進行讀寫操作。它用于對外加在RTCC引腳上的脈沖計數(shù),或?qū)?nèi)部時鐘計數(shù)(起定時器
10、作用)。 圖1.5RTCC方塊圖上圖中可看出RTCC工作狀態(tài)由OPTION寄存器控制(參見1.5.4),其中OPTION寄存器的RTS位用來選擇RTCC的計數(shù)信號源,當(dāng)RTS為1時,信號源為內(nèi)部時鐘,RTS為0時,信號源為來自RTCC引腳的外部信號。OPTION寄存器的PSA位控制預(yù)分頻器(Prescaler)分配對象,當(dāng)PSA位為1,8位可編程預(yù)分配給RTCC,即外部或內(nèi)部信號經(jīng)過預(yù)分頻器分頻后再輸出給RTCC。預(yù)分頻器的分頻比率由OPTION內(nèi)的PS0PS2決定。這時涉及寫f1(RTCC)寄存器的指令均同時將預(yù)分頻器清零。但要注意OPTION寄存器內(nèi)容仍保持不變,即分配對象、分頻比率等均不
11、變。OPTION的RTE位用于選擇外部計數(shù)脈沖觸發(fā)沿。當(dāng)RTE為1時為下降沿觸發(fā),為0時為上升沿觸發(fā)。RTCC計數(shù)器采用遞增方式計數(shù),當(dāng)計數(shù)至FFH時,在下一個計數(shù)發(fā)生后,將自動復(fù)零,重新開始計數(shù),以此一直循環(huán)下去。RTCC對其輸入脈沖信號的響應(yīng)延遲時間為2個機器周期,不論輸入脈沖是內(nèi)部時鐘、外部信號或是預(yù)分頻器的輸出。響應(yīng)時序見圖1.6。RTCC對外部信號的采樣周期為2個振蕩周期。因此當(dāng)不用預(yù)分頻器時,外加在RTCC引腳上的脈沖寬度不得小于2個振蕩周期,即1/2指令周期。同理,當(dāng)使用預(yù)分頻器時,預(yù)分頻器的輸出脈沖周期不得小于指令周期,因此預(yù)分頻器最大輸入頻率可達(dá)N.fosc/4,N為預(yù)分頻器
12、的分頻比,但不得大于50MHZ。當(dāng)RTCC使用內(nèi)部時鐘信號時,如果沒有預(yù)分頻器,則RTCC值隨指令節(jié)拍增1。 當(dāng)一個值寫入RTCC時,接下來的二個指令節(jié)拍RTCC的值不會改變,從第三個指令節(jié)拍才開始遞增,見下圖。 圖1.6A RTCC時序圖:內(nèi)部時鐘/無預(yù)分頻器圖1.6B RTCC時序圖:內(nèi)部時鐘/預(yù)分頻比1:2應(yīng)注意的是盡管PIC對外部加于RTCC信號端上的信號寬度沒有很嚴(yán)格的要求,但是如果高電平或低電平的維持時間太短,也有可能使RTCC檢測不到這個信號。一般要求信號寬度要大于是10nS。3、F2程序計數(shù)器(PC)程序計數(shù)器PC可尋址最多2K的程序存儲器。表1.3列出了PIC16C5X各種型
13、號的PC長度和堆棧的長度。表1.3 PC及堆棧的寬度單片機一復(fù)位(RESET),F(xiàn)2的值全置為1。除非執(zhí)行地址跳轉(zhuǎn)指令,否則當(dāng)執(zhí)行一條指令后,F(xiàn)2(PC)值會動加1指向下一條指令。下面這些指令可能改變PC的值:a、GOTO指令。它可以直接寫(改變)PC的低9位。對于PIC16C56/57/58,狀態(tài)寄存器F3的PA1、PAO兩位將置入PC的最高二位。所示GOTO指令可以跳轉(zhuǎn)到程序存儲器的任何地方。b、CALL指令。它可以直接寫PC 低8位,同時將PC的第9位清零。對于PIC16C56/57/58,狀態(tài)寄存器F3的PA1、PAO兩位將置入PC的最高二位(第10、11位)。c、RETLW指令。它把
14、棧項(堆棧1)的值寫入PC。d、MOVWF F2指令。它把W寄存器的內(nèi)容置入PC。e、ADDWF F2指令。它把PC值加1后再和W寄存器的值相加,結(jié)果寫入PC。在以上b、d和e中,PC的第9位總是被清為零。所以用這三條指令來產(chǎn)生程序跳轉(zhuǎn)時,要把子程序或分支程序放在每頁的上部地址(分別為000-0FF、200-2FF、400-4FF、600-6FF)。 4、F3狀態(tài)寄存器(STATUS)如圖1.7所示F3包含了ALU的算術(shù)狀態(tài)、RESET狀態(tài)、程序存儲器頁面地址等。F3中除PD和TO兩位外,其他的位都可由指令來設(shè)置或清零。注意,當(dāng)你執(zhí)行一條欲改變F3 寄存器的指令后,F(xiàn)3中的情況可能出乎你的意料
15、。例:CLRF F3 ;清F3為零你得到的結(jié)果是F3=000UU100(U為未變)而不是想像中的全零。UU兩位是PD和TO,它們維持不變,而2位由于清零操作被置成1。所以如果你要想改變F3的內(nèi)容,建議你使用BCF、BSF和MOVWF這三條指令,因為它們的執(zhí)行不影響其他狀態(tài)位。 例:MOVLW 0 ;0WMOVWF F3 ;把F3除PD和TO以外的位全部清零,則你可得到F3=000UU000。有關(guān)各條指令對狀態(tài)位的影響請看第二章介紹。在加法運算(ADDWF)時,C是進位位。在減法運算(SUBWF)時,C是借位的反(Borrow)。例:CLRF F10 ;F10=0MOVLW 1 ;1WSUBWF
16、 F10 ;F10-W=0-1=FFHF10 C=0:運算結(jié)果為負(fù)例:MOVLW 1 ;1WMOVWF F10 ;F10=1CLRW ;W=0SUBWF F10 ;F10-W=1-0=1F10C=1:運算結(jié)果為正PD和TO兩位可用來判斷RESET的原因。例如判斷RESET是由芯片上電引起的,或是由看門狗WDT計時溢出引起的,或是復(fù)位端加低電平引起的,或是由WDT喚醒SLEEP引起的。表1.4列出了影響TO、PD位的事件。表1.5列出了在各種RESET后的TO、PD位狀態(tài)。 判斷RESET從何處引起有時是很必要的。例如在對系統(tǒng)初始化時,經(jīng)常需判斷這次復(fù)位是否是上電引起的。如果不是上電復(fù)位,則不再
17、進行初始化。頁面選擇位PA1、PA0的作用前面已描述過,RESET時清PA0-PA2位為零,所以復(fù)位后程序區(qū)頁面自動選擇在0頁。5、F4 寄存器選擇寄存器(FSR)a、 PIC16C52/54/55/56F4的04位在間接尋址中用來選擇32個數(shù)據(jù)寄存器。57位為只讀位,并恒為1。請參考F0寄存器描述。b、PIC16C57/58FSR位用來選擇當(dāng)前數(shù)據(jù)寄存器體(Bank)。PIC16C57有80個數(shù)據(jù)寄存器,如圖1.4所示。80個寄存器分為4個體(Bank0Bank3),每個體的低16個寄存器的物理位置是相同的(參考1.5.3通用寄存器的描述)。當(dāng)FSR的第4位為1時,則要根據(jù)FSR位來選擇某個
18、寄存器體中的某一個高16的寄存器。表1.6 寄存器體高16寄存器地址注意:當(dāng)芯片上電復(fù)位時,F(xiàn)SR是不定的,所以它可能指向任何一個Bank。而其他復(fù)位則保持原來的值不變。具體程序技巧請參閱2.7.2程序設(shè)計基礎(chǔ)的描述。1.5.2 I/O 寄存器PIC16C52/54/56/58有二個I/O口RA、RB(F5、F6),PIC16C55/57有三個I/O口RA、RB、RC(F5、F6、F7)。與其它寄存器一樣,它們皆可由指令來讀寫。它們是可編程雙向I/O口,可由程序來編程確定每一根I/O端的輸入/輸出狀態(tài)??刂品椒ㄒ?.8節(jié)。RESET后所有的I/O口都置成輸入態(tài)(等于高阻態(tài)),即I/O控制寄存器
19、(TRISA、TRISB、TRISC)都被置成1。1、F5(A口)4位I/O口寄存器。只能使用其低4位。高4位永遠(yuǎn)定義為0。2、F6(B口)8位I/O口寄存器。3、F7(C口)對于PIC16C55/PIC16C57,它是一個8位I/O口寄存器。對于PIC16C54/56/58,它是一個通用寄存器。1.5.3 通用寄存器PIC16C54/56:07H1FHPIC16C55:08H1FH PIC16C57/58:08H-0FH:共有通用寄存器(無須體選擇即可尋址)。10H-1FH:Bank0的通用寄存器20H-2FH:物理上等同于00H-0FH。30H-3FH:Bank1的通用寄存器40H-4FH
20、:物理上等同于00H-0FH。50H-5FH:Bank2的通用寄存器60H-6FH:物理上等同于00H-0FH。70H-7FH:Bank3的通用寄存器。請參考圖1.4。對寄存器體Bank的尋址請參閱F4寄存器描述和第四章的實例。1.5.4 特殊功能寄存器1、工作寄存器(W)W用來存放兩操作數(shù)指令中的第二個操作數(shù),或用以進行內(nèi)部數(shù)據(jù)傳送。算術(shù)邏輯單元ALU把W和寄存器連接起來,ALU的運算結(jié)果通過總據(jù)總線可以送到W保存。2、I/O控制寄存器(TRISA、TRISB、TRISC)TRISA、TRISB、TRISC分別對應(yīng)I/O口A、B、C。其中TRISA只有4位,和A口對應(yīng)。執(zhí)行TRIS f指令可
21、把W的值置入I/O控制寄存器,以此來定義各I/O端的輸入/輸出態(tài)。當(dāng)寫入1時,將相應(yīng)的I/O端置成輸入態(tài)(高阻態(tài)),當(dāng)寫入0,則將相應(yīng)的I/O端置成輸出態(tài)。I/O控制寄存器都是只寫寄存器,在RESET后自動置為全1,即所有I/O口都為輸入態(tài)。 3、預(yù)設(shè)倍數(shù)/RTCC選擇寄存器(OPTION)OPTION可用于:a、定義預(yù)分頻器的預(yù)分頻參數(shù)。b、分配預(yù)分頻器(Prescaler)給RTCC或WDT。注意預(yù)分頻器只能分配給RTCC或WDT其中之一使用,不能同時分配。c、定義RTCC的信號源。d、定義RTCC信號源的觸發(fā)沿(上升沿觸發(fā)或下降沿觸發(fā))。圖1.8顯示了OPTION各位的意義。當(dāng)預(yù)分頻器分
22、配給RTCC后,所有寫RTCC寄存器的指令如CLRF 1、MOVWF 1等都會清除預(yù)分頻器。同理,分配給WDT時,諸如CLRWDT和SLEEP指令將清除預(yù)分頻器里已有的值使其歸零。通過執(zhí)行OPTION指令可將W值置入OPTIOW寄存器,RESET后OPTION被置成全1。例:MOVLW 07H ;W=7OPTION ;7OPTION ;預(yù)分頻器(1:256)分配給RTCC。RTCC信號源為內(nèi) 部指令時鐘周期。第六節(jié) 預(yù)分頻器Prescaler預(yù)分頻器是一個分頻倍數(shù)可編程的8位計數(shù)器。其結(jié)構(gòu)如圖1.9所示上節(jié)對預(yù)分頻參數(shù)已有描述,這里不贅述。預(yù)分頻器的分配對象完全由程序控制。可以在程序中改變預(yù)分
23、頻器分配對象。1、從RTCC到WDT的改變 MOVLW BXX0X0XXX ;選擇內(nèi)部時鐘和新的預(yù)分頻值OPTION ;如果新的預(yù)分頻值=000或者CLRF RTCC ;=001,則暫時先選一個另外的值MOVLW BXXXX1XXX ;清零RTCC和預(yù)分頻器OPTION ;選擇WDT為對象,但不要改變預(yù)分頻值CLRWDT ;清WDT和預(yù)分頻器MOVLW BXXXX1XXX ;選擇新的預(yù)分頻值2、從WDT到RTCC的改變 CLRWDT ;清WDT及預(yù)分頻器MOVLW BXXXX0XXX ;選擇RTCCOPTION圖1.9 預(yù)分頻器方塊圖第七節(jié) 看門狗WDT看門狗計時器(Watch Dog Tim
24、er)是一個片內(nèi)自振式的RC振蕩計時器,無需任何的外接元件。這意味著即使芯片OSC1/OSC2上振蕩停止了(例如執(zhí)行指令SLEEP后),WDT照樣保持計時。WDT計時溢出將產(chǎn)生RESET。在PIC16C5X 芯片內(nèi)有一個特殊的謂之定義EPROM(Configuration EPROM)的單元,其中的一個位是用于定義WDT的。你可以將其置0來抑制WDT使之永遠(yuǎn)不起作用。這將在第七章的燒寫器介紹部分詳細(xì)說明,請參閱。 1、WDT周期WDT有一個基本的溢出周期18ms(無預(yù)分頻器),如果你需要更長的WDT周期,可以把預(yù)分頻器分配給WDT,最大分頻比可達(dá)1:128,這時的WDT溢出周期約為2.5S。W
25、DT溢出周期和環(huán)境溫度、VDD等參數(shù)有關(guān)系,請參閱附錄的圖表。CLRWDT和SLEEP指令將清除WDT計時器以及預(yù)分頻器里已有的計數(shù)值(當(dāng)預(yù)分頻器分配給WDT時)。WDT一般用來防止系統(tǒng)失控或者說防止單片機程序運行失控。在正常情況下,WDT應(yīng)在計滿溢出前被CLRWDT指令清零,以防止產(chǎn)生RESET。如果程序由于某種干擾而失控,那么不能在WDT溢出前執(zhí)行一條CLRWDT指令,就會使WDT溢出而產(chǎn)生RESET,使系統(tǒng)重新啟動運行而不至失去控制。若WDT溢出產(chǎn)生RESET,則狀態(tài)寄存器F3的TO位會被清零,用戶程序可藉此判斷復(fù)位是否由WDT溢時所造成。 2、WDT編程注意事項如果使用WDT,一定要仔
26、細(xì)在程序中的某些地方放一條CLRWDT指令,以保證在WDT在溢出前能被請零。否則會造成芯片不停地產(chǎn)生RESET,使系統(tǒng)無法正常工作。第八節(jié) I/O口結(jié)構(gòu)PEC16C5X的所有I/O端的結(jié)構(gòu)都是相同的,如圖1.10所示: 圖1.10 I/O結(jié)構(gòu)所有I/O端皆可置成輸入或輸出態(tài)。輸入無鎖存,所以外部輸入信號應(yīng)保持到讓CPU讀入為止。輸出鎖存。I/O端的輸入/輸出狀態(tài)由對應(yīng)的I/O控制寄存器TRIS f控制,當(dāng)TRIS f將1置入I/O控制器時Q1和Q2都處于截止態(tài),所以I/O端即呈高阻態(tài)(輸入態(tài))。當(dāng)執(zhí)行 I/O讀指令(如MOVF 6,W),把當(dāng)前I/O端的狀態(tài)讀入數(shù)據(jù)總線。當(dāng)TRIS f將0置入
27、I/O控制器時,Q1和Q2的導(dǎo)通情況將要由數(shù)據(jù)鎖存器Q端的狀態(tài)來決定。當(dāng)寫入數(shù)據(jù)為1時,Q端為低電平0,則Q1導(dǎo)通,I/O輸出為高電平。反之,當(dāng)寫入數(shù)據(jù)為0時,Q端為1,則Q2導(dǎo)通,I/O端輸出為低電平。I/O讀寫時序如圖1.11所示:注:本圖顯示了PORTB口的一個寫入讀出的連續(xù)動作。I/O腳電平的建立時間=0.25TCY-TPD,其中TCY為指令周期,所以對于高速振蕩來說,連續(xù)的寫入讀出可能會有問題,兩者中間應(yīng)有延遲。圖1.11 I/O口讀/寫時序圖 I/O口使用注意事項:a、I/O方向轉(zhuǎn)置的問題某時候可能需要一個I/O口一會做輸入,一會又做輸出。這就是I/O方向的轉(zhuǎn)置。在編寫這種I/O轉(zhuǎn)
28、置程序時必須注意,有些指令如位設(shè)置指令(BSF、BCF)寫I/O口時是先從I/O讀入其狀態(tài),執(zhí)行位操作后再將結(jié)果寫回去覆蓋原來的內(nèi)容(輸出的結(jié)果放在I/O口的數(shù)據(jù)鎖存器)。舉個例說:BSF 6,5這條指令的目的是要把B口的第6位置為高電平1。執(zhí)行這條指令時,先把整個B口當(dāng)前的狀態(tài)內(nèi)容讀入到CPU,把第6位置成1后再把結(jié)果(8個位)重新輸出到B口。如果B口中的有一個I/O端是需要方向轉(zhuǎn)置的(比如說bit1),而這時是處于輸入態(tài),那么B口的狀態(tài)值重新寫入后,B口的數(shù)據(jù)鎖存器1(見圖1.9相對于B口bit1的鎖存器)的鎖存值就是當(dāng)前B口Bit1的狀態(tài)。這可能和先前Bit1作為輸出時所鎖存的值不同,所
29、以當(dāng)Bit1再轉(zhuǎn)置成輸出態(tài)時,出現(xiàn)在bit1端的狀態(tài)就可能和先前的輸出態(tài)不同了。b、I/O的線或和線與從圖1.10看出:PIC I/O端輸出電路為CMOS互補推挽輸出電路。 因此與其他這類電路一樣,當(dāng)某個PIC I/O端設(shè)置為輸出狀態(tài)時,不能與其他電路的輸出端接成線或或線與的形式。否則可能引起輸出電流過載,燒壞PIC。如需要與其他電路接成線或電路時,PIC I/O端必須置于0狀態(tài)或輸入狀態(tài)并外接上拉電阻。如需要接成線與電路時,則PIC I/O端必須置于1狀態(tài)或輸入狀態(tài),并外接下拉電阻。電阻的阻值根據(jù)實際電路和PIC I/O端最大電流來選定。c、I/O口的連續(xù)操作一條寫I/O的指令,對I/O真正
30、寫操作是發(fā)生在指令的后半周期(參照圖1.11)。而讀I/O的指令卻是在指令的周期開始就讀取I/O端狀態(tài)。所以當(dāng)你連續(xù)對一個I/O 端寫入再讀出時,必須要讓I/O端上的寫入電平有一個穩(wěn)定的時間,否則讀入的可能是前一個狀態(tài),而不是最新的狀態(tài)值。一般推薦在兩條連續(xù)的寫,讀I/O口指令間至少加一條NOP指令。例:MOVWF 6 ; 寫I/ONOP ; 穩(wěn)定I/O電平MOVF 6,W ; 讀I/Od、噪聲環(huán)境下的I/O操作在噪聲環(huán)境下(如靜電火花),I/O控制寄存器可能因受干擾而變化。比如I/O口可能會從輸入態(tài)自己變成輸出態(tài),對于這種情形,WDT也是無法檢測出來的。因此如果你的應(yīng)用環(huán)境是較惡劣的,建議你
31、每隔一定的間隔,都重新定義一下I/O控制寄存器。 第九節(jié) 振蕩電路PIC16C5X系列可以使用種類型振蕩方式:標(biāo)準(zhǔn)晶體/陶瓷振蕩XT、高速晶體振蕩HS(4MHZ以上)、低頻晶體振蕩LP(32KHz)以及阻容振蕩RC。對于窗口型可重擦除芯片可以通過對定義EPROM(Coriguratiou EPROM)編程來選擇任何一種振蕩方式。對于OTP和掩腌片QTP則由廠家定義好振蕩方式,并通過相應(yīng)的檢測。仿真工具如PICMATE仿真器和PICKIT燒寫器等可以讓用戶選擇所需的振蕩方式進行仿真和燒寫,請參閱第六章和第七章介紹。1.9.1 晶體/陶瓷振蕩這種振蕩包括XT、HS和LP。其電路是在OSC1和OSC
32、2兩端加一晶體/陶瓷振蕩,如圖1.12。只有HS晶體振蕩才可能需要Rs(100Rs1K)。 圖1.12 晶體/陶瓷振蕩電路表1.7列出了使用陶瓷振蕩器時所需的電容值。表1.8列出了使用晶體振蕩器時所需的電容值。電容值取大有利于振蕩的穩(wěn)定,但卻延長了起振時間。表中的電容值能滿足一般的要求。1.9.2RC 振蕩這種振蕩類型成本最低,但頻率的精確性較差,適用于時間精確度要求不高的應(yīng)用場合。RC振蕩的頻率是DD、RC值以及環(huán)境溫度的函數(shù)。請參閱附錄的RC頻率函數(shù)圖。RC振蕩的連接如圖1.13所示。圖1.13 RC 振蕩電路 RC振蕩是在OSC1端連接一個串聯(lián)的電阻電容。這個電阻如果低于2.2K,振蕩不
33、穩(wěn)定,甚至不能振蕩。但是電阻高于1M時,則振蕩又易受干擾。所以電阻值最好取5K100K之間。盡管電容C值為0時,電路也能振蕩,但也易受干擾且不穩(wěn)定,所以電容值應(yīng)取20P以上。RC值和頻率關(guān)系如表1.9所示。RC振蕩時OSC2端輸出OSC1的4分頻脈沖(f=1/4 OSC1)。1.9.3外部振蕩PTC16CSX可以接受外部振蕩源(僅適合于HS、XT和LP類型振蕩)。連接時將外部振蕩接入OSC1,OSC2則開路。如圖1.14所示。圖1.14 外部振蕩電路1.9.4 時鐘/指令時序振蕩器信號從OSC1端輸入單片機后,經(jīng)過4分頻電路產(chǎn)生4個不重疊的內(nèi)部時鐘信號Q1、Q2、 Q3、Q4。時序圖如1.15
34、所示。圖1.15 時鐘/指令時序圖 一條指令周期需經(jīng) Q1Q4四個節(jié)拍時間來完成。PIC16C5X除了地址跳轉(zhuǎn)指令是二周期指令,其余全是單周期指令。一條指令正在執(zhí)行時(Q1Q4節(jié)拍間),PC值又在Q1節(jié)拍間加1,把下一條要執(zhí)行的指令取到指令寄存器,準(zhǔn)備讓CPU執(zhí)行下一條指令了,這是RISC結(jié)構(gòu)單片機的特點,它使單片機的速度加快(同等振蕩頻率下比一般CISC結(jié)構(gòu)的單片機如Z86、68HC等快4倍速)。表1.10列出了振蕩時鐘頻率和指令速度的關(guān)系。第十節(jié) 復(fù)位(RESET)PIC16C5X內(nèi)藏有上電復(fù)位電路(POR)。在芯片上有一復(fù)位端MCLR,對于一般的應(yīng)用,只要把MCLR端接在高電位(VDD)
35、即可,因為內(nèi)部復(fù)位電路會在芯片上電時自動復(fù)位,無需在MCLR端再加上電復(fù)位電路。對于某些特殊應(yīng)用,則需在MCLR端加上外部上電復(fù)位電路,在1.10.5我們會談及這個問題。 1.10.1復(fù)位的條件和原因復(fù)位可由下面事件引發(fā)產(chǎn)生:a、芯片上電;b、把芯片MCLR端置低電平;c、看門狗(WDT)超時溢出。1.10.2 復(fù)位時的PIC狀態(tài)在芯片復(fù)位期間,芯片狀態(tài)為:a、振蕩器處于起振準(zhǔn)備狀態(tài);b、所有I/O口都被置成高阻態(tài)(即輸入態(tài));c、PC值被置為全1;d、OPTION被置為全1;e、WDT和預(yù)分頻器被清零;f、狀態(tài)寄存器(F3)的程序頁面位(高三位)被清零。1.10.3 振蕩起振計時器(OST)
36、對于晶體/陶瓷振蕩電路,上電后它們還需要一定的時間來起振或產(chǎn)生穩(wěn)定的振蕩信號,有鑒于此,PIC在其內(nèi)部專門設(shè)置了一個振蕩起振計時器OST(Oscillator Start-up Timer)。OST在MCLR端達(dá)到高電平后才開始啟動計時18ms,使RESET狀態(tài)保持18ms以便讓振蕩電路起振及穩(wěn)定下來。在一般情況下,我們都將MCLR端直接在VDD(+5V)上即可。這樣上電后一旦MCLR端電平升高到一定程序后OST即開始計數(shù)18ms,這段時間已足夠讓振蕩起振,OST計滿18ms后,芯片結(jié)束RESET狀態(tài),開始進入程序運行。當(dāng)WDT計時溢出后,OST也是馬上啟動計時18ms,保持18ms的RESE
37、T狀態(tài),然后再進行程序運行。1.10.4內(nèi)部上電復(fù)位路(POR)PIC16C5X片內(nèi)上電復(fù)位電路POR(Power On Reset)能使PIC芯片上電后自動會產(chǎn)生復(fù)位,所以一般不需要再在MCLR端加外部復(fù)位電路,只要將其接在VDD上即可。圖1.16是POR的簡圖。從圖中我們可以看到,當(dāng)上電(Power On)、或MCLR端變低,都會置位(set)復(fù)位鎖存器,使其輸出復(fù)位電平讓芯片處于RESET狀態(tài),這時OST也處于復(fù)位狀態(tài)。當(dāng)OST檢測到MCLR變?yōu)楦唠娖胶蠹撮_始計時18ms,計滿18ms后會復(fù)位(Reset)復(fù)位鎖存器使其Q端輸出高電平,從而使芯片結(jié)束復(fù)位狀態(tài),進入運行。圖1.16內(nèi)部上電
38、復(fù)位路簡圖 1.10.5外部復(fù)位電路 在某些應(yīng)用情況下我們也可能需要外部復(fù)位電路。一、手動復(fù)位開關(guān)當(dāng)你在應(yīng)用中需要一個手動復(fù)位開關(guān)時,可以使用下面的電路。如圖1.17。二、低頻振蕩電路當(dāng)使用低頻振蕩(LP)時,OST的18ms不足以使其建立穩(wěn)定的振蕩,所以也許你需要更長的RESET 時間,這時可以用外部上電復(fù)位電路來延長復(fù)位時間。如圖1.18。圖1.17 按健復(fù)位電路圖1.18 外部上電復(fù)位電路注:1. 二極管D使電容C能在VDD掉電時快速放電。2. R40K,以保證其兩端的電壓降不大于0.2V(即IMCLR*R0.2V,IMCLR為 MCLR端最大輸入電流)。 3. R1取1001K,用來限制在靜電環(huán)境,電容C充放電時的沖擊電流。使用了外部加電復(fù)位電路,其復(fù)位過程即如圖1.19所示:圖1.19 使用外部上電復(fù)位電路的復(fù)位過程VDD上升到穩(wěn)定值一段時間后MCLR才上升到高電平。而OST只有檢測到MCLR升為高電平后才開始計時18ms,所以就可取得長于18ms的復(fù)位時間了。 1.10.6復(fù)位后對寄存器值的影響對于通用寄存器來說,芯片上電復(fù)位后它們的值是隨機不定的,而其他類型的復(fù)位則保持原值不變。對于特殊功能寄存器,各種復(fù)位后它們會等于一個固定的復(fù)位值
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公關(guān)活動策劃案例整合
- 教育人事政策宣傳周活動
- 小學(xué)愛國主題教育課件
- 第8章 書籍裝幀中的圖形設(shè)計
- 安全工作布置會
- 小紐扣找家課件數(shù)學(xué)
- 山東省聊城市冠縣金太陽學(xué)校2024-2025學(xué)年六年級下學(xué)期3月月考語文試題(有答案)
- 河北省邢臺市寧晉縣質(zhì)檢聯(lián)盟2024-2025學(xué)年高二下學(xué)期3月第一次月考數(shù)學(xué)試卷(含解析)
- 放療患者的康復(fù)護理要點
- 山東省濟南市2024-2025學(xué)年高三上學(xué)期1月期末考試政治試題 含解析
- 2025年3月22日山東事業(yè)單位統(tǒng)考《行測》真題(含答案)
- 2025年深圳市企業(yè)勞動合同模板
- 2025年福建省福州市第十九中學(xué)初三3月教學(xué)質(zhì)量檢查物理試題含解析
- 中國輪轂電機市場發(fā)展?fàn)顩r與投資方向預(yù)測報告2024-2030年
- 智慧養(yǎng)老考試題及答案
- 2025廣東汕尾市水務(wù)集團有限公司招聘人員8人筆試參考題庫附帶答案詳解
- (一模)2025年聊城市高三高考模擬歷史試題卷(含答案)
- 25春形勢與政策-專題測驗1-5-國開-參考資料
- 2025年廣西機場管理集團有限責(zé)任公司招聘筆試參考題庫含答案解析
- 2025年九年級中考語文第一次模擬考試卷附答案解析
- 2025年大學(xué)生信息素養(yǎng)大賽培訓(xùn)考試題庫500題(附答案)
評論
0/150
提交評論