在許多PIC示例中,您將看到旨在在代碼執(zhí)行期間添加暫停的延遲。這種延遲的一個(gè)示例包括先前文章中的LED閃爍代碼,其使用簡(jiǎn)單的for循環(huán)來(lái)在LED的ON和OFF狀態(tài)之間添加延遲。但是,有時(shí)這種延遲并不是很有用,特別是在需要精確定時(shí)時(shí)。
當(dāng)需要精確定時(shí)時(shí),會(huì)有非常有用的外設(shè):定時(shí)器!與for循環(huán)延遲不同,定時(shí)器可以為定時(shí)事件提供非常準(zhǔn)確的源并創(chuàng)建特定長(zhǎng)度的延遲。通常,PIC有許多不同的定時(shí)器,所以為了簡(jiǎn)單起見,我們只關(guān)注PIC16F819中的timer0和看門狗定時(shí)器。
PIC16F819中的Timer0
大多數(shù)PIC都有一個(gè)timer0,它通常是一個(gè)可以計(jì)時(shí)的8位定時(shí)器來(lái)自多個(gè)源,用于其他外設(shè),并可在溢出時(shí)產(chǎn)生中斷。這使它對(duì)關(guān)鍵的時(shí)序例程非常有用,但也可以用作通用計(jì)時(shí)器。使用定時(shí)器時(shí),有兩種主要方法可以實(shí)現(xiàn):
定時(shí)器溢出時(shí)中斷PIC(計(jì)數(shù)超過255并重置為0)
探測(cè)定時(shí)器寄存器并查看它當(dāng)前處于什么值?
由于我們尚未考慮中斷,我們將專注于使用定時(shí)器進(jìn)行1ms的簡(jiǎn)單延遲通過民意調(diào)查。使用定時(shí)器時(shí)的第一個(gè)任務(wù)是配置,這是通過配置與定時(shí)器相關(guān)的寄存器來(lái)完成的。對(duì)于PIC16F819,OPTION_REG保存配置定時(shí)器所需的位。
需要設(shè)置的第一位是定時(shí)器的時(shí)鐘源。最常見的來(lái)源是內(nèi)部指令時(shí)鐘周期(基本上是工作頻率/4),但您也可以從外部時(shí)鐘源(饋入T0CKI引腳)為定時(shí)器提供時(shí)鐘。在我們的例子中,我們將從PIC而不是外部源為它提供時(shí)鐘。
可以設(shè)置的下一位是時(shí)鐘邊沿,它確定定時(shí)器是在上升沿還是下降沿遞增;這很少使用,因此現(xiàn)在可以忽略。
下一位PSA確定預(yù)定標(biāo)器是分配給定時(shí)器還是分配給看門狗。在這個(gè)例子中,我們將把PSA分配給看門狗,原因?qū)⒃诤竺娼忉尅?/p>
在XC8中的PIC16F819上設(shè)置timer0
配置定時(shí)器后,可以在某些代碼中使用它來(lái)延遲1ms。定時(shí)器由FOSC/4提供時(shí)鐘,我們的FOSC為500kHz,因此定時(shí)器將以125kHz(或每8us一次)的速率遞增。由于我們希望使用此定時(shí)器延遲1ms,我們需要確定定時(shí)器計(jì)時(shí)的時(shí)間,直到它達(dá)到大約1ms的值。這是一些數(shù)學(xué)的來(lái)源!
因此,當(dāng)1ms過去時(shí),定時(shí)器的值為125。所以在我們的延遲功能中,我們復(fù)位定時(shí)器值,然后等到定時(shí)器寄存器等于或大于125。
PIC16F819中的看門狗定時(shí)器
看門狗定時(shí)器可以是真正的源痛苦,也可以使PIC系統(tǒng)非常強(qiáng)大和可靠。但看門狗計(jì)時(shí)器究竟是什么?簡(jiǎn)單地說,看門狗定時(shí)器是PIC中的硬件定時(shí)器,如果不經(jīng)常由軟件復(fù)位,將導(dǎo)致PIC復(fù)位。如果PIC由于硬件或軟件問題而掛起并保證PIC將從頭重新啟動(dòng),則此功能非常有用。它不僅重置了系統(tǒng),還標(biāo)記了一些可用于確定系統(tǒng)是否崩潰的位。
在使用看門狗之前,必須先啟用它,這可以通過在代碼頂部設(shè)置一個(gè)配置位來(lái)完成。如果您沒有使用PIC16F819,請(qǐng)檢查數(shù)據(jù)表中使用的配置位,使用MPLAB X中的配置位選擇系統(tǒng),或使用Google。
打開PIC16F819上的看門狗定時(shí)器
下一步是檢查看門狗是否與預(yù)縮放器一起使用;這是之前OPTION_REG發(fā)揮作用的地方。由于我們不希望預(yù)定標(biāo)器與timer0一起使用,我們將PSA分配位設(shè)置為0,這意味著預(yù)分頻器被分配給看門狗。但這如何影響看門狗的運(yùn)作?從本質(zhì)上講,預(yù)分頻器可以被認(rèn)為是一個(gè)時(shí)鐘分頻器,所以如果你有一個(gè)1MHz的時(shí)鐘進(jìn)入具有2倍預(yù)分頻器的看門狗,進(jìn)入看門狗的時(shí)鐘實(shí)際上是500kHz(因?yàn)樗? )。
看門狗從內(nèi)部31.25kHz振蕩器獲取其時(shí)鐘源,具有16ms周期,然后將該16ms脈沖饋入預(yù)定標(biāo)器系統(tǒng)。這意味著看門狗可以在8種不同選項(xiàng)中的一種上超時(shí)(使用PS2:PS0位分配)。
000 - 16ms
001 - 32ms
010 - 64ms
011 - 128ms
100 - 256ms
101 - 512ms
110 - 1024ms
111 - 2048ms
對(duì)于我們的項(xiàng)目,我們將配置看門狗定時(shí)器,因此如果項(xiàng)目掛起超過一秒鐘,系統(tǒng)將重置。
設(shè)置已分配給看門狗的預(yù)縮放器
所以現(xiàn)在我們有一個(gè)看門狗,它會(huì)在掛起時(shí)每秒重置一次PIC,但我們?nèi)绾未_定掛?這是一個(gè)有用的函數(shù):CLRWDT()。調(diào)用此函數(shù)后,它將自動(dòng)重置看門狗定時(shí)器。此函數(shù)應(yīng)放在主循環(huán)代碼段中,以便PIC不復(fù)位,主代碼需要經(jīng)常迭代一次。
重置看門狗定時(shí)器所需的功能
計(jì)時(shí)器:必要的外圍設(shè)備
定時(shí)器可以是很棒的外設(shè),你應(yīng)該盡快利用它們。它們可以提供準(zhǔn)確的計(jì)時(shí),計(jì)數(shù)甚至無(wú)掛起的系統(tǒng)。 PIC有時(shí)還有其他具有許多高級(jí)功能的定時(shí)器,例如16位和門控,可用于控制其他外設(shè)??偟膩?lái)說,不要猶豫使用計(jì)時(shí)器!
-
PIC
+關(guān)注
關(guān)注
8文章
507瀏覽量
87676 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3253瀏覽量
115067
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論