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