Transcript 4-16 HALT
4-16 HALT HT66F50 1 HALT指令 進入省電模式 1. 2. 3. 4. 5. 關閉系統時脈,若啟用WDT 將繼續WDT時脈(LXT, LIRC) 內部資料RAM不變 清除WDT,並重新開始計數 所有I/O維持原來狀態(若要省電周邊元件要關閉) 清除TO旗標, 並設定PDF=1 重開機 PDF=0 省電喚醒 PDF=1 2 3 由省電模式回復 1. 2. 3. 4. 外部硬體重置 WDT計時溢位重置 中斷喚醒 PA 1-> 0位準變化 4 SYSMOD 控制暫存器 CKS2 Bit 7 CKS1 CKS0 FSTEN LTO 6 5 4 3 HTO 2 IDLEN 1 HLCLK 0 省電模式: IDLEN=0 為 SLEEP MODE IDLEN=1 為 IDLE MODE SLEEP MODE, 系統時脈關閉 5 4-16 HALT ;PROGRAM:4-15.ASM (4-15.PJT) 2009.1102 ;FUNCTION:HALT DEMO PROGRAM By Steven ; NOTE :SLEEP 0 MODE ; PB0: RESET PIN, USE IC RESET PIN AS RESB ; 硬體重置 外部中斷INT0 PA.0 Wake-up 喚醒 CPU #INCLUDE HT66F50.INC ;========================================================= MY_DATA .SECTION 'DATA‘ ;==DATA SECTION== DEL1 DB ? ;DELAY LOOP COUNT1 DEL2 DB ? ;DELAY LOOP COUNT2 DEL3 DB ? ;DELAY LOOP COUNT3 COUNT DB ? SLP_COUNT DB ? ;============================================================ MY_CODE .SECTION AT 0 'CODE’ ;==PROGRAM SECTION== ORG 00H ;HT66FX0 RESET VECTOR JMP INIT ORG 04H ;EXT0. INTERRUPT JMP ISR_EXTINT0 6 INIT: CLR MOV MOV MOV CLR SET SET SET SET SET MOV MOV CLR SET SNZ JMP CLR JMP ACERL A,00001000B CP0C,A CP1C,A SEG_PORTC PB_PORTC PB_PULL PB_WAKE PAC.3 PAPU.3 A,00000010B INTEG,A IDLEN EMI PDF MAIN WDT LOOP ;Digital I/O Pin is assigned as a I/O ;Disable Comparator 0 Function ;Disable Comparator 1 Function ;CONFIG LED_PORT AS OUTPUT ;PB port as input ;PB as pull up ;Enable PB port wake up ;EXT0 as input ;EXT0 pull up ;IDLEN=0 ;RESET from DOWN ;NO ;YES, CLEAR PDF ;display last digit 7 MAIN: LOOP: MOV A, OFFSET TAB_7_SEG MOV TBLP,A MOV A,10 MOV COUNT,A TABRDL SEG_PORT MOV A, 50 MOV SLP_COUNT,A ;50*01=5 sec ;initial sleep count WAIT_KEY: MOV A,10 CALL DELAY SNZ PB_PORT JMP LOOP_1 SDZ SLP_COUNT JMP WAIT_KEY CLR SEG_PORT CLR INT0F SET INT0E HALT CLR INT0E ;delay 0.1 sec ;key pressed? ;yes, jmp to loop_1 ;SLP_COUNT over?(25*0.4=10sec) ;NO ;disable EXT0 INT ;enable external int 0 ;GO SLEEP ;disable external int 0 8 LOOP_1: INC SDZ JMP JMP ISR_EXTINT0: SET SHIFT: MOV CALL RL SNZ JMP CLR RETI TBLP COUNT LOOP MAIN SEG_PORT.0 A,40 DELAY SEG_PORT SEG_PORT.6 SHIFT INT0F ;RESTART ;turn SEG_PORT.0 LED ON ; SEG_PORT.6=1? ;NO SHIFT again ;avoid bouncing ;yes return 9 DELAY PROC MOV DEL1,A ;SET DELAY FACTOR DEL_1: MOV A,30 MOV DEL2,A ;SET DEL2 COUNTER DEL_2: MOV A,110 MOV DEL3,A ;SET DEL3 COUNTER DEL_3: SDZ DEL3 ;DEL3 DOWN COUNT JMP DEL_3 SDZ DEL2 ;DEL2 DOWN COUNT JMP DEL_2 SDZ DEL1 ;DEL1 DOWN COUNT JMP DEL_1 CLR WDT ;MASK THIS LINE TO SEE DIFFERENCE RET DELAY ENDP ORG LASTPAGE TAB_7_SEG: DC 03Fh,006h,05Bh,04Fh,066h ;7 SEG CODE FOR COMMOM CATHOD LED DC 06Dh,07Dh,007h,07Fh,067h ;CONNECT BIT 0-7 FOR SEGMENT A-H 10 END