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

📄 modbus规约程序.asm

📁 modbus通信规约的汇编程序
💻 ASM
字号:
comsub:
	ldb     w2,jsbuf+1
	ld	w3,#r_kind
comm2:	
	cmpb	w2,[w3]+
	je	comm3
	cmp	w3,#r_kind_end
	jnc	comm2
	sjmp    code_rer
comm3:	sub	w3,#r_kind+1
	shl	w3,#1
	add	w3,#r_cr
	ld	w2,[w3]
	br	[w2]
r_kind: dcb     01h,02h,03h,04h,05h,06h,10h
r_kind_end	equ	$
r_cr:   dcw     r01,r02,r03,r04,r05,r06,r10

t_start:
	orb	outtbuf,#0c0h
	stb	outtbuf,outt
	ld	w13,#0ffffh
	ld	w16,#fsbuf
	ldbze	w15,zzadrt0
	lcall	crc5
	stb	w13,[w16]+
	stb	w13h,[w16]
	add	w16,#2
	sub	w16,#fsbuf
	ld	t_point,#fsbuf
	addb	tcnt,w16
	ldb     wsr,#1
	ld      ptssel,#0100h
	ldb     wsr,#4ah
	ldb	sbuf,zzadrt0
	ret
stat_word:
	ld	w10,#fsbuf
	stb	w16,[w10]+
	ret
rer:	ret
code_rer:
	ldb	w16,w2
	addb	w16,#80h
	lcall   stat_word
	ldb	w3,#81h
	stb	w3,[w10]+
	ldb	w12h,#3
	ljmp    t_start	
addr_rer:
	ldb	w2,jsbuf+1
	ldb	w16,w2
	addb	w16,#80h
	lcall   stat_word
	ldb	w3,#82h
	stb	w3,[w10]+
	ldb	w12h,#3
	ljmp    t_start	
data_rer:
	ldb	w2,jsbuf+1
	ldb	w16,w2
	addb	w16,#80h
	lcall   stat_word
	ldb	w3,#83h
	stb	w3,[w10]+
	ldb	w12h,#3
	ljmp    t_start	
;;;;;;;;;;;;;;;;;;;;
r01:
	ldb	w1h,jsbuf+2
	ldb	w1,jsbuf+3
	cmp	w1,#6
	jc	r01_end1
	ldb	w2h,jsbuf+4
	ldb	w2,jsbuf+5
	cmp	w2,#00
	je	r01_end
	ld	w3,#7
	sub	w3,w1
	cmp	w2,w3
	jc	r01_end
	ldb	w16,#01h
	lcall   stat_word
	ldb	w2,#1
	stb	w2,[w10]+
	ldb	w1,jsbuf+3
	ldb	w2,jsbuf+5
	ldb	w3,outtbuf
	ldb	w13,w3
	notb	w13
	andb	w13,#08h
	andb	w3,#0f7h
	orb	w3,w13 	
	shrb	w3,w1
	ldb	w13,#8
	subb	w13,w2
	shlb	w3,w13
	shrb	w3,w13
	stb	w3,[w10]+
	ldb	w12h,#4
	ljmp    t_start
r01_end:
	ljmp	data_rer
r01_end1:
	ljmp	addr_rer
;;;;;;;;;;;;;;;;;;;;
r02_end:
	ljmp	data_rer
r02_end1:
	ljmp	addr_rer
r02:	
	lcall	yx_sub
	ldb	w1h,jsbuf+2
	ldb	w1,jsbuf+3
	cmp	w1,#40
	jc	r02_end1
	ldb	w2h,jsbuf+4
	ldb	w2,jsbuf+5
	cmp	w2,#00
	je	r02_end
	ld	w3,#41
	sub	w3,w1
	cmp	w2,w3
	jc	r02_end
	
	ldb	w16,#02h
	lcall   stat_word
	
	ldb	w2,jsbuf+5
	shrb	w2,#3
	ldb	w2h,jsbuf+5	
	andb	w2h,#07h
	cmpb	w2h,#00
	je	r022
	incb	w2
r022:	stb	w2,[w10]+
	stb	w2,w12
	stb	w2h,w12h
	stb	w2,w15
	
	ldbze	w2,jsbuf+3
	shr	w2,#3
	clr	w4
	ldb	w4,jsbuf+3
	andb	w4,#07h
	
	ld	w3,#yxbuf
	add	w3,w2	
	
	decb	w12
	cmpb	w12,#00h
	je	r023
r021:	ldb	w1,[w3]+
	ldb	w1h,[w3]
	shr	w1,w4l
	stb	w1,[w10]+
	djnz	w12,r021
r023:	ldb	w1,[w3]+
	ldb	w1h,[w3]
	shr	w1,w4l
	clr	w13
	ldb	w13,#8
	cmpb	w12h,#0
	je	r024	
	subb	w13,w12h
	shlb	w1,w13
	shrb	w1,w13
r024:	stb	w1,[w10]+
	addb	w12h,w15,#3
	ljmp    t_start	

;;;;;;;;;;;;;;;;;;;;	
r03:    
	ldb	w1h,jsbuf+2
	ldb	w1,jsbuf+3
	shl	w1,#1
	cmp	w1,#0200h
	jnc	r03_dz
	sub	w1,#0200h
	cmp	w1,#6
	jc	r03_end1
	ld	w3,#8
	scall	r03_sub
	jc	r03_end
	cmp	w2,r0
	je	r03_end
	ld	w3,#iajg
	add	w3,w1	
	ldb	w16,#03h
	lcall   stat_word
	ldb	w2,jsbuf+5
	shlb	w2,#1
	stb	w2,[w10]+
	shrb	w2,#1
r031:	ldb	w1,[w3]+
	ldb	w1h,[w3]+
	stb	w1h,[w10]+
	stb	w1,[w10]+
	djnz	w2,r031
r033:	ldb	w2,jsbuf+5
	shlb	w2,#1
	addb	w12h,w2,#3
	ljmp    t_start
r03_end:
	ljmp	data_rer
r03_end1:
	ljmp	addr_rer
r03_dz:
	cmp	w1,#dzqlt-2
	jc	r03_end1
	ld	w3,#dzqlt
	scall	r03_sub
	jc	r03_end
	cmp	w2,r0
	je	r03_end
	ldb	w16,#03h
	lcall   stat_word
	;;;;;;;;;;;;;;
	ldbze	w14,setqht0
	lcall	getdz
	;;;;;;;;;;;;;;
	ldb	w2,jsbuf+5
	shlb	w2,#1
	stb	w2,[w10]+
	shrb	w2,#1
	
	ldb	w1h,jsbuf+2
	ldb	w1,jsbuf+3
	shl	w1,#1
	cmp	w1,#0000h
	je	r03_qh	
	sub	w1,#2
r03_dz1:
	ld	w3,#setting+2
	add	w3,w1
	sjmp	r031	
r03_sub:
	ldb	w2h,jsbuf+4
	ldb	w2,jsbuf+5
	shl	w2,#1
	sub	w3,w1
	cmp	w2,w3
	ret
r03_qh:
	ldbze	w1,setqht0
	stb	w1h,[w10]+
	stb	w1,[w10]+
	cmpb	w2,#1
	jne	r03_qh1
	sjmp	r033
r03_qh1:
	decb	w2
	ld	w1,r0
	sjmp	r03_dz1
;;;;;;;;;;;;;;;;
r04:		
	lcall	yx_sub
	ldb	w1h,jsbuf+2
	ldb	w1,jsbuf+3
	ld	w3,#4
	cmp	w1,#3
	jc	r04_end1
	ldb	w2h,jsbuf+4
	ldb	w2,jsbuf+5
	cmp	w2,r0
	je	r04_end
	add	w2,w1
	cmp	w2,w3
	jc	r04_end
	
	ld	w3,#yxbuf
	shl	w1,#1
	add	w3,w1	
	ldb	w16,#04h
	lcall   stat_word
	ldb	w2,jsbuf+5
	shlb	w2,#1
	stb	w2,[w10]+
	cmpb	w2,#00
	je	r042
r041:	ldb	w1,[w3]+
	stb	w1,[w10]+
	djnz	w2,r041
r042:	ldb	w2,jsbuf+5
	shlb	w2,#1
	addb	w12h,w2,#3
	ljmp    t_start
r04_end:
	ljmp	data_rer
r04_end1:
	ljmp	addr_rer
;;;;;;;;;;;;;;;;;
r05:	
	ldb	w1h,jsbuf+4
	ldb	w1,jsbuf+5
	cmp	w1,#0ff00h
	jne	r052
	ldb	w1h,jsbuf+2
	ldb	w1,jsbuf+3
	cmp	w1,#0000h
	jne	ykh
	jbc	dibufh,2,r052
	jbc	dibufh,0,r0521
	if1	tzb,r052
	setb	yfb
	lcall	yft
	sjmp	r051
ykh:	cmp	w1,#0001h
	jne	r05_fg
	jbc	dibufh,2,r052 
	jbc	dibufh,1,r0521
	jbc	dibufh,3,r052
	if1	tzb,r052 
	setb	yfb
	lcall	yfh
	sjmp	r051
r05_fg:	cmp	w1,#0100h
	jne	r0521
	setb    fgb
r051:	ldb	w16,#05h
	lcall   stat_word
	ld	w2,#jsbuf+2
	ldb	w1h,#4
r053:	ldb	w1,[w2]+
	stb	w1,[w10]+
	djnz	w1h,r053
	ldb	w12h,#6
	ljmp    t_start
	
r052:	ljmp	data_rer
r0521:	ljmp	addr_rer
;;;;;;;;;;;;;;;;;;;;
r06:	
	ldb	w1h,jsbuf+2
	ldb	w1,jsbuf+3
	cmp	w1,#00h
	jne	r06_dz
	ldb	w2h,jsbuf+4
	ldb	w2,jsbuf+5
	cmp	w2,#10
	jc	r06_end
	lcall	modify_qh
        sjmp	r064
r06_dz:	scall	cz_dzqh_sub
	ld	w3,#dzqlt/2
	sub 	w3,#1
	cmp	w1,w3
	jc	r06_end1
	dec	w1
	shl	w1,#1
	ldb	w2h,jsbuf+4
	ldb	w2,jsbuf+5
	st	w2,setting+2[w1]
	scall	modify_dz
	
r064:	setb	dz_modify_comb
	ldb	w16,#06h
	lcall   stat_word
	ld	w2,#jsbuf+2
	ldb	w1h,#4
r063:	ldb	w1,[w2]+
	stb	w1,[w10]+
	djnz	w1h,r063
	ldb	w12h,#6
	ljmp    t_start
r06_end:
	ljmp	data_rer
r06_end1:
	ljmp	addr_rer
	;;;;;;;;;;;;;;;;;
r10_end1_jmp:
	sjmp	r10_end1
r10_end_jmp:
	sjmp	r10_end
r10:
	ldb	w1h,jsbuf+2
	ldb	w1,jsbuf+3
	shl	w1,#1
	cmp	w1,#dzqlt-2
	jc	r10_end1_jmp
	ld	w13,#dzqlt
	ldbze	w3,jsbuf+6
	cmp	w3,w13
	jc	r10_end1_jmp
	sub	w13,w3
	cmp	w1,w13
	jc	r10_end_jmp	
	ldb	w2h,jsbuf+4
	ldb	w2,jsbuf+5
	cmp	w2,r0
	je	r10_end_jmp
	shl	w2,#1
	cmp	w3,w2
	jne	r10_end_jmp
	
	ldb	w1h,jsbuf+2
	ldb	w1,jsbuf+3
	shl	w1,#1
	cmp	w1,r0
	je	r10_qh
	scall	cz_dzqh_sub 
	ld	w4,#jsbuf+7
	ld	w5,#setting
	add	w5,w1
	ldb	w3,jsbuf+5
r101:	ldb	w2,[w4]+
	ldb	w2h,[w4]+
	stb	w2h,[w5]+
	stb	w2,[w5]+
	djnz	w3,r101
	
	ldb	w1h,jsbuf+2
	ldb	w1,jsbuf+3
	cmp	w1,r0
	jne	r101_1
	ldb	w2,jsbuf+8
	cmpb	w2,setqht0
	jne	r103
r101_1:	scall	modify_dz
r102:	setb	dz_modify_comb 
	ldb	w16,#10h	
	lcall   stat_word
	ldb	w2h,jsbuf+2
	ldb	w2,jsbuf+3
	stb	w2h,[w10]+
	stb	w2,[w10]+
	ldb	w2h,jsbuf+4
	ldb	w2,jsbuf+5
	stb	w2h,[w10]+
	stb	w2,[w10]+
	ldb	w12h,#6
	ljmp    t_start
r10_end:
	ljmp	data_rer
r10_end1:
	ljmp	addr_rer
r103:
	scall	modify_dz1
	sjmp	r102
r10_qh:	
	ldb	w2h,jsbuf+7
	ldb	w2,jsbuf+8
	cmp	w2,#10
	jc	r10_end	
	ldb	w3,jsbuf+6
	cmpb	w3,#2
	jne	r10_qh1	
	lcall	modify_qh
	sjmp	r102
r10_qh1:
	ld	w14,w2
	lcall	getdz
	ld	w4,#jsbuf+9
	ldb	w1h,jsbuf+2
	ldb	w1,jsbuf+3
	shl	w1,#1
	ld	w5,#setting
	add	w5,#2
	ldb	w3,jsbuf+5
	decb	w3
	sjmp	r101
modify_dz:
	ld	w11,#set_zyb
	st	w11,setting
	ld	w11,#setting
	ldb	w12h,#dzqlt-2
	lcall	crc
        st      w13,[w16]
	ldbze	w14,setqht0
	lcall	initset
        lcall   getyxdz1
	lcall	pyb
	ret
modify_dz1:
	ld	w11,#set_zyb
	st	w11,setting
	ld	w11,#setting
	ldb	w12h,#dzqlt-2
	lcall	crc
        st      w13,[w16]
	ldbze	w14,jsbuf+8
	lcall	initset
	ret
	;;;;;;;;;;;;;;;;;;;
modify_qh:
	stb	w2,setqht0
	stb	w2,setqhf0
	notb	w2
	stb	w2,setqht1
	stb	w2,setqhf1
        ld      w3,#0a2ffh
        ld      w15,#setqht0
        ldb     w16,#1
        lcall   eepw
        ldbze   w14,setqht0
        lcall   getyxdz
        lcall	pyb
        ret
yx_sub:
	ld	w1,#yxbuf
	stb	bgbz1,[w1]+
	stb	bgbz,[w1]+
	ldb	w2,dibufh
	notb	w2
	stb	w2,[w1]+
	stb	dzb,[w1]+
	ldb	w2,ybb
	stb	w2,[w1]+
	stb	r0,[w1]
	ret
;;;;;;;;;;;;;;;;;;;;;;;;
cz_dzqh_sub:            
	ldbze	w14,setqht0 
	cmp	w14,cz_dzqh_jy
	je	yfaa_save
	push	w1
	lcall	getdz
	ldb	w1,watchdog
	pop	w1
yfaa_save:	
	ret

⌨️ 快捷键说明

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