⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 9454.src

📁 基于s3c9454茶具泡茶定时器程序。S3F9454,FOSC=3.2MHZ .include "s3c9454.reg
💻 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 + -