⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zxce_1_cpu2.asm

📁 c8051f020和prt905还有tc35语言
💻 ASM
📖 第 1 页 / 共 5 页
字号:
		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 + -