📄 gainewxiankong.asm
字号:
;*******************************************************************************
; FILENAME : 2501A_TEMPLATE.ASM for S8KE ICE
; AUTHOR : SONiX
; PURPOSE : Template Code for SN8P2501A
; REVISION : 06/05/2004 V1.0 First issue
; : 07/07/2004 V1.1 Remove ICE_MODE definition and some macro
; for SN8ICE 2K
;*******************************************************************************
;* (c) Copyright 2004, SONiX TECHNOLOGY CO., LTD.
;*******************************************************************************
CHIP SN8P2501b ; Select the CHIP
//{{SONIX_CODE_OPTION
.Code_Option Noise_Filter Enable
.Code_Option Watch_Dog Enable ; Normal mode: Enable Watchdog Green and Sleep mode: Stop Watchdog
.Code_Option Reset_Pin Reset
.Code_Option High_Clk 4M_X'tal ; Crystal/Resonator: 2Mhz~10Mhz
.Code_Option Fcpu #2 ; Fcpu = Fosc/4
.Code_Option Security Enable
.Code_Option LVD LVD_L ; 2.0V Reset
; .Code_Option 16M_IHRC #6 ; 16M_IHRC = Normal
//}}SONIX_CODE_OPTION
;-------------------------------------------------------------------------------
; Include Files
;-------------------------------------------------------------------------------
.nolist ; do not list the macro file
INCLUDESTD MACRO1.H
INCLUDESTD MACRO2.H
INCLUDESTD MACRO3.H
.list ; Enable the listing function
;-------------------------------------------------------------------------------
; Constants Definition
;-------------------------------------------------------------------------------
; ONE EQU 1
;-------------------------------------------------------------------------------
; Variables Definition
;-------------------------------------------------------------------------------
.DATA
org 0h ;Data section start from RAM address 0
Wk00 EQU 00H ;Temporary buffer for main loop
Iwk00 EQU 01H ;Temporary buffer for ISR
AccBuf EQU 02H ;Accumulater buffer
PflagBuf EQU 03H ;PFLAG buffer
t1 EQU 04H
VAR1 EQU 05H
VAR2 EQU 06H
VAR3 EQU 07H
VAR4 EQU 08H
MOVE_TIME EQU 09H
RRCDATA EQU 0AH
DEVAR1 EQU 0BH
DEVAR2 EQU 0CH
DATAINDEX EQU 0DH
MOVETEMP EQU 0EH
keyvalue equ 0fh
DOWNTIME EQU 10H
UPTIME EQU 11H
voluplim equ 12h
voldownlim equ 13h
movetime equ 14h
sdata equ 15h
KEYFLAG EQU 16H
;-------------------------------------------------------------------------------
; Bit Variables Definition
;-------------------------------------------------------------------------------
Wk00B0 EQU Wk00.0 ;Bit 0 of Wk00
Iwk00B1 EQU Iwk00.1 ;Bit 1 of Iwk00
FLAGC EQU PFLAG.2
FLAGZ EQU PFLAG.0
RX equ fp22
TX EQU FP21
MUTEPIN EQU FP20
lock equ fp54
updown equ fp24
clock equ fp23
;-------------------------------------------------------------------------------
; Code section
;-------------------------------------------------------------------------------
.CODE
ORG 0 ;Code section start
jmp Reset ;Reset vector
;Address 4 to 7 are reserved
ORG 8
jmp Isr ;Interrupt vector
ORG 10h
;-------------------------------------------------------------------------------
; Program reset section
;-------------------------------------------------------------------------------
Reset:
mov A,#07Fh ;Initial stack pointer and
b0mov STKP,A ;disable global interrupt
clr PFLAG ;pflag = x,x,x,x,x,c,dc,z
mov A,#01h ;Initial system mode
b0mov OSCM,A
mov A, #0x5A
b0mov WDTR, A ;Clear watchdog timer
call ClrRAM ;Clear RAM
call SysInit ;System initial
b0bset FGIE ;Enable global interrupt
mov a,#10
mov voluplim,a
mov a,#10
mov voldownlim,a
mov a,#250
mov movetime,a
volmiusmius:
call VOLMIUS
call delay64
decms movetime
jmp volmiusmius
mov a,#250
mov movetime,a
volmiusmius_1:
call VOLMIUS
call delay64
decms movetime
jmp volmiusmius_1
mov a,#250
mov movetime,a
volmiusmius_2:
call VOLMIUS
call delay64
decms movetime
jmp volmiusmius_2
mov a,#250
mov movetime,a
volmiusmius_3:
call VOLMIUS
call delay64
decms movetime
jmp volmiusmius_3
call voladd
call voladd
call voladd
;-------------------------------------------------------------------------------
; Main routine
SB_1:
B0Bclr FP10M
MOV A,#5AH
B0MOV WDTR,A ; CLEAR WDT
call delay10ms
B0BTS1 FP54
JMP SB_1
B0Bset FP10M
call delay10ms
B0BSET FP10
call delay10ms
b0bts1 fp25
jmp keyadvance
b0bts1 FP00
JMP keyvolmius
call delay10ms
B0BCLR FP10
call delay10ms
B0BTS1 FP25
JMP keyvoladd
B0BTS1 FP00
JMP keyback
B0BCLR FP10M
call delay10ms
B0BTS0 FP10
JMP SB_1
JMP keyplay
;-----------------------------------
keyvolmius:
call delay1ms
b0bts0 fp00
jmp sb_1
jmp volmiuskey
keyadvance: ; rew
call delay1ms
b0bts1 fp25
jmp advance
jmp SB_1
keyplay:
call delay1ms
b0bts0 fp10
jmp sb_1
jmp playkey
keyvoladd:
B0BSET FP10
CALL DELAY50
CALL DELAY50
B0BTS1 FP25
JMP advance
jmp voladdkey
keyback:
B0BSET FP10
CALL DELAY50
CALL DELAY50
b0bts1 fp00
jmp volmiuskey
jmp back
;===================================
playkey:
nop
call leadzero
mov a,#01h
mov sdata,a
call SENDDATRA
mov a,#0fah
mov sdata,a
call SENDDATRA
call delay12ms
B0BTS1 FP10
jmp playkey
call buttonup
jmp sb_1
back:
nop
call leadzero
mov a,#10h
mov sdata,a
call SENDDATRA
mov a,#0ebh
mov sdata,a
call SENDDATRA
call delay12ms
B0BCLR FP10
CALL DELAY50
CALL DELAY50
B0BTS1 FP00
jmp back
call buttonup
jmp sb_1
;--------------------------------------
advance:
nop
call leadzero
mov a,#08h
mov sdata,a
call SENDDATRA
mov a,#0f3h
mov sdata,a
call SENDDATRA
call delay12ms
b0bts1 fp25
jmp advance
call buttonup
jmp sb_1
;----------------------------------
volmiuskey:
nop
call leadzero
mov a,#04h
mov sdata,a
call SENDDATRA
mov a,#0f7h
mov sdata,a
call SENDDATRA
call VOLDELAY12MS
BTS1 DOWNTIME.0
jmp downkey_1
jmp downkey_2
downkey_1:
mov a,voldownlim
cmprs a,#13
jmp downkey_1_1
jmp downkey_2
downkey_1_1:
mov a,#1
add voldownlim,a
mov a,voluplim
sub a,#1
mov voluplim,a
CALL VOLMIUS
downkey_2:
MOV A,#1
ADD DOWNTIME,A
b0bts1 fp00
jmp volmiuskey
CLR DOWNTIME
call buttonup
jmp sb_1
;-------------------------------------
voladdkey:
nop
call leadzero
mov a,#02h
mov sdata,a
call SENDDATRA
mov a,#0f9h
mov sdata,a
call SENDDATRA
call VOLDELAY12MS
BTS1 upTIME.0
jmp upkey_1
jmp upkey_2
upkey_1:
mov a,voluplim
cmprs a,#16
jmp upkey_1_1
jmp upkey_2
upkey_1_1:
mov a,#1
add voluplim,a
mov a,voldownlim
sub a,#1
mov voldownlim,a
CALL VOLadd
upkey_2:
MOV A,#1
ADD UPTIME,A
b0bclr fp10
call delay50
call delay50
b0bts1 fp25
JMP voladdkey
CLR UPTIME
call buttonup
jmp sb_1
;---------------------------------------------
dly:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
ret
;-------------------------------------------------
leadzero:
mov a,#0ffh
mov sdata,a
call SENDDATRA
mov a,#55h
mov sdata,a
call SENDDATRA
mov a,#03h
mov sdata,a
call SENDDATRA
mov a,#02h
mov sdata,a
call SENDDATRA
mov a,#00h
mov sdata,a
call SENDDATRA
ret
;-----------------------------------------------------------
buttonup:
mov a,#0ffh
mov sdata,a
call SENDDATRA
mov a,#55h
mov sdata,a
call SENDDATRA
mov a,#03h
mov sdata,a
call SENDDATRA
mov a,#02h
mov sdata,a
call SENDDATRA
mov a,#00h
mov sdata,a
call SENDDATRA
mov a,#00h
mov sdata,a
call SENDDATRA
mov a,#0fbh
mov sdata,a
call SENDDATRA
ret
;--------------------------------------------
SENDDATRA:
b0bset tx
call delay64
b0bclr tx
call delay50
mov a,#8
mov movetime,a
nop
nop
SENDDATRA_1:
rrcm sdata
bts0 flagc
jmp SENDDATRA_2
b0bclr tx
jmp SENDDATRA_3
SENDDATRA_2:
b0bset tx
SENDDATRA_3:
call delay50
decms movetime
jmp SENDDATRA_1
ret
;----------------------------------------------------
voladd:
b0bset updown
call delay50
b0bset clock
call delay50
b0bclr clock
call delay50
ret
volmius:
b0bclr updown
call delay50
b0bset clock
call delay50
b0bclr clock
call delay50
ret
;--------------------------------
DELAY12MS:
mov a,#20
mov devar2,a
DELAY12MS_1:
CALL delay100
decms devar2
jmp DELAY12MS_1
ret
;-----------------------------------
VOLDELAY12MS:
mov a,#150
mov devar2,a
VOLDELAY12MS_1:
CALL delay100
decms devar2
jmp VOLDELAY12MS_1
ret
;-------------------------------------
delay50:
MOV A,#5AH
B0MOV WDTR,A ; CLEAR WDT
mov a,#8 ; 50us
mov devar1,a
nop
nop
nop
delay53_1:
decms devar1
jmp delay53_1
ret
;----------------------------
delay64:
MOV A,#5AH
B0MOV WDTR,A ; CLEAR WDT
mov a,#11 ; 64 us
mov devar1,a
nop
delay64_1:
decms devar1
jmp delay64_1
ret
;---------------------------------------------------
delay1ms:
mov a,#10
mov devar2,a
delay1ms_1:
CALL delay50
decms devar2
jmp delay1ms_1
ret
delay10ms:
mov a,#100
mov devar2,a
delay10ms_1:
CALL delay50
decms devar2
jmp delay10ms_1
ret
delay100:
MOV A,#5AH
B0MOV WDTR,A ; CLEAR WDT
mov a,#250 ; 64 us
mov devar1,a
delay100_1:
NOP
NOP
decms devar1
jmp delay100_1
ret
;==========================================================================
; Isr (Interrupt Service Routine)
; Arguments :
; Returns :
; Reg Change:
;-------------------------------------------------------------------------------
Isr:
RETI
;-------------------------------------------------------------------------------
; SysInit
; System initial to define Register, RAM, I/O, Timer......
;-------------------------------------------------------------------------------
; 0 input, 1 output
SysInit:
b0bclr fp22m ;rx input
b0bset fp21m ;tx output
b0bset fp20m ;mute
b0bclr fp54m ;lock
b0bset fp23m ;lclock 4811 clock
b0bset fp24m ;updown 4811
b0bCLR fp25m ;keyout
b0bclr fp00m
b0bSET fp10m ; 先给"C" 置OUTPUT
MOV A,#0FFH
B0MOV P0UR,A
B0MOV P2UR,A
b0mov p1ur,A
b0mov p5ur,A
CLR INTEN
CLR INTRQ
clr tc0m
b0bset fp21
ret
;-------------------------------------------------------------------------------
; ClrRAM
; Use index @YZ to clear RAM (00h~2Fh)
;-------------------------------------------------------------------------------
ClrRAM:
clr Y
mov A, #0x2f
b0mov Z, A ;Set @YZ address from 2fh
ClrRAM10:
clr @YZ ;Clear @YZ content
decms Z ;z = z - 1 , skip next if z=0
jmp ClrRAM10
clr @YZ ;Clear address $00
ret
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -