📄 modbus.asm
字号:
STB AL,WDTADDR[0]
CMP AX,#0FFFFH
JE RETURNXXXXXXX
;031119
JBC INT_PEND,6,SP_RX0075
ANDB INT_PEND,#0BFH
LDB BUFREG,SBUFRX
LDB DATE,BUFREG ;日
ADDB CRC,BUFREG
ADDCB CRC1,#00H
;031119
CLR AX
;031119
SP_RX0076:
INC AX
STB AL,WDTADDR[0]
CMP AX,#0FFFFH
JE RETURNXXXXXXX
;031119
JBC INT_PEND,6,SP_RX0076
ANDB INT_PEND,#0BFH
LDB BUFREG,SBUFRX
LDB HOUR,BUFREG ;时
ADDB CRC,BUFREG
ADDCB CRC1,#00H
SJMP SP_RX00771 ;031119
RETURNXXXXXXX:
LJMP RETURN
;031119
SP_RX00771:
CLR AX
;031119
SP_RX0077:
INC AX
STB AL,WDTADDR[0]
CMP AX,#0FFFFH
JE RETURNXXXXXXX
;031119
JBC INT_PEND,6,SP_RX0077
ANDB INT_PEND,#0BFH
LDB BUFREG,SBUFRX
LDB MINUTE,BUFREG ;分
ADDB CRC,BUFREG
ADDCB CRC1,#00H
;031119
CLR AX
;031119
SP_RX0078:
INC AX
STB AL,WDTADDR[0]
CMP AX,#0FFFFH
JE RETURNXXXXXXX
;031119
JBC INT_PEND,6,SP_RX0078
ANDB INT_PEND,#0BFH
LDB BUFREG,SBUFRX
LDB SECOND,BUFREG ;秒
ADDB CRC,BUFREG
ADDCB CRC1,#00H
;031119
CLR AX
;031119
SP_RX0079:
INC AX
STB AL,WDTADDR[0]
CMP AX,#0FFFFH
JE RETURNXXXXXXX
;031119
JBC INT_PEND,6,SP_RX0079
ANDB INT_PEND,#0BFH
LDB BUFREG,SBUFRX
;LDB HOUR,BUFREG ;
ADDB CRC,BUFREG
ADDCB CRC1,#00H
;031119
CLR AX
;031119
SP_RX007A:
INC AX
STB AL,WDTADDR[0]
CMP AX,#0FFFFH
JE RETURN
;031119
JBC INT_PEND,6,SP_RX007A
ANDB INT_PEND,#0BFH
LDB BUFREG,SBUFRX
;LDB MINUTE,BUFREG ;
ADDB CRC,BUFREG
ADDCB CRC1,#00H
;031119
CLR AX
;031119
SP_RX007B:
INC AX
STB AL,WDTADDR[0]
CMP AX,#0FFFFH
JE RETURN
;031119
JBC INT_PEND,6,SP_RX007B
ANDB INT_PEND,#0BFH
LDB BUFREG,SBUFRX
CMPB BUFREG,CRC
JNE RETURN
;031119
CLR AX
;031119
SP_RX007C:
INC AX
STB AL,WDTADDR[0]
CMP AX,#0FFFFH
JE RETURN
;031119
JBC INT_PEND,6,SP_RX007C
ANDB INT_PEND,#0BFH
LDB BUFREG,SBUFRX
CMPB BUFREG,CRC1
JNE RETURN
;031119
CLR AX
;031119
SP_RX007D:
INC AX
STB AL,WDTADDR[0]
CMP AX,#0FFFFH
JE RETURN
;031119
JBC INT_PEND,6,SP_RX007D
ANDB INT_PEND,#0BFH
LDB BUFREG,SBUFRX
CMPB BUFREG,#03
JNE RETURN
;;对时
STB AL,WDTADDR[0] ;030417
LCALL WRTIME
LJMP SP_ACK ;030807
;030807 LJMP RETURN
RETURN:
STB AL,WDTADDR[0]
LDB AH,P2
LDB AL,#10000000B ;p2.7_input pin /busy P2.5=0 RXD ;AL,BL,CL
ORB AH,#10000000B
ANDB AH,AL
LDB P2,AH
MULB AX,AL,#00H ;>5US
MULB AX,AL,#00H
MULB AX,AL,#00H
MULB AX,AL,#00H
CLRB SP_TEMP ;NEW
POP BX ;030417
POP AX
POPF
RET
SENDGZS1:
LDB AL,#07
SJMP SENDGZX ;031210
SENDGZ: ;向上位机发送新事件
LDB AH,P2
LDB AL,#10100000B ;p2.7_input pin /busy P2.5=1 TXD ;AL,BL,CL
ORB AH,#10100000B
ANDB AH,AL
LDB P2,AH
STB AL,WDTADDR[0] ;030807
LDB AL,FMT_LEN ;031210
CMPB AL,#08
JNE SENDGZS
LD I2CADDR,#SGPTRADDR ;1109
LCALL OUTPUT_SJ
LDB AL,ZYBUFAL
;LDB AL,SGPTR
DECB AL
CMPB AL,#0FFH
JE SENDGZS1
SENDGZS:
SJMP SENDGZX ;031210
;031210***** LD I2CADDR,#FSFLAGADDR ;1109
;*********** LCALL OUTPUT_SJ
;*********** LDB FSFLAG,ZYBUFAL
;*********** JBC FSFLAG,0,SENDGZ0
;*********** LDB AL,#00H
;*********** SJMP SENDGZX
;***********
;***********SENDGZ0:
;*********** JBC FSFLAG,1,SENDGZ1
;*********** LDB AL,#01H
;*********** SJMP SENDGZX
;***********
;***********SENDGZ1:
;*********** JBC FSFLAG,2,SENDGZ2
;*********** LDB AL,#02H
;*********** SJMP SENDGZX
;***********SENDGZ2:
;*********** JBC FSFLAG,3,SENDGZ3
;*********** LDB AL,#03H
;*********** SJMP SENDGZX
;***********SENDGZ3:
;*********** JBC FSFLAG,4,SENDGZ4
;*********** LDB AL,#04H
;*********** SJMP SENDGZX
;***********SENDGZ4:
;***** JBC FSFLAG,5,SENDGZ5
;*********** LDB AL,#05H
;*********** SJMP SENDGZX
;***********SENDGZ5:
;*********** JBC FSFLAG,6,SENDGZ6
;*********** LDB AL,#06H
;*********** SJMP SENDGZX
;***********SENDGZ6:
;*********** JBC FSFLAG,7,SENDGZ7
;*********** LDB AL,#07H
;031210***** SJMP SENDGZX
SENDGZ7:
LJMP RETURN
SENDGZX:
NOP
NOP
;031210*****
;*********** LDB SBUFTX,#0EBH ;
;***********SP_GZ0065:
;*********** JBC INT_PEND,6,SP_GZ0065
;*********** ANDB INT_PEND,#0BFH
;*********** LDB SBUFTX,#090H ; 把数据从外部存储器A区发向上位机
;***********SP_GZ0066:
;*********** JBC INT_PEND,6,SP_GZ0066
;*********** ANDB INT_PEND,#0BFH
;*********** LDB SBUFTX,#0EBH ; 把数据从外部存储器A区发向上位机
;***********SP_GZ0067:
;*********** JBC INT_PEND,6,SP_GZ0067
;*********** ANDB INT_PEND,#0BFH
;*********** LDB SBUFTX,#090H ; 把数据从外部存储器A区发向上位机
;***********SP_GZ0068:
;*********** JBC INT_PEND,6,SP_GZ0068
;*********** ANDB INT_PEND,#0BFH
;*********** LDB SBUFTX,#02H ; 把数据从外部存储器A区发向上位机
;***** SP_GZ0069:
;*********** JBC INT_PEND,6,SP_GZ0069
;031210***** ANDB INT_PEND,#0BFH
LDB SBUFTX,SBADDR ; 把数据从外部存储器A区发向上位机
LD CRC16,#0FFFFH
LDB BUFREG,SBADDR ;031210
STB AL,WDTADDR[0]
CALL CRCPROC
SP_GZ006A:
JBC INT_PEND,6,SP_GZ006A
ANDB INT_PEND,#0BFH
LDB SBUFTX,#03H ;031210 #040H ; 把数据从外部存储器A区发向上位机
LDB BUFREG,#03H
STB AL,WDTADDR[0]
CALL CRCPROC
SP_GZ006B:
JBC INT_PEND,6,SP_GZ006B
ANDB INT_PEND,#0BFH
LDB SBUFTX,#08H ; 把数据长度=8从外部存储器A区发向上位机
LDB BUFREG,#08H
STB AL,WDTADDR[0]
CALL CRCPROC
SP_GZ006C:
JBC INT_PEND,6,SP_GZ006C
ANDB INT_PEND,#0BFH
MULUB AX,AL,#0CH
;1109 STB SECOND,SGADDR[CX] ;存储故障发生 秒 分 时 日 月 年
ADD AX,#05H
LD I2CADDR,#SGADDR
ADD I2CADDR,AX
;LD CX,I2CADDR
LCALL OUTPUT_SJ
;LDB YEAR,ZYBUFAL
LDB SBUFTX,ZYBUFAL ; 把数据YL从外部存储器A区发向上位机
LDB BUFREG,ZYBUFAL
STB AL,WDTADDR[0]
CALL CRCPROC
;031210****SP_GZ006D:
;031210**** JBC INT_PEND,6,SP_GZ006D
;031210**** ANDB INT_PEND,#0BFH
;031210**** LDB SBUFTX,#20H ; 把数据YH从外部存储器A区发向上位机
;031210**** ADDB CRC,#20H ;030807
;031210**** ADDCB CRC1,#00H
SP_GZ006E:
JBC INT_PEND,6,SP_GZ006E
ANDB INT_PEND,#0BFH
; 把数据MONTH从外部存储器A区发向上位机
DEC I2CADDR
LCALL OUTPUT_SJ
;LDB MONTH,ZYBUFAL
LDB SBUFTX,ZYBUFAL
LDB BUFREG,ZYBUFAL
STB AL,WDTADDR[0]
CALL CRCPROC
SP_GZ006F:
JBC INT_PEND,6,SP_GZ006F
ANDB INT_PEND,#0BFH
; 把数据DATE从外部存储器A区发向上位机
DEC I2CADDR
LCALL OUTPUT_SJ
;LDB DATE,ZYBUFAL
LDB SBUFTX,ZYBUFAL
LDB BUFREG,ZYBUFAL
STB AL,WDTADDR[0]
CALL CRCPROC
SP_GZ00610:
JBC INT_PEND,6,SP_GZ00610
ANDB INT_PEND,#0BFH
; 把数据HOUR从外部存储器A区发向上位机
DEC I2CADDR
LCALL OUTPUT_SJ
;LDB HOUR,ZYBUFAL
LDB SBUFTX,ZYBUFAL
LDB BUFREG,ZYBUFAL
STB AL,WDTADDR[0]
CALL CRCPROC
SP_GZ00611:
JBC INT_PEND,6,SP_GZ00611
ANDB INT_PEND,#0BFH
; 把数据MINUTE从外部存储器A区发向上位机
DEC I2CADDR
LCALL OUTPUT_SJ
;LDB MINUTE,ZYBUFAL
LDB SBUFTX,ZYBUFAL
LDB BUFREG,ZYBUFAL
STB AL,WDTADDR[0]
CALL CRCPROC
SP_GZ00612:
JBC INT_PEND,6,SP_GZ00612
ANDB INT_PEND,#0BFH
; 把数据SECOND从外部存储器A区发向上位机
DEC I2CADDR
LCALL OUTPUT_SJ
;LDB SECOND,ZYBUFAL
LDB SBUFTX,ZYBUFAL
LDB BUFREG,ZYBUFAL
STB AL,WDTADDR[0]
CALL CRCPROC
;031210****SP_GZ00613:
;031210**** JBC INT_PEND,6,SP_GZ00613
;031210**** ANDB INT_PEND,#0BFH
;031210**** LDB SBUFTX,#00H ; 把数据MSL从外部存储器A区发向上位机
;031210**** ADDB CRC,#000H
;031210**** ADDCB CRC1,#00H
;031210****SP_GZ00614:
;031210**** JBC INT_PEND,6,SP_GZ00614
;031210**** ANDB INT_PEND,#0BFH
;031210**** LDB SBUFTX,#00H ; 把数据MSH从外部存储器A区发向上位机
;031210**** ADDB CRC,#000H
;031210**** ADDCB CRC1,#00H
;031210****SP_GZ00615:
;031210**** JBC INT_PEND,6,SP_GZ00615
;031210**** ANDB INT_PEND,#0BFH
;031210**** LDB SBUFTX,#00H ; 把数据RRF从外部存储器A区发向上位机
;031210**** ADDB CRC,#00H
;031210**** ADDCB CRC1,#00H
;031210****SP_GZ00616:
;031210**** JBC INT_PEND,6,SP_GZ00616
;031210**** ANDB INT_PEND,#0BFH
;031210**** LDB SBUFTX,#00H ; 把数据TTY从外部存储器A区发向上位机
;031210**** ADDB CRC,#00H
;031210**** ADDCB CRC1,#00H
;031210****SP_GZ00617:
;031210**** JBC INT_PEND,6,SP_GZ00617
;031210**** ANDB INT_PEND,#0BFH
;031210**** LDB SBUFTX,#00H ; 把数据00H从外部存储器A区发向上位机
;031210**** ADDB CRC,#00H
;031210**** ADDCB CRC1,#00H
SP_GZ00618:
JBC INT_PEND,6,SP_GZ00618
ANDB INT_PEND,#0BFH
; 把数据FAU线路号 (1-36)从外部存储器A区发向上位
STB AL,WDTADDR[0] ;030807
ADD I2CADDR,#09H
LCALL OUTPUT_SJ
LDB BL,ZYBUFAL ;030619
CALL HWIBTD ;030619
LDB ZYBUFAL,HH ;030619
LDB SBUFTX,ZYBUFAL
LDB BUFREG,ZYBUFAL
STB AL,WDTADDR[0]
CALL CRCPROC
SP_GZ00619:
JBC INT_PEND,6,SP_GZ00619
ANDB INT_PEND,#0BFH
; 把数据ACT从外部存储器A区发向上位机
DEC I2CADDR
LCALL OUTPUT_SJ
LDB SBUFTX,ZYBUFAL
LDB BUFREG,ZYBUFAL
STB AL,WDTADDR[0]
CALL CRCPROC
;031210****SP_GZ0061A:
;031210**** JBC INT_PEND,6,SP_GZ0061A
;031210**** ANDB INT_PEND,#0BFH
;031210**** LDB SBUFTX,#00H ; 把数据00H从外部存储器A区发向上位机
;031210**** ADDB CRC,#00H
;031210**** ADDCB CRC1,#00H
;031210****SP_GZ0061B:
;031210**** JBC INT_PEND,6,SP_GZ0061B
;031210**** ANDB INT_PEND,#0BFH
;031210**** LDB SBUFTX,#00H ; 把数据00H从外部存储器A区发向上位机
;031210**** ADDB CRC,#000H
;031210**** ADDCB CRC1,#00H
;031210****SP_GZ0061C:
;031210**** JBC INT_PEND,6,SP_GZ0061C
;031210**** ANDB INT_PEND,#0BFH
;031210**** LDB SBUFTX,#00H ; 把数据00H从外部存储器A区发向上位
;031210**** ADDB CRC,#00H
;031210**** ADDCB CRC1,#00H
SP_GZ0061D:
JBC INT_PEND,6,SP_GZ0061D
ANDB INT_PEND,#0BFH
;030807*******************************************
;031210 ADDB CRC,SBADDR
;031210 ADDCB CRC1,#00H
;030807*******************************************
LDB SBUFTX,CRC ; 把数据CRC从外部存储器A区发向上位机
SP_GZ0061E:
JBC INT_PEND,6 ,SP_GZ0061E
ANDB INT_PEND,#0BFH
LDB SBUFTX,CRC1 ; 把数据CRC1从外部存储器A区发向上位机
;031210****SP_GZ0061F:
;031210**** JBC INT_PEND,6,SP_GZ0061F
;031210**** ANDB INT_PEND,#0BFH
;031210**** LDB SBUFTX,#03H ; 把数据03H从外部存储器A区发向上位机
SP_GZ00620:
JBC INT_PEND,6,SP_GZ00620
ANDB INT_PEND,#0BFH
RET
LDB CRC16,#0FFFFH
CRCPROC:
XORB CRC,BUFREG
CLRB MOV_NUM
CRC10:
LD TEMP,CRC16
AND TEMP,#0001
CMPB MOV_NUM,#08 ;已移位8次
JE CRC11
SHR CRC16,#1
INCB MOV_NUM
CMP TEMP,#0001
JNE CRC10
XOR CRC16,#0A001H
SJMP CRC10
CRC11:
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -