?? main.asm
字號:
CHIP W588
INCLUDE PGM_HEAD_588.INI
EXTERN FXF_ISR_DELAY_COUNT_DEFAULT
EXTERN STOP_TM_FXF_PROC
EXTERN INIT_TM_FXF_PROC
EXTERN VC_TMV_TABLE
EXTERN VC_TMC_TABLE
.ifdef FW_PWM_TIMER_TM0
EXTERN FW_PWM_TIMER_DOWNCOUNT
PUBLIC FW_TIMER_DWONCOUNT_RET
.endif
.ifdef FW_PWM_TIMER_TM1
EXTERN FW_PWM_TIMER_DOWNCOUNT
PUBLIC FW_TIMER_DWONCOUNT_RET
.endif
.ifdef FW_PWM_TIMER_TMG0
EXTERN FW_PWM_TIMER_DOWNCOUNT
PUBLIC FW_TIMER_DWONCOUNT_RET
.endif
.ifdef FW_PWM_TIMER_TMG1
EXTERN FW_PWM_TIMER_DOWNCOUNT
PUBLIC FW_TIMER_DWONCOUNT_RET
.endif
PUBLIC QUIT_LIB_ISR
;==========================================================================
; Initial For Main.asm Macro
;--------------------------------------------------------------------------
;==========================================================================
; DECLARE VARIABLES INSIDE THIS SECTION
; EXAMPLE => VAR1 DS 3
; VAR2 DS 1
;==========================================================================
USER_RAM: SECTION
KeyTemp0 DS 1
KeyTemp1 DS 1
KeyBP0 DS 1
KeyBP1 DS 1
CodeTmp DS 1
CodeVerify DS 1
IRCode DS 1
Count38k DS 1
SleepTime DS 2 ;0.25s interrupt
KeyFlag DS 1
Run_FRIST DS 1
KeyPressedTime DS 1 ;key pressed alway count
ENDS
;=======================================================================
; WRITE PROGRAM CODES & TABLES INSIDE THIS SECTION
;==========================================================================
CODE: SECTION
FCLK EQU 4000000
SWING EQU 01H
CODE00 EQU 02H
CODE11 EQU 04H
YELLOW EQU 08H
BLUE EQU 10H
GREEN EQU 20H
UP EQU 01H
LEFT EQU 02H
DOWN EQU 04H
RIGHT EQU 08H
BIT0 EQU 01H
BIT1 EQU 02H
BIT2 EQU 04H
BIT3 EQU 08H
BIT4 EQU 10H
BIT5 EQU 20H
BIT6 EQU 40H
BIT7 EQU 80H
;==================================================
FXF15_ISR:
PHA
LDA #02H
STA !EFC1 ;CLEAR EVF OF FXF15
;User can insert program from here
PLA
RTI
;=================================================================
;PORT ISR
;==================================================================
PORT_ISR:
PHA
LDA #01H
STA !EFC0
; JSR F_GetKeyCode ;User can insert program from here
; LDX #50
; JSR IRDelay
; JSR F_SendIRCode
PLA
RTI
;***************************************************************
; INTERRUPT SERVICE ROUTINES
; EVF0 = [XX SI_INT FXF_INT TMG_INT TM1_INT TM0_INT POR_INT]
IRQ_ISR:
PHA
LDA !IEF0
AND !EVF0
BIT #10H
BNE FXF_ISR ;1S2T
LDA !IEF1
AND !EVF1
BIT #02H
BEQ PLA_RTI
JMP FXF15_ISR
PLA_RTI:
PLA
RTI
;===============================================================
; SR_NAME: FXF13_ISR ;FXF13_ISR FOR MELODY
; INPUT : MS_DATA_ADDR ;OUTPUT : SP0AT, SP0BT
;===============================================================
FXF_ISR:
LDA #10H
STA !EFC0 ;CLEAR EVF OF FXF13
.IF(WITH_MS .EQ. 1).OR.(WITH_EVO .EQ. 1)
PHX
PHY
STORE_SW_CS
LDA !BANK
PHA
LDA !IEF1 ;DISABLE FXF15
PHA
STZ !IEF1
LDA !IEF0
PHA
AND #01001110B ;KEEP TMG/0/1 INTERRUPT ONLY
STA !IEF0
CLI ;ENABLE INTERRUPT
FXF13_ISR_PROC
;-------------------------------------------------------------------------
PUBLIC QUIT_LIB_FXF_ISR
QUIT_LIB_FXF_ISR:
SEI
PLA
AND #10110001B ;RESTORE IEF0 INTERRUPT
ORA !IEF0
STA !IEF0
QUIT_LIB_FXF_ISR_CONT
QUIT_LIB_FXF_ISR_END:
PLA ;RESTORE FXF15
STA !IEF1
PLA
STA !BANK
RELOAD_SW_CS
PLY
PLX
.ENDIF
PLA
RTI
;===============================================================
; SR_NAME: TIMERG1_ISR ;
;===============================================================
TMG1_ISR:
PHA
LDA #40H
STA !EFC0 ;CLEAR EVF OF TIMERG1
;User can insert program from here
.ifdef FW_PWM_TIMER_TMG1
JMP FW_PWM_TIMER_DOWNCOUNT
FW_TIMER_DWONCOUNT_RET:
.endif
PLA
RTI
;===============================================================
; SR_NAME: TIMERG0_ISR ;
; INPUT : ISR0_NEXT_SYNTH_START ;OUTPUT : SP0CLT, SP0CT
;===============================================================
TMG0_ISR:
;LIB_VS0_ISR:
;LIB_VS0A_ISR:
PHA
LDA #08H
STA !EFC0 ;CLEAR EVF OF TIMERG
CLC
LDA SleepTime ;0.25s interrupt
ADC #1
STA SleepTime
LDA SleepTime+1
ADC #0
STA SleepTime+1
LDA #01H
STA !WDTC
.ifdef FW_PWM_TIMER_TMG0
JMP FW_PWM_TIMER_DOWNCOUNT
FW_TIMER_DWONCOUNT_RET:
.endif
.IF (WITH_VS0A .EQ. 1H)
PHX
PHY
STORE_SW_CS
LDA !BANK
PHA
.IF (WITH_VOL_REDUCE .EQ. 1)
LDA #CHANNEL_VS0A
PHA
.ENDIF
JMP_CH1_ISR_ACTION
.ENDIF
PLA
RTI
;===============================================================
; SR_NAME: TIMER0_ISR ;
; INPUT : ISR1_NEXT_SYNTH_START ;OUTPUT : SP0ALT, SP0AT
;===============================================================
TM0_ISR:
;LIB_VS1_ISR:
;LIB_VS1A_ISR:
PHA
LDA #02H
STA !EFC0 ;CLEAR EVF OF TIMERG
; INC Count38k
.ifdef FW_PWM_TIMER_TM0
JMP FW_PWM_TIMER_DOWNCOUNT
FW_TIMER_DWONCOUNT_RET:
.endif
.IF (WITH_VS1A .EQ. 1H)
PHX
PHY
STORE_SW_CS
LDA !BANK
PHA
.IF (WITH_VOL_REDUCE .EQ. 1)
LDA #CHANNEL_VS1A
PHA
.ENDIF
JMP_CH2_ISR_ACTION
.ENDIF
PLA
RTI
;===============================================================
; SR_NAME: TIMER2_ISR ;
; INPUT : ISR2_NEXT_SYNTH_START ;OUTPUT : SP0BLT, SP0BT
;===============================================================
TM1_ISR:
;LIB_VS2_ISR:
;LIB_VS2A_ISR:
PHA
LDA #04H
STA !EFC0 ;CLEAR EVF OF TIMER1
INC Count38k
.ifdef FW_PWM_TIMER_TM1
JMP FW_PWM_TIMER_DOWNCOUNT
FW_TIMER_DWONCOUNT_RET:
.endif
.IF (WITH_VS2A .EQ. 1H)
PHX
PHY
STORE_SW_CS
LDA !BANK
PHA
.IF (WITH_VOL_REDUCE .EQ. 1)
LDA #CHANNEL_VS2A
PHA
.ENDIF
JMP_CH3_ISR_ACTION
.ENDIF
PLA
RTI
;===============================================================
; Quit Libary ISR Lable
;===============================================================
QUIT_LIB_ISR:
SP_VOLUME_REDUCE
PLA
STA !BANK
RELOAD_SW_CS
PLY
PLX
PLA
RTI
;===============================================
; Main program start here after resetting
;===============================================
MAIN_START:
SYSTEM_INIT_PROCEDURE_W588 ;SYSTEM INITIALIZATION PROCEDURE
SET_STACK_POINTER_TO STACK_END ;USER CAN CHANGE THE VALUE
CLEAR_RAM_FROM_00H_TO RAM_END ;USER CAN CHANGE THE VALUE
CLI
SPECIAL_REGISTERS_INIT
;---------------------------SPEECH EQUATION ----------------------------------
; PLAY MANSPEAK_MDM<CH=1/2/3,VOL=8,SR=8000>
;MANSPEAK_MDM is speech file name with MDPCM format
;CH is speech channel assignment
;CH: 1->TIMER0 2:TIMER1 3:TIMERG0 (no tone)
;CH: 1->TIMERG0 2:TIMER0 3:TIMER1 (has tone)
;VOL=4 is volume level(0~8)
;SR=8000 is sampling rate,
;if user assign '0' then use the default S.R. in speech file
;---------------------------MELODY EQUATION----------------------------------
; PLAY MARCH<TK=MS,VOL=8,TPO=120>
;March is melody file name with MIDI format 0
;MS is melody channel assignment
;VOL=5 is volume level(0~8)
;TPO=120 is tempo value
;if user assign '0' then use the default tempo in MIDI file
;*****************************************************
;--------------------Remarked-------------------------
;*****************************************************
;Created 2008/11/21 by junson
;1. MCU: W588L035
; CPUCLK: 4MHZ
; LVREN: Enable (2.0V+-0.2V)
; WDTEN: Enable
;2.Encode: 0-----1T:4T
; 1-----4T:1T
; 1T=605us=23/38khz
;3.IRCode Send Sequence:
; 1th 2th 3th 4th 5th 6th 7th 8th 9th 10th 11th
; | | | | | | | | | | |
; GREEN BLUE YELLOW CODE1 CODE0 SWING RIGHT DOWN LEFT UP END
;
;
;
;Updated 2008/11/22 by junson
;1. Change IR Encode
; 0-----1T:2T
; 1-----1T:1T
; 1T=605us=23/38khz
;2. add StartBit,VeritfyBit.
;
;
;Updated 2008/11/27 by junson
;1. add sleep function if without key change 2 minute
;
;
;Updated 2008/11/28 by junson
;1. add Idle function if no key is pressed
; this function is not requirement in Customer SPCE
; but add this function can achieve a longer battery life.
;2. if any button key alawy been pressed,send IRCode every 150 msec,
; and if this key have been pressed more than 2 minute,go to sleep mode,
; after sleep,unit would be wake up by pressed any other key changed
;
;3. changed IO resister pull High to 830K ohm
;
;
;4. this program can run between W588D and W588L with 4Mhz.
; W588D(ROSC=620kohm) ,W588L(ROSC=560kohm)
;Updated 2008/12/15 by junson
;1. add 3 Bytes Verify function
;2. rechanged resister of IO port pull High to 220K ohm
;3. CODE0,CODE1被一直按住,不會一直發,只會在按下或者彈起時才發紅外。
;3.IRCode Send Sequence:
; 1th 2th 3th 4th 5th 6th 7th 8th 9th 10th 11th 12th 13th 14th
; | | | | | | | | | | | | | | | |
; GREEN BLUE YELLOW CODE1 CODE0 SWING RIGHT DOWN LEFT UP Verify1 Verify2 Verify3 END
;Updated 2008/12/18 by junson
;1. 增加swing鍵一直被按下不停發射的功能。
;2. 增加每一幀數據之間的空閑時間:從10ms增加到20ms.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -