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

📄 gainewxiankong.asm

📁 ipod配件主要控制 IPOD MP3 播放暂停 上下首音量大小
💻 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 + -