📄 zxce_1_cpu2.asm
字号:
push dph
push dpl
push acc
clr es ;禁止UART0中断
mov a,databuf
mov sbuf0,a
sent_byte0_1:
lcall set_wdot
jnb ti,sent_byte0_1
clr ti
pop acc
pop dpl
pop dph
ret
;------------从串口0接收一个字节-------------
receive_byte0:
push dph
push dpl
push acc
receive_byte0_1:
lcall set_wdot
jnb ri,receive_byte0_1
clr ri
mov a,sbuf0
mov databuf,a
pop acc
pop dpl
pop dph
ret
;------------从串口1发送一个字节-------------
sent_byte1:
push dph
push dpl
push acc
anl eie2,#10111111b ;禁止UART1中断
mov a,databuf
mov sbuf1,a
sent_byte1_1:
lcall set_wdot
mov a,scon1
anl a,#00000010b
cjne a,#02h,sent_byte1_1
mov a,scon1
anl a,#11111101b
mov scon1,a
pop acc
pop dpl
pop dph
ret
;-----------从串口1接收一个字节-----------
receive_byte1:
push dph
push dpl
push acc
receive_byte1_1:
lcall set_wdot
mov a,scon1
anl a,#00000001b
cjne a,#01h,receive_byte1_1
mov a,scon1
anl a,#11111110b
mov scon1,a
mov a,sbuf1
mov databuf,a
pop acc
pop dpl
pop dph
ret
;--------------------串口0发送字符串--------------------
sent_char0:
push dph
push dpl
push acc
sent_char0_0:
clr a
movc a,@a+dptr
cjne a,#0ffh,sent_char0_1
ljmp sent_char0_out
sent_char0_1:
mov databuf,a
lcall sent_byte0
inc dptr
ljmp sent_char0_0
sent_char0_out:
lcall set_wdot
pop acc
pop dpl
pop dph
ret
;------------------串口0接收字符串--------------------
receive_char0:
push 07h
push 06h
push 05h
push 04h
mov dptr,#rxd_buf
clr receive_data_ok
receive_char0_0:
lcall set_wdot
mov r4,#0ah
receive_char0_1:
lcall set_wdot
mov r5,#2ah
receive_char0_2:
lcall set_wdot
mov r6,#2ah
receive_char0_3:
lcall set_wdot
mov r7,#0ffh
receive_char0_4:
jnb ri,receive_char0_5
clr ri
mov a,sbuf0
movx @dptr,a
inc dptr
setb receive_data_ok
ljmp receive_char0_0
receive_char0_5:
djnz r7,receive_char0_4
djnz r6,receive_char0_3
djnz r5,receive_char0_2
djnz r4,receive_char0_1
receive_char0_out:
pop 04h
pop 05h
pop 06h
pop 07h
ret
;-----------从串口1发送字符串-------------
sent_char1:
push dph
push dpl
push acc
mov dptr,#txd_buf
sent_char1_0:
movx a,@dptr
cjne a,#0ffh,sent_char1_1
ljmp sent_char1_out
sent_char1_1:
mov databuf,a
lcall sent_byte1
inc dptr
ljmp sent_char1_0
sent_char1_out:
lcall set_wdot
pop acc
pop dpl
pop dph
ret
;-----------从串口1接收字符串-------------
receive_char1:
push 07h
push 06h
push 05h
push 04h
mov dptr,#wendu_databuf
clr receive_data_ok
receive_char1_0:
lcall set_wdot
mov r4,#10h
receive_char1_1:
lcall set_wdot
mov r5,#2ah
receive_char1_2:
lcall set_wdot
mov r6,#2ah
receive_char1_3:
lcall set_wdot
mov r7,#0ffh
receive_char1_4:
mov a,scon1
anl a,#00000001b
cjne a,#01h,receive_char1_5
mov a,scon1
anl a,#11111110b
mov scon1,a
mov a,sbuf1
movx @dptr,a
inc dptr
setb receive_data_ok
ljmp receive_char1_0
receive_char1_5:
djnz r7,receive_char1_4
djnz r6,receive_char1_3
djnz r5,receive_char1_2
djnz r4,receive_char1_1
receive_char1_out:
pop 04h
pop 05h
pop 06h
pop 07h
ret
;*********************************************
;=============关于TC35i子程序==============
;=============AT指令==============
;------------------"AT"--------------------
sent_at:
lcall clr_rxd_buf
mov dptr,#aat_at
lcall sent_char0
lcall receive_char0
mov dptr,#rxd_buf
sent_at_0:
movx a,@dptr
cjne a,#4bh,sent_at_1
ljmp sent_at_out
sent_at_1:
cjne a,#0ffh,sent_at_2
ljmp main
sent_at_2:
inc dptr
ljmp sent_at_0
sent_at_out:
lcall set_wdot
ret
;-----------------"ATE0"-----------------
sent_ate0:
lcall clr_rxd_buf
mov dptr,#aat_ate0
lcall sent_char0
lcall receive_char0
mov dptr,#rxd_buf
sent_ate0_0:
movx a,@dptr
cjne a,#4bh,sent_ate0_1
ljmp sent_ate0_out
sent_ate0_1:
cjne a,#0ffh,sent_ate0_2
ljmp main
sent_ate0_2:
inc dptr
ljmp sent_ate0_0
sent_ate0_out:
lcall set_wdot
ret
;----------------"AT+CMGF=1"---------------
sent_cmgf:
lcall clr_rxd_buf
mov dptr,#aat_cmgf
lcall sent_char0
lcall receive_char0
mov dptr,#rxd_buf
sent_cmgf_0:
movx a,@dptr
cjne a,#4bh,sent_cmgf_1
ljmp sent_cmgf_out
sent_cmgf_1:
cjne a,#0ffh,sent_cmgf_2
ljmp main
sent_cmgf_2:
inc dptr
ljmp sent_cmgf_0
sent_cmgf_out:
lcall set_wdot
ret
;-------------"AT+CSQ"-----------------
sent_csq:
lcall clr_rxd_buf
mov dptr,#aat_csq
lcall sent_char0
lcall receive_char0
mov dptr,#rxd_buf
sent_csq_0:
movx a,@dptr
cjne a,#20h,sent_csq_1
inc dptr
movx a,@dptr
mov csqbuf1,a
inc dptr
movx a,@dptr
mov csqbuf2,a
cjne a,#2ch,sent_csq_out
mov a,csqbuf1
mov csqbuf2,a
mov a,#30h
mov csqbuf1,a
ljmp sent_csq_out
sent_csq_1:
cjne a,#0ffh,sent_csq_2
ljmp main
sent_csq_2:
inc dptr
ljmp sent_csq_0
sent_csq_out:
lcall set_wdot
ret
;---------at+cpms="sm","sm","sm"--------------
sent_cpms1:
lcall clr_rxd_buf
mov dptr,#aat_cpms1
lcall sent_char0
lcall receive_char0
mov dptr,#rxd_buf
sent_cpms1_0:
movx a,@dptr
cjne a,#4bh,sent_cpms1_1
ljmp sent_cpms1_out
sent_cpms1_1:
cjne a,#0ffh,sent_cpms1_2
ljmp main
sent_cpms1_2:
inc dptr
ljmp sent_cpms1_0
sent_cpms1_out:
lcall delay_1s
lcall delay_1s
lcall set_wdot
ret
;------------at+cpms="me","me","mt"---------------
sent_cpms2:
lcall clr_rxd_buf
mov dptr,#aat_cpms2
lcall sent_char0
lcall receive_char0
mov dptr,#rxd_buf
sent_cpms2_0:
movx a,@dptr
cjne a,#4bh,sent_cpms2_1
ljmp sent_cpms2_out
sent_cpms2_1:
cjne a,#0ffh,sent_cpms2_2
ljmp main
sent_cpms2_2:
inc dptr
ljmp sent_cpms2_0
sent_cpms2_out:
lcall set_wdot
lcall delay_1s
lcall delay_1s
ret
;------------"AT+CMGL=ALL"---------------
sent_cmgl:
lcall clr_rxd_buf
lcall clr_sms_buf
mov dptr,#aat_cmgl
lcall sent_char0
lcall receive_char0
mov dptr,#rxd_buf+2
sent_cmgl_0:
movx a,@dptr
cjne a,#4fh,sent_cmgl_1 ;判断第二位是否“O”
clr smsflag ;是“O”,无短信
ljmp sent_cmgl_out
sent_cmgl_1:
mov dptr,#rxd_buf+9 ;不是“O”,有短信
movx a,@dptr ;取第九位,短信列表序号
mov sms_num,a
setb smsflag ;smsflag=1,有短信
ljmp sent_cmgl_out
sent_cmgl_out:
lcall delay_100ms
lcall set_wdot
ret
;--------------"AT+CMGD="----------------
sent_cmgd:
lcall clr_rxd_buf
mov dptr,#aat_cmgd
lcall sent_char0
mov a,sms_num
mov databuf,a
lcall sent_byte0
mov a,#0dh
mov databuf,a
lcall sent_byte0
mov a,#0ah
mov databuf,a
lcall sent_byte0
nop ;at+cmgd=n
lcall receive_char0
mov dptr,#rxd_buf
sent_cmgd_0:
movx a,@dptr
cjne a,#4bh,sent_cmgd_1
ljmp sent_cmgd_out
sent_cmgd_1:
cjne a,#0ffh,sent_cmgd_2
ljmp main
sent_cmgd_2:
inc dptr
ljmp sent_cmgd_0
sent_cmgd_out:
lcall delay_100ms
lcall set_wdot
ret
;-------------清卡中短信---------------
sent_cmgd_init:
lcall sent_cmgl
jb smsflag,sent_cmgd_init_0
ljmp sent_cmgd_init_out
sent_cmgd_init_0:
clr smsflag
lcall sent_cmgd
ljmp sent_cmgd_init
sent_cmgd_init_out:
lcall set_wdot
ret
;-----------------"AT+CMGR="----------------------
sent_cmgr:
lcall clr_rxd_buf ;清接收缓冲区
lcall clr_sms_buf ;清接收有用短信缓冲区
lcall clr_sms_num_buf ;清存放取得的号码缓冲区
nop
mov dptr,#aat_cmgr
lcall sent_char0
mov a,sms_num
mov databuf,a
lcall sent_byte0
mov a,#0dh
mov databuf,a
lcall sent_byte0
mov a,#0ah
mov databuf,a
lcall sent_byte0
nop ;at+cmgr=n
lcall receive_char0
mov dptr,#rxd_buf
sent_cmgr_0:
movx a,@dptr
cjne a,#4bh,sent_cmgr_1
ljmp sent_cmgr_3 ;取短信内容
sent_cmgr_1:
cjne a,#0ffh,sent_cmgr_2
clr read_sms_ok ;读短信不正常
ljmp sent_cmgr_out
sent_cmgr_2:
inc dptr
ljmp sent_cmgr_0
;取短信内容,判断短信格式----------
sent_cmgr_3:
mov dptr,#sms_buf
mov dp_h,dph
mov dp_l,dpl
mov dptr,#rxd_buf
sent_cmgr_4:
movx a,@dptr ;判断是否(
cjne a,#28h,sent_cmgr_5
ljmp sent_cmgr_6
sent_cmgr_5:
cjne a,#0ffh,sent_cmgr_7
ljmp sent_cmgr_out
sent_cmgr_6:
movx a,@dptr ;取内容
inc dptr
lcall push_dptr
movx a,@dptr
cjne a,#29h,sent_cmgr_6 ;判断是否)
mov dph,dp_h
mov dpl,dp_l
movx @dptr,a
setb read_sms_ok ;格式正确,开始取号码
ljmp take_sms_num
sent_cmgr_7:
inc dptr
ljmp sent_cmgr_4
;取号码---------
take_sms_num:
mov dptr,#rec_sms_num
mov dp_h,dph
mov dp_l,dpl
mov dptr,#rxd_buf
take_sms_num_0:
movx a,@dptr
inc dptr
cjne a,#2ch,take_sms_num_0 ;查第一个","
inc dptr
take_sms_num_1:
movx a,@dptr
inc dptr
lcall push_dptr
movx a,@dptr
cjne a,#22h,take_sms_num_1
ljmp sent_cmgr_out
sent_cmgr_out:
lcall delay_100ms
lcall set_wdot
ret
;-------------发送短信"AT+CMGS"----------------
sent_sms:
mov r0,#02h ;发送次数,2次
mov r1,#02h
sent_sms_0:
lcall clr_rxd_buf
mov dptr,#aat_cmgs
lcall sent_char0
lcall sent_cen_r_num ;向cmgs发接收中心号码
mov a,#0dh
mov databuf,a
lcall sent_byte0
mov a,#0ah
mov databuf,a
lcall sent_byte0
nop ;at+cmgs="接收中心号",回车换行
lcall receive_char0
mov dptr,#rxd_buf+2
movx a,@dptr
cjne a,#3eh,sent_sms_1 ;判断是否有“>”
lcall clr_rxd_buf ;清接收缓冲区,将发送缓冲区内数据
mov dptr,#txd_buf ;发送至串口
ljmp sent_sms_2
sent_sms_1:
lcall delay_1s
djnz r0,sent_sms_0 ;没有>,计数器减1
ljmp sent_sms_out ;计数器减至0,跳出
sent_sms_2:
movx a,@dptr
cjne a,#0ffh,sent_sms_3 ;“FF”结束发送
mov a,#1ah ;Ctrl+Z发送信息
mov databuf,a
lcall sent_byte0
mov a,#0dh ;回车
mov databuf,a
lcall sent_byte0
mov a,#0ah ;换行
mov databuf,a
lcall sent_byte0
ljmp sent_sms_4
sent_sms_3:
mov databuf,a
lcall sent_byte0
inc dptr
ljmp sent_sms_2
sent_sms_4:
lcall receive_char0 ;接收
jb receive_data_ok,sent_sms_5 ;判断接收标志位
ljmp sent_sms_4
sent_sms_5:
mov dptr,#rxd_buf
sent_sms_5_0:
movx a,@dptr
cjne a,#4bh,sent_sms_6 ;判断有无“OK”
ljmp sent_sms_out
sent_sms_6:
cjne a,#0ffh,sent_sms_7
djnz r1,sent_sms_0 ;发送失败,计数器减1
ljmp sent_sms_out ;计数器减至0,跳出
sent_sms_7:
inc dptr
ljmp sent_sms_5_0
sent_sms_out:
lcall set_wdot
ret
;------------向cmgs发接收中心号码------------
sent_cen_r_num:
mov dptr,#cen_r_num
sent_cen_r_num_0:
movx a,@dptr
cjne a,#0ffh,sent_cen_r_num_1
ljmp sent_cen_r_num_out
sent_cen_r_num_1:
mov databuf,a
lcall sent_byte0
inc dptr
ljmp sent_cen_r_num_0
sent_cen_r_num_out:
lcall set_wdot
ret
;------------发送后门短信--------------
sent_back_sms:
mov r0,#02h
mov r1,#02h
sent_back_sms_0:
lcall clr_rxd_buf
mov dptr,#aat_cmgs
lcall sent_char0
lcall sent_back_r_num ;取后门接收中心号码发送到串口0
mov a,#0dh
mov databuf,a
lcall sent_byte0
mov a,#0ah
mov databuf,a
lcall sent_byte0
lcall receive_char0
mov dptr,#rxd_buf+2
movx a,@dptr
cjne a,#3eh,sent_back_sms_1
lcall clr_rxd_buf
mov dptr,#txd_buf
ljmp sent_back_sms_2
sent_back_sms_1:
lcall delay_1s
djnz r0,sent_back_sms_0
ljmp sent_back_sms_out
sent_back_sms_2:
movx a,@dptr
cjne a,#0ffh,sent_back_sms_3
mov a,#1ah ;Ctrl+Z发送信息
mov databuf,a
lcall sent_byte0
mov a,#0dh ;回车
mov databuf,a
lcall sent_byte0
mov a,#0ah ;换行
mov databuf,a
lcall sent_byte0
ljmp sent_back_sms_4
sent_back_sms_3:
mov databuf,a
lcall sent_byte0
inc dptr
ljmp sent_back_sms_2
sent_back_sms_4:
lcall receive_char0
jb receive_data_ok,sent_back_sms_5
ljmp sent_back_sms_4
sent_back_sms_5:
mov dptr,#rxd_buf
sent_back_sms_5_0:
movx a,@dptr
cjne a,#4bh,sent_back_sms_6
ljmp sent_back_sms_out
sent_back_sms_6:
cjne a,#0ffh,sent_back_sms_7
djnz r1,sent_back_sms_0
ljmp sent_back_sms_out
sent_back_sms_7:
inc dptr
ljmp sent_back_sms_5_0
sent_back_sms_out:
lcall set_wdot
ret
;------取后门接收中心号码发送到串口0--------
sent_back_r_num:
mov dptr,#back_rx_num
sent_back_r_num_0:
clr a
movc a,@a+dptr
cjne a,#0eeh,sent_back_r_num_1
ljmp sent_back_r_num_out
sent_back_r_num_1:
mov databuf,a
lcall sent_byte0
inc dptr
ljmp sent_back_r_num_0
sent_back_r_num_out:
lcall set_wdot
ret
;-----------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -