📄 huangqipu.asm
字号:
;*******************************************************************************
; FILENAME : 2604_TEMPLATE.ASM for S8KE ICE
; AUTHOR : SONiX
; PURPOSE : Template Code for SN8P2604
; REVISION : 06/05/2004 V1.0 First issue
; : 07/07/2004 V1.1 Remove ICE_MODE definition and some macro
; for SN8ICE 2K and Add push/pop in ISR
;
;*******************************************************************************
;* (c) Copyright 2004, SONiX TECHNOLOGY CO., LTD.
;*******************************************************************************
CHIP SN8P2604 ; Select the CHIP
//{{SONIX_CODE_OPTION
.Code_Option Noise_Filter Enable
.Code_Option Reset_Pin Reset
.Code_Option Watch_Dog Disable ; Disable Watchdog
.Code_Option High_Clk 4M_X'tal ; Crystal/Resonator: 2Mhz~10Mhz
.Code_Option Fcpu #2 ; Fcpu = High_Clk/4
.Code_Option Security Disable
//}}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 DS 1 ;Temporary buffer for main loop
Iwk00 DS 1 ;Temporary buffer for ISR
AccBuf DS 1 ;Accumulater buffer
PflagBuf DS 1 ;PFLAG buffer
TEM1 DS 1
TEM2 DS 1
TEM3 DS 1
LCD_DAT DS 1
MTEM0 DS 1
XCVB DS 1
XCVB1 DS 1
VOLMAST DS 1
T1 DS 1
T2 DS 1
FuncT DS 1
MCD4094 DS 1
CURBMQ DS 1
LASTBMQ DS 1
T3 DS 1
LCDBUF DS 16
RF0 DS 1
RF1 DS 1
RF2 DS 1
RF3 DS 1
RFCNT DS 1
LXJCNT DS 1
XO DS 1
SWITCH DS 1
SWITCH1 DS 1
BALANCE DS 1
BASS DS 1
TREBLE DS 1
XO2 DS 1
;;;BANK 1;;;;;;;;;;;;;;;;;;
AUCNT DS 1
A2CNT DS 1
FUCNT DS 1
PHCNT DS 1
DVCNT DS 1
CDCNT DS 1
TUCNT DS 1
WRBASSCNT DS 1
WRCNT DS 1
WRBALCNT DS 1
WRTRECNT DS 1
;;;BANK 2;;;;;;;;;;;;;;;;;;
TEM20 DS 1
TEM21 DS 1
TEM22 DS 1
TEM23 DS 1
MDT DS 1
MDT1 DS 1
XO1 DS 1
XOMUTE DS 1
BT_CNT DS 1
LeftSD DS 1
RightSD DS 1
RDBUF DS 5
.const
RW= 6
RS= 5
E=04
PZ=0
PC=2
CLK94 = 3
DAT94= 2
PS1=6
PS0=5
SCL1=3
SCL2=4
SDA1 =1
SDA2 =1
SDA3=2
SCL3=1
KAUX2=0X4C
KCD=0X1E
KAUX1=0X18
KPHONO=0X45
KFUNC=0X13
KDVD=0X1C
KTUNER=0X1D
KDN=0X4E
KUP=0X07
KMUTE=0X5F
KFUNCTION=0X13
KPOWER=0X1B
; P7 3.2.1.0 接LCD DB4.5.6.7
; P6
STOR94 = 7
;-------------------------------------------------------------------------------
; Bit Variables Definition
;-------------------------------------------------------------------------------
Wk00B0 EQU Wk00.0 ;Bit 0 of Wk00
Iwk00B1 EQU Iwk00.1 ;Bit 1 of Iwk00
;-------------------------------------------------------------------------------
; 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,#00h ;Initial system mode
b0mov OSCM,A
// mov A, #0x5A
// b0mov WDTR, A ;Clear watchdog timer
@RST_WDT
// call ClrRAM ;Clear RAM
call SysInit ;System initial
b0bset FGIE ;Enable global interrupt
;-------------------------------------------------------------------------------
; Main routine
;-------------------------------------------------------------------------------
Main:
// mov A, #0x5A
// b0mov WDTR, A ;Clear watchdog timer
@RST_WDT
JMP MnApp
jmp Main
;-------------------------------------------------------------------------------
; Main application
;-------------------------------------------------------------------------------
;---------------------------------------------------------------
; Put your main program here
;---------------------------------------------------------------
;-----------------------------------
; Jump table routine
;-----------------------------------
ORG 0x0100 ;The jump table should start from the head
;of boundary.
b0mov A,Wk00
and A,#3
ADD PCL,A
jmp JmpSub0
jmp JmpSub1
jmp JmpSub2
;-----------------------------------
JmpSub0:
; Subroutine 1
jmp JmpExit
JmpSub1:
; Subroutine 2
jmp JmpExit
JmpSub2:
; Subroutine 3
jmp JmpExit
JmpExit:
ret ;Return Main
;----------------------
;sub function
;----------------------
delay:
mov A,#40
b0mov tem1,a
@@:
DECMS tem1
jmp @b
ret
;;;;;;;;;;;;;;;
delay1MS:
mov tem1,a
de_1:
mov A,#250
b0mov tem2,a
@@:
nop
DECMS tem2
jmp @B
DECMS tem1
jmp de_1
ret
LcdCmd:
BCLR P2.RS
CALL WDAT
call delay
RET
LcdDat:
BSET P2.RS
CALL WDAT
call delay
RET
WDAT:
BCLR P2.RW
CLR TEM1
MOV LCD_DAT,A
BTS0 lcd_dat.7
bsET TEM1.4
BTS0 lcd_dat.6
bsET TEM1.5
BTS0 lcd_dat.5
BSET TEM1.6
BTS0 lcd_dat.4
BSET TEM1.7
BTS0 lcd_dat.3
BSET TEM1.0
BTS0 lcd_dat.2
BSET TEM1.1
BTS0 lcd_dat.1
BSET TEM1.2
BTS0 lcd_dat.0
BSET TEM1.3
MOV A,TEM1
MOV LCD_DAT,A
SWAP lcd_dat
AND A,#0FH
MOV TEM1,A
MOV A, P2
AND A,#0XF0
OR A,TEM1
MOV P2,A
BSET P2.E
BCLR P2.E
MOV A,lcd_dat
AND A,#0FH
MOV TEM1,A
MOV A, P2
AND A,#0XF0
OR A,TEM1
MOV P2,A
BSET P2.E
BCLR P2.E
RET
;-----------------------------------
LcdInit:
BSET P5M.0
BCLR P5.0
BCLR P2.RS
BCLR P2.E
MOV a,#10
CALL DELAY1MS
MOV A,#33
CALL LcdCmd
MOV A,#32
CALL LcdCmd
MOV a,#10
MOV A,#1
CALL LcdCmd
MOV a,#5
CALL DELAY1MS
MOV a,#28H
CALL LcdCmd
MOV a,#0CH
CALL LcdCmd
CALL DELAY
MOV a,#06H
CALL LcdCmd
CALL DELAY
MOV a,#58H
CALL LcdCmd
MOV a,#0X00
CALL LcdDAT
MOV a,#0XFF
CALL LcdDAT
MOV a,#0XFF
CALL LcdDAT
MOV a,#0XFF
CALL LcdDAT
MOV a,#0XFF
CALL LcdDAT
MOV a,#0XFF
CALL LcdDAT
MOV a,#0XFF
CALL LcdDAT
MOV a,#0X00
CALL LcdDAT
MOV a,#60H
CALL LcdCmd
MOV a,#0X00
CALL LcdDAT
MOV a,#0XFF
CALL LcdDAT
MOV a,#0X11
CALL LcdDAT
MOV a,#0X11
CALL LcdDAT
MOV a,#0X11
CALL LcdDAT
MOV a,#0X11
CALL LcdDAT
MOV a,#0XFF
CALL LcdDAT
MOV a,#0X00
CALL LcdDAT
ret
LCDSTR:
MOV A,#0FFH
B0MOV P2M,A
BCLR P2.RW
MOV A,#0X80
CALL LCDCMD
MOV A,#8
B0MOV TEM3,A
B0MOV Y,#0
B0MOV Z,#LCDBUF
LCDSTR_1:
B0MOV A,@YZ
CALL LCDDAT
INCMS Z
NOP
DECMS TEM3
JMP LCDSTR_1
MOV A,#0XC0
CALL LCDCMD
MOV A,#8
B0MOV TEM3,A
LCDSTR_2:
B0MOV A,@YZ
CALL LCDDAT
INCMS Z
NOP
DECMS TEM3
JMP LCDSTR_2
RET
MnApp:
CALL YAO_KONG
CALL INTT0
// call VOLtoPt2314
BTS1 XO.2
JMP MAIN_1
BCLR XO.2
BCLR XO.5
CALL GETXS
CALL VOLUPDN //XO.2为1时更新vol和lcd显示
CALL LCDSTR
MAIN_1:
BTS1 XO.1
JMP MAIN_END
BCLR XO.1
BTS1 XO.0
JMP MAIN_A1
B0MOV A,RF2
XOR A,#KMUTE
BTS0 FZ
JMP S_MUTE
BTS1 XO.5 //MUTE
JMP MAIN_A1
MOV a,#0XFF
B0MOV RF2,A
JMP MAIN_END
MAIN_A1:
B0MOV A,RF2
XOR A,#KCD
BTS0 FZ
JMP S_CD
B0MOV A,RF2
XOR A,#KTUNER
BTS0 FZ
JMP S_TUNER
;///////////////////
B0MOV A,RF2
XOR A,#KDVD
BTS0 FZ
JMP S_DVD
;;;;;;;;;;;;;;;;;;;;;
B0MOV A,RF2
XOR A,#KPHONO
BTS0 FZ
JMP S_PHONO
;/////////////////////
B0MOV A,RF2
XOR A,#KAUX2
BTS0 FZ
JMP S_AUX2
;;;;;;;;;;;;;;;
B0MOV A,RF2
XOR A,#KAUX1
BTS0 FZ
JMP S_AUX1
;////////////////////
BTS1 XO.0
JMP MAIN_END
B0MOV A,RF2
XOR A,#KFUNCTION
BTS0 FZ
JMP S_FUNCTION
BCLR XO.1
B0MOV A,RF2
XOR A,#KDN
BTS0 FZ
JMP VOLDN
B0MOV A,RF2
XOR A,#KUP ;0X90;
BTS0 FZ
JMP VOLUP
;//////////////////////////
B0MOV A,RF2
XOR A,#KPOWER
BTS0 FZ
JMP S_POWER
;////////////////
MAIN_END:
JMP MAIN
RET
S_POWER:
CLR XCVB1
BCLR XO.0
MOV A,#0FFH
B0MOV P2M,A
MOV A,#1
CALL LCDCMD
BSET P5.0 //OFF LCD LED
BSET P1.7 //ON LED1
BCLR P1.1 //OFF LED2
MOV a,#0X3f
B0MOV MDT,A
B0MOV MDT1,A
CALL WRNBYT
CALL WRNBYT2
BCLR P2.7 //POWER OFF
JMP MAIN_END
S_MUTE:
MOV a,#0XFF
B0MOV RF2,A
BTS1 XO.0
JMP MAIN_END
BTS1 XO.5
JMP S_MUTE_1
;;;;;;NO MUTE;;;;;;;;;;;;;;
call GETXS
call VOLUPDN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BCLR XO.5
CALL LCDSTR
BSET P2.7 //POWER ON
JMP S_MUTE_2
S_MUTE_1:
BCLR P2.7 //POWER OFF
MOV A,#0FFH
MOV P2M,A
MOV A,#0X80
CALL LcdCMD
MOV a,#6
B0MOV MTEM0,A
MTEM0S0:
MOV a,#0X20
CALL LCDDAT
DECMS MTEM0
JMP MTEM0S0
MOV a,#0X4D
CALL LCDDAT
MOV a,#0X75
CALL LCDDAT
MOV A,#0XC0
CALL LcdCMD
MOV a,#0X74
CALL LCDDAT
MOV a,#0X65
CALL LCDDAT
MOV a,#6
B0MOV MTEM0,A
MTEM0S1:
MOV a,#0X20
CALL LCDDAT
DECMS MTEM0
JMP MTEM0S1
BSET XO.5
;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV a,#0X3f
B0MOV MDT,A
B0MOV MDT1,A
CALL WRNBYT
CALL WRNBYT2
S_MUTE_2:
JMP MAIN_END
S_FUNCTION:
MOV a,#0XFF
B0MOV RF2,A
BSET XCVB1.7
BTS1 XCVB1.6
JMP S_FUNC_1
BTS0 XCVB1.0
JMP FUNCTION_2
BTS1 XCVB1.1
JMP FUNCTION_1
JMP FUNCTION_0A
S_FUNC_1:
B0MOV A,XCVB1
AND A,#0X0F
BTS0 FZ
JMP FUNCTION_3
BTS0 XCVB1.2
JMP FUNCTION_4
BTS0 XCVB1.3
JMP FUNCTION_1
BTS0 XCVB1.0
JMP FUNCTION_2
BTS1 XCVB1.1
JMP FUNCTION_3
JMP FUNCTION_0A
FUNCTION_0A:
CLR XCVB1
CALL GETXS
CALL VOLUPDN
CALL LCDSTR
JMP MAIN_END
FUNCTION_2:
BCLR XCVB1.0
BSET XCVB1.1
CALL GETXS
BTS0 SWITCH.2
JMP FUNCTION_21
MOV a,#0X20
B0MOV LCDBUF+11,A
MOV a,#0X3C
B0MOV LCDBUF+12,A
MOV a,#0X4F
B0MOV LCDBUF+13,A
MOV a,#0X4E
B0MOV LCDBUF+14,A
BCLR SWITCH1.2
JMP FUNCTION_22
FUNCTION_21:
BSET SWITCH1.2
FUNCTION_22:
B0MOV A,SWITCH
B0MOV MDT,A
B0MOV MDT1,A
CALL WRNBYT
B0MOV A,SWITCH1
B0MOV MDT,A
B0MOV MDT1,A
CALL WRNBYT2
CALL LCDSTR
CLR FUNCT
JMP MAIN
FUNCTION_1:
BCLR XCVB1.2
BCLR XCVB1.3
BSET XCVB1.0
CALL GETXS
B0MOV a,balance
XOR A,#6
BTS0 FZ
jmp noheikang
MOV a,#LCDBUF+3
ADD A,BALANCE
B0MOV Y,#0
B0MOV Z,A
MOV a,#0X0B
B0MOV @YZ,A
noheikang: ;;没有黑框
CALL LCDSTR
B0MOV A,BALANCE
B0MOV Y,#V_BALANCE$M
B0MOV Z,#V_BALANCE$L
B0ADD Z,A
MOVC
OR A,#0XE0
B0MOV MDT,A
B0MOV LeftSD,A
MOV A,#12
SUB A,BALANCE
B0MOV Y,#V_BALANCE$M
B0MOV Z,#V_BALANCE$L
B0ADD Z,A
MOVC
OR A,#0XC0
B0MOV MDT1,A
B0MOV RightSD,A
CALL WRNBYT
CALL WRNBYT2
CLR FUNCT
JMP MAIN_END
FUNCTION_3:
BSET XCVB1.2
B0MOV A,BASS
B0MOV TEM1,A
CALL GETXS
CALL C_BASSB
CLR FUNCT
JMP MAIN_END
FUNCTION_4:
BCLR XCVB1.2
BSET XCVB1.3
B0MOV A,TREBLE
B0MOV TEM1,A
CALL GETXS
CALL C_BASSB
CLR FUNCT
JMP MAIN_END
VOLDN:
BTS0 XCVB1.0
JMP VOLDNBAL
JMP VOLDNBAL_1
VOLDNBAL:
MOV A,BALANCE
BTS1 FZ
DECMS BALANCE
NOP
CALL WRBALANCE
JMP FUNCTION_1
VOLDNBAL_1:
BTS0 XCVB1.1
JMP VOLDNLOUD
JMP VOLDNLOUD_1
VOLDNLOUD:
BSET SWITCH.2
CALL WRLOUD
JMP FUNCTION_2
VOLDNLOUD_1:
BTS0 XCVB1.2
JMP VOLDNBASS
JMP VOLDNBASS_1
VOLDNBASS:
B0MOV A,BASS
BTS1 FZ
DECMS BASS
NOP
CALL WRBASS
// MOV A,#1
// CALL delay1MS
// CALL RDNBYT3
JMP FUNCTION_3
VOLDNBASS_1:
BTS0 XCVB1.3
JMP VOLDNTRE
JMP VOLDNTRE_1
VOLDNTRE:
B0MOV A,TREBLE
BTS1 FZ
DECMS TREBLE
NOP
CALL WRTREBLE
JMP FUNCTION_4
VOLDNTRE_1:
INCMS VOLMAST
NOP
B0MOV A,VOLMAST
SUB A,#3FH
BTS1 FC
JMP @F
MOV A,#0X3F
BCLR P2.7 //POWER OFF
B0MOV VOLMAST,A
@@:
CALL VOLUPDN
CALL LCDSTR
JMP MAIN_END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -