?? 9454.src
字號:
;-----------------------------------------------------
;茶具泡茶定時器
;S3F9454,FOSC=3.2MHZ
.include "s3c9454.reg"
;-----------------------------------------------------
;以下為本程序所用變量定義
RUNFLAG EQU 00H ;運行標志寄存器
TMR_1S EQU 01H
TMR_1M EQU 02H
AUTO_TIMER EQU 03H
TMR_LOOP EQU 04H
TMR_TIME EQU 05H
;-----------------------------------------------------
;P0.0--P0.7-----保留未用
;P1.0-----------定時按鍵,輸入
;P1.1-----------保留未用
;P2.0-----------蜂鳴器驅動,輸出
;P2.1-----------定時1M指示,1-點亮,0-熄滅
;P2.1-----------定時2M指示,1-點亮,0-熄滅
;P2.1-----------定時3M指示,1-點亮,0-熄滅
;P2.1-----------定時4M指示,1-點亮,0-熄滅
;其它未用
;-----------------------------------------------------
;RUNFLAG.0------key_down,1-有鍵按下,0-無鍵按下
;RUNFLAG.1------定時標志,1-已設定定時,0-未定時
;-----------------------------------------------------
;-------<<interrupt vector address>>
ORG 0000H ;S3C9454 has only one interrupt vector
VECTOR 00H,INT_9454
;-------smart option
ORG 003CH
DB 00H ;003CH,must be initialized to 0
DB 00H ;003DH,must be initialized to 0
DB 0E7H ;003EH,enable LVR(2.3V)
DB 03h
;-------<<initialize system and peripheral>>
ORG 0100H
RESET: DI ;disable interrupt
LD BTCON,#10100011B ;Watch-dog disable
LD CLKCON,#00011000B ;selet non-divided CPU clock
LD SP,#0C0H ;Stack pointer must be set as 0C0H
LD PWMCON,#10011100B ;set PWM input clock=Fosc/2=0.625us
;disable PWM overlow interrupt
LD PWMDATA,#00H
LD P1CON,#00000101B ;set P1.0,P1.1 is as input with pull-up
LD P2CONH,#00011010B
LD P2CONL,#10101010B ;set P2.0-P2.5 is as push-pull output
LD P2,#00H ;turn off all output
LD P0CONH,#11010101B
LD P0CONL,#00H ;set P0.0 is as interrup input(falling)
;set P0.1,P0.2,P0.3,P0.4,P0.5 is as input
;set P0.6 is as PWM output
;set P0.7 is as A/D input
LD P0PND,#00H ;disable P0.1,P0.0 interrrupt
LD T0DATA,#0FAH
LD T0CON,#01001010B ;set T0 input clock=Fosc/256
;enable T0 interrrupt
;----------------------------------------------
MAIN:
EI
CLR TMR_1S
CLR TMR_1M
AND RUNFLAG,#01H
LD TMR_LOOP,#00H
LD P2,#00H
LD R0,#10H
CALL BEEP
WAIT_KEY:
LD BTCON,#02H
TM P1,#01H ;p1.0低電平有效即定時鍵被按下。
JR Z,CHECK_KEY
AND RUNFLAG,#0FEH ;if no key pressed,clear key_down flag
TM RUNFLAG,#02H ;check tmr flag
JR Z,WAIT_KEY
JR TMR_CHECK
CHECK_KEY:
TM RUNFLAG,#01H ;check key_down flag
JR NZ,WAIT_KEY
DI
;如果定時鍵按下,則設定定時
AND P2,#00011110B
TM RUNFLAG,#02H ;check timer flag
JR NZ,LOOP_TMR
FIRST_TIMER:
;if first start timer
LD P2,#10H
LD TMR_LOOP,#01H
JR START_TIMER
LOOP_TMR:
RR P2
INC TMR_LOOP
CP TMR_LOOP,#04H
JR UGT,FIRST_TIMER
START_TIMER:
OR RUNFLAG,#03H ;set key_down=1,tmr=1
CLR TMR_1S
CLR TMR_1M
CLR TMR_TIME
LD R0,#03H
CALL BEEP
TMR_CHECK:
EI
LD R15,#0FFH
LD R14,#0FFH
WAITA:
DEC R14
JR NZ,WAITA
LD R14,#64H
DEC R15
JR NZ,WAITA
CP TMR_TIME,TMR_LOOP
JR ULT,WAIT_KEY
JR MAIN
;--------------------------------------------------------------------
BEEP:
LD BTCON,#10100011B ;Watch-dog disable
DI
NEXT_BEEP:
LD R6,#0FAH
ONE_BEEP:
LD R5,#27H
XOR P2,#01H
_LOOP:
DEC R5
JR NZ,_LOOP
DEC R6
JR NZ,ONE_BEEP
DEC R0
JR NZ,NEXT_BEEP
LD BTCON,#02H
EI
RET
;------------------------------------------------------------
;interrupt service routine
;TMR0 每20MS 中斷一次
INT_9454:
LD BTCON,#02H ;Clear watch-dog
AND T0CON,#11110110B ;clear t0 interrupt pending
;clear T0CON.3
INC TMR_1S ;inc 1s counter
CP TMR_1S,#32H
JR ULT,END_INT ;if counter 1s no comed,back
CLR TMR_1S
INC TMR_1M ;inc 1minutes timer
CP TMR_1M,#3CH
JR ULT,END_INT
CLR TMR_1M
INC TMR_TIME
END_INT:
IRET
;-----------------------------------------------
.END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -