📄 mpeg.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 + -