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

📄 mpc_eep.asm

📁 8051 mp3 very good for using
💻 ASM
字号:
;-----------------------------------------------;
; EEPROM - Save volume setting

save_volume:
	ldi	r17,eeVolume	; Compare stored value to current value
	 rcall	read_eep	; 
	lds	r17,Volume	; 
	cp	r16,r17		; /
	breq	PC+4		; If changed, save current value
	mov	r16,r17		; 
	ldi	r17,eeVolume	; 
	 rcall	write_eep	; /
	ret



;-----------------------------------------------;
; EEPROM - Load volume setting

load_volume:
	ldi	r17,eeVolume	; Read EEPROM
	 rcall	read_eep	; /
	cpi	r16,VOLMAX-3	; If too large, reset volume value
	brcs	PC+2		; 
	ldi	r16,0x20	; /
	sts	Volume,r16
	ret



;-----------------------------------------------;
; EEPROM - Save resume status

save_track:
	sbrc	_PbStat,1	; Save track parms (r10-r15)
	rjmp	PC+3		; 
	ldi	r16,-1		; 
	mov	_CntH,r16	; 
	ldiw	X,10		; 
	ldi	r17,eeTrkPrm	; 
	ld	r16,X+		; 
	 rcall	write_eep	; 
	inc	r17		; 
	cpi	r17,eeTrkPrm+6	; 
	brcs	PC-4		; /
	lds	r16,TocCrc	; Save TOC CRC
	ldi	r17,eeTocCrc	; 
	 rcall	write_eep	; 
	lds	r16,TocCrc+1	; 
	ldi	r17,eeTocCrc+1	; 
	 rcall	write_eep	; /
	lds	r16,TrkIdx	; Save track index
	ldi	r17,eeTrack	; 
	 rcall	write_eep	; /
	lds	r16,Random	; Save random base
	ldi	r17,eeRandom	; 
	 rcall	write_eep	; /
	ret



;-----------------------------------------------;
; EEPROM - Load resume status
;
; Call: none
; Ret:  Track = Start track index
;       r18   = Previous random base
;         Z = 1:Start from top of track
;               _PageX,_CntX = invalid
;             0:Start from stopped position
;               _PageX,_CntX = track parms to start

load_track:
	sts	TrkIdx,_0	; 1st track
	clr	r18		; Clear random base (incremental play)
	ldi	r17,eeTocCrc	; Check medium change (compare TOC CRC).
	 rcall	read_eep	;  if changed, start from 1st track.
	lds	r17,TocCrc	; 
	cp	r16,r17		; 
	brne	ldt_err		; 
	ldi	r17,eeTocCrc+1	; 
	 rcall	read_eep	; 
	lds	r17,TocCrc+1	; 
	cp	r16,r17		; 
	brne	ldt_err		; /
	ldi	r17,eeTrack	; Check terminated status
	 rcall	read_eep	;  if not saved, start from 1st track.
	cpi	r16,-1		;  else load track index to resume
	breq	ldt_err		; 
	sts	TrkIdx,r16	; /
	ldi	r16,-1		; Erase previous track status
	cli			; 
	 rcall	write_eep	; 
	sei			; /
	ldi	r17,eeRandom	; Load random base
	 rcall	read_eep	; 
	mov	r18,r16		; /
	ldiw	Z,10		; Load track parms (r10-r15)
	ldi	r17,eeTrkPrm	;  if in track gap, start from top of track.
	 rcall	read_eep	; 
	st	Z+,r16		; 
	inc	r17		; 
	cpi	r17,eeTrkPrm+6	; 
	brcs	PC-4		; 
	cpi	r16,-1		; /
	ret
ldt_err:sez
	ret


;-----------------------------------------------;
; EEPROM - Read/Write EEPROM
;
; Call: r16 = Data for write
;       r17 = EEPROM address
; Ret:  r16 = Read data
;
; NOTE: All interrupts must be stopped when
; write_eep routine being executed.

read_eep:
	out	EEARL,r17
	sbi	EECR,EERE
	in	r16,EEDR
	ret

write_eep:
	out	EEARL,r17
	out	EEDR,r16
	sbi	EECR,EEMWE
	sbi	EECR,EEWE
	sbic	EECR,EEWE
	rjmp	PC-1
	ret


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -