📄 radio.src
字号:
;您好,
;您提到的指令周期是这样的,指令执行时间T=(1/fxx)*分频值*指令执行周期数。通过这个公式,您可以算出具体的指令操作时间。
;关于9498的外围电路典型配置,稍晚一点给您发过去。
.include "C:\OPENice\Include\Reg\s3c9498.reg"
.include "pt16311.reg"
.include "radio.reg"
.include "ram.reg"
.include "vcd.reg"
.include "2313.reg"
.include "main.reg"
.include "key.reg"
ORG 0000H
VECTOR 00H,INIT_9498
INIT_9498:
TCM P1INT,#01H ;判断是否是外部中断0
JP Z,I_INT0 ;外部中断0
TCM P1INT,#02H ;判断是否是外部中断1
JP Z,I_INT1 ;执行外部中断1
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 0FEH ;
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
error_return:
CLR_SECN_2M
SET_FIRST_9M
ex_int_ret:
CLR time_count
AND P1INT,#11111110B
IRET
;****************************************************
;---------------ext int end----------------
;****************************************************
;****************************************************************
; 外部中断1
;****************************************************************
I_INT1:
;****************************************************
t1_int:
VCD_CS_IS_HIGH
JP z,err_ret
INT2_START_IS_HIGH
JP Z,int_val
RR pulse_data0
OR pulse_data0,#80H
VCD_DATA_IS_HIGH
JP no_clr_pulse0
AND pulse_data0,#7FH
no_clr_pulse0:
SUB pulse_count,#1H
JP NE,int1_ret
int1_data_ok:
CP pulse_data0,#0FFH
JP NE,mov_val_to_vcd_ram
clr_pulse_addr:
CLR pulse_addr ;pulse_addr val reset ffh
JP int1_ret
mov_val_to_vcd_ram:
CP pulse_addr,#15H
JP UGT,int1_ret
LD R15,#VCD_SHOW_BYTE_ADDR
ADD R15,pulse_addr
LD @R15,pulse_data0
INC pulse_addr
SET_INT2_START
JP int1_ret
int_val:
;CLR pulse_data0
OR pulse_data0,#80H
INT2_START_IS_HIGH
JP Z,no_clr_pulse07
AND pulse_data0,#7FH
no_clr_pulse07:
LD pulse_count,#07H
jp int1_ret
err_ret:
SET_INT2_START
CLR pulse_count
;clr pulse_data0
;jp int1_ret
int1_ret:
AND P1INT,#11111101B
IRET
;****************************************************************
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
CALL IO_INIT
LD R0,#0A0H
CLR_RAM:
DEC R0
CLR @R0
CP R0,#00H
JP NE,CLR_RAM
EI
SET_POWER
LD ACC_SEN_VAL,#0AH
CALL VFD_WriteLed
LD ACC_SEN_VAL,#012H
CALL REMOTE_DELAY_200uS
call VFD_INIT
;CALL VFD_Refresh_Byte
call CLR_VFD_RAM
LD ACC_SEN_VAL,#CHAR_K
CLR VAL_VFD_ADDR
CALL VFD_SHOW_CHAR
LD Current_Key,#0FFH
LD FUNCTION_STAT,#FUNCTION_Fm
SET_first_change_function
MAIN:
;*********************************************************
; invalid when current_key is 0ffh
;*********************************************************
CLR_KEY_VALID
LD PREVIOUS_KEY,Current_Key
call GET_REMOTE_KEY
CP Current_Key,#0FFH
JP NE,remote_key_valid
call VFD_Read_K ;high 7 is 1
CP Current_Key,#0FFH
JP NE,remote_key_valid
CLR_KEY_VALID
jp vfd_key_invalid
remote_key_valid:
SET_KEY_VALID
vfd_key_invalid:
.IF 0
;@@@@@@@@@@@@@@@@@@@@@@@@@ TEST VFD KEY @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
KEY_VALID_IS_LOW
JP Z,last_even
LD ACC_SEN_VAL,Current_Key
LD VFD_SHOW_DATA_ADDR,#02H
CALL VFD_SHOW_DATA
JP last_even
; jp MAIN
.ENDIF
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
CALL SAME_VFD_KEY_TO_IR_KEY
CALL TURN_ON_OFF_SLEEP
CALL repeat_all_key
KEY_VALID_IS_LOW
JP Z,next_fun0
CP Current_Key,PREVIOUS_KEY
JP NE,key_is_valid
CLR_KEY_VALID
key_is_valid:
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
KEY_VALID_IS_LOW
JP Z,next_fun0
call power_key_par
call volume_key_par
call CHANGE_FUNC_KEY_Par ;function change key
call EQ_key_par
call TRON_STATUS
call TROFF_STATUS
call TRSLEEP_STATUS
call TRTIME_STATUS
;************************FUNCTION:*******************************
next_fun0:
CP FUNCTION_STAT,#Function_Power
JP NE,next_fun1
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
power_fun:
first_change_function_IS_LOW
JP Z,next_fun1
;LD FUNCTION_STAT_bak,FUNCTION_STAT ;时钟状态不必保留
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;****************************************************************
next_fun1:
CP FUNCTION_STAT,#Function_Tape
JP NE,next_fun2
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
tape_fun:
LD FUNCTION_STAT_bak,FUNCTION_STAT ;第一次时执行
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;****************************************************************
next_fun2:
CP FUNCTION_STAT,#Function_Aux
JP NE,next_fun3
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
aux_fun:
LD FUNCTION_STAT_bak,FUNCTION_STAT ;第一次时执行
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;*****************************************************************
next_fun3:
CP FUNCTION_STAT,#FUNCTION_Fm
JP NE,next_fun4
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm_fun:
.IF 1
first_change_function_IS_LOW
JP Z,fm_next_f1;fm_first_f0
;******************************************
;通道转换 fm init ;通道1
;******************************************
CLR_first_change_function
LD FUNCTION_STAT_bak,FUNCTION_STAT ;第一次时执行
SET_RADIO
;call close_tray
fm_first_f0:
;clr EQ_RAM.0
;clr EQ_RAM.1
;mov a,40h
;or a,EQ_RAM
LD ACC_SEN_VAL,#40H
call PT2314_SEND
call set_volume
LD ACC_SEN_VAL,#12H
call REMOTE_DELAY_200uS
call INIT_FM
call REMOVE_RADIO_IN1_VAL
call RADIO_SEND_CMD_TO_RADIO
call REMOVE_RADIO_IN2_VAL
call RADIO_SEND_CMD_TO_RADIO
LD ACC_SEN_VAL,#VFD_PANEL_MHZ
call VFD_SHOW_POINT
LD ACC_SEN_VAL,#VFD_PANEL_CON21
call VFD_SHOW_POINT
LD ACC_SEN_VAL,#VFD_PANEL_TUNED
call VFD_SHOW_POINT
;******************************************
;通道转换 end
;******************************************
fm_next_f1:
PROGRAM_STATIC_IS_HIGH
JP Z,mem_bank
call mem_key_par
CP ACC_RET_VAL,#01H
JP Z,fm_set_mem_init
CALL GET_DIGITAL_VAL
CP ACC_RET_VAL,#01H
JP Z,fm_con_show_station
CALL BACK_FF_KEY
CP ACC_RET_VAL,#01H
JP NE,mem_end
; FF FB KEY
JP fm_change_fre
;数字按键有效
fm_con_show_station:
LD SHOW_STATION,#SHOW_STATION
CLR_RADIO_AUTO_SEARCH_dec
CLR_RADIO_AUTO_SEARCH_inc
DIGITAL_KEY_IS_LOW
JP Z,mem_end ;数字无效
;数字有效
LD FM_STATION,digital_val
;从24C02读取频率
JP fm_change_fre
fm_set_mem_init:
;*********************************************************
LD digital_val,FM_SAVE_STATION
SET_PROGRAM_STATIC
CLR_RADIO_AUTO_SEARCH_dec
CLR_RADIO_AUTO_SEARCH_inc
LD SHOW_STATIC,#SHOW_MEM
;闪烁MEM图标
JP mem_end
;*********************************************************
fm_change_fre:
CALL REMOVE_RADIO_IN1_VAL
call RADIO_SEND_CMD_TO_RADIO
call REMOVE_RADIO_IN2_VAL
call RADIO_SEND_CMD_TO_RADIO
RADIO_AUTO_SEARCH_dec_IS_HIGH
JP Z,fm_if_count
RADIO_AUTO_SEARCH_inc_IS_LOW
JP Z,mem_end
fm_if_count:
;call PT2313_MUTE ;test
call RADIO_CHECK_IFCOUNT
CLR_RADIO_AUTO_SEARCH
CALL RADIO_CHECK_IFCOUNT
CP ACC_RET_VAL,#01H
JP NE,mem_end
SET_RADIO_AUTO_SEARCH
CALL RADIO_CHECK_IFCOUNT
CP ACC_RET_VAL,#01H
JP NE,mem_end
CLR_RADIO_AUTO_SEARCH_inc
CLR_RADIO_AUTO_SEARCH_dec
;call PT2313_NO_MUTE ;test
JP mem_end
mem_bank:
call mem_key_par
CP ACC_RET_VAL,#01H
JP Z,save_fm_station
CALL GET_DIGITAL_VAL
CP ACC_RET_VAL,#01H
JP NE,show_mem_
;清除显示时间
show_mem_:
LD SHOW_STATIC,#SHOW_MEM
;显示时间大于四秒 是 清除编程标志 否反回
save_fm_station:
DIGITAL_KEY_IS_LOW
JP Z,mem_end
LD FM_SAVE_STATION,digital_val
;存储台位
JP mem_end
clr_mem_flag:
CLR_PROGRAM_STATIC
LD digital_val,FM_STATION
mem_end:
CALL Show_Fm_Frequenc_Data
.ENDIF
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;******************************************************************
next_fun4:
CP FUNCTION_STAT,#FUNCTION_Am
JP NE,last_even
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
am_fun:
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;******************************************************************
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
last_even:
CALL VFD_Refresh_Byte
JP MAIN
; 时间C溢出中断
;****************************************************************
TIMER1_INIT:
INC VAL_REMOTE_DELAY_TIME
INC time_count
VCD_CS_IS_LOW
JP Z,TIMER1_JMP_NEXT
SET_INT2_START
TIMER1_JMP_NEXT:
.IF 1
;*****************SEND REMOTE KEY********************************
INC REMOTE_AGIN_TIME0
CP REMOTE_AGIN_TIME0,#32H
JP ULT,next_even1
CLR REMOTE_AGIN_TIME0
INC secon_times
CP secon_times,#62H
JP ULT,next_even1
INC secon_time
clr secon_times
;XOR P0,#00000011B
XOR_FLASH_MEM
;***********************get remode code *************************
.ENDIF
next_even1:
INC time_delay
CP time_delay,#1EH
JP ULT,return_t_int
INC time_delay1
CLR time_delay
CP time_delay1,#11H
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,#10110101B
LD P1INT,#00111000B
CLR P2
LD P2CONH,#10101010B
LD P2CONL,#10101010B
CLR P3
LD P3CON,#01101010
RET
.IF 0
IO_INIT ENDP
.ENDIF
;**************************************************
;
; val_rado_send_data from ACC_SEN_VAL
.IF 0
RADIO_SEND_BYTE_TO_LC72130 proc
.ENDIF
;**************************************************
RADIO_SEND_BYTE_TO_LC72130:
PUSH R0
LD R0,#08H
send_byte_to_lc72130:
radio_clr_clk
call DELAY_TIME
radio_clr_data
TM ACC_SEN_VAL,#1H
JP Z,no_set_radio_data
radio_set_data
no_set_radio_data:
call DELAY_TIME
radio_set_clk
call DELAY_TIME
rr ACC_SEN_VAL
DEC R0
CP R0,#00H
JP NE,send_byte_to_lc72130
end_radio_send_byte:
POP R0
ret
.IF 0
RADIO_SEND_BYTE_TO_LC72130 endp
.ENDIF
;**************************************************
;**************************************************
;
; SEND 24 BIT
; cmd from acc_send_val
;
.IF 0
RADIO_SEND_CMD_TO_RADIO PROC
.ENDIF
;**************************************************
RADIO_SEND_CMD_TO_RADIO:
radio_clr_cs
call RADIO_SEND_BYTE_TO_LC72130
radio_set_cs
LD ACC_SEN_VAL,RADIO_FIRST_VAL
call RADIO_SEND_BYTE_TO_LC72130
LD ACC_SEN_VAL,RADIO_SENC_VAL
call RADIO_SEND_BYTE_TO_LC72130
LD ACC_SEN_VAL,RADIO_THIR_VAL
call RADIO_SEND_BYTE_TO_LC72130
radio_clr_cs
ret
.IF 0
RADIO_SEND_CMD_TO_RADIO ENDP
.ENDIF
;**************************************************
;**************************************************
;
; GET 24 BIT
;
;
.IF 0
RADIO_READ_DATA_FROM_RADIO PROC
.ENDIF
;**************************************************
RADIO_READ_DATA_FROM_RADIO:
PUSH R0
PUSH R1
PUSH R2
radio_clr_cs
LD ACC_SEN_VAL,#2AH
call RADIO_SEND_BYTE_TO_LC72130
radio_set_cs
LD R0,#DATA_ADDR ;
LD R1,#03H
radio_read_byte:
CLR R2
LD ACC_SEN_VAL,#08H
radio_read_bit:
radio_clr_clk
call DELAY_TIME
radio_set_clk
call DELAY_TIME
RL R2
radio_get_data
JP Z,radio_no_set_1
OR R2,#1H
radio_no_set_1:
DEC ACC_SEN_VAL
CP ACC_SEN_VAL,#00H
JP NE,radio_read_bit
radio_read_next:
LD @R0,R2
INC R0
DEC R1
CP R1,#00H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -