📄 2236-dvd
字号:
;************************************************************************
; *
; minyunhua write *
; QQ:121758163 *
; *
;************************************************************************
.include "C:\OPENice\Include\Reg\s3c9498.reg"
.include "radio.reg"
.include "ram.reg"
.include "2313.reg"
.include "key.reg"
ORG 0000H
VECTOR 00H,INIT_9498
INIT_9498:
TCM P1INT,#01H ;判断是否是外部中断0
JP Z,I_INT0 ;外部中断0
TCM TCCON,#01H
JP Z,TIMER1_INIT ;时间溢出中断C
IRET
;****************************************************************
; 外部中断0
;****************************************************************
I_INT0:
CLR time_delay
CLR time_delay1
IS_STATE_FIRST_9M
JP Z,state_first
IS_STATE_SECN_2M
JP Z,state_third
SET_FIRST_9M
jp ex_int_ret
ORG 003CH
DB 0FFH
DB 0FFH ;
DB 0C7H ;
DB 0FFH ;
state_first:
CP time_count,#55H
JP UGT,error_return
CP time_count,#32H
JP ULT,error_return
SET_SECN_2M
CLR_FIRST_9M
LD remote_bit_count,#20H
jp ex_int_ret
state_third:
CP time_count,#12H
JP UGT,error_return
CP time_count,#02H
JP ULT,error_return
SUB time_count,#08H
rrc remote_cmd_code1
rrc remote_cmd_code0
rrc remote_sys_code1
rrc remote_sys_code0
SUB remote_bit_count,#01H
JP Z,set_ok
jp ex_int_ret
set_ok:
SET_DATA_OK
;set remote_key_is_down
SET_IR_KEY_IS_DOWN
error_return:
CLR_SECN_2M
SET_FIRST_9M
ex_int_ret:
CLR time_count
AND P1INT,#11111110B
IRET
;****************************************************
;---------------ext int end----------------
;****************************************************
ORG 0100H
RESET:
DI
LD BTCON,#10100011b ; Disable Watch-dog
LD SP,#0C0H
LD TCNTSEL,#02H
LD CLKCON,#00011000B
LD TCCON,#00101110B ;fxx/8
LD TCDATA,#0C8H ;8/8=1US 1*200=200US
LD R0,#0A0H
CLR_RAM:
DEC R0
CLR @R0
CP R0,#00H
JP NE,CLR_RAM
CALL IO_INIT
EI
LD EQ_RAM,#044H
LD volume_val,#20H
MAIN:
;*********************************************************
; invalid when current_key is 0ffh
;*********************************************************
JP MAIN
; 时间C溢出中断
;****************************************************************
TIMER1_INIT:
INC VAL_REMOTE_DELAY_TIME
INC time_count
next_even1:
INC time_delay
CP time_delay,#1EH
JP ULT,return_t_int
INC time_delay1
CLR time_delay
CP time_delay1,#12H
JP ULT,return_t_int
CLR time_delay1
CLR time_delay
AND STATE_ALL,#0FCH
CLR_IR_KEY_IS_DOWN
return_t_int:
AND TCCON,#0FEH
IRET
;****************************************************************
; 中断结束
;****************************************************************
.IF 0
IO_INIT PROC
.ENDIF
IO_INIT:
LD P0,#04H
LD P0CON,#00101010B
CLR P1
LD P1CONH,#10101010B
LD P1CONL,#10111001B
LD P1INT,#00001000B ;ENABLE INT1 INT0
;LD P1INT,#00011000B
CLR P2
LD P2CONH,#10101010B
LD P2CONL,#10101010B
;CLR P3
LD P3,#00000010B
LD P3CON,#00101010B
;A/D
;LD ADCON,#00100010B
RET
.IF 0
IO_INIT ENDP
.ENDIF
;************************************************************************
; PT2222 START
; SEND REMOTE CODE
.IF 0
REMOTE_SEND_HEARD_CODE proc
.ENDIF
REMOTE_SEND_HEARD_CODE:
;************************************************************************
CLR_REMOTE
LD ACC_SEN_VAL,#2AH
CALL REMOTE_DELAY_200uS
SET_REMOTE
LD ACC_SEN_VAL,#16H
CALL REMOTE_DELAY_200uS
RET
.IF 0
REMOTE_SEND_HEARD_CODE endp
.ENDIF
;*************************************************************************
;*************************************************************************
;
; remote code from acc
;
.IF 0
REMOTE_SEND_BYTE proc
.ENDIF
REMOTE_SEND_BYTE:
;*************************************************************************
PUSH R0
PUSH R1
LD R0,ACC_SEN_VAL
LD R1,#08H
send_remote_code:
;----------high pulse 0.6ms---------------
CLR_REMOTE
LD ACC_SEN_VAL,#02H
call REMOTE_DELAY_200uS
;------------------------------------------
;------low pulse 0.6 ms or 1.6 ms--------
SET_REMOTE
LD ACC_SEN_VAL,#02H
TM R0,#01H
JP Z,no_ld_7
LD ACC_SEN_VAL,#07H
no_ld_7:
call REMOTE_DELAY_200uS
RR R0
DEC R1
CP R1,#00H
JP NE,send_remote_code
POP R1
POP R0
ret
.IF 0
REMOTE_SEND_BYTE endp
.ENDIF
;***********************************************************************
;***********************************************************************
;
; delay time from ACC_SEN_VAL
; VAL_REMOTE_DELAY_TIME IN TIME0INT
.IF 0
REMOTE_DELAY_200uS PROC
.ENDIF
REMOTE_DELAY_200uS:
;***********************************************************************
clr VAL_REMOTE_DELAY_TIME
rem_delay:
CP ACC_SEN_VAL,VAL_REMOTE_DELAY_TIME
JP UGT,rem_delay
ret
;************************************************************************
;
; MAIN: cmd_code from acc_sen_val
;
.IF 0
REMOTE_SEND_CODE PROC
.ENDIF
REMOTE_SEND_CODE:
;************************************************************************
PUSH ACC_SEN_VAL
call REMOTE_SEND_HEARD_CODE
LD ACC_SEN_VAL,#00H
call REMOTE_SEND_BYTE
LD ACC_SEN_VAL,#0FFH
call REMOTE_SEND_BYTE
POP ACC_SEN_VAL
PUSH ACC_SEN_VAL
call REMOTE_SEND_BYTE
POP ACC_SEN_VAL
COM ACC_SEN_VAL
call REMOTE_SEND_BYTE
CLR_REMOTE
LD ACC_SEN_VAL,#02H
call REMOTE_DELAY_200uS
SET_REMOTE
ret
;******************************************************************************
;******************************************************************************
.IF 0
GET_REMOTE_KEY PROC
.ENDIF
GET_REMOTE_KEY:
LD Current_Key,#0FFH
IR_KEY_DOWN_IS_LOW
JP Z,get_rem_key
LD Current_Key,Current_Key_Bak
get_rem_key:
DATA_OK_IS_HIGH
JP Z,get_ir_key
ret
get_ir_key:
CLR_DATA_OK
COM remote_cmd_code0
LD REMOTE_CODE_BAK,remote_cmd_code0
CP remote_cmd_code0,remote_cmd_code1
JP Z,get_code
ret
get_code:
LD Current_Key,REMOTE_CODE_BAK
LD Current_Key_Bak,Current_Key
ret
;***********************************************************
.IF 0
PT2314_NOMUTE PROC
.ENDIF
PT2314_NOMUTE:
LD ACC_SEN_VAL,#0C0H
call PT2314_SEND
LD ACC_SEN_VAL,#0E0H
call PT2314_SEND
RET
.IF 0
PT2314_MUTE PROC
.ENDIF
PT2314_MUTE:
LD ACC_SEN_VAL,#0FFH
call PT2314_SEND
LD ACC_SEN_VAL,#0DFH
call PT2314_SEND
RET
;**********************************************************************
; PT2313_IC2_START
;**********************************************************************
.IF 0
PT2314_IC2_START proc
.ENDIF
PT2314_IC2_START:
PT2314_DATA_OUT_MODE
SET_PT2314_DATA
call DELAY_TIME
SET_PT2314_CLK
call DELAY_TIME
CLR_PT2314_DATA
call DELAY_TIME ; /* 起始条件锁定时间大于4μs*/
CLR_PT2314_CLK
call DELAY_TIME
ret
;*************************************************************************
;*************************************************************************
;
; PT2313_IC2_END
;
.IF 0
PT2314_IC2_END proc
.ENDIF
;*************************************************************************
PT2314_IC2_END:
CLR_PT2314_CLK
CLR_PT2314_DATA
call DELAY_TIME;
SET_PT2314_CLK
call DELAY_TIME; /*结束条件建立时间大于4μs*/
SET_PT2314_DATA
call DELAY_TIME;
ret
;*************************************************************************
;*************************************************************************
;
; VAL_PT2313_SEND_DATA FORM ACC
;
.IF 0
PT2314_IC2_SEND_8 proc
.ENDIF
;*************************************************************************
PT2314_IC2_SEND_8:
PUSH R0
PUSH R1
LD R1,#08H
s_nextb:
CLR_PT2314_DATA
TM ACC_SEN_VAL,#80H
JP Z,no_set_data
SET_PT2314_DATA
no_set_data:
RL ACC_SEN_VAL
SET_PT2314_CLK
call DELAY_TIME
CLR_PT2314_CLK
call DELAY_TIME
DEC R1
CP R1,#00H
JP NE,s_nextb
call DELAY_TIME
PT2314_DATA_IN_MODE
call DELAY_TIME
SET_PT2314_CLK
call DELAY_TIME
test_ack:
PT2314_DATA_IS_HIGH
JP Z,ack_error_ret
CLR_PT2314_CLK
PT2314_DATA_OUT_MODE
call DELAY_TIME
LD ACC_RET_VAL,#01H
JP send_8_ret
ack_error_ret:
CLR_PT2314_CLK
call DELAY_TIME
PT2314_DATA_OUT_MODE
call DELAY_TIME
CLR ACC_RET_VAL
send_8_ret:
POP R1
POP R0
ret
;*************************************************************************
;*************************************************************************
; MAIN:PT2313_SEND
;
; pt2313_send_data from acc
;
.IF 0
PT2314_SEND PROC
.ENDIF
;*************************************************************************
PT2314_SEND:
;----------send addr------------
PUSH ACC_SEN_VAL
call PT2314_IC2_START
LD ACC_SEN_VAL,#88H
call PT2314_IC2_SEND_8
CP ACC_RET_VAL,#0h
JP Z,send_error
;----------send val-------------
POP ACC_SEN_VAL
call PT2314_IC2_SEND_8
CP ACC_RET_VAL,#00H
JP Z,send_error
call PT2314_IC2_END
ret
send_error:
POP ACC_SEN_VAL
call PT2314_IC2_END
ret ;fail
.IF 0
PT2314_SEND ENDP
.ENDIF
init .MACRO
CLR to0_L
CLR to1_H
CLR to2
CLR to3
CLR ACC_SEN_VAL
.ENDM
.IF 0
unbin_add_16 proc ;data0_Ldata1_H+data4_Ldata5_H---->to0to1_Hto2
.ENDIF
unbin_add_16:
init
ADD data0_L,data4_L
LD to0_L,data0_L
ADC data1_H,data5_H
LD to1_H,data1_H
ADC to2,#00H
ret
.IF 0
unbin_add_16 endp
.ENDIF
.IF 0
unbin_sub_16 proc ;data0_Ldata1_H-data4_Ldata5_H---->to0_Lto1_Hto2
.ENDIF
unbin_sub_16:
init
CP data0_L,data4_L
JP ULT,low_add_255
SUB data0_L,data4_L
JP high_sub
low_add_255:
CP data1_H,data5_H
JP ULE,sub_ret
DEC data1_H
XOR data4_L,#0FFH
ADD data0_L,data4_L
INC data0_L
high_sub:
CP data1_H,data5_H
JP ULT,sub_ret
LD to0_L,data0_L
SUB data1_H,data5_H
LD to1_H,data1_H
ret
sub_ret:
LD to2,#0FFH
RET
.IF 0
unbin_sub_16 endp
.ENDIF
.IF 0
bintobcd_16 proc ;data0_Ldata1_H---->to0_Lto1_Hto2to3
.ENDIF
bintobcd_16:
CLR FLASH_CHAR_5
LD to0_L,data0_L
LD to1_H,data1_H
con_sub_10000:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -