中文字幕无码不卡一区二区三区_少妇被又大又粗又爽毛片久久黑人_91精品国产在热久久无毒不卡_久久久久久亚洲综合网站

技術(shù)熱線: 4007-888-234
設(shè)計(jì)開發(fā)

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

開發(fā)工具

提供開發(fā)工具、應(yīng)用測(cè)試 完善的開發(fā)代碼案例庫(kù)分享

技術(shù)支持

從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無(wú)限潛能!

新品推廣

提供新的芯片及解決方案,提升客戶產(chǎn)品競(jìng)爭(zhēng)力

新聞中心

提供最新的單片機(jī)資訊,行業(yè)消息以及公司新聞動(dòng)態(tài)

PIC16C84單片機(jī)數(shù)據(jù)手冊(cè)

更新時(shí)間: 2019-03-21
閱讀量:2895

單片機(jī)代理商深圳英銳恩分享PIC16C84單片機(jī)數(shù)據(jù)手冊(cè),PIC16C84是8位CMOS EEPROM單片機(jī)。它有高性能的類似于RISC 的指令,共有35條單字節(jié)的指令,所有的指令除程序分支指令需要兩個(gè)指令周期外,都只需要一個(gè)指令周期。當(dāng)主振頻率為10MHZ時(shí)一個(gè)指令周期為400ns。程序指令的寬度為14位,在芯片內(nèi)有1K×14的EEPROM程序存儲(chǔ)器 。

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

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

PIC16C84單片機(jī)最大的特點(diǎn)是具有1K×14位的電可擦除的程序存儲(chǔ)器和64×8位的電可擦除的數(shù)據(jù)存儲(chǔ)器,這將為系統(tǒng)開發(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è)θ1加1,然后從程序存儲(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期間寫操作數(shù)。

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

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

3-1程序存儲(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,1020H,1420H, 1820H,1C20H都將訪問(wèn)到它。系統(tǒng)復(fù)位時(shí)PC的值為0000H,中斷向量是 0004H。

PC<12:0>

CALL,RETURN 13

RETFIE,RETLW 1級(jí)堆棧

8級(jí)堆棧

復(fù)位地址 0000H

外部中斷向量 0004H

用戶存貯空間 3FFH

1FFFH

圖4-2程序存儲(chǔ)的映象和堆棧

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

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

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

CPU和外設(shè)使用專用寄存器以控制器件的操作。專用寄存是靜態(tài)RAM。下面介紹幾個(gè)重要的專用寄存器

①狀態(tài)寄存器
  狀態(tài)寄存器包含有ALU(復(fù)術(shù)邏輯運(yùn)算單元)的算術(shù)狀態(tài),復(fù)位狀態(tài)和對(duì)數(shù)據(jù)存儲(chǔ)器的塊選擇,與任何寄存器一樣,狀態(tài)寄存器可以作為任何指令的目的寄存器。如果狀態(tài)寄存器作為某指令的目的寄存器 ,而那條指令要影響Z、DC,C位的狀態(tài),則禁止寫這三位。圖4-4是 狀態(tài)寄存器及其狀態(tài)。

R/W R/W R/W R R R/W R/W R/W

IRP RP1 RP0 TO PD Z DC C bit7 bit0

其中C是進(jìn)位位,對(duì)ADDWF和ADDLW指令,當(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í)行了CLRWDT和SLEEP指令,這一位為0表明產(chǎn)生了看門狗計(jì)時(shí)器超時(shí)。

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

RP1:RP=00狀態(tài),選擇0塊(地址00H~7FH)。

RP1:RP0=01狀態(tài),選擇1塊(地址80H~FFH)。

RP1:RP0=10選擇2塊(地址100H~17FH)。

RP1:RP0=11選擇3塊(地址180H~1FFH)。

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

②OPTION寄存器

OPTION寄存器是可讀,可寫的寄存器,它包含了各種控制位以配 置TMRO/WDT的預(yù)分頻器,外部INT中斷,TMRO和在PORTB的微弱上拉。圖4-5是OPTION寄存器各位的功能。 R/W R/W R/W R/W R/W R/W R/ W R/W

RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0 bit7 bit0

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

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

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

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

OPTION的所有位的定義同PIC16C6X系列。

③INTCON寄存器

INTCON是可讀可寫的寄存器,它包含了各中斷源允許或禁止中斷 。圖4-6是PIC16C84的INTCON寄存器

R/W R/W R/W R/W R/W R/W R/W R/W

GIE EEIE TOIE INTE RBIF TOIF INTIF RB IF bit7 bit0

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

TOIF是TMRO溢出中斷標(biāo)志。這一位為1,表明TMRO發(fā)生了溢出,必須由軟件將這一位清0,否則為0,表明TMRO沒(méi)有溢出發(fā)生RBIE是RB端口改變中斷的允許或禁止位,設(shè)置此位為1,允許中斷,為0禁止。

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

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

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

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

四、PCL和PCLATH

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

具有8個(gè)13位寬度的硬件堆棧。堆??臻g它既不是程序存儲(chǔ)器的一部分,也不是數(shù)據(jù)存儲(chǔ)器的一個(gè)部分,堆棧的指針是不可讀/寫的。當(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ā)生壓棧退棧。

4-2程序存儲(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)自于PCLATH<4:3>。當(dāng)執(zhí)行CALL、GOTO指令時(shí),用戶必須確保這些頁(yè)位的編程等指向要求的程序存儲(chǔ)器的頁(yè)。

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

4-3間接尋址,INDF和FSR的作用

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

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

使用INDF寄存器的任何指令,實(shí)際尋址數(shù)據(jù)是由文件選擇寄存器(FSR)所決定的。讀INDF自身(FSR=0),將產(chǎn)生00H。向INDF寫,結(jié)果無(wú)操作(顯然可以提供狀態(tài)位)。8位FSR寄存器同狀態(tài)寄存器STATUS<7>(IRP)組合可以得到9位地址。

然而PIC16C84是不用IRP的。使用下面的例程序,通過(guò)間接尋址清零。2OH~2FH單位。

MOVLW 20H ;初始化RAM的指針

MOVF FSR ;到FSR

NEXT CLRF INDF ;通過(guò)間接尋址清0,由FSR的內(nèi)容所指問(wèn)的寄存器。

INCF FSR ;(FSR)+1→FSR

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

GOTO NEXT ;否則入。

五 I/O端口

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

5-1 PORTA和TRISA寄存器

PIC16C84的 PORTH是5位寬度的鎖存器。RA4是施密特觸發(fā)器輸入,一個(gè)集電極開路輸出。端口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寫入,則寫到PORTA的鎖存器。所有的寫操作都是讀--修改--寫操作。當(dāng)向端口寫時(shí),它首先讀端口引腳,然后修改其位,再寫入端口的數(shù)據(jù)鎖存器。下面這段程序是對(duì)端口A的初始化:

CLRF PORTA;初始化端口A

BSF STATUS,RPO;選擇1塊

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

MOVWF TRISA;設(shè)置RA<3:0>為輸入;RA<5:4>為輸出 ;< 7:6>總是為0(無(wú)用)

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

5-2 PROTB和TRISB寄存器

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

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

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

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

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

16個(gè)鍵

RB4 100

RB5

RB6

RB7

RB0

RB1

RB2

BR3

Rf

圖4-7利用端口B的鍵盤接口圖。

5-3 I/O編程的考慮

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

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

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

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

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

可讀,可寫

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

從FFH到00H產(chǎn)生溢出中斷

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

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

量TOCS為1(OPTION<5>)選擇TMRO為計(jì)數(shù)器方式。這種方式下 TMRO將對(duì)RA4/TOCK1引腳上出現(xiàn)的上跳變或下跳變加1。清0TOSE(OPTION<4>)選擇上跳變否則為下跳變。有關(guān)預(yù)分頻器的使用與PIC16C6X系列相同。當(dāng)TMRO在計(jì)時(shí)/計(jì)數(shù)器方式下其值由FFH到00H時(shí)產(chǎn)生溢出中斷,這個(gè)溢出中斷將置TOIF位為1。此中斷可以TOIE位為0來(lái)屏蔽。要能再次產(chǎn)生中斷,必須在中斷服務(wù)程序中,通過(guò)軟件使TOIF清0,TMRO中斷不可以用來(lái)喚醒芯片。因?yàn)樵赟LEEP狀態(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í),正常操作期間是可讀,可寫的,這部分存儲(chǔ)器不能直接映象到寄存器文件空間,只有通過(guò)專用功能寄存器經(jīng)間接尋址來(lái)訪問(wèn),有四個(gè)SFR用于讀、寫這些存儲(chǔ)器,這些寄存器是EECON1;EECON2;EEDATA;EEDAR。

其中EEDATA用來(lái)保持8位的讀/寫數(shù)據(jù)。EEADR用來(lái)保持正在訪問(wèn) 的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í)間請(qǐng)參看芯片的AC說(shuō)明。當(dāng)器件是在代碼保護(hù)時(shí),只有CPU可以完成數(shù)據(jù)存儲(chǔ)器的讀 /寫。即器件的編程器的不再訪問(wèn)存儲(chǔ)器(外部讀/寫被關(guān)閉)。

6 連接的考慮

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

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

7.變換功能

理論上A/D變換器的變換功能如下。

當(dāng)模擬輸入信號(hào)電壓是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)用于輸入多路模擬信號(hào),TRISA(地址85 H)用于設(shè)置PORTA的I/O方式,PORTE(地址09H)用于輸入多路模擬信號(hào),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周期可能偶然超過(guò)10ms,為確保寫周期的完成,用戶使用的EE中斷或查詢WR位(EECON1<1>)。這兩個(gè)均可用來(lái)判斷寫周 期的完成。

除了上述提到的防止錯(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)配置位來(lái)關(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í)器溢出;中斷來(lái)喚醒芯片。

8-1配置位

配置位分為可編程的位,讀作0,不可編程的位,讀作1。通過(guò)可編程的位來(lái)選拔各種配置。這些位映象到程序存儲(chǔ)器的2007H單元。注意地址2007H不等于用戶程序存儲(chǔ)器空間。事實(shí)上,它屬于專門的測(cè)試 /配置存儲(chǔ)空間(2000H~3FFH),只有在編程時(shí)可以訪問(wèn)。圖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è)中斷請(qǐng)求。它也包括了每個(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。對(duì)于外部中斷文件,如RBO/INT引腳或PORTB改變中斷,這類中斷需3到4個(gè)指令周期。嚴(yán)格的時(shí)間,取決于中 斷事件的發(fā)生。一旦在中斷的中斷服務(wù)程序中可以通過(guò)查詢中斷標(biāo)志 位來(lái)確定中斷源。中斷的標(biāo)志位應(yīng)在重新開發(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)閉)。為確保GIE清0,應(yīng)有如下一段程序。

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

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

GOTO l00P;沒(méi)有返回到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ù)程序中的軟件來(lái)清0這一位。在芯片進(jìn)入SLEEP之前,如果INTE位被置1,則INT中斷發(fā)生后可喚醒芯片。GIE位的狀態(tài)決定了處理器被喚醒后是否分支到中斷向量。

2.TMRO中斷

TMRO溢出(由FFH~00H)將置1 TOIF位(INTCON<2>)。這一位 的中斷可以對(duì)TOIE(INTCON<5>)位置1或清0而開放/關(guān)閉中斷。

3.PORTB中斷

在端口B的7~4位的輸入改變,就置1 RBIF(INTCON<0>)位。 這個(gè)中斷可以對(duì)RBIE(INTCON<3>)位置1或清0而開放或關(guān)閉。

注意 :當(dāng)正在對(duì)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è)置塊到原來(lái) 的狀態(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信號(hào)。如果器件處于SLEEP狀態(tài)下,WDT計(jì)時(shí)器的輸出將喚醒器件,使器件繼續(xù)正常的工作。WDT也可以通過(guò)編程的配置來(lái)關(guān)閉。其內(nèi)容的框圖與PIC16C6X系列相同。

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

資料下載:

datasheet.pdf

修文县| 大英县| 墨竹工卡县| 鄂伦春自治旗| 宽城| 韶山市| 区。| 沈阳市| 肥东县| 文山县| 合山市| 紫金县| 阿城市| 禄丰县| 商河县| 淳化县| 沭阳县| 井研县| 河曲县| 连云港市| 黄平县| 南昌市| 五峰| 九寨沟县| 隆德县| 和林格尔县| 西乌珠穆沁旗| 临湘市| 东海县| 城口县| 抚顺县| 澄江县| 隆回县| 金沙县| 体育| 上林县| 曲麻莱县| 连云港市| 盈江县| 佳木斯市| 九台市|