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

📄 zxce_1_cpu2.asm

📁 c8051f020和prt905还有tc35语言
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;================以下关于X1226的子程序====================

;------------初始化X1226-------------
init1226_w:
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		lcall		set_wdot
init1226_w_1:
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		lcall		set_wdot
		lcall		start
		mov			a,#11011110b
		lcall		wrbyte
		lcall		cack
		jnb			ack,err_init1226_w
		mov			a,#00h
		lcall		wrbyte
		lcall		cack
		jnb			ack,err_init1226_w
		mov			a,#3fh
		lcall		wrbyte	
		lcall		cack
		jnb			ack,err_init1226_w
		mov			a,#02h
		lcall		wrbyte	
		lcall		cack
		jnb			ack,err_init1226_w
		lcall		stop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop			
		lcall		start
		mov			a,#11011110b		  
		lcall		wrbyte				
		lcall		cack
		jnb			ack,err_init1226_w
		mov			a,#00h
		lcall		wrbyte	
		lcall		cack
		jnb			ack,err_init1226_w
		mov			a,#3fh
		lcall		wrbyte	
		lcall		cack
		jnb			ack,err_init1226_w
		mov			a,#06h
		lcall		wrbyte	
		lcall		cack
		jnb			ack,err_init1226_w
		lcall		stop
		lcall		set_wdot
		ret
err_init1226_w:		
		lcall		stop
		ljmp		init1226_w_1
;-------------发I2C总线起始位-------------------
start:			
		setb		isda
		nop
		nop
		nop
		nop
    setb		iscl
    nop
    nop
   	nop
   	nop
    nop
    nop
    nop
    clr			isda
    nop
   	nop
   	nop
   	nop
   	nop
   	nop
   	nop
   	clr			iscl
   	nop
   	nop
   	nop
  	lcall		set_wdot
   	ret
;-----------------发I2C总线停止位---------------------
stop:				
		clr			isda
		nop
   	nop
    nop
		nop
    nop
    nop
		setb		iscl
		nop
    nop
    nop
		nop
    nop
    nop
   	nop
    nop
    nop
    nop
		setb		isda
		nop
    nop
    nop
    nop
    nop
    nop
		nop
    nop
    nop
    lcall		set_wdot
    ret
;---------------检查应答子程序----------------
cack:			
		setb		isda
		nop
		nop
		nop
    nop
		nop
    nop
    nop
		setb		iscl
		clr			ack
		nop
		nop
		nop
    nop
		nop
    nop
    nop
		mov			c,isda
		jc			cend
		setb		ack
cend:			
		nop
		nop
    nop
		nop
    nop
    nop
		clr			iscl
		nop
		nop
    nop
		nop
    nop
    nop
		lcall		set_wdot
		ret
;--------------检查应答信号--------------------
mack:		
		clr			isda
		nop
		nop
		nop
    nop
		nop
    nop
    nop
		setb		iscl
		nop
   	nop
    nop
    nop
    nop
    nop
    nop
		nop
    nop
    nop
    clr			iscl
    nop
    nop
    nop
   	nop
		nop
   	nop
    nop
    lcall		set_wdot
    ret
;--------------检查非应答信号----------------
mnack:			
		setb		isda
		nop
		nop
		nop
    nop
		nop
    nop
   	nop
		setb		iscl
		nop
		nop
		nop
		nop
		nop
		nop
    nop
		nop
    nop
    nop
		clr			iscl
		nop
		nop
		nop
    nop
		nop
    nop
    nop
		lcall		set_wdot
		ret
;------将要发送的字节放入ACC中,每发送一个字节要调用一次send_cack--------
wrbyte:			
		nop
		nop
    nop
   	nop
		mov			r0,#08h
wlp:			
		rlc			a
		jc			wr1
		sjmp		wr0
wlp1:			
		djnz		r0,wlp
		nop
		nop
		nop
    nop
    nop
		ret

wr1:			
		setb		isda
		nop
		nop
		nop
		nop
		setb		iscl
		lcall		set_wdot
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		clr			iscl
		sjmp		wlp1
wr0:			
		clr			isda
		nop
		nop
		nop
		nop
		setb		iscl
		lcall		set_wdot
		nop
		nop
		nop
		nop
		nop
		nop
		nop	
		clr			iscl
		sjmp		wlp1
;------读出值在ACC中,每读取一个字节要发送一个应答/非应答信号-------
rdbyte:			
		nop
		nop
		nop
		mov			r0,#08h
rlp:			
		setb		isda
		nop
		nop
		nop
		setb		iscl
		nop
		nop
		nop
		nop
		mov			c,isda
		mov			a,r2
		clr			iscl
		rlc			a
		mov			r2,a
		nop
		nop
		nop
		nop
		nop
		djnz		r0,rlp
		lcall		set_wdot
		ret
;---------------write a byte to ee2rom--------------------
write_byte:
		nop
		nop		
		lcall		set_wdot
write_byte1:		
		nop	
		lcall		set_wdot
		lcall		start
		mov			a,sla		  
		lcall		wrbyte				
		lcall		cack
		jnb			ack,err_write_byte
		mov			a,addrh
		lcall		wrbyte	
		lcall		cack
		jnb			ack,err_write_byte
		mov			a,addrl
		lcall		wrbyte	
		lcall		cack
		jnb			ack,err_write_byte
		mov			a,numbyte
		lcall		wrbyte	
		lcall		cack
		jnb			ack,err_write_byte
		lcall		stop	
		lcall		set_wdot
		ret
err_write_byte:
		lcall		stop			
		ljmp		write_byte1
;-----------read a byte from ee2rom---------------
read_byte:		
		lcall		set_wdot
read_byte1:		
		nop
		lcall		set_wdot
		lcall		start
		mov			a,sla
		lcall		wrbyte
		lcall		cack
		jnb			ack,err_read_byte
		mov			a,addrh
		lcall		wrbyte
		lcall		cack
		jnb			ack,err_read_byte
		mov			a,addrl
		lcall		wrbyte
		lcall		cack
		jnb			ack,err_read_byte
		lcall		start
		mov			a,sla	
		inc			a
		lcall		wrbyte
		lcall		cack
		jnb			ack,err_read_byte
		lcall		rdbyte
		lcall		mnack
		lcall		set_wdot
		ret
err_read_byte:		
		lcall		stop
		ljmp		read_byte1
;---------------向1226中写发送号码-----------------
w_ee_tx_num:
		push		dpl
		push		acc
		push		dph
		push		b	
		lcall		set_wdot		
		mov			dptr,#df_tx_num	;dptr	
		mov			b,#ee_tx_num
		clr			a
		movc		a,@a+dptr	
w_ee_dfnum1_1:	
		mov			numbyte,a
		mov			sla,#10101110b		
		mov			addrh,#00h
		mov			addrl,b
		lcall		init1226_w
		lcall		write_byte
		inc			b
		inc			dptr			;dptr+1
		clr			a
		movc		a,@a+dptr	
		cjne		a,#0eeh,w_ee_dfnum1_1
		pop			b
		pop			acc
		pop			dph
		pop			dpl
		ret
;---------------读发送号码----------------------
r_ee_tx_num:		
		push		dpl
		push		dph
		push		acc
		push		01h
		lcall		set_wdot
		mov			r1,#0bh
		mov			b,#ee_tx_num
		mov			dptr,#cen_t_num		;dptr	
r_ee_dfnum1_1:	
		mov			sla,#10101110b		
		mov			addrh,#00h
		mov			addrl,b
		lcall		init1226_w
		lcall		read_byte
		movx		@dptr,a
		inc			dptr
		inc			b
		djnz		r1,r_ee_dfnum1_1
		pop			01h
		pop			acc
		pop			dph
		pop			dpl
		ret
;-------------向1226中写接收号码-----------------
w_ee_rx_num:	
		push		dpl
		push		dph
		push		acc
		push		b
		lcall		set_wdot		
		mov			dptr,#df_rx_num	;dptr	
		mov			b,#ee_rx_num
		clr			a
		movc		a,@a+dptr	
w_ee_dfnum2_1:	
		mov			numbyte,a
		mov			sla,#10101110b		
		mov			addrh,#00h
		mov			addrl,b
		lcall		init1226_w
		lcall		write_byte
		inc			b
		inc			dptr			;dptr+1
		clr			a
		movc		a,@a+dptr	
		cjne		a,#0eeh,w_ee_dfnum2_1
		pop			b
		pop			acc
		pop			dph
		pop			dpl
		ret
;------------------读接收号码-----------------------
r_ee_rx_num:		
		push		dpl
		push		dph
		push		acc
		push		01h
		lcall		set_wdot
		mov			r1,#0bh
		mov			b,#ee_rx_num
		mov			dptr,#cen_r_num		;dptr	
r_ee_dfnum2_1:	
		mov			sla,#10101110b		
		mov			addrh,#00h
		mov			addrl,b
		lcall		init1226_w
		lcall		read_byte
		movx		@dptr,a
		inc			dptr
		inc			b
		djnz		r1,r_ee_dfnum2_1
		pop			01h
		pop			acc
		pop			dph
		pop			dpl
		ret			
;--------------写报警阀值-----------------
w_ee_df_alm:
		push		dph
		push		dpl
		push		acc
		push		b
		lcall		set_wdot
		mov			dptr,#df_alm_data			;报警值首址
		mov			b,#ee_alm_num
		clr			a
		movc		a,@a+dptr
w_ee_df_alm_1:
		mov			numbyte,a
		mov			sla,#10101110b
		mov			addrh,#00h
		mov			addrl,b
		lcall		init1226_w
		lcall		write_byte
		inc			b
		inc			dptr
		clr			a
		movc		a,@a+dptr
		cjne		a,#0eeh,w_ee_df_alm_1
		pop			b
		pop			acc
		pop			dpl
		pop			dph
		ret
;------------读报警阀值---------------
r_ee_df_alm:
		push		dph
		push		dpl
		push		acc
		push		01h
		lcall		set_wdot
		mov			r1,#03h
		mov			dptr,#alm_buf					;报警阀值缓冲区
		mov			b,#ee_alm_num
r_ee_df_alm_1:
		mov			sla,#10101110b
		mov			addrh,#00h
		mov			addrl,b
		lcall		init1226_w
		lcall		read_byte
		movx		@dptr,a
		inc			b
		inc			dptr
		djnz		r1,r_ee_df_alm_1
		pop			01h
		pop			acc
		pop			dpl
		pop			dph
		ret
;--------写报警频率(次数)-----------
w_ee_df_pd:
		push		dph
		push		dpl
		push		acc
		push		b
		lcall		set_wdot
		mov			dptr,#df_alm_pdu
		mov			b,#ee_pd_num
		clr			a
		movc		a,@a+dptr
w_ee_df_pd_1:
		mov			numbyte,a
		mov			sla,#10101110b
		mov			addrh,#00h
		mov			addrl,b
		lcall		init1226_w
		lcall		write_byte
		inc			b
		inc			dptr
		clr			a
		movc		a,@a+dptr
		cjne		a,#0eeh,w_ee_df_pd_1
		pop			b
		pop			acc
		pop			dpl
		pop			dph
		ret
;-------------读报警频率(次数)--------------
r_ee_df_pd:
		push		dph
		push		dpl
		push		acc
		push		b
		push		01h
		lcall		set_wdot
		mov			r1,#01h
		mov			dptr,#pdu_buf
		mov			b,#ee_pd_num
r_ee_df_pd_1:
		mov			sla,#10101110b
		mov			addrh,#00h
		mov			addrl,b
		lcall		init1226_w
		lcall		read_byte
		movx		@dptr,a
		inc			b
		inc			dptr
		djnz		r1,r_ee_df_pd_1
		pop			01h
		pop			b
		pop			acc
		pop			dpl
		pop			dph
		ret
;-----------写报警时间间隔-------------
w_ee_df_tim:
		push		dph
		push		dpl
		push		acc
		push		b
		lcall		set_wdot
		mov			dptr,#df_alm_tim
		mov			b,#ee_tim_num
		clr			a
		movc		a,@a+dptr
w_ee_df_tim_1:
		mov			numbyte,a
		mov			sla,#10101110b
		mov			addrh,#00h
		mov			addrl,b
		lcall		init1226_w
		lcall		write_byte
		inc			b
		inc			dptr
		clr			a
		movc		a,@a+dptr
		cjne		a,#0eeh,w_ee_df_tim_1
		pop			b
		pop			acc
		pop			dpl
		pop			dph
		ret
;-------------读报警时间间隔-------------
r_ee_df_tim:
		push		dph
		push		dpl
		push		acc
		push		b
		push		01h
		lcall		set_wdot
		mov			r1,#01h
		mov			dptr,#tim_buf
		mov			b,#ee_tim_num
r_ee_df_tim_1:
		mov			sla,#10101110b
		mov			addrh,#00h
		mov			addrl,b
		lcall		init1226_w
		lcall		read_byte
		movx		@dptr,a
		inc			b
		inc			dptr
		djnz		r1,r_ee_df_tim_1
		pop			01h
		pop			b
		pop			acc
		pop			dpl
		pop		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -