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

📄 mpeg.asm

📁 一个DVD组合机的MCU代码,FM,机芯出入仓,功放的控制及DVD数据通过通信来访问.
💻 ASM
字号:
;--TAB=8----------------------------------------------------------;
;*****************************************************************;
;*****************************************************************;
;**     mpeg.asm                                                **;
;**                                                             **;
;**     version 1.0                                             **;
;**                                                             **;
;**     update  2002/8/10                                       **;
;**                                                             **;
;**                                                             **;
;**                                                             **;
;*****************************************************************;
;*****************************************************************;
;-----------------------------------------------------------------;
MPEG_CLK        EQU	P2.7
MPEG_DI         EQU	P2.6
MPEG_STB 	EQU	P2.5
MPEG_DO         EQU	MPEG_DI

MPEG_RMT	EQU	P3.2  ; INT0

;-----------------------------------------------------------------;
extern 	_R
extern 	Lsb_Delay

extern 	gMpgTmCount
extern 	gMpgRcvBuf
extern  gboolMpgRcv

extern 	gMpgSndBuf
extern 	gPMpgSndFront
extern 	gPMpgSndRear
;-----------------------------------------------;
	RSEG	CODE
;-----------------------------------------------;
;Name: Lsb_InitMpgTmCount			;
;In:	 A= TIME COUNT(ms)			;
;Out:    NO                                     ;
;Update: 2002/8/9				;
;check:  InitMpgTmCount_1			;
;-----------------------------------------------;
Lsb_InitMpgTmCount:
	PUSH	_R

	MOV	R0,#gMpgTmCount
	MOV	@R0,A

	POP	_R
	RET

;-----------------------------------------------;
;Name: Lsb_IsMpgTmOut				;
;In:	 NO					;
;Out:    C:1TIME OUT 0:NO		        ;
;Update: 2002/8/9				;
;check:  IsMpgTmOut_1				;
;-----------------------------------------------;
Lsb_IsMpgTmOut:
	PUSH	ACC
	PUSH	_R

	CLR	C
	MOV	R0,#gMpgTmCount
	MOV	A,@R0
	JNZ  	imto_1
	SETB	C

imto_1: POP	_R
	POP	ACC
	RET

;--------------------------------------------------------------------------;
;--------------------------------------------------------------------------;
;   (2) MPG WITE PROCESS                                                   ;
;--------------------------------------------------------------------------;
;--------------------------------------------------------------------------;
;-----------------------------------------------;
;Name: Lsb_HaveDataSnd ?			;
;In:	 NO					;
;Out:    A=0:NO A!=0:HAVE                       ;
;Update: 2002/8/26				;
;check:  HaveDataSnd_1				;
;-----------------------------------------------;
Lsb_HaveDataSnd:
	PUSH	_R

	MOV	R0,#gPMpgSndFront
	MOV	A,@R0
	MOV	R0,#gPMpgSndRear
	XRL	A,@R0

	POP	_R
	RET

;-----------------------------------------------;
;Name: Lsb_MpgWrtHandshake			;
;In:	 NO					;
;Out:    (1)C=1:error c=0:ok                    ;
;        (2)STB high                            ;
;Update: 2002/8/28				;
;check:  MpgWrtHandshake_1			;
;-----------------------------------------------;
Lsb_MpgWrtHandshake:
	;-(1)MPG_STB LOW-;
	CLR	MPEG_STB

	;-(2)wait CLK LOW-;
	MOV	A,#10
	CALL    Lsb_InitMpgTmCount
mwh_1:	MOV	C,MPEG_CLK
	JNC     mwh_2
	CALL    Lsb_IsMpgTmOut
	JNC	mwh_1
	SETB    MPEG_STB
	JMP 	mwh_end

	;-(3)STB HIGH--;
mwh_2:	SETB    MPEG_STB

	;-(4)WAIT CLK HIGH-;
	MOV	A,#3
	CALL    Lsb_InitMpgTmCount
mwh_3:	MOV	C,MPEG_CLK
	CPL	C
	JNC     mwh_end
	CALL	Lsb_IsMpgTmOut
	JNC   	mwh_3

mwh_end:RET

;-----------------------------------------------;
;Name: Lsb_MpgOutByte				;
;In:	 A					;
;Out:    C=1:error c=0:ok                       ;
;Update: 2002/8/26				;
;check:  MpgOutByte_1				;
;-----------------------------------------------;
Lsb_MpgOutByte:
	PUSH	B
	PUSH	_R+7

	MOV	R7,A
	MOV	B,#8

	;-(1)wait CLK HIGH-;
mob_1:	MOV	A,#2
	CALL    Lsb_InitMpgTmCount
mob_2:	MOV	C,MPEG_CLK
	JC    	mob_3
	CALL    Lsb_IsMpgTmOut
	JNC	mob_2
	JMP 	mob_end

	;-(2)shift BIT-;
mob_3:  MOV	A,R7
	RRC	A
	MOV	R7,A
	MOV	MPEG_DI,C

	;-(3)wait CLK low-;
	MOV	A,#2
	CALL    Lsb_InitMpgTmCount
mob_4:	MOV	C,MPEG_CLK
	JNC  	mob_5
	CALL	Lsb_IsMpgTmOut
	JNC 	mob_4
	JMP	mob_end

mob_5:	DJNZ	B,mob_1
	CLR	C

mob_end:POP	_R+7
	POP	B
	RET

;-----------------------------------------------;
;Name: Lsb_MpgWriteProc				;
;In:	 A					;
;Out:    NO                                     ;
;Update: 2002/8/26				;
;check:  MpgWriteProc				;
;-----------------------------------------------;
Lsb_MpgWriteProc:
	PUSH	_R
	PUSH	_R+7

	;-(1)have data--------;
	CALL 	Lsb_HaveDataSnd
	JZ 	mwp_end

	;-(2)handshake------------;
	CALL	Lsb_MpgWrtHandshake
	JC 	mwp_end

	;-(3)A=gMpgSndBuf[gPMpgSndRear]-;
	MOV	R0,#gPMpgSndRear
	MOV	A,@R0
	ADD	A,#gMpgSndBuf
	MOV	R0,A
	MOV	A,@R0

	;-(4)out 2 BYTE-;
	MOV	R7,A
	CALL	Lsb_MpgOutByte
	JC	mwp_end

	MOV	A,R7
	XRL	A,#0FFH
	CALL    Lsb_MpgOutByte
	JC	mwp_end

	;-(5)gPMpgSndRear++ ---;
	MOV	R0,#gPMpgSndRear
	MOV	A,@R0
	INC	A
	ANL	A,#03H
	MOV	@R0,A

	;-(6)delete mode time-;
	MOV	A,#12
	CALL    Lsb_InitMpgTmCount
mwp_1:	MOV	C,MPEG_CLK
	JC	mwp_end
	CALL	Lsb_IsMpgTmOut
	JNC 	mwp_1


mwp_end:POP	_R+7
	POP	_R
	RET

;--------------------------------------------------------------------------;
;--------------------------------------------------------------------------;
;   (1)  MPEG READ PROCESS                                                 ;
;--------------------------------------------------------------------------;
;--------------------------------------------------------------------------;
;-----------------------------------------------;
;Name: Lsb_MpgRdHandshake			;
;In:	 MPEG_STB  High				;
;Out:    c=1:error  c=0:ok MPEG_STB low->HIGH   ;
;Update: 2002/8/28				;
;check:  MpgRdHandshake_1			;
;-----------------------------------------------;
Lsb_MpgRdHandshake:
	;-(1) STB Low--;
	NOP
	NOP
	NOP
	NOP
	CLR	MPEG_STB
	NOP
	NOP
	NOP
	NOP

	;-(2)wait CLK high-;
	MOV	A,#5
	CALL 	Lsb_InitMpgTmCount
mrh_0:  CLR	C
	JB 	MPEG_CLK,mrh_1
	CALL 	Lsb_IsMpgTmOut
	JNC  	mrh_0

mrh_1:  NOP
	NOP
	NOP
	SETB    MPEG_STB
	NOP
	NOP
	NOP
	RET

;-----------------------------------------------;
;Name: Lsb_MpgInByte				;
;In:	 NO					;
;Out:    A                                      ;
;Update: 2002/8/28				;
;check:  MpgInByte_1				;
;-----------------------------------------------;
Lsb_MpgInByte:
	PUSH	B
	PUSH	_R+7

	MOV	B,#8

	;-(1)wait CLK Low--;
mib_1:  MOV	A,#5
	CALL    Lsb_InitMpgTmCount
mib_2:	MOV	C,MPEG_CLK
	JNC 	mib_3
	CALL    Lsb_IsMpgTmOut
	JNC 	mib_2
	JMP	mib_end

	;-(2)read bit---;
mib_3:  MOV	C,MPEG_DO
	MOV	A,R7
	RRC     A
	MOV	R7,A

	;-(3)wait clk high-;
	MOV	A,#5
	CALL    Lsb_InitMpgTmCount
mib_4:	MOV	C,MPEG_CLK
	JC 	mib_5
	CALL	Lsb_IsMpgTmOut
	JNC	mib_4
	JMP     mib_end

mib_5:  DJNZ	B,mib_1
	MOV	A,R7
	CLR	C

mib_end:POP	_R+7
	POP	B
	RET

;-----------------------------------------------;
;Name: Lsb_MpgReadProc				;
;In:	 NO					;
;Out:    NO                                     ;
;Update: 2002/8/26				;
;check:  MpgReadProc_1				;
;-----------------------------------------------;
Lsb_MpgReadProc:
	PUSH	_R+6
	PUSH	_R+7

	;-(1) Handshake ---------;
	CALL  	Lsb_MpgRdHandshake
	JC  	mrp_end

	;-(2)read 2 byte----;
	CALL	Lsb_MpgInByte
	MOV	R6,A
	JC      mrp_end

	CALL    Lsb_MpgInByte
	MOV	R7,A
	JC      mrp_end

	;-(3)byte1 byte2 all ok then save-;
	MOV	R0,#gMpgRcvBuf
	MOV     A,R6
	MOV	@R0,A

	INC	R0
	MOV	A,R7
	MOV	@R0,A

	SETB	gboolMpgRcv

mrp_end:POP	_R+7
	POP	_R+6
	RET

;-----------------------------------------------;
;Name: Lsb_InitMpg				;
;In:	 NO					;
;Out:    NO                                     ;
;Update: 2002/8/27				;
;check:  InitMpg				;
public   Lsb_InitMpg			    	;
;-----------------------------------------------;
Lsb_InitMpg:
	SETB	MPEG_RMT
	SETB	MPEG_STB
	RET

;-----------------------------------------------;
;Name: Lsb_MpgProc				;
;In:	 NO					;
;Out:    NO                                     ;
;Update: 2002/8/26				;
;check:  MpgProc_1				;
public   Lsb_MpgProc                            ;
;-----------------------------------------------;
Lsb_MpgProc:
	MOV	C,MPEG_CLK
	JNC 	mp_1
	CALL    Lsb_MpgWriteProc;
	JMP 	mp_2
mp_1:   CALL	Lsb_MpgReadProc
mp_2:   RET
;---------------------------------------------------------------------------;
	END

⌨️ 快捷键说明

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