在有些應(yīng)用場合下,,CPU只需間斷性工作或?qū)ν獠渴录鞒鎏幚恚綍r處于待機狀態(tài),。PIC16C5X單片機有一種節(jié)能方式,,睡眠(SLEEP)方式,在這種狀態(tài)中,,振蕩驅(qū)動器停止工作,, I/O口保持執(zhí)行SLEEP指令前的狀態(tài),從而大大降低系統(tǒng)功耗,。由于PIC16C5X單片機無中斷功能,,要退出睡眠方式,,只有兩種方法:(1)“看門狗”(WDT)溢出。
(2)在復(fù)位腳加低電平,,而使芯片復(fù)位,。本文采用第二種方法。在圖1給出的例子中,,PIC16C5X平時處于睡眠態(tài),,當任意一鍵按下時,將它從睡眠狀態(tài)中喚醒,,進行鍵盤處理,。為便于說明,在本例中,,SW1按下時,,點亮,如下圖所示
綠燈;當SW2按下時,,紅燈亮,。讀者可按實際需要編寫處理程序,參見圖2,。
在進入睡眠態(tài)前,,將鍵掃描輸出線SCAN1和SCAN2置為低電平。這樣,,當進入睡眠狀后,,無鍵按下時,電容C充電充分,,使PIC16C5X單片機復(fù)位腳保持著高電平,。一旦有鍵按下,C通過電阻R2或R3放電,,使C上的電壓快速下降(大約1ms),,從而將復(fù)位腳拉為低電平,迫使PIC16C5X退出睡眠態(tài)而進入復(fù)位,。復(fù)位時,,SCAN1和SCAN2自動從輸出態(tài)變?yōu)檩斎霊B(tài)(高阻態(tài)),C的放電回路被阻斷,,VCC經(jīng)電阻R1對C充電至高電平。需注意的是,,RC值要選擇恰當,,使充放電周期小于PIC16C5X的復(fù)位時間(大約18ms)。更遠遠小于鍵按下的最小時間(大約50--100ms),。復(fù)位結(jié)束后,,在程序中,每隔20ms將SCAN1和SCAN2置低電平一次以采樣鍵值。為避免電容放電時間過長,,將拉低,,再次造成復(fù)位,每次掃描即SCAN1或SCAN2為低電平的時間大約為10us,。當鍵處理程序完成后,,程序?qū)︽I盤循環(huán)掃描直至鍵釋放。然后將SCAN1和SCAN2輸出置成低電平,,并重新進入睡眠狀態(tài),。R4-R8主要用于防止C放電而可能對芯片造成的傷害。工作時序見圖3所示,。