第十一章復(fù)位、時鐘和省電方式控制本章學(xué)習(xí)目標(biāo)掌握單片機(jī)_第1頁
第十一章復(fù)位、時鐘和省電方式控制本章學(xué)習(xí)目標(biāo)掌握單片機(jī)_第2頁
第十一章復(fù)位、時鐘和省電方式控制本章學(xué)習(xí)目標(biāo)掌握單片機(jī)_第3頁
第十一章復(fù)位、時鐘和省電方式控制本章學(xué)習(xí)目標(biāo)掌握單片機(jī)_第4頁
已閱讀5頁,還剩70頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、1/75 第十一章第十一章復(fù)位、時鐘和省電方式控制復(fù)位、時鐘和省電方式控制本章學(xué)習(xí)目標(biāo)本章學(xué)習(xí)目標(biāo)掌握單片機(jī)的時鐘掌握單片機(jī)的時鐘掌握單片機(jī)的電源檢測與控制掌握單片機(jī)的電源檢測與控制2/75正確復(fù)位和合適的時鐘是單片機(jī)正常工作的基正確復(fù)位和合適的時鐘是單片機(jī)正常工作的基礎(chǔ),而單片機(jī)的省電方式控制可以降低系統(tǒng)的礎(chǔ),而單片機(jī)的省電方式控制可以降低系統(tǒng)的功耗,從而實(shí)現(xiàn)低功耗設(shè)計。功耗,從而實(shí)現(xiàn)低功耗設(shè)計。本章介紹本章介紹STC15F2K60S2單片機(jī)的復(fù)位、時鐘單片機(jī)的復(fù)位、時鐘配置方法和單片機(jī)的供電電源檢測和控制。配置方法和單片機(jī)的供電電源檢測和控制。 3/75復(fù)位就是單片機(jī)的初始化工作,復(fù)位后中

2、央處復(fù)位就是單片機(jī)的初始化工作,復(fù)位后中央處理器(理器(CPU)及單片機(jī)內(nèi)的其他功能部件都處)及單片機(jī)內(nèi)的其他功能部件都處在一個確定的初始狀態(tài),并從這個狀態(tài)開始工在一個確定的初始狀態(tài),并從這個狀態(tài)開始工作。作。 復(fù)位分為熱啟動復(fù)位和冷啟動復(fù)位兩種,它們復(fù)位分為熱啟動復(fù)位和冷啟動復(fù)位兩種,它們的區(qū)別如表的區(qū)別如表11-1所示。所示。11.1 復(fù)位4/75復(fù)位種類復(fù)位種類復(fù)位源復(fù)位源復(fù)位現(xiàn)象復(fù)位現(xiàn)象熱啟動復(fù)位熱啟動復(fù)位內(nèi)部看門狗復(fù)位內(nèi)部看門狗復(fù)位單片機(jī)直接從用戶程序區(qū)單片機(jī)直接從用戶程序區(qū)0000H處開始執(zhí)行用處開始執(zhí)行用戶程序戶程序通過控制通過控制RESET引腳產(chǎn)生的硬復(fù)位引腳產(chǎn)生的硬復(fù)位從用戶

3、程序區(qū)從用戶程序區(qū)0000H處開始直接執(zhí)行用戶程序處開始直接執(zhí)行用戶程序通過對通過對IAP_CONTR寄存器送入寄存器送入20H產(chǎn)生產(chǎn)生的軟復(fù)位的軟復(fù)位從用戶程序區(qū)從用戶程序區(qū)0000H處開始直接執(zhí)行用戶程序處開始直接執(zhí)行用戶程序通過對通過對IAP_CONTR寄存器送入寄存器送入60H產(chǎn)生產(chǎn)生的軟復(fù)位的軟復(fù)位從系統(tǒng)從系統(tǒng)ISP監(jiān)控程序區(qū)開始執(zhí)行程序,如果檢監(jiān)控程序區(qū)開始執(zhí)行程序,如果檢測不到合法的測不到合法的ISP下載命令流,將軟復(fù)位到用下載命令流,將軟復(fù)位到用戶程序區(qū)執(zhí)行用戶程序戶程序區(qū)執(zhí)行用戶程序冷啟動復(fù)位冷啟動復(fù)位系統(tǒng)停電后再上電引起的硬復(fù)位系統(tǒng)停電后再上電引起的硬復(fù)位從系統(tǒng)從系統(tǒng)ISP

4、監(jiān)控程序區(qū)開始執(zhí)行程序,如果檢監(jiān)控程序區(qū)開始執(zhí)行程序,如果檢測不到合法的測不到合法的ISP下載命令流,將軟復(fù)位到用下載命令流,將軟復(fù)位到用戶程序區(qū)執(zhí)行用戶程序戶程序區(qū)執(zhí)行用戶程序表表11-1 熱啟動復(fù)位和冷啟動復(fù)位熱啟動復(fù)位和冷啟動復(fù)位5/75STC15F2K60S2單片機(jī)有單片機(jī)有6種復(fù)位方式種復(fù)位方式外部外部RST引腳復(fù)位引腳復(fù)位軟件復(fù)位軟件復(fù)位掉電復(fù)位掉電復(fù)位/上電復(fù)位(并可選擇增加額外的復(fù)位上電復(fù)位(并可選擇增加額外的復(fù)位延時延時180ms,也叫,也叫MAX810專用復(fù)位電路,其專用復(fù)位電路,其實(shí)就是在上電復(fù)位后增加一個實(shí)就是在上電復(fù)位后增加一個180ms復(fù)位延時)復(fù)位延時)內(nèi)部低電壓

5、檢測復(fù)位內(nèi)部低電壓檢測復(fù)位MAX810專用復(fù)位電路復(fù)位專用復(fù)位電路復(fù)位看門狗復(fù)位看門狗復(fù)位6/751、外部、外部RST引腳復(fù)位引腳復(fù)位外部外部RST引腳復(fù)位就是從外部向引腳復(fù)位就是從外部向RST引腳施加一定寬引腳施加一定寬度的復(fù)位脈沖,從而實(shí)現(xiàn)單片機(jī)的復(fù)位。度的復(fù)位脈沖,從而實(shí)現(xiàn)單片機(jī)的復(fù)位。P5.4/RST引腳出廠時被配置為引腳出廠時被配置為I/O口,要將其配置為口,要將其配置為復(fù)位功能,可在使用復(fù)位功能,可在使用ISP下載程序時設(shè)置。下載程序時設(shè)置。如果如果P5.4/RST引腳已在引腳已在ISP燒錄程序時被設(shè)置為復(fù)位燒錄程序時被設(shè)置為復(fù)位腳,那腳,那P5.4/RST就是芯片復(fù)位的輸入腳。就

6、是芯片復(fù)位的輸入腳。將將RST復(fù)位腳拉高并維持至少復(fù)位腳拉高并維持至少24個時鐘加個時鐘加20us后,單后,單片機(jī)會進(jìn)入復(fù)位狀態(tài),將片機(jī)會進(jìn)入復(fù)位狀態(tài),將RST復(fù)位腳拉回低電平后,復(fù)位腳拉回低電平后,單片機(jī)結(jié)束復(fù)位狀態(tài)并從用戶程序區(qū)的單片機(jī)結(jié)束復(fù)位狀態(tài)并從用戶程序區(qū)的0000H處開始處開始正常工作。正常工作。7/752、軟件復(fù)位、軟件復(fù)位在系統(tǒng)運(yùn)行過程中,有時會根據(jù)特殊需求,需在系統(tǒng)運(yùn)行過程中,有時會根據(jù)特殊需求,需要實(shí)現(xiàn)單片機(jī)系統(tǒng)軟復(fù)位(熱啟動之一),傳要實(shí)現(xiàn)單片機(jī)系統(tǒng)軟復(fù)位(熱啟動之一),傳統(tǒng)的統(tǒng)的8051單片機(jī)由于硬件上未支持此功能,用單片機(jī)由于硬件上未支持此功能,用戶必須用軟件模擬實(shí)現(xiàn)

7、,實(shí)現(xiàn)起來較麻煩。戶必須用軟件模擬實(shí)現(xiàn),實(shí)現(xiàn)起來較麻煩。STC15F2K60S2單片機(jī)利用單片機(jī)利用ISP/IAP控制寄存控制寄存器器IAP_CONTR(地址為(地址為C7H,復(fù)位值為,復(fù)位值為0000 x000B)實(shí)現(xiàn)了此功能。)實(shí)現(xiàn)了此功能。用戶只需簡單的控制用戶只需簡單的控制IAP_CONTR的其中兩位的其中兩位SWBS/SWRST就可以系統(tǒng)復(fù)位了。就可以系統(tǒng)復(fù)位了。8/75ISP/IAP控制寄存器控制寄存器IAP_CONTR的各位定義的各位定義如下:如下:1)SWBS軟件選擇從用戶應(yīng)用程序區(qū)啟動(軟件選擇從用戶應(yīng)用程序區(qū)啟動(0)從從 ISP程序區(qū)啟動(程序區(qū)啟動(1)要與要與SWRS

8、T配合才可以實(shí)現(xiàn)配合才可以實(shí)現(xiàn)位號D7D6D5D4D3D2D1D0位名稱IAPENSWBSSWRSTCMD_FAIL-WT2WT1WT09/752)SWRST:產(chǎn)生軟件復(fù)位控制位。:產(chǎn)生軟件復(fù)位控制位。0:不操作:不操作1 :產(chǎn)生軟件系統(tǒng)復(fù)位,硬件自動清:產(chǎn)生軟件系統(tǒng)復(fù)位,硬件自動清0要與要與SWRST配合才可以實(shí)現(xiàn)配合才可以實(shí)現(xiàn)位號D7D6D5D4D3D2D1D0位名稱IAPENSWBSSWRSTCMD_FAIL-WT2WT1WT010/75下面的描述中,用戶應(yīng)用程序區(qū)簡稱下面的描述中,用戶應(yīng)用程序區(qū)簡稱AP區(qū),區(qū),系統(tǒng)系統(tǒng)ISP監(jiān)控程序區(qū)簡稱監(jiān)控程序區(qū)簡稱ISP區(qū)。區(qū)。例如,從例如,從AP

9、區(qū)軟件復(fù)位并切換到區(qū)軟件復(fù)位并切換到AP區(qū)開始執(zhí)行區(qū)開始執(zhí)行程序的程序的IAP_CONTR設(shè)置代碼為:設(shè)置代碼為:MOV IAP_CONTR,#00100000B;SWBS=0,SWRST=1(選擇選擇AP區(qū)軟復(fù)位區(qū)軟復(fù)位)從從ISP區(qū)軟件復(fù)位并切換到區(qū)軟件復(fù)位并切換到AP區(qū)開始執(zhí)行程序區(qū)開始執(zhí)行程序的的IAP_CONTR設(shè)置代碼為:設(shè)置代碼為:MOV IAP_CONTR,#00100000B;SWBS=0,SWRST=1(選擇選擇AP區(qū)軟復(fù)位區(qū)軟復(fù)位)11/75從從AP區(qū)軟件復(fù)位并切換到區(qū)軟件復(fù)位并切換到ISP區(qū)開始執(zhí)行程序區(qū)開始執(zhí)行程序的的IAP_CONTR設(shè)置代碼為:設(shè)置代碼為:MOV

10、IAP_CONTR,#01100000B;SWBS=1,SWRST=1(選擇選擇ISP區(qū)軟復(fù)位區(qū)軟復(fù)位)從從ISP區(qū)軟件復(fù)位并切換到區(qū)軟件復(fù)位并切換到ISP區(qū)開始執(zhí)行程序區(qū)開始執(zhí)行程序的的IAP_CONTR設(shè)置代碼為:設(shè)置代碼為:MOV IAP_CONTR,#01100000B;SWBS=1,SWRST=1(選擇選擇ISP區(qū)軟復(fù)位區(qū)軟復(fù)位)12/753)CMD_FAIL 如果送了如果送了ISP/IAP命令,并對命令,并對IAP_TRIG送送5AH/A5H觸發(fā)失敗,則為觸發(fā)失敗,則為1,需要由軟件清,需要由軟件清0。 位號D7D6D5D4D3D2D1D0位名稱IAPENSWBSSWRSTCMD_

11、FAIL-WT2WT1WT013/753、掉電復(fù)位、掉電復(fù)位/上電復(fù)位上電復(fù)位當(dāng)電源電壓當(dāng)電源電壓VCC低于掉電復(fù)位低于掉電復(fù)位/上電復(fù)位檢測上電復(fù)位檢測門檻電壓時,所有的邏輯電路都會復(fù)位。門檻電壓時,所有的邏輯電路都會復(fù)位。當(dāng)內(nèi)部當(dāng)內(nèi)部VCC上升至上電復(fù)位檢測門檻電壓以上升至上電復(fù)位檢測門檻電壓以上后,延遲上后,延遲32768個時鐘,掉電復(fù)位個時鐘,掉電復(fù)位/上電復(fù)位上電復(fù)位結(jié)束。結(jié)束。14/754、MAX810專用復(fù)位電路復(fù)位專用復(fù)位電路復(fù)位STC15F2K60S2單片機(jī)內(nèi)部集成了單片機(jī)內(nèi)部集成了MAX810專專用復(fù)位電路。用復(fù)位電路。若若MAX810專用復(fù)位電路在專用復(fù)位電路在STC-I

12、SP編程器中編程器中被允許,則以后掉電復(fù)位被允許,則以后掉電復(fù)位/上電復(fù)位后將再產(chǎn)上電復(fù)位后將再產(chǎn)生約生約180ms復(fù)位延時,復(fù)位才能被解除。復(fù)位延時,復(fù)位才能被解除。15/755、內(nèi)部低壓檢測復(fù)位、內(nèi)部低壓檢測復(fù)位除 了 上 電 復(fù) 位 檢 測 門 檻 電 壓 外 ,除 了 上 電 復(fù) 位 檢 測 門 檻 電 壓 外 ,STC15F2K60S2單片機(jī)還有一組更可靠的內(nèi)部單片機(jī)還有一組更可靠的內(nèi)部低電壓檢測門檻電壓。低電壓檢測門檻電壓。當(dāng)電源電壓當(dāng)電源電壓VCC低于內(nèi)部低電壓檢測(低于內(nèi)部低電壓檢測(LVD)門檻電壓時,可產(chǎn)生復(fù)位(前提是在門檻電壓時,可產(chǎn)生復(fù)位(前提是在STC-ISP編程用戶

13、程序時,允許低電壓檢測復(fù)位,即將編程用戶程序時,允許低電壓檢測復(fù)位,即將低電壓檢測門檻電壓設(shè)置為復(fù)位門檻電壓)。低電壓檢測門檻電壓設(shè)置為復(fù)位門檻電壓)。16/75STC15F2K60S2單片機(jī)內(nèi)置了單片機(jī)內(nèi)置了8級可選的內(nèi)部級可選的內(nèi)部低電壓檢測門檻電壓。低電壓檢測門檻電壓。5V單片機(jī)的低電壓檢測門檻電壓3V單片機(jī)的低電壓檢測門檻電壓-402585-4025854.744.644.603.113.083.094.414.324.272.852.822.834.144.054.002.632.612.613.903.823.772.442.422.433.693.613.562.292.262.

14、263.513.433.382.142.122.123.363.283.232.012.002.003.213.143.091.901.891.89表表11-2 不同溫度下單片機(jī)的低電壓檢測門檻電壓(單位:不同溫度下單片機(jī)的低電壓檢測門檻電壓(單位:V)17/75例如,當(dāng)用戶使用例如,當(dāng)用戶使用5V單片機(jī)時,可以根據(jù)單單片機(jī)時,可以根據(jù)單片機(jī)的實(shí)際工頻率,在片機(jī)的實(shí)際工頻率,在STC-ISP編程中選擇表編程中選擇表11-2中所列出的低電壓檢測門檻電壓作為復(fù)位中所列出的低電壓檢測門檻電壓作為復(fù)位門檻電壓。門檻電壓。如:常溫下工作頻率是如:常溫下工作頻率是20MHz以上時,可以以上時,可以選擇選擇

15、4.32V電壓作為復(fù)位門檻電壓;常溫下工電壓作為復(fù)位門檻電壓;常溫下工作頻率是作頻率是12MHz以下時,可以選擇以下時,可以選擇3.82V電壓電壓作為復(fù)位門檻電壓。作為復(fù)位門檻電壓。 18/75復(fù)位門檻電壓的選擇如圖復(fù)位門檻電壓的選擇如圖11-1所示。所示。選擇復(fù)位門檻電壓圖11-1 復(fù)位門檻電壓的選擇19/75如果在如果在STC-ISP下載用戶應(yīng)用程序時,不將低下載用戶應(yīng)用程序時,不將低電壓檢測設(shè)置為低電壓檢測復(fù)位,則在用戶程電壓檢測設(shè)置為低電壓檢測復(fù)位,則在用戶程序中用戶可將低電壓檢測設(shè)置為低電壓檢測中序中用戶可將低電壓檢測設(shè)置為低電壓檢測中斷。當(dāng)電源電壓斷。當(dāng)電源電壓VCC低于內(nèi)部低電壓

16、檢測低于內(nèi)部低電壓檢測(LVD)門檻電壓時,低電壓檢測中斷請求標(biāo))門檻電壓時,低電壓檢測中斷請求標(biāo)志位(志位(LVDF/PCON.5)就會被硬件置位。如)就會被硬件置位。如果果ELVD/IE.6(低電壓檢測中斷允許位)設(shè)置(低電壓檢測中斷允許位)設(shè)置為為1,低電壓檢測中斷請求標(biāo)志位就能產(chǎn)生一,低電壓檢測中斷請求標(biāo)志位就能產(chǎn)生一個低電壓檢測中斷。個低電壓檢測中斷。建議在電壓偏低時,不要操作建議在電壓偏低時,不要操作EEPROM/IAP,編程時直接選擇編程時直接選擇“低壓禁止低壓禁止IAP操作操作”。20/756、看門狗復(fù)位、看門狗復(fù)位(1)看門狗定時器復(fù)位)看門狗定時器復(fù)位在工業(yè)控制、汽車電子、

17、航空航天等需要高可在工業(yè)控制、汽車電子、航空航天等需要高可靠性的系統(tǒng)中,為了防止系統(tǒng)在異常情況下受靠性的系統(tǒng)中,為了防止系統(tǒng)在異常情況下受到干擾,到干擾,CPU程序跑飛,導(dǎo)致系統(tǒng)長時間異常程序跑飛,導(dǎo)致系統(tǒng)長時間異常工作,往往需要在系統(tǒng)中使用看門狗(工作,往往需要在系統(tǒng)中使用看門狗(Watch Dog)電路。)電路。21/75看門狗電路的基本作用就是監(jiān)視看門狗電路的基本作用就是監(jiān)視CPU的工作。的工作。如果如果CPU在規(guī)定的時間內(nèi)沒有按要求訪問看門在規(guī)定的時間內(nèi)沒有按要求訪問看門狗,就認(rèn)為狗,就認(rèn)為CPU處于異常狀態(tài),看門狗就會強(qiáng)處于異常狀態(tài),看門狗就會強(qiáng)迫迫CPU復(fù)位,使系統(tǒng)重新從頭開始按規(guī)

18、律執(zhí)行復(fù)位,使系統(tǒng)重新從頭開始按規(guī)律執(zhí)行用戶程序。用戶程序。正常工作時,單片機(jī)可以通過一個正常工作時,單片機(jī)可以通過一個I/O引腳定引腳定時向看門狗脈沖輸入端輸入脈沖(脈沖寬度只時向看門狗脈沖輸入端輸入脈沖(脈沖寬度只要不超出看門狗電路的溢出時間即可)。當(dāng)系要不超出看門狗電路的溢出時間即可)。當(dāng)系統(tǒng)死機(jī)時,單片機(jī)就會停止向看門狗脈沖輸入統(tǒng)死機(jī)時,單片機(jī)就會停止向看門狗脈沖輸入端輸入脈沖,超過一定時間后,看門狗電路就端輸入脈沖,超過一定時間后,看門狗電路就會發(fā)出復(fù)位信號,將系統(tǒng)復(fù)位,使系統(tǒng)恢復(fù)正會發(fā)出復(fù)位信號,將系統(tǒng)復(fù)位,使系統(tǒng)恢復(fù)正常工作。常工作。22/75STC15F2K60S2單片機(jī)內(nèi)部集

19、成了看門狗定時單片機(jī)內(nèi)部集成了看門狗定時器(器(Watch Dog Timer,WDT),使單片機(jī)系),使單片機(jī)系統(tǒng)可靠性設(shè)計變得更加方便、簡潔。統(tǒng)可靠性設(shè)計變得更加方便、簡潔。通 過 設(shè) 置 和 使 用通 過 設(shè) 置 和 使 用 W D T 控 制 寄 存 器控 制 寄 存 器WDT_CONTR(地址為(地址為C1H,復(fù)位值為,復(fù)位值為xx00 0000B)來使用看門狗功能。)來使用看門狗功能。 位號D7D6D5D4D3D2D1D0位名稱WDT_FLAG-EN_WDTCLR_WDTIDLE_WDTPS2PS1PS023/751)WDT_FLAG:看門狗溢出標(biāo)志位,溢出時:看門狗溢出標(biāo)志位,溢

20、出時該位由硬件置該位由硬件置1可用軟件將其清可用軟件將其清0 位號位號D7D6D5D4D3D2D1D0位名稱位名稱WDT_FLAG-EN_WDTCLR_WDTIDLE_WDTPS2PS1PS024/752)EN_WDT:看門狗允許位該位:看門狗允許位該位當(dāng)設(shè)置為當(dāng)設(shè)置為“1”時,看門狗啟動。時,看門狗啟動。3)CLR_WDT:看門狗清零位:看門狗清零位 當(dāng)設(shè)為當(dāng)設(shè)為“1”時,看門狗將重新計數(shù)。時,看門狗將重新計數(shù)。硬件將自動清硬件將自動清0此位。此位。位號位號D7D6D5D4D3D2D1D0位名稱位名稱WDT_FLAG-EN_WDTCLR_WDTIDLE_WDTPS2PS1PS025/754)

21、IDLE_WDT:看門狗:看門狗“IDLE”模式(即空閑模式(即空閑模式)位模式)位當(dāng)設(shè)置為當(dāng)設(shè)置為“1”時,時,WDT在在“空閑模式空閑模式”計數(shù);計數(shù);當(dāng)清當(dāng)清0該位時,該位時,WDT在在“空閑模式空閑模式”時不計數(shù)。時不計數(shù)。5)PS2、PS1、PS0:WDT預(yù)分頻系數(shù)控制位。預(yù)分頻系數(shù)控制位。位號位號D7D6D5D4D3D2D1D0位名稱位名稱WDT_FLAG-EN_WDTCLR_WDTIDLE_WDTPS2PS1PS026/75WDT溢出時間的計算方法:溢出時間的計算方法:WDT的溢出時間的溢出時間 =(12 預(yù)分頻系數(shù)預(yù)分頻系數(shù) 32768 ) / 時鐘頻率時鐘頻率例如,時鐘為例如

22、,時鐘為12MHz時時WDT的溢出時間的溢出時間=(12 預(yù)分頻系數(shù)預(yù)分頻系數(shù) 32768) / 12000000 = 預(yù)分頻系數(shù)預(yù)分頻系數(shù) 393216 / 1200000027/75常見的預(yù)分頻系數(shù)設(shè)置和常見的預(yù)分頻系數(shù)設(shè)置和WDT溢出時間如表溢出時間如表11-3所示。所示。圖10-6 LED動態(tài)顯示接口電路 PS2PS1PS0預(yù)分頻系數(shù)WDT溢出時間 (20MHz)WDT溢出時間 (12MHz)WDT溢出時間 (11.0592MHz)000239.3ms65.5ms71.1ms001478.6 ms131.0 ms142.2 ms0108157.3 ms262.1 ms284.4 ms0

23、1116314.6 ms524.2 ms568.8 ms10032629.1 ms1.0485s1.1377s101641.25s2.0971s2.2755s1101282.5s4.1943s4.5511s1112565s8.3886s9.1022s表表11-3 WDT的預(yù)分頻和溢出時間的預(yù)分頻和溢出時間28/75使用使用ISP編程用戶程序時,可以對看門狗進(jìn)行編程用戶程序時,可以對看門狗進(jìn)行設(shè)置,如圖設(shè)置,如圖11-2所示。所示??撮T狗功能設(shè)置區(qū)圖11-2 看門狗設(shè)置29/75當(dāng)啟用當(dāng)啟用WDT后,用戶程序必須周期性的復(fù)位后,用戶程序必須周期性的復(fù)位WDT,以證明程序正常運(yùn)行。,以證明程序正常

24、運(yùn)行。如果用戶程序在一段時間之后不能復(fù)位如果用戶程序在一段時間之后不能復(fù)位WDT,WDT就會溢出,將強(qiáng)制就會溢出,將強(qiáng)制CPU自動復(fù)位,從而自動復(fù)位,從而確保程序不會進(jìn)入死循環(huán),或者執(zhí)行到無程序確保程序不會進(jìn)入死循環(huán),或者執(zhí)行到無程序代碼區(qū)。代碼區(qū)。復(fù)位復(fù)位WDT的方法是重寫的方法是重寫WDT控制寄存器的內(nèi)控制寄存器的內(nèi)容。容。30/75(2)看門狗定時器的使用)看門狗定時器的使用WDT的使用主要涉及的使用主要涉及WDT控制寄存器的設(shè)置控制寄存器的設(shè)置以及以及WDT的定期復(fù)位。的定期復(fù)位。使用使用WDT的匯編語言程序如下:的匯編語言程序如下:31/75$INCLUDE (STC15.INC)

25、;包含包含STC15F2K60S2單片機(jī)寄存器定義文件單片機(jī)寄存器定義文件ORG 0000HLJMP Initial ;其他入口定義其他入口定義ORG 0060HInitial:MOV WDT_CONTR,#00111100B ;WDT控制寄存器初始化控制寄存器初始化;EN_WDT=1,CLR_WDT=1,IDLE_WDT=1,PS2=1,PS1=0,PS0=0 ;其他初始化代碼其他初始化代碼Main_Loop: LCALL Display ;調(diào)用顯示子程序調(diào)用顯示子程序LCALL Keyboard ;調(diào)用鍵盤掃描子程序調(diào)用鍵盤掃描子程序 ;其他程序代碼其他程序代碼MOV WDT_CONTR,

26、#00111100B ;復(fù)位復(fù)位WDT ;其他代碼其他代碼LJMP Main_Loop32/75使用使用WDT的的C語言程序如下:語言程序如下:#include “stc15.h”void main(void) /其他初始化代碼其他初始化代碼 WDT_CONTR=0 x3c;/EN_WDT=1,CLR_WDT=1,IDLE_WDT= 1,PS2=1,PS1=0,PS0=0 while(1) display(); keyboard(); /其他代碼其他代碼 WDT_CONTR=0 x3c; /復(fù)位復(fù)位WDT 33/7511.2 單片機(jī)的時鐘單片機(jī)的時鐘一、時鐘源選擇一、時鐘源選擇 STC15F2

27、K60S2單片機(jī)除了可以使用傳統(tǒng)的外單片機(jī)除了可以使用傳統(tǒng)的外部時鐘外,還可以選擇內(nèi)部部時鐘外,還可以選擇內(nèi)部R/C振蕩器時鐘源振蕩器時鐘源(內(nèi)部時鐘)。(內(nèi)部時鐘)。出廠標(biāo)準(zhǔn)配置是使用芯片內(nèi)部的出廠標(biāo)準(zhǔn)配置是使用芯片內(nèi)部的R/C振蕩器。振蕩器。振蕩頻率可選,振蕩頻率可選,-4085時的溫飄時的溫飄1%,常溫下溫飄可達(dá)常溫下溫飄可達(dá)5。如果使用內(nèi)部時鐘,則。如果使用內(nèi)部時鐘,則可以省掉外部晶振??梢允〉敉獠烤д?。34/75在下載用戶程序時,可以在硬件選項(xiàng)中選中調(diào)節(jié)頻率,然在下載用戶程序時,可以在硬件選項(xiàng)中選中調(diào)節(jié)頻率,然后在后在“選擇選擇/輸入頻率輸入頻率”下拉框中選擇內(nèi)部下拉框中選擇內(nèi)部R/

28、C振蕩時鐘頻振蕩時鐘頻率,如圖率,如圖11-3所示。所示。選擇內(nèi)部R/C振蕩時鐘頻率圖11-3 選擇時鐘源35/75二、內(nèi)部時鐘分頻和分頻寄存器二、內(nèi)部時鐘分頻和分頻寄存器 如果希望降低系統(tǒng)功耗,可對內(nèi)部時鐘進(jìn)行分如果希望降低系統(tǒng)功耗,可對內(nèi)部時鐘進(jìn)行分頻 。 利 用 時 鐘 分 頻 控 制 寄 存 器頻 。 利 用 時 鐘 分 頻 控 制 寄 存 器CLK_DIV(PCON2) 可進(jìn)行主時鐘分頻,從而可進(jìn)行主時鐘分頻,從而降低單片機(jī)工作時鐘頻率,降低功耗,降低降低單片機(jī)工作時鐘頻率,降低功耗,降低EMI。 36/75時鐘分頻寄存器時鐘分頻寄存器CLK_DIV (也稱為也稱為PCON2,地址為

29、地址為97H,復(fù)位值為,復(fù)位值為0000 x000B)各位的定義各位的定義如下:如下:位號位號00D7D6D5D4D3D2D1D0位名稱位名稱MCKO_S1MCKO_S0ADRJTx_Rx-CLKS2CLKS1CLKS037/75其中其中CLKS2、CLKS1和和CLKS0用于設(shè)置分頻用于設(shè)置分頻系數(shù),如表系數(shù),如表11-4所示。所示。位號位號00D7D6D5D4D3D2D1D0位名稱位名稱MCKO_S1MCKO_S0ADRJTx_Rx-CLKS2CLKS1CLKS0CLKS2CLKS1CLKS0分頻后CPU的實(shí)際工作時鐘(稱為系統(tǒng)時鐘)000主時鐘頻率/1,不分頻001主時鐘頻率/2010主

30、時鐘頻率/4011主時鐘頻率/8100主時鐘頻率/16101主時鐘頻率/32110主時鐘頻率/64111主時鐘頻率/128表11-4 分頻系數(shù)選擇38/75STC15F2K60S2單片機(jī)的時鐘結(jié)構(gòu)如圖單片機(jī)的時鐘結(jié)構(gòu)如圖11-4所所示。示。圖11-4 STC15F2K60S2單片機(jī)的時鐘結(jié)構(gòu)39/7511.3 單片機(jī)的電源檢測與控制單片機(jī)的電源檢測與控制一、單片機(jī)的低電壓檢測一、單片機(jī)的低電壓檢測 1、低電壓檢測相關(guān)的寄存器、低電壓檢測相關(guān)的寄存器電源控制寄存器電源控制寄存器PCON的的LVDF(PCON.5)位是低電)位是低電壓檢測標(biāo)志位,同時也是低電壓檢測中斷請求標(biāo)志位。壓檢測標(biāo)志位,同時

31、也是低電壓檢測中斷請求標(biāo)志位。在正常工作和空閑工作狀態(tài)時在正常工作和空閑工作狀態(tài)時,如果內(nèi)部工作電壓,如果內(nèi)部工作電壓Vcc低于低電壓檢測門檻電壓,該位自動置低于低電壓檢測門檻電壓,該位自動置1,與低電,與低電壓檢測中斷是否被允許無關(guān)。即在內(nèi)部工作電壓壓檢測中斷是否被允許無關(guān)。即在內(nèi)部工作電壓Vcc低于低電壓檢測門檻電壓時,不管有沒有允許低電壓低于低電壓檢測門檻電壓時,不管有沒有允許低電壓檢測中斷,該位都自動為檢測中斷,該位都自動為1。該位要用軟件清。該位要用軟件清0,清,清0后,如果內(nèi)部工作電壓后,如果內(nèi)部工作電壓Vcc繼續(xù)低于低電壓檢測門檻繼續(xù)低于低電壓檢測門檻電壓,該位又被自動設(shè)置為電壓

32、,該位又被自動設(shè)置為1。40/75在進(jìn)入掉電工作狀態(tài)前在進(jìn)入掉電工作狀態(tài)前,如果低電壓檢測電路,如果低電壓檢測電路未被允許可產(chǎn)生中斷,則在進(jìn)入掉電模式后,未被允許可產(chǎn)生中斷,則在進(jìn)入掉電模式后,該低電壓檢測電路不工作以降低功耗。如果被該低電壓檢測電路不工作以降低功耗。如果被允許可產(chǎn)生低電壓檢測中斷,則在進(jìn)入掉電模允許可產(chǎn)生低電壓檢測中斷,則在進(jìn)入掉電模式后,該低電壓檢測電路繼續(xù)工作,在內(nèi)部工式后,該低電壓檢測電路繼續(xù)工作,在內(nèi)部工作電壓作電壓Vcc低于低電壓檢測門檻電壓后,產(chǎn)生低于低電壓檢測門檻電壓后,產(chǎn)生低電壓檢測中斷,可將低電壓檢測中斷,可將MCU從掉電狀態(tài)喚醒。從掉電狀態(tài)喚醒。41/75

33、中斷控制允許位是中斷控制允許位是EA和和ELVD,ELVD是低電是低電壓檢測中斷允許位。壓檢測中斷允許位。ELVD = 0時,禁止低電壓檢測中斷;時,禁止低電壓檢測中斷;ELVD = 1時,允許低電壓檢測中斷。時,允許低電壓檢測中斷。中斷優(yōu)先級控制位是中斷優(yōu)先級控制位是PLVD,具有兩級中斷優(yōu),具有兩級中斷優(yōu)先級。先級。中斷請求標(biāo)志位是中斷請求標(biāo)志位是LVDF,要由軟件清,要由軟件清0。如果要求在掉電模式下外部低壓檢測中斷繼續(xù)如果要求在掉電模式下外部低壓檢測中斷繼續(xù)工作,可將工作,可將CPU從掉電模式喚醒,則應(yīng)將外部從掉電模式喚醒,則應(yīng)將外部中斷使能和時鐘輸出寄存器中斷使能和時鐘輸出寄存器IN

34、T_CLKO的的LVD_WAKE (INT_CLKO.3)位設(shè)置為)位設(shè)置為1。42/752、低電壓檢測的應(yīng)用、低電壓檢測的應(yīng)用下面以一個具體實(shí)例,說明外部低電壓檢測功能的應(yīng)下面以一個具體實(shí)例,說明外部低電壓檢測功能的應(yīng)用。用。【例例11-1】編程實(shí)現(xiàn)外部低電壓檢測功能的應(yīng)用。編程實(shí)現(xiàn)外部低電壓檢測功能的應(yīng)用。解:解:CPU可以用查詢方式查詢可以用查詢方式查詢LVDF標(biāo)志位,推薦使用標(biāo)志位,推薦使用中斷方式。在中斷服務(wù)程序中,將中斷方式。在中斷服務(wù)程序中,將LVDF 位清位清0,再,再讀讀LVDF位。如果為位。如果為0,則認(rèn)為是電源抖動,如果為,則認(rèn)為是電源抖動,如果為1,則認(rèn)為電源掉電,立即

35、進(jìn)行保存現(xiàn)場數(shù)據(jù)的工作。保則認(rèn)為電源掉電,立即進(jìn)行保存現(xiàn)場數(shù)據(jù)的工作。保存現(xiàn)場完成后,再將存現(xiàn)場完成后,再將LVDF位清位清0,再讀,再讀LVDF位的值。位的值。如果為如果為0,則認(rèn)為電源系統(tǒng)恢復(fù)正常,此時,則認(rèn)為電源系統(tǒng)恢復(fù)正常,此時CPU可恢可恢復(fù)正常工作,如果為復(fù)正常工作,如果為1,繼續(xù)將,繼續(xù)將LVDF位清位清0,再讀,再讀LVDF的值,用此方法,等到電源恢復(fù)正常,或電源的值,用此方法,等到電源恢復(fù)正常,或電源徹底掉電,徹底掉電,CPU進(jìn)入復(fù)位狀態(tài)。進(jìn)入復(fù)位狀態(tài)。43/75下面用查詢方式演示外部低電壓檢測功能的應(yīng)下面用查詢方式演示外部低電壓檢測功能的應(yīng)用(各個口線對應(yīng)的發(fā)光二極管在該口

36、線為低用(各個口線對應(yīng)的發(fā)光二極管在該口線為低電平時亮)。中斷方式的使用方法,請讀者自電平時亮)。中斷方式的使用方法,請讀者自行設(shè)計。行設(shè)計。$INCLUDE (STC15.INC) ;包含包含STC15F2K60S2單片機(jī)寄存器定義文件單片機(jī)寄存器定義文件RUN_LEDEQUP1.0;程序工作指示燈程序工作指示燈ERROR_LEDEQUP1.1;出錯指示燈出錯指示燈Hi_Volt_LEDEQUP1.2;正常電壓指示燈正常電壓指示燈POWER_ON_LEDEQUP1.3;電源上電指示燈電源上電指示燈LOW_Volt_LEDEQUP1.4;低電壓指示燈低電壓指示燈44/75ORG 0000HLJ

37、MP MAINORG 0100HMAIN:MOV SP, #70H ;堆棧指針指向堆棧指針指向 70H 單元單元SETBRUN_LED;演示程序開始工作演示程序開始工作LCALL Delay ;延時延時CLR RUN_LED;演示程序開始工作演示程序開始工作LCALL Delay ;延時延時SETBRUN_LEDMAIN1:MOV A,PCONJBC ACC.5,POWER_ON_1CLR ERROR_LEDSETB POWER_ON_LEDSETB Hi_Volt_LEDSETB LOW_Volt_LEDERROR:LJMP ERROR45/75POWER_ON_1:SETB ERROR_L

38、EDCLR POWER_ON_LEDSETB Hi_Volt_LEDSETB LOW_Volt_LEDLCALL Delay ;延時延時Continue_Read:MOV A,#11011111BANL PCON, ANOPMOV A,PCONJBC ACC.5,Low_VoltageHigh_Voltage:SETB ERROR_LEDSETB POWER_ON_LEDCLR Hi_Volt_LEDSETB LOW_Volt_LEDLJMP Continue_Read46/75Low_Voltage:SETB ERROR_LEDSETB POWER_ON_LEDSETB Hi_Volt_LE

39、DCLR LOW_Volt_LEDLJMP Continue_ReadDelay: CLR A MOV R0, A MOV R1, A MOV R2, #30HDelay_Loop: DJNZ R0, Delay_Loop DJNZ R1, Delay_Loop DJNZ R2, Delay_Loop RET END47/75二、二、省電方式省電方式 STC15F2K60S2單片機(jī)可以運(yùn)行單片機(jī)可以運(yùn)行3種省電模式種省電模式以降低功耗以降低功耗低速模式低速模式空閑模式空閑模式掉電模式掉電模式正常工作模式下,正常工作模式下,STC15F2K60S2單片機(jī)的典型單片機(jī)的典型功耗是功耗是2.7mA7

40、mA,而掉電模式下的典型功耗,而掉電模式下的典型功耗0.1uA,空閑模式下的典型功耗是,空閑模式下的典型功耗是1.8mA。48/751、省電方式的控制、省電方式的控制低 速 模 式 由 時 鐘 分 頻 器低 速 模 式 由 時 鐘 分 頻 器 C L K _ D I V(PCON2)控制,而空閑模式和掉電模)控制,而空閑模式和掉電模式的進(jìn)入由電源控制寄存器式的進(jìn)入由電源控制寄存器PCON的相的相應(yīng)位控制。應(yīng)位控制。 49/75PCON(地址為(地址為87H,復(fù)位值為,復(fù)位值為30H)寄存器)寄存器的各位定義如下:的各位定義如下:位號D7D6D5D4D3D2D1D0位名稱SMODSMOD0LVD

41、FPOFGF1GF0PDIDL50/751)LVDF:低電壓檢測標(biāo)志位,同時也是低電:低電壓檢測標(biāo)志位,同時也是低電壓檢測中斷請求標(biāo)志位。壓檢測中斷請求標(biāo)志位。2)POF:上電復(fù)位標(biāo)志位,單片機(jī)停電后,上:上電復(fù)位標(biāo)志位,單片機(jī)停電后,上電復(fù)位標(biāo)志位為電復(fù)位標(biāo)志位為1,可由軟件清,可由軟件清0。位號位號D7D6D5D4D3D2D1D0位名稱位名稱SMODSMOD0LVDFPOFGF1GF0PDIDL51/75在實(shí)際應(yīng)用中,該位可用來判斷單片機(jī)復(fù)位是在實(shí)際應(yīng)用中,該位可用來判斷單片機(jī)復(fù)位是上電復(fù)位上電復(fù)位 (冷啟動),還是外部復(fù)位腳輸入(冷啟動),還是外部復(fù)位腳輸入復(fù)位信號產(chǎn)生的復(fù)位,還是內(nèi)部看

42、門狗復(fù)位,復(fù)位信號產(chǎn)生的復(fù)位,還是內(nèi)部看門狗復(fù)位,或者是軟件復(fù)位或其他復(fù)位。用戶可以在初始或者是軟件復(fù)位或其他復(fù)位。用戶可以在初始化程序中判斷化程序中判斷POF位是否為位是否為1,并對不同情況,并對不同情況進(jìn)行不同的處理。判斷方法如圖進(jìn)行不同的處理。判斷方法如圖11-5所示。所示。冷啟動(上電復(fù)位)外部手動復(fù)位或看門狗復(fù)位,或軟件復(fù)位,或其他復(fù)位YNPOF=1?將POF清零圖圖11-5 判斷復(fù)位種類流程圖判斷復(fù)位種類流程圖52/753)PD:將其置:將其置1時,單片機(jī)將進(jìn)入掉電模式。時,單片機(jī)將進(jìn)入掉電模式。掉電模式也叫停機(jī)模式,此時的典型功耗為掉電模式也叫停機(jī)模式,此時的典型功耗為2A。進(jìn)入

43、掉電模式后,內(nèi)部時鐘停振,進(jìn)入掉電模式后,內(nèi)部時鐘停振,CPU、定時器、看、定時器、看門狗、門狗、A/D轉(zhuǎn)換、串行口全部停止工作,只有外部中斷轉(zhuǎn)換、串行口全部停止工作,只有外部中斷繼續(xù)工作。如果低電壓檢測電路被允許產(chǎn)生中斷,則繼續(xù)工作。如果低電壓檢測電路被允許產(chǎn)生中斷,則低電壓檢測電路也可繼續(xù)工作,否則將停止工作。低電壓檢測電路也可繼續(xù)工作,否則將停止工作。進(jìn)入掉電模式后,所有的進(jìn)入掉電模式后,所有的I/O口、特殊功能寄存器維持口、特殊功能寄存器維持進(jìn)入掉電模式前那一刻的狀態(tài)不變。進(jìn)入掉電模式前那一刻的狀態(tài)不變。 位號位號D7D6D5D4D3D2D1D0位名稱位名稱SMODSMOD0LVDFP

44、OFGF1GF0PDIDL53/75進(jìn)入掉電模式的單片機(jī)可由外部中斷喚醒。進(jìn)入掉電模式的單片機(jī)可由外部中斷喚醒。可將可將CPU從掉電模式喚醒的資源有:從掉電模式喚醒的資源有:INT0/P3.2,INT1/P3.3,INT2/P3.6、/INT3/P3.7、/INT4/P3.0,CCP0/CCP1/CCP2,RxD/RxD2,T0/T1/T2和內(nèi)部低功耗掉電喚醒專用定時器。和內(nèi)部低功耗掉電喚醒專用定時器。STC15F2K60S2單片機(jī)進(jìn)入停機(jī)模式單片機(jī)進(jìn)入停機(jī)模式/掉電模式掉電模式后,除了可以通過外部中斷源進(jìn)行喚醒外,使后,除了可以通過外部中斷源進(jìn)行喚醒外,使用掉電喚醒專用定時器,也可以將進(jìn)入掉

45、電模用掉電喚醒專用定時器,也可以將進(jìn)入掉電模式后的單片機(jī)喚醒,使其恢復(fù)到正常工作狀態(tài)。式后的單片機(jī)喚醒,使其恢復(fù)到正常工作狀態(tài)。54/75掉 電 喚 醒 專 用 定 時 器 由 特 殊 功 能 寄 存 器掉 電 喚 醒 專 用 定 時 器 由 特 殊 功 能 寄 存 器WKTCH和和WKTCL進(jìn)行管理和控制。進(jìn)行管理和控制。WKTCL(地址為(地址為AAH,復(fù)位值為,復(fù)位值為00H)各位)各位的定義如下:的定義如下:WKTCH(地址為(地址為ABH,復(fù)位值為,復(fù)位值為00H)各位)各位的定義如下:的定義如下:位號D7D6D5D4D3D2D1D0位名稱位號D7D6D5D4D3D2D1D0位名稱W

46、KTEN55/75掉電喚醒專用定時器是一個掉電喚醒專用定時器是一個15位定時器,位定時器,WKTCH6:0,WKTCL7:0構(gòu)成最長構(gòu)成最長15位位計數(shù)值(計數(shù)值(32768),定時從),定時從0開始計數(shù)。開始計數(shù)。WKTEN:掉電喚醒專用定時器的使能控制位。:掉電喚醒專用定時器的使能控制位。1:允許掉電喚醒專用定時器工作;:允許掉電喚醒專用定時器工作;0:禁止掉電喚醒專用定時器工作。:禁止掉電喚醒專用定時器工作。56/75通過軟件將通過軟件將WKTCH寄存器中的寄存器中的WKTEN位置位置1,允許掉電喚醒專用定時器工作后,當(dāng),允許掉電喚醒專用定時器工作后,當(dāng)MCU一旦進(jìn)入掉電模式,掉電喚醒專

47、用定時一旦進(jìn)入掉電模式,掉電喚醒專用定時器就開始計數(shù),直到計數(shù)到與器就開始計數(shù),直到計數(shù)到與WKTCH6:0,WKTCL7:0寄存器所設(shè)定的計數(shù)值相等后寄存器所設(shè)定的計數(shù)值相等后就 啟 動 系 統(tǒng) 振 蕩 器 ,就 啟 動 系 統(tǒng) 振 蕩 器 , M C U 等 待等 待32768/16384/8192/4096個時鐘(由用戶在個時鐘(由用戶在ISP燒錄程序時自行設(shè)置)后,燒錄程序時自行設(shè)置)后,MCU認(rèn)為此時系認(rèn)為此時系統(tǒng)時鐘從開始起振的不穩(wěn)定狀態(tài)已經(jīng)過渡到穩(wěn)統(tǒng)時鐘從開始起振的不穩(wěn)定狀態(tài)已經(jīng)過渡到穩(wěn)定狀態(tài),才將時鐘供給定狀態(tài),才將時鐘供給CPU,CPU獲得時鐘后,獲得時鐘后,程序從上次掉電的

48、地方繼續(xù)往下執(zhí)行。程序從上次掉電的地方繼續(xù)往下執(zhí)行。57/75電喚醒專用定時器計數(shù)一次的時間約為電喚醒專用定時器計數(shù)一次的時間約為488s,當(dāng)然存在一定的誤差。掉電喚醒專用定時器的當(dāng)然存在一定的誤差。掉電喚醒專用定時器的計數(shù)時間為:計數(shù)時間為:488sWKTCH6:0,WKTCL7:0寄存器所設(shè)定的計數(shù)值寄存器所設(shè)定的計數(shù)值因此,掉電喚醒專用定時器最小計數(shù)時間約為因此,掉電喚醒專用定時器最小計數(shù)時間約為488s掉電喚醒專用定時器最長計數(shù)時間約為掉電喚醒專用定時器最長計數(shù)時間約為 488s 32768=15.99s58/75利用掉電喚醒專用定時器喚醒單片機(jī)時,只需利用掉電喚醒專用定時器喚醒單片機(jī)

49、時,只需在程序的初始化部分設(shè)置在程序的初始化部分設(shè)置WKTCL和和WKTCH即可,在即可,在WKTCH6:0,WKTCL7:0設(shè)置設(shè)置計數(shù)值,注意將計數(shù)值,注意將WKTCH的最高位置的最高位置1,以允,以允許掉電喚醒專用定時器工作。許掉電喚醒專用定時器工作。59/75STC15F2K60S2單片機(jī)除增加了特殊功能寄存器單片機(jī)除增加了特殊功能寄存器WKTCL和和WKTCH以外,還設(shè)計了以外,還設(shè)計了2個隱藏的特殊個隱藏的特殊功能寄存器功能寄存器SL_WKTCL和和SL_WKTCH來控制內(nèi)部掉來控制內(nèi)部掉電喚醒專用定時器。電喚醒專用定時器。SL_WKTCL與與WKTCL共用同一個地址共用同一個地址

50、SL_WKTCH與與WKTCH共用同一個地址共用同一個地址SL_WKTCL和和SL_WKTCH是隱藏的,對用戶不可見。是隱藏的,對用戶不可見。用戶對用戶對WKTCL和和WKTCH寫入的內(nèi)容同時也會寫入寫入的內(nèi)容同時也會寫入SL_WKTCL和和SL_WKTCH中。當(dāng)外部中斷提前將單中。當(dāng)外部中斷提前將單片機(jī)從停機(jī)模式喚醒時,通過讀片機(jī)從停機(jī)模式喚醒時,通過讀WKTCL和和WKTCH的的內(nèi)容內(nèi)容(實(shí)際是讀實(shí)際是讀SL_WKTCL和和SL_WKTCH中的內(nèi)容中的內(nèi)容),可以讀出單片機(jī)在停機(jī)模式可以讀出單片機(jī)在停機(jī)模式/掉電模式等待的時間。掉電模式等待的時間。60/754)IDL:將其置:將其置1時,

51、單片機(jī)將進(jìn)入空閑模式(即時,單片機(jī)將進(jìn)入空閑模式(即IDLE模式)模式)在空閑模式下,僅在空閑模式下,僅CPU無時鐘,停止工作。外部中斷、無時鐘,停止工作。外部中斷、內(nèi)部低電壓檢測電路、定時器、內(nèi)部低電壓檢測電路、定時器、A/D轉(zhuǎn)換等其余模塊仍轉(zhuǎn)換等其余模塊仍正常運(yùn)行。正常運(yùn)行。而看門狗在空閑模式下是否工作取決于其自身有一個而看門狗在空閑模式下是否工作取決于其自身有一個“IDLE”模式位:模式位:IDLE_WDT(WDT_CONTR.3)。當(dāng)。當(dāng)IDLE_WDT位被設(shè)置為位被設(shè)置為“1”時,看門狗定時器在時,看門狗定時器在“空空閑模式閑模式”計數(shù),即正常工作。當(dāng)計數(shù),即正常工作。當(dāng)IDLE_W

52、DT位被清位被清“0”時,看門狗定時器在時,看門狗定時器在“空閑模式空閑模式”時不計數(shù),即停止工時不計數(shù),即停止工作。作。位號位號D7D6D5D4D3D2D1D0位名稱位名稱SMODSMOD0LVDFPOFGF1GF0PDIDL61/75在空閑模式下在空閑模式下,RAM、堆棧指針(、堆棧指針(SP)、程)、程序計數(shù)器(序計數(shù)器(PC)、程序狀態(tài)字()、程序狀態(tài)字(PSW)、累)、累加器(加器(A)等寄存器都保持原有數(shù)據(jù)。)等寄存器都保持原有數(shù)據(jù)。I/O口??诒3种臻e模式被激活前那一刻的邏輯狀態(tài)??粘种臻e模式被激活前那一刻的邏輯狀態(tài)??臻e模式下單片機(jī)的所有外圍設(shè)備都能正常運(yùn)行閑模式下單片機(jī)的

53、所有外圍設(shè)備都能正常運(yùn)行(除(除CPU無時鐘不工作外)。無時鐘不工作外)。當(dāng)任何一個中斷產(chǎn)生時,它們都可以將單片機(jī)當(dāng)任何一個中斷產(chǎn)生時,它們都可以將單片機(jī)喚醒,單片機(jī)被喚醒后,喚醒,單片機(jī)被喚醒后,CPU將繼續(xù)執(zhí)行進(jìn)入將繼續(xù)執(zhí)行進(jìn)入空閑模式語句的下一條指令??臻e模式語句的下一條指令。62/75有兩種方式可以退出空閑模式有兩種方式可以退出空閑模式外部中斷、定時器中斷、低電壓檢測中斷以及外部中斷、定時器中斷、低電壓檢測中斷以及A/D轉(zhuǎn)換中斷中的任何一個中斷的產(chǎn)生都會引轉(zhuǎn)換中斷中的任何一個中斷的產(chǎn)生都會引起起IDL/PCON.0被硬件清除,從而退出空閑模被硬件清除,從而退出空閑模式。式。外部外部RS

54、T引腳復(fù)位,將復(fù)位腳拉高,產(chǎn)生復(fù)位。引腳復(fù)位,將復(fù)位腳拉高,產(chǎn)生復(fù)位。這種拉高復(fù)位引腳來產(chǎn)生復(fù)位的信號源需要被這種拉高復(fù)位引腳來產(chǎn)生復(fù)位的信號源需要被保持保持24個時鐘加上個時鐘加上20us,才能產(chǎn)生復(fù)位,再將,才能產(chǎn)生復(fù)位,再將RST引腳拉低,結(jié)束復(fù)位,單片機(jī)從用戶程序引腳拉低,結(jié)束復(fù)位,單片機(jī)從用戶程序的的0000H處開始正常工作。處開始正常工作。63/755)GF1和和GF0是通用用戶標(biāo)志是通用用戶標(biāo)志1和和0,用戶可以任,用戶可以任意使用。意使用。6)SMOD和和SMOD0:與電源控制無關(guān),與串口:與電源控制無關(guān),與串口有關(guān),在此不作介紹。有關(guān),在此不作介紹。位號位號D7D6D5D4D

55、3D2D1D0位名稱位名稱SMODSMOD0LVDFPOFGF1GF0PDIDL64/752、省電方式的應(yīng)用、省電方式的應(yīng)用省電方式的應(yīng)用主要涉及到省電方式的進(jìn)入省電方式的應(yīng)用主要涉及到省電方式的進(jìn)入(設(shè)置(設(shè)置PCON)和省電方式的退出(喚醒)兩)和省電方式的退出(喚醒)兩個方面。下面舉例說明程序的設(shè)計方法。個方面。下面舉例說明程序的設(shè)計方法?!纠?1-2】 設(shè)計程序,利用外部中斷實(shí)現(xiàn)單片設(shè)計程序,利用外部中斷實(shí)現(xiàn)單片機(jī)從掉電模式喚醒。機(jī)從掉電模式喚醒。65/75#include “stc15.h”#include “intrins.h”sbit Begin_Led = P12; /系統(tǒng)開

56、始工作指示燈系統(tǒng)開始工作指示燈 unsigned char Is_Power_Down=0; /判斷是否進(jìn)入掉電模式標(biāo)志判斷是否進(jìn)入掉電模式標(biāo)志sbit Is_Power_Down_Led_INT0=P17;/掉電喚醒指示,在掉電喚醒指示,在INT0中中sbit Not_Power_Down_Led_INT0=P16;/非掉電喚醒指示,在非掉電喚醒指示,在INT0中中sbit Is_Power_Down_Led_INT1=P15;/掉電喚醒指示,在掉電喚醒指示,在INT1中中sbit Not_Power_Down_Led_INT1=P14;/非掉電喚醒指示,在非掉電喚醒指示,在INT1中中sb

57、it Power_Down_Wakeup_Pin_INT0 = P32; /掉電喚醒管腳,掉電喚醒管腳,INT0sbit Power_Down_Wakeup_Pin_INT1 = P33; /掉電喚醒管腳,掉電喚醒管腳,INT1sbit Normal_Work_Flashing_Led= P13; /正常工作狀態(tài)指示燈正常工作狀態(tài)指示燈void Normal_Work_Flashing(void); void INT_System_init(void); 66/75void main(void) unsigned char j=0; unsigned char wakeup_counter =

58、 0;/中斷喚醒次數(shù)變量初始為中斷喚醒次數(shù)變量初始為0 Begin_Led = 0; /系統(tǒng)開始工作指示燈系統(tǒng)開始工作指示燈 INT_System_init(); /中斷系統(tǒng)初始化中斷系統(tǒng)初始化 while(1) P2 = wakeup_counter; /中斷喚醒次數(shù)顯示中斷喚醒次數(shù)顯示,先將先將wakeup_counter取反取反 wakeup_counter+; /中斷喚醒次數(shù)修正中斷喚醒次數(shù)修正 for(j=0;j2;j+) Normal_Work_Flashing(); /系統(tǒng)正常工作指示燈系統(tǒng)正常工作指示燈 Is_Power_Down = 1; /進(jìn)入掉電模式之前,將其置進(jìn)入掉電模

59、式之前,將其置1,以供判斷,以供判斷 PCON=0 x02;/執(zhí)行完此句,單片機(jī)進(jìn)入掉電模式,外部時鐘停止振蕩執(zhí)行完此句,單片機(jī)進(jìn)入掉電模式,外部時鐘停止振蕩 _nop_(); /外部中斷喚醒后,先執(zhí)行該語句,然后進(jìn)入中斷服務(wù)程序外部中斷喚醒后,先執(zhí)行該語句,然后進(jìn)入中斷服務(wù)程序 _nop_(); /建議多加幾個空操作指令建議多加幾個空操作指令NOP,以便觀察,以便觀察 圖10-16 單片機(jī)從CH451獲得按鍵代碼的過程67/75void INT_System_init(void)/中斷系統(tǒng)初始化中斷系統(tǒng)初始化 IT0 = 0; /外部中斷外部中斷0,上升沿和下降沿都可觸發(fā)中斷,上升沿和下降沿

60、都可觸發(fā)中斷 EX0 = 1; /允許外部中斷允許外部中斷0 中斷中斷 IT1 = 1; /外部中斷外部中斷 1,下降沿觸發(fā)中斷,下降沿觸發(fā)中斷 EX1 = 1; /允許外部中斷允許外部中斷1中斷中斷 EA = 1; /開總中斷控制位開總中斷控制位 68/75void INT0_ISR(void) interrupt 0 /外部中斷外部中斷0服務(wù)程序服務(wù)程序 if(Is_Power_Down) /判斷掉電喚醒標(biāo)志判斷掉電喚醒標(biāo)志 Is_Power_Down = 0; Is_Power_Down_Led_INT0=0;/點(diǎn)亮外部中斷點(diǎn)亮外部中斷0掉電喚醒指示燈掉電喚醒指示燈 while(Powe

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論