數(shù)據(jù)EEPROM存儲(chǔ)器在滿電源電壓(VDD)時(shí),正常操作期間是可讀,可寫的,這部分存儲(chǔ)器不能直接映象到寄存器文件空間,只有通過專用功能寄存器經(jīng)間接尋址來訪問,有四個(gè)SFR用于讀、寫這些存儲(chǔ)器,這些寄存器是EECON1;EECON2;EEDATA;EEDAR。
其中EEDATA用來保持8位的讀/寫數(shù)據(jù)。EEADR用來保持正在訪問 的EEPROM單元的地址。PIC16C84具有64個(gè)字節(jié)的EEPROM,其單元的地 址范圍是00H-3FH。
EEPROM允許一次讀/寫一個(gè)字節(jié)。一個(gè)字節(jié)的寫入將自動(dòng)擦除該單元,寫入新的內(nèi)容(在寫入之前擦除)。EEPROM數(shù)據(jù)存儲(chǔ)器是高 速率的擦/寫周期,寫入時(shí)間正常為10ms,由芯片的計(jì)時(shí)器控制。實(shí) 際寫入時(shí)間與所加電壓,溫度,芯片等有關(guān)。嚴(yán)格的時(shí)間請參看芯片的AC說明。當(dāng)器件是在代碼保護(hù)時(shí),只有CPU可以完成數(shù)據(jù)存儲(chǔ)器的讀 /寫。即器件的編程器的不再訪問存儲(chǔ)器(外部讀/寫被關(guān)閉)。
6 連接的考慮
因?yàn)?a href="http://www.www27dydycom.cn/analog/" target="_blank">模擬輸入用了ESD保護(hù),它們有反偏二極管連到VDD和VSS。這就要求模擬輸入電壓應(yīng)在VDD和VSS之間。
如果模擬輸入電壓超過了最大值的0.6V以上的范圍,二極管可能變?yōu)檎驅(qū)?,如果輸入電流超過了說明書上的規(guī)定,它可能破壞器件。有些時(shí)候把外部的RC濾波器加在輸入信號上。要求選用的電阻R要保證總的信號源電阻不超過10K,任何在模擬信號上的其它的附加元件均應(yīng)有非常小的漏電流。
7.變換功能
理論上A/D變換器的變換功能如下。
當(dāng)模擬輸入信號電壓是1位L sb的電壓時(shí)(或是VREF/256)第一次變換就發(fā)生。
8 A/D變換工作的流程圖
表2-4 PIC16C74/73的A/D變換所涉及的寄存器
地址 名稱 bit7 bit6 bit5 bit4 bit3 bit 2 bit1 bit0
0B/8B INTCON GIE PEIE
0C PIR1 ADIF
8C PIE1 ADIE
0D PIR2 CCP2IF
8D PIE2 CCP2IE
1F ADCON0 ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE ADON
9F ADCON1 PCFG2 PCFG1 PCFG0
除上述所例寄存器外,還有ADRES(地址1EH)用于存放A/D變換 的結(jié)果。PORTA(地址 05H)用于輸入多路模擬信號,TRISA(地址85 H)用于設(shè)置PORTA的I/O方式,PORTE(地址09H)用于輸入多路模擬信號,TRISE(地址89H)用于設(shè)置PORTE的I/O方式。
表2-5 PIC16C71的A/D變換所涉及的寄存器
地址 名稱 bit7 bit6 bit5 bit4 bit3 bit 2 bit1 bit0
0B/8B 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 R/P R/P R/P R /P R/P
- - - - - - - - - CP PWRTE WDTE FOSC 1 FOSC0 bit 13 bit0
圖4-10 PIC16C84的配置寄存器
7-3 寫EEPROM數(shù)據(jù)存儲(chǔ)器
與寫EEPROM的數(shù)據(jù)單元、用戶必須首先寫地址到EEADR寄存器,再送數(shù)據(jù)到EEDA?TA,最后用戶必須跟著一個(gè)專門的序列起動(dòng)寫。例如:下面這段程序是寫EEPROM的程序。 ? ? BSF STATUS, RPO ;選擇1塊
BCF INTCON,GIE ;關(guān)閉所有INT中斷
MOVLW 55H ;
MOVWF EECON2 ;寫55H
MOVLW AAH;
MOVWF EECON2;寫AAH
BSF EECON1,WR;置WR位為1,開始寫
BSF INTCON,GIE;允許INT中斷。
如果這個(gè)程序(即先寫55H 到EECON2,再寫AAH到EECON2,然后置 WK=1)未跟有嚴(yán)格的時(shí)間,寫將不能啟動(dòng)。我們建議在執(zhí)行這幾條指令期間關(guān)閉中斷。
此外,EECON1中的WREN位必須選置成1,允許寫。這樣的機(jī)構(gòu)防止 了因錯(cuò)誤指令的執(zhí)行而寫數(shù)據(jù)EEPROM。用戶在所有的時(shí)間應(yīng)保持WREN位為0,除了當(dāng)要熱修改EEPROM以外。
寫序列開始以后,清0WREN位不影響這次寫周期。從開始設(shè)置,直到WREN=1為止WR位將被禁止。當(dāng)完成了寫周期以后,WR位由硬件清0 。寫完成中斷標(biāo)志EEIF被置1,EEIF必須由軟件將其清0。注意數(shù)據(jù)EEPROM存儲(chǔ)器E/W周期可能偶然超過10ms,為確保寫周期的完成,用戶使用的EE中斷或查詢WR位(EECON1<1>)。這兩個(gè)均可用來判斷寫周 期的完成。
除了上述提到的防止錯(cuò)誤的寫數(shù)據(jù)EEPROM外,在電源剛加電期 間的72ms內(nèi)也防止寫EEPROM數(shù)據(jù)存儲(chǔ)器。
八 CPU專門的特征
微控制器為其它處理器的區(qū)別是有專門的電路,這些電路涉及實(shí)時(shí)應(yīng)用的需要。PIC16C84具有最大的系統(tǒng)可靠性,最低的價(jià)格,最少的外部元件,提供了低功能操作模式和代碼保護(hù)。
PIC16C84具有看門狗計(jì)時(shí)器,此計(jì)時(shí)器只可經(jīng)配置位來關(guān)閉,為了增加其可靠性,關(guān)閉它的RC振蕩器。有兩個(gè)計(jì)時(shí)器提供加電時(shí)需要的延時(shí)。振蕩器起振計(jì)時(shí)器(OST)保持芯片在復(fù)位狀態(tài)直到石晶穩(wěn)定為止。另外一個(gè)是加電計(jì)時(shí)器(POWER-UP Timer(PWRT))它提供了 固定的72ms的延時(shí)。這樣保證了器件復(fù)位以及電源的可靠供電,用了這兩個(gè)計(jì)時(shí)器,使多數(shù)應(yīng)用不需要外接復(fù)位電路。
SLEEP方式提供了低功耗方式。用戶可經(jīng)外部復(fù)位;看門狗計(jì)時(shí)器溢出;中斷來喚醒芯片。
8-1配置位
配置位分為可編程的位,讀作0,不可編程的位,讀作1。通過可編程的位來選拔各種配置。這些位映象到程序存儲(chǔ)器的2007H單元。注意地址2007H不等于用戶程序存儲(chǔ)器空間。事實(shí)上,它屬于專門的測試 /配置存儲(chǔ)空間(2000H~3FFH),只有在編程時(shí)可以訪問。圖4-10 是配置寄存器的結(jié)構(gòu)(附后)
其中Fosc<1或0>為振蕩器選擇位。
11:選RC振蕩器
10:選HS振蕩器
01:選XT振蕩器
00:選CP振蕩器
WDTE是看門狗允許與禁止的選擇位。此位為1,允許看門狗工作。此位為0禁止看門狗工作。
PWRTE是加電計(jì)時(shí)器允許與禁止的選擇。此位為1,加電計(jì)時(shí)器允許工作,為0則禁止工作。
CP是代碼保護(hù)的選擇,此位為1代碼保護(hù)取消,這一位為0,所有程序存儲(chǔ)器的代碼被保護(hù)。其余位是不執(zhí)行的。讀作1。
有關(guān)振蕩器的配置,振蕩器的選擇與連接電路與PIC16C6X系列相同。
8-2中斷
PIC16C84具有4個(gè)中斷源。即外部中斷RBO/INT引腳上的中斷,TMR0溢出中斷;PORTB改變中斷(RB7:RB4);EEPRDM寫完成中斷。
中斷控制寄存器(INTCON在其標(biāo)志位,記錄了每一個(gè)中斷請求。它也包括了每個(gè)中斷的允許/禁止位。所有中斷的允許/禁止位(IN TCON<7>),它就開放所有中斷或禁止所有中斷。從中斷返回指令RETFLE返回時(shí),退出中斷,并置GIE=1,重新開放所有中斷。 RBO/INT引腳中斷,RB端口改變中斷和TMRO溢出中斷,這些中斷的中斷標(biāo)志在INTCON寄存器中。
當(dāng)中斷的響應(yīng)時(shí),GIE位被清0,關(guān)閉任何新的中斷,返回地址被壓入堆棧,用0004H裝入PC。對于外部中斷文件,如RBO/INT引腳或PORTB改變中斷,這類中斷需3到4個(gè)指令周期。嚴(yán)格的時(shí)間,取決于中 斷事件的發(fā)生。一旦在中斷的中斷服務(wù)程序中可以通過查詢中斷標(biāo)志 位來確定中斷源。中斷的標(biāo)志位應(yīng)在重新開發(fā)這個(gè)中斷之前,經(jīng)軟件 將其清0。
注意:
?、倜恳粋€(gè)中斷的標(biāo)志位被置位,而與它相應(yīng)的屏蔽位或GIE無關(guān)。
?、谌绻袛喟l(fā)生,而全部中的允許位GIE假設(shè)本是清0的,GIE可能被用戶中斷服務(wù)程序的RETFIE指令無意之間連成1。這種事情可能發(fā)生在
a、在中斷被響應(yīng)時(shí),指令清0GIE位。
b、程序分支到中斷向量并執(zhí)行中斷服務(wù)程序。
c、中斷服務(wù)程序執(zhí)行RETFIE指令而完成。這會(huì)引起GIE位被置1(允許中斷)。同時(shí)程序返回中斷關(guān)閉后的指令(實(shí) 際上由于上述原因引起中斷未能關(guān)閉)。為確保GIE清0,應(yīng)有如下一段程序。
l00p BGF INT CON,GIE:關(guān)閉全部中斷
BTFSC INTCON,GIE;全部中斷允許位被關(guān)閉了嗎?
GOTO l00P;沒有返回到l00p,再清0GIE,否則程序繼續(xù)。
1.INT中斷
在RBO/INT上的外部中斷是邊沿觸發(fā)。如果INT?EDG位(OPTION <6>)是置1,則上升沿有效,如果INTEDG位被清0,則下降沿有效。當(dāng)有效跳變出現(xiàn)在RBO/INT引腳上時(shí),INTF位(INTCON<1>)被置1。清0INTE控制位(INTCON<4>),關(guān)閉這個(gè)中斷。INTF在重新允許這個(gè)中斷之前應(yīng)由中斷服務(wù)程序中的軟件來清0這一位。在芯片進(jìn)入SLEEP之前,如果INTE位被置1,則INT中斷發(fā)生后可喚醒芯片。GIE位的狀態(tài)決定了處理器被喚醒后是否分支到中斷向量。
2.TMRO中斷
TMRO溢出(由FFH~00H)將置1 TOIF位(INTCON<2>)。這一位 的中斷可以對TOIE(INTCON<5>)位置1或清0而開放/關(guān)閉中斷。
3.PORTB中斷
在端口B的7~4位的輸入改變,就置1 RBIF(INTCON<0>)位。 這個(gè)中斷可以對RBIE(INTCON<3>)位置1或清0而開放或關(guān)閉。
注意 :當(dāng)正在對RB端口進(jìn)行讀操作時(shí),RB7~RB4發(fā)生改變,RBIF標(biāo)志位可 能不被置1。
4.中斷時(shí)如何保存W和STATUS寄存器。
中斷時(shí),硬件自動(dòng)將PC的值壓入堆棧,這叫保存斷點(diǎn),用戶經(jīng)常希望保存關(guān)鍵的寄存器的內(nèi)容,(如W和STATUS寄存器)。為此,執(zhí)行如下一段程序。
MOVWF W-TEMP ;將W寄存拷貝到W-TEMP寄存器,W-TEMP寄存器 可在1塊或0塊
SWAPF STATUS,W;狀態(tài)寄存器內(nèi)容送入W
BCF STATUS,RPO;選0塊
MOVWF STATUS-TEMP;將狀態(tài)寄存器的內(nèi)容(現(xiàn)在在W中的STATUS-TEMP寄存器中斷服務(wù)程序
SWAPF STATUS-TEMP,W;將STATUS-TEMP送入W(設(shè)置塊到原來 的狀態(tài))
MOVWF STATUS ;W送入STA?TUS(恢復(fù)STATUS)
SWAPF W-TEMP,0;W-TEMP送W(恢復(fù)W的內(nèi)容)
在上面這段程序中,W-TEMP寄存器,必須定義在兩個(gè)塊中,且要在定在同樣的塊基地址。例如將W-TEMP定義在0塊的20H,同時(shí)它也應(yīng)定義在1塊的A0H。寄存器STATUS-TEMP必須定義在0塊。
5.看門狗計(jì)時(shí)器(WDT)
看門狗計(jì)時(shí)器實(shí)際使用的是在芯片上的RC振蕩器,這不要求任何外部元件。這個(gè)RC振蕩器與OSC1/CLKIN引腳上接的RC振蕩器(主振時(shí)鐘)是分開的。這樣即使OSC1/CLKIN和OSC2/CLKOUT引腳停振,(例在執(zhí)行SLEEP指令后)WDT仍然能夠工作。在正常工作時(shí),WDT計(jì)時(shí)器的輸出產(chǎn)生器件的RESET信號。如果器件處于SLEEP狀態(tài)下,WDT計(jì)時(shí)器的輸出將喚醒器件,使器件繼續(xù)正常的工作。WDT也可以通過編程的配置來關(guān)閉。其內(nèi)容的框圖與PIC16C6X系列相同。
九、PIC16C84單片機(jī)的指令系統(tǒng)共有35條指令。與PIC16C6X系列的指令完全相同。
評論