📄 receive.asm
字号:
ACT_REG EQU 20H
cpufree EQU 01H
cut_call_sever_act EQU 20H.0
answer_call_sever_act EQU 20H.1
serial_port_sever_act EQU 20H.2
password_sever_act EQU 20H.3
bell_time_act EQU 20H.4
bell_scan_act EQU 20H.5
press_key_time_act EQU 20H.6
press_key_scan_act EQU 20H.7
password_sever_enabled EQU 21H.0
bell_time_enabled EQU 21H.1
bell_scan_enabled EQU 21H.2
press_key_time_enabled EQU 21H.3
press_key_scan_enabled EQU 21H.4
one_sec_enabled EQU 21H.5
half_sec_enabled EQU 21H.6
one_of_ten_sec_enabled EQU 21H.7
cut_call_sever_enabled EQU 22H.1
serial_port_sever_enabled EQU 22H.2
answer_call_sever_enabled EQU 22H.3
key_value_enabled EQU 22H.4
bell_time_clear_enabled EQU 22H.5
key_time_clear_enabled EQU 22H.6
enabled_reg1 EQU 21H
enabled_reg2 EQU 22H
temp_bell_scan_result EQU 23H.3
bell_scan_reg EQU 23H.2
temp_key_scan_result EQU 23H.4
scan_reg EQU 23H
lasttime_bell_scan_result EQU 24H.0
nonce_bell_scan_result EQU 24H.1
nonce_key_scan_result EQU 24H.4
lasttime_key_scan_result EQU 24H.5
WORKREG_begin EQU 43H
WORKREG_END EQU 4DH
time_50ms EQU 26H.0
time_100ms EQU 06H
time_500ms EQU 07H
bell_port EQU P0.4
bell_scan_count EQU 47H
bell_time EQU 48H
key_act_port EQU P2.4
read_key_enabled_port EQU P2.5
keyboard_port EQU P0
key_value EQU 49H
key_time EQU 4AH
CANCEL_KEY EQU 0EH
OK_KEY EQU 0FH
passwordkey EQU 4BH
enter_pasword_key_count EQU 4CH
real_pasword_unit EQU 4FH
real_password_begin_reg EQU 3BH
password_begin_reg EQU 13H
enter_pasword_wrong_time EQU 4EH
controlkey EQU 45H
need_control_port EQU 46H
serial_port_state EQU 42H
answercall_port EQU P2.6
CPU_working EQU P3.7
control_port EQU P1 ;暂时定为P1
control_en_port EQU P3.4
desplay_access EQU 40H
desplay_ad EQU 41H
DIN EQU P1.0
CLK EQU P3.6
LOAD EQU P1.1
desplay_light EQU 6DH
desplay_reg1 EQU 18H
desplay_reg8 EQU 1FH
desplay_regEND EQU 20H
last_desplay_reg1 EQU 33H
last_desplay_reg8 EQU 3AH
systime_ad EQU 02H
min EQU 03H
hour EQU 04H
one_min_enabled EQU 22H.0
press_key_value EQU 62H
keyboard_value_enabled EQU 25H.0
scan_key_result_reg1 EQU 63H
scan_key_result_reg2 EQU 64H
scan_key_result_reg3 EQU 65H
scan_key_result_reg4 EQU 66H
press_port EQU P0
scan_presskey_act EQU 25H.1
scan_presskey_enabled EQU 25H.2
set_state_value EQU 67H
change_class_key EQU 02H
select_key EQU 04H
set_key EQU 08H
select_port_key EQU 0CH
set_port_state EQU 10H
set_open_port_state EQU 20H
set_close_port_state EQU 30H
set_systime_state EQU 40H
set_deslpay_state EQU 50H
set_password_state EQU 60H
desplay_key_value_state EQU 70H
DESPLAY_SEVER_ENABLED EQU 26H.7
NOW_RECORD_SOUND_stat EQU 80H
RESET_ALL_STATE EQU 90H
DESPLAY_IF_CALL_STATE EQU 90H
if_FLASH EQU 24H.3
open_port_time_ad EQU 70H
off_port_time_ad EQU 50H
port_time_enabled_state EQU 6AH
L_now_set_port EQU 69H
H_now_operation_port EQU 69H
time_open_port_state EQU 6BH
time_close_port_state EQU 6CH
sound_enable_port EQU p2.3
time_playorrecord_enabled EQU 24H.2
time_playorrecord_CLR_enabled EQU 25H.5
sound_record_enabled EQU 25H.4
time_playorrecord_reg EQU 6EH
sound_playrec_len EQU 6FH
begin_playrec_reg EQU 44H
sound_play_enabled EQU 25H.3
reset_play_port EQU p2.1
need_record_reg EQU 60H
need_record_LEN EQU 61H
addport EQU P2.2
time_press_key EQU 68H
time_press_key_enabled EQU 25H.6
time_press_key_clear_enabled EQU 25H.7
USEEDREG_END EQU 80H
CS EQU P2.0
SCK BIT P1.2
SO BIT P1.3
SI BIT P1.4
TXEN EQU P3.2
send_begin_reg EQU 70H
send_count EQU 75H
RECEIVE_BEGIN_REG EQU 50H
send_data_act EQU 26H.1
COLTROL_PORT_CODE_ID EQU 10H
data_sending EQU 26H.3
send_data_time_act EQU 26H.4
send_data_time_clear_enabled EQU 26H.5
SEND_TIME_REG EQU 76H
RECEIVE_data_act EQU 26H.2
ENABLED_RECEIVE_NEXT_DATA EQU 26H.6
ORG 0000H
LJMP MAIN ;从机主程序入口地址
ORG 0023H
LJMP COMMUNICATE ;串行口中断入口地址
ORG 0040H
MAIN: MOV P1,#00H
MOV serial_port_state,#00H
ACALL control_port_CODE
MOV P2,#00H ;开始初始化
MOV P0,#00H
CLR RS0 ;清RAM
CLR RS1
MOV R0,#00H
RAM_CLR:MOV @R0,#00H
INC R0
CJNE R0,#USEEDREG_END,RAM_CLR
MOV SP,#26H
CLR TXEN
SETB CPU_working
MOV SCON,#0F0H ;串行口方式2,发送,禁收
MOV A,TMOD
ANL A,#0FH
ORL A,#20H
MOV TMOD,A
MOV TH1,#0D9H
MOV TL1,#0D9H
CLR RS1
SETB RS0
SETB SM2
SETB EA ;CPU开中断
SETB TR1
SETB ES ;串行口开中断
WAIE_DATA:
JNB RECEIVE_data_act,$
MOV R0,#RECEIVE_BEGIN_REG
ACALL CHECK_SUM_CODE
CJNE A,RECEIVE_BEGIN_REG+4,END_WAIE_DATA
CPL CPU_working ;cpu工作指示灯
LCALL LIST_transfer_CODE
END_WAIE_DATA:
SETB SM2
CLR RECEIVE_data_act
SJMP WAIE_DATA ;等待中断
;串行口中断服务程序
COMMUNICATE:
PUSH ACC
PUSH PSW
CLR RS0
CLR RS0
CLR RI
JB RECEIVE_data_act,END_COMMUNICATE_INT;上个数据是否已取走
JNB RB8,GOON_COMMUNICATE_INT ;取RB8(信息特征位)
SETB SM2
MOV send_count,#00H
MOV A,SBUF
CJNE A,#85H,END_COMMUNICATE_INT ;判断是否为己方地址
CLR SM2 ;清SM2,为后面接受数据帧作准备
GOON_COMMUNICATE_INT:
MOV R0,#RECEIVE_BEGIN_REG
MOV A,send_count
ANL A,#0FH
ADD A,R0
MOV R0,A
MOV A,SBUF ;取接受信息
MOV @R0,A
MOV A,send_count
ANL A,#0FH
INC A
CJNE A,#05H,CON_RECEIVE
MOV A,#00H
SETB SM2
SETB RECEIVE_data_act
CON_RECEIVE:
ANL send_count,#0F0H
ORL send_count,A
END_COMMUNICATE_INT:
POP PSW
POP ACC
RETI ;中断返回
CHECK_SUM_CODE:
MOV A,@R0
INC R0
XRL A,@R0
INC R0
XRL A,@R0
INC R0
XRL A,@R0
RET
LIST_transfer_CODE:
MOV A,RECEIVE_BEGIN_REG+1
ANL A,#0F0H
CJNE A,#COLTROL_PORT_CODE_ID,JUDGE_OTHER_ID
ACALL COLTROL_PORT_CODE
RET
JUDGE_OTHER_ID:
RET
COLTROL_PORT_CODE:
MOV A,RECEIVE_BEGIN_REG+2
JZ GOON_COLTROL_PORT_CODE
GOON_COLTROL_PORT_CODE:
MOV A,RECEIVE_BEGIN_REG+3
MOV serial_port_state,A
ACALL control_port_CODE
END_COLTROL_PORT_CODE:
RET
control_port_CODE: ;对74LS373操作
MOV control_port,serial_port_state
SETB control_en_port
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLR control_en_port
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -