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