低功耗方式Sleep,通過執(zhí)行一條睡眠指令就進入低功耗方式。如果使能,MDT將被清0,但仍保持運行。TO(STUATUS<4>)位被置1,PD位(STUATUS<3>)被清0,振蕩器驅(qū)動器被停止。所有I/O端口保持Sleep指令執(zhí)行前它們所有的狀態(tài)(驅(qū)動高、驅(qū)動低或高阻)。
在這種方式時為使電流消耗最低,把所有的I/O引腳放在VDD或VSS電平上,以保證外部電路從I/O引腳、低功耗的A/D、不使能的外部時鐘中拉出電流。為使電流消耗最低,TOCK1輸入電平應該在VDD或VSS上。
1.睡眠喚醒
單片機通過下列事件之一喚醒睡眠:
· 在MCLR引腳上的外部復位輸入;
· 監(jiān)視定時器喚醒(如果WDT使能);
· INT引腳中斷、RB端口變化中斷和一些外部中斷。
以下是能將單片機從睡眠中喚醒的外部中斷:
· PSP讀或?qū)懀?/p>
· TMR1中斷,TIMERI必須作為一個異步計數(shù)器運行;
· cap捕捉方式中斷;
· 特別事件觸發(fā)器(TIMERI使用外部時鐘異步方式,CCPI是用比較器模式);
· SSP(START/STOP)位探測中斷;
· SSP用主從模式(SP2/12C)發(fā)送和接收;
· USARTRX或TX(同步從模式);
· A/D轉(zhuǎn)換(當A/D時鐘源是RC時);
· E2PROM寫操作完成。
因為在睡眠期間,無片內(nèi)時針出現(xiàn),所以其他外部事件不能產(chǎn)生中斷。當執(zhí)行Sleep指令時,下一個指令(PC+1)被預取,對于通過中斷事件喚醒的單片機,相應的中斷使能位置1(使能),喚醒是不管GIE位的狀態(tài)的。
如果GIE位清0(不使能),單片機在Sleep指令之后連續(xù)執(zhí)行指令。如果GIE位是置1的使能,單片機在Sleep指令之后執(zhí)行指令,然后分支到中斷地址(0004h)。如不期望執(zhí)行緊跟在Sleep指令之后的指令,用戶應該在Sleep指令之后加一個NOP指令。
當全體中斷不能維護任何中斷或者已包括它的中斷使能位和中斷標志位是置1的時候,將發(fā)生下面之一。
①如果在Sleep指令執(zhí)行之前發(fā)生中斷,Sleep指令將作為一個NOP完成,因此WDT和WDT后分頻器將不被清0,TD位將不會置1,PD位將不會清0。
②如果在Sleep指令執(zhí)行期間或之后發(fā)生中斷,單片機將立即喚醒睡眠,在喚醒之前Sleep指令將完全執(zhí)行。因此,WDT和WDT后分頻器將被清0,TD位將被置1,PD位將被清0。
即使在執(zhí)行Sleep指令之前標志位被檢查,在Sleep指令完成之前標志位變成1也是可能的。為了決定Sleep指令是否執(zhí)行,應該檢測PD位,如果PD位置1,Sleep指令將作為NOP執(zhí)行。為保證WDT清0,在Sleep指令之前應該執(zhí)行CLRWDT指令。
內(nèi)部電路調(diào)試器:當設置字里的DEBUG位被編程為0時,內(nèi)部電路調(diào)試器功能使能。當使用MPLAB時,這種功能允許簡單的功能調(diào)試,當微處理機有這種使能功能時,其中一些資源通常是不可使用的。
為了使用單片機的內(nèi)部電路調(diào)試器功能,設計必須實現(xiàn)內(nèi)部電路串行編程以連接MCLR/VPP、VDD、GND、R87和RB6。這樣將內(nèi)部電路調(diào)試器和微芯片或其他公司的開發(fā)工具連接。
程序驗證/代碼保護:如果代碼保護位不被編程,片內(nèi)程序存儲器可以被讀出以便驗證。
識別碼D存儲單元:4個存儲器單元被設定為ID存儲單元,在這里用戶可以儲存檢查其他代碼識別數(shù)。這些存儲單元在正常執(zhí)行中是不可訪問的,但在編程/修改期間是可讀寫的,推薦使用ID存儲單元的低4位。
內(nèi)部電路串行編程:PlC16P877微處理器在應用電路結(jié)束時能夠被串行編程??捎脙筛€作為時鐘線和數(shù)據(jù)線,其他線用作電源、接地和編程電壓線來簡單地完成。
當使用ICSP時,如果執(zhí)行一個大量的擦除,部件必須用4.5~5.5V電壓供電。這包括從一個打開狀態(tài)到關閉狀態(tài)兩個的代碼保護的重新編程。對于ICSP的所有其他情況,部件可以在通常操作電壓下編程。這意味著振蕩器值,獨一無二的用戶代碼或用戶碼可以被重新編程或增加12。
IS:低電壓ICSP編程.
設置LVP位使能低電壓ICSP編程。這種模式允許微處理機在操作電壓范圍內(nèi)使用一個vDD通過ICSP編程實現(xiàn)。這意味著Vpp不必帶到VIHH,但在標準操作電壓時能夠替換。在這種模式里,RB3rPGM引腳被制定為編程功能和停止 個普通的I/O引腳。在編程期間,VDD應用到MCLR引腳。為了進入編程模式,必須應用RB3/PGM使LVP位置1。出廠時,LVP位的缺省值是1。
如果低電壓編程模式不能使,那么LVP位不能編程到0,RB3/PGM變成一個數(shù)字I/O引腳,然而,當在MCLP上用VIHH進入編程時,LVP位只可以被編程,當MCLR上使用高電壓時,LVP位只可以被置1。
應該注意,一旦LVP位編程到0,只有高電壓編程模式可用于對單片機編程,
當使用低電壓ICSP時,如果執(zhí)行一個大量的擦除,部件必須用4.5~5.5V電壓供電。這包括從一個打開狀態(tài)到關閉狀態(tài)的兩個代碼保護的重新編程。對于ICSP的所有其他情況,部件可以在通常操作電壓下被編程,這意味著振蕩器值不變。用戶代碼或用戶碼叮以被重新編程或增加,
SED152OFOA液晶顯示驅(qū)動器有13條指令,下面以M680O系列MPU按口為例(RES=1),總結(jié)這些指令,如表所示。
表 SED1520F0A的指令集
下面以圖所示的接口電路為例說明液晶顯示分區(qū)情況.E1、E2是液晶顯示的控制引腳,分別控制不同區(qū)域,下面只對E1控制區(qū)域的程序進行分析.
2 程序設計
在系統(tǒng)程序的初始化部分,應對程序中用到的寄存器和臨時變量作如下說明。
(1)定義程序中需要的全局變量。
(2)系統(tǒng)各個口的輸入輸出狀態(tài)初始化子程序。
(3)讀液晶顯示器狀態(tài)子程序。
(4)對液晶顯示器發(fā)送指令子程序(指令保存在TRANS寄存器中)。
(5)對液晶顯示器寫數(shù)據(jù)了程序,其中數(shù)據(jù)保存在WRIte寄存器中。
(6)開E1顯示子程序
(7)E1邊清屏子程序。
(8)關E1顯示子程序
有了以上的通用子程序,就可以構(gòu)造出各種顯示程序,如字符、漢宇、曲線等。執(zhí)行這些程序前,必須對液晶顯; J動進行初始化。初始化的順序為:關顯示→正常顯示驅(qū)動設置→占空比設置→復位→ADC選擇→清屏-開顯示,程序如下。