📄 newatu.asm
字号:
BEGIN BIT 0H
T0_FLAG BIT 01H
T1_FLAG BIT 02H
SER_FLAG BIT 03H
R_FL BIT 04H
R_FLB BIT 05H
R_RL BIT 06H
R_RLB BIT 07H
FSK_EN BIT 08H
ONOFFHOOK BIT 09H
;
REC_NUM_H EQU 6CH
REC_NUM_T EQU 6DH
buf EQU 17H
TIMER_1S EQU 18H
CARD_NUM EQU 19H
CMD_HEAD EQU 1AH
CMD_TAIL EQU 1BH
MSG_HEAD EQU 6EH
MSG_TAIL EQU 6FH
MSG_TAIL_H EQU 60H
MSG_HEAD_H EQU 61H
MSG_SUM EQU 62H
BACK_P EQU 63H
ONCOUNTL EQU 64H
ONCOUNTH EQU 65H
OFFCOUNTL EQU 66H
OFFCOUNTH EQU 67H
SERONL EQU 68H
SERONH EQU 69H
SEROFFL EQU 6AH
SEROFFH EQU 6BH
SER_COUNT EQU 7AH
CHECK_NUM EQU 1EH
FSK_BUF EQU 2FH
FLL_BUF EQU 23H
FLH_BUF EQU 24H
RLL_BUF EQU 25H
RLH_BUF EQU 26H
FLL_BUFB EQU 27H
FLH_BUFB EQU 28H
RLL_BUFB EQU 29H
RLH_BUFB EQU 2AH
OFFHOOKL_BUF EQU 2BH
OFFHOOKH_BUF EQU 2CH
FSK_ENL_BUF EQU 2DH
FSK_ENH_BUF EQU 2EH
FSK_D_B EQU 2FH
ptr_buf equ 30h
CHAN_FLAG EQU 80H
;
CMD_P_H EQU 0H
MSG_P_H EQU 1H
SEND EQU 0B0H
RECEIVE EQU 0C0H
RESET_1 EQU 0D0H
BEGIN_WORK EQU 0E0H
NOTHING EQU 99H
OK EQU 0F0H
FALSE EQU 0FH
MAXSEND EQU 03H
NUM_BUFL DATA 1fH
PKT1 EQU 70H
PKT2 EQU 71H
PKT3 EQU 72H
PKT4 EQU 73H
CHANNEL EQU 74H
RES1 EQU 75H
RES2 EQU 76H
RES3 EQU 77H
RES4 EQU 78H
HADDR EQU 0a1h;P2
OFFHOOKL EQU 8000H ;
OFFHOOKH EQU 8001H ;
RING_FLL EQU 8004H ;0-7
RING_FLH EQU 8006H ;8-15
RING_RLL EQU 8005H ;0-7
RING_RLH EQU 8007H ;8-15
CARD_NUM_ADDR EQU 8009H ;
WDT_ADDR EQU 800BH ;
FSKENL EQU 800CH ;0-7
FSKENH EQU 800DH ;8-15
READ_FSK EQU 0E000H ;
FSK_FDRN EQU 0A000H ;
BEGFSK_ADDR EQU 0C000H ;(C000H-C0F0H,)
OFFHOOK EQU 1 ;
CALL_OUT EQU 3
ONHOOK EQU 2 ;
polarity EQU 10 ;
RING_1 EQU 1
RING_N EQU 8
RING_STOP EQU 7
TALKING EQU 11H
IDLE EQU 18H
CMD_ERR EQU 0CH
NUM_ONE EQU 31H
NUMB EQU 32H
NUM_END EQU 33H
;
LINE_STATE EQU 30H
OFF_TIMER EQU 40H
ON_TIMER EQU 50H
FSK_STA EQU 0C0H
NUM_LEN EQU 0D0H
TIME_COUNT EQU 0E0H
WR_BUF EQU 0F0H
;
SP_PTR EQU 80H
TMOD_VAL EQU 11H ;TIMER0=MODE1,TEMER1=MODE1
SCON_VAL EQU 0B0H ;SERIAL PORT IS MODE2
PCON_VAL EQU 0H;80H ;SMOD BIT=0
TCON_VAL EQU 50H ;START TIMER0
IE_VAL EQU 9aH ;ENABLE SER AND T1 INT
IP_VAL EQU 02H ;SER INT IS HIGN 10H
TH1_VAL EQU 0b1h;0D8H ;10MS AT 12MHZ 0D8F0H
TL1_VAL EQU 0e0h;0F0H ;10MS AT 24MHZ IS 0B1E0H
TH0_VAL EQU 00f8h;FEH ;50MS AT 12MHZ IS 03CB0H
TL0_VAL EQU 02fh;80H;080H ;OLD 64
;############################################################
;start program
;############################################################
ORG 0000H
LJMP BEGIN_PROG
ORG 0003H
NOP
RETI
ORG 000BH
LJMP TIMER0_INT
ORG 0013H
NOP
RETI
ORG 001BH
LJMP TIMER1_INT
ORG 0023H
LJMP ser_int
ORG 002BH
NOP
RETI
ORG 30H
T0_PROC: JMP T0_INT10
TIMER0_INT: ; JMP T0_INTEND
PUSH ACC
PUSH DPH
PUSH DPL
T0_INT5: MOV DPTR,#FSK_FDRN
MOVX A,@DPTR
; MOV P2,#0A0H
; MOV R1,#0
; MOVX A,@R1
JnZ T0_INT8
movx a,@dptr
jz T0_PROC;T0_INT10
T0_INT8:
PUSH B
PUSH PSW
CLR RS0
CLR RS1
FSK_PROC: CLR C
RRC A
PUSH ACC
MOV B,#10H
MUL AB
; MOV R1,A
; MOV P2,#0C0H
; MOVX A,@R1
; MOV P2,#0E0H
; MOV R1,#0
MOV DPTR, #BEGFSK_ADDR
MOV DPL,A
MOVX A, @DPTR
con: SETB P1.2
JB P1.2, con ;
MOV DPTR,#READ_FSK
TEST55:MOVX A, @DPTR
MOV B,A
MOVX A,@DPTR
CJNE A,0F0H,TEST55
CJNE A,#55H,FSK_PROC15
POP ACC
ADD A,#FSK_STA
MOV R1,A
MOV @R1,#5
JMP FSK_PROCEND
FSK_PROC15:
MOV DPH,#60h
MOV DPL,NUM_BUFL
MOVX @DPTR,A
INC NUM_BUFL
CJNE A,#04H,FSK_PROC20
POP ACC
ADD A,#FSK_STA
MOV R1,A
MOV A,@R1
JZ FSK_PROCEND
MOV @R1,#10H
JMP FSK_PROCEND
FSK_PROC20:
MOV HADDR,#3
MOV R1,rec_num_t
; mov dph,#3
; mov dpl,rec_num_t
; movx @dptr,a
; inc dpl
MOVX @R1,A
INC R1
POP ACC
; movx @dptr,a
MOVX @R1,A
ADD A,#FSK_STA
MOV R1,A
MOV A,@R1
JZ FSK_PROCEND
CJNE A,#10H,FSK_PROC30
MOV @R1,#15H
MOV A,@R1
MOV A,R1
ADD A,#10H
MOV R1,A ;TIME_COUNT
MOV A,B
INC A
MOV @R1,A
MOV A,R1
ADD A,#10H
MOV R1,A
MOV @R1,#9
JMP FSK_PROCEND
FSK_PROC30:
CJNE A,#15H,FSK_PROC35
FSK_PROC35:JC FSK_PROCEND
MOV A,#2
ADD A,REC_NUM_T
CJNE A,#200,FSK_PROC36
CLR A
FSK_PROC36:
MOV REC_NUM_T,A
FSK_PROCEND: POP PSW
POP B
JMP T0_INT5
T0_INT10: POP DPL
POP DPH
POP ACC
T0_INTEND: MOV TL0,#TL0_VAL
MOV TH0,#TH0_VAL
SETB T0_FLAG
RETI
TIMER1_INT: MOV TL1,#TL1_VAL
MOV TH1,#TH1_VAL
INC TIMER_1S
SETB T1_FLAG
RETI
SER_INT: CLR EA
PUSH PSW
PUSH ACC
PUSH DPH
PUSH DPL
PUSH B
SETB RS0
CLR TI
JB RI, SER_INT1
CLR TI
JMP SERINT_END
SER_INT1:
CLR TB8
JNB RB8, XSER_INT1 ;NOT ADDRESS BYTE.
clr rb8
MOV A, SBUF
CLR RI
MOV R2, A
ANL A, #0FH ;GET CARD_NO IN FIRST BYTE FROM NOD
; add a,#50h
CJNE A,CARD_NUM,XSER_INT1
JMP SER_INT2
XSER_INT1: JMP SERINT_END
SER_INT2: CLR TB8
CLR SM2
MOV A, R2
ANL A, #0F0H
CJNE A, #RESET_1, SER_INT21
LJMP BEGIN_PROG
JMP RESET_CARD
SER_INT21: CJNE A, #BEGIN_WORK, SER_INT22
MOV A, CARD_NUM
add a,#50h
MOV SBUF, A
SETB BEGIN
JMP SERINT_END
SER_INT22: CJNE A, #SEND, SER_INT23
jnb begin, serint_end
MOV A, CARD_NUM
add a,#50h
MOV SBUF, A
CALL SEND_MSG
SETB SER_FLAG
JMP SERINT_END
SER_INT23: CJNE A, #RECEIVE, XSER_INT1
jnb begin, serint_end
MOV A, CARD_NUM
add a,#50h
MOV SBUF, A
CALL RECEIVE_CMD
SETB SER_FLAG
SERINT_END: SETB SM2
POP B
POP DPL
POP DPH
POP ACC
POP PSW
CLR RS0
CLR RS1
SETB EA
RETI
SEND_MSG: MOV SER_COUNT,#0
MOV A,MSG_SUM
JNZ SEND_MSG1
SEND_MSG01: CALL T_DELAY
JNC SEND_MSG0
MOV A, #NOTHING
MOV SBUF, A
SENDNOTHING: JNB TI,SENDNOTHING
CLR TI
JMP SENDEND
SEND_MSG0: JMP SENDEND
SEND_MSG1: CJNE A,#MAXSEND,SEND_MSG5
SEND_MSG5: JC SEND_MSG10
MOV A,#MAXSEND
SEND_MSG10: MOV R4,A ;SEND MSG SUM
MOV R2,A
CALL T_DELAY
JNC SEND_MSG0
SEND2: MOV A,R2
MOV SBUF, A ;SEND MSG_SUM
MOV CHECK_NUM,A
; MOV DPH,#MSG_P_H
; MOV DPL,MSG_HEAD
MOV DPH,MSG_HEAD_H
MOV DPL,MSG_HEAD
MOV B, MSG_HEAD
SEND_LENGH:
CALL T_DELAY
JNC SEND_MSG0
MOV A,#3
MOV SBUF, A ;SEND MSG LENGTH
MOV R3,A
XRL A,CHECK_NUM
MOV CHECK_NUM,A
SEND3: CALL T_DELAY
JNC SEND_MSG0
CALL DELAY10
MOVX A,@DPTR
; MOVX A,@R1
MOV SBUF, A ;SEND MSG
INC DPTR
; INC R1
XRL A,CHECK_NUM
MOV CHECK_NUM,A
MOV A,DPH
CJNE A,#30H,SEND35
MOV DPH,#20H
SEND35:
DJNZ R3, SEND3
MOV A,B
ADD A,#4
MOV DPL,A
DJNZ R2,SEND_LENGH
CALL T_DELAY
JNC SEND_MSG0
MOV A,CHECK_NUM
MOV SBUF, A
CALL T_DELAY
JNC SEND_MSG0
CALL R_DELAY
JNC SEND_MSG0
MOV A, SBUF
CLR RI
CJNE A, #OK, SENDEND1
SEND32: MOV A,MSG_SUM
SUBB A,R4
MOV MSG_SUM,A
MOV A,R4
MOV B,#4
MUL AB
CLR C
ADD A,MSG_HEAD
MOV MSG_HEAD,A
JNC SENDEND
INC MSG_HEAD_H
MOV A,MSG_HEAD_H
CJNE A,#30H,SENDEND
MOV MSG_HEAD_H,#20H
JMP SENDEND
SENDEND1:
SENDEND: RET
;
RECEIVE_CMD:
MOV A,CMD_TAIL ;CMD BUFFER IS OUT RAM 00H-0FFH
ADD A,#4
CJNE A,CMD_HEAD,RECEIVE_CMD0
RECEIVE0: JMP REC_END
RECEIVE_CMD0:; MOV DPH,#CMD_P_H
; MOV DPL,CMD_TAIL
MOV HADDR,#CMD_P_H
MOV R1,CMD_TAIL
MOV B,CMD_TAIL ;BACKUP OF CMD_POINT
CALL T_DELAY
JNC RECEIVE0
CALL R_DELAY
JNC RECEIVE0
MOV A, SBUF
CLR RI
MOV R4, A ;RECEIVE PACKEGE_SUM
MOV R2, A ;RECEIVE PACKGE SUM
MOV CHECK_NUM, A ;CHECK SUM
REC_CMD: CALL R_DELAY
JNC RECEIVE0
MOV A, SBUF
CLR RI
MOV R3, A ;RECEIVE LENGTH
XRL A, CHECK_NUM
MOV CHECK_NUM, A
REC_CMD1: CALL R_DELAY
JNC RECEIVE0
MOV A, SBUF ;REC CMD
CLR RI
; MOVX @DPTR, A
MOV P0,R1
MOVX @R1,A
INC R1
; INC DPL
XRL A, CHECK_NUM
MOV CHECK_NUM, A
DJNZ R3, REC_CMD1
MOV A,B
ADD A,#2
MOV R1,A
MOV B,A
DJNZ R2, REC_CMD
CALL R_DELAY
JNC REC_CMD12
MOV A, SBUF ;RECEIVE CHECK_SUM
CLR RI
CJNE A, CHECK_NUM, REC_CMD2
MOV A, #OK
MOV SBUF, A
MOV B,#02
MOV A,R4
MUL AB
ADD A,CMD_TAIL
MOV CMD_TAIL, A
CALL T_DELAY
JMP REC_END
REC_CMD12: JMP REC_END
;
REC_CMD2: MOV A, #FALSE
MOV SBUF, A
CALL T_DELAY
REC_END: RET
;
R_DELAY: CLR A
R_DELAY1: JB RI, R_DELAY5
INC A
CJNE A, #40H, R_DELAY1
JMP R_DELAY6
R_DELAY5: SETB C
R_DELAY6: RET
;
T_DELAY: CLR A
T_DELAY1: JB TI, T_DELAY5
INC A
CJNE A, #20H, T_DELAY1
JMP T_DELAY6
T_DELAY5: SETB C
T_DELAY6: CLR TI
RET
DELAY10: CLR A
DELAY15: INC A
CJNE A,#3,DELAY15
RET
RESET_CARD:
CLR EA
JMP RESET_CARD
BEGIN_PROG: SETB P1.0
clr ea
mov psw,#00
mov ptr_buf,#0
MOV R0,#0
MOV A,#0
BEGIN_PROG5: mov a,#0
MOV @R0,A
INC R0
CJNE R0,#0,BEGIN_PROG5
call clear_wdt
MOV DPTR,#0
BEGIN_PROG10: clr a
MOVX @DPTR,A
movx a,@dptr
INC dpl
mov a,dpl
jnz begin_prog10
inc dph
push dpl
push dph
call clear_wdt
pop dph
pop dpl;
MOV a,DPH
CJNE a,#80h,BEGIN_PROG10
JMP CHECK20
MOV R4,#0
MOV R5,#0
MOV A,#7
CHECK10:
MOV DPTR,#0
ADD A,#7
; MOV 50H,A
CHECK: ADD A,#5
MOVX @DPTR,A
MOV 50H,A
MOV B,A
MOVX A,@DPTR
CJNE A,50H,CHECK_ERR
INC DPTR
MOV R2,DPH
CJNE R2,#80H,CHECK
INC R4
CJNE R4,#0,CHECK10
INC R5
JMP CHECK10
CHECK_ERR:
JMP CHECK10
CHECK20:
CLR A
MOV DPTR, #OFFHOOKL ;
MOVX @DPTR, A
INC DPL
MOVX @DPTR, A
MOV DPTR, #FSKENL ;
MOVX @DPTR, A
INC DPL
MOVX @DPTR, A
MOV R7, #0
MOV DPTR, #BEGFSK_ADDR
START85:MOV B, #10H
MOV A,R7
MUL AB
MOV DPL, A
MOVX A, @DPTR
inc r7
CJNE R7,#10H ,START85
NOP
MOV DPTR, #READ_FSK
MOVX A, @DPTR
CLR P1.0
CLR P1.0
;
MOV TMOD, #11H ;T01,T11
MOV TH1, #TH1_VAL
MOV TL1, #TL1_VAL
MOV TL0, #TL0_VAL
MOV Th0, #TH0_VAL
;
; MOV SCON, #SCON_VAL ;
MOV TMOD, #TMOD_VAL ;TIMER0 AND TIMER1 IN MODE 1
MOV TCON, #TCON_VAL ;TIMER0 WORK
MOV SCON, #SCON_VAL;0B8H ;MODE 2,SET RI UNTIL RECEIVE STOP BIT,
; PERMIT RECEIVE,THE NINTH BIT IN MODE 2
MOV IP, #IP_VAL ;SERIAL INTERRUPT IS HIGH LEVEL
MOV 87H, #PCON_VAL ;PCON, BAUD RATE DO NOT DOUBLE
MOV SP, #SP_PTR
MOV MSG_HEAD,#0
MOV MSG_TAIL,#0
MOV MSG_TAIL_H,#20H
MOV MSG_HEAD_H,#20H
MOV MSG_SUM,#0
MOV R2,#10H
MOV R0,#LINE_STATE
call clear_wdt
MOV A,#IDLE
INIT_STATE: MOV @R0,A
INC R0
DJNZ R2,INIT_STATE
MOV IE, #IE_VAL ; ENABLE INTERRUPT
WAIT_BEGIN: CALL GET_CARD_NO
CALL CLEAR_WDT
MOV DPTR,#RING_FLL
MOVX A,@DPTR
MOV FLL_BUF,A
MOV FLL_BUFB,A
MOV DPTR,#RING_FLH
MOVX A,@DPTR
MOV FLH_BUF,A
MOV FLH_BUFB,A
MOV DPTR,#RING_RLL
MOVX A,@DPTR
MOV RLL_BUF,A
MOV RLL_BUFB,A
MOV DPTR,#RING_RLH
MOVX A,@DPTR
MOV RLH_BUF,A
MOV RLH_BUFB,A
MOV A,TIMER_1S
CJNE A,#25,WAIT_BEGIN5
WAIT_BEGIN5: JC WAIT_BEGIN
MOV TIMER_1S,#0
CPL P1.1
JNB BEGIN,WAIT_BEGIN
MOV SER_COUNT,#0
; MOV MSG_TAIL,#30H
MAIN: MOV A,SER_COUNT
CJNE A,#30,MAIN3
MAIN3: JC MAIN5
JMP BEGIN_PROG
MAIN5: CALL CLEAR_WDT
MOV A,CMD_HEAD
CJNE A,CMD_TAIL,MAIN10
JMP MAIN15
MAIN10: CALL CMD_PROC
MAIN15: MOV A,REC_NUM_H
CJNE A,REC_NUM_T,MAIN18
JMP MAIN19
MAIN18: ; CJNE A,#0FCH,MAINTEST
; NOP
MAINTEST: CALL RECPROC
CALL CLEAR_WDT
MAIN19:
JNB T1_FLAG,MAIN
CLR T1_FLAG
CALL LINE_PROC
CALL CLEAR_WDT
MOV A,TIMER_1S
CJNE A,#100,MAIN20
MAIN20: JC MAIN
MOV TIMER_1S,#0
INC SER_COUNT
CPL P1.1
CLR P1.0
JMP MAIN
RECPROC: ;MOV DPH,#3
;MOV DPL,REC_NUM_H
MOV DPH,#3
MOV DPL,REC_NUM_H
MOVX A,@DPTR ;WRITE A NUMBER PACKET
; MOVX A,@R0
MOV RES4,A
MOV B,A
; MOV RES1,A
INC DPTR
; INC R0
NOP
MOVX A,@DPTR
; MOVX A,@R0
MOV CHANNEL,A
; mov RES2,A ;CHANNELEL NUMBER
ADD A,#FSK_STA
MOV R0,A
MOV A,@R0
CJNE A,#15H,RECPROC20
MOV A,CHANNEL
ADD A,#NUM_LEN
MOV R0,A
MOV A,@R0
DEC A
MOV @R0,A
MOV A,#TIME_COUNT
ADD A,CHANNEL
MOV R0,A
MOV A,@R0
DEC A
MOV @R0,A
JNZ REC_NUM_END
MOV A,CHANNEL ;GET CALLER ID LENGTH
ADD A,#FSK_STA
MOV R0,A
MOV @R0,#20H ;RECEIVE THE FIRST NUMBER
MOV A,#10H
ADD A,R0
MOV R0,A
MOV A,@R0
DEC A
MOV @R0,A
MOV PKT1,#NUM_ONE
MOV PKT2,CHANNEL
MOV A,RES4
SUBB A,#30H
MOV PKT3,A
CALL WRITE_MSG
JMP REC_NUM_END
RECPROC20:
CJNE A,#20H,REC_NUM_END5
MOV PKT1,#NUMB
MOV PKT2,CHANNEL
MOV A,RES4
SUBB A,#30H
MOV PKT3,A
;*****************************************
; CALL WRITE_MSG
MOV A,#NUM_LEN
ADD A,CHANNEL
MOV R0,A
MOV A,@R0
DEC A
MOV @R0,A
JNZ RECPROC30
MOV A,CHANNEL ;GET CALLER ID LENGTH
ADD A,#FSK_STA
MOV R0,A
MOV @R0,#0
MOV PKT1,#NUM_END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -