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

📄 modbus.asm

📁 这是相当经典的MODBUS规约程序(电力系统报文),绝对自己写的,随产品销售到全国各地,犹豫了还是共享吧
💻 ASM
📖 第 1 页 / 共 3 页
字号:
SBADDR       EQU  32H:BYTE
CRC          EQU  033H:BYTE
CRC1         EQU  034H:BYTE

OK_NO        EQU  4BH:BYTE
KEY_F0       EQU  63H:BYTE 
KEY_FF       EQU  64H:BYTE
TEMP         EQU  74H:WORD
;改为
MOV_NUM      EQU  4BH:BYTE      ;移位次数
FMT_LEN      EQU  63H:BYTE   ;校验长度
LOAD_NUM     EQU  64H:BYTE   ;字节装入次数
TEMP         EQU  74H:WORD     ;移出位

CRC16        EQU  32H:WORD
CRC          EQU  032H:BYTE
CRC1         EQU  033H:BYTE
SBADDR       EQU  034H:BYTE

SERIAL_INT:
             PUSHF
             
             PUSH     AX
           
             PUSH    BX   ;030417
             
             ;030815LDB    INT_MASK,#10H  ;030815
             ;030818TEST 
              STB    AL,WDTADDR[0]  ;030417
              STB    AL,WDTADDR[0]  ;030417
              LDB    INT_MASK,S_FLAG  ;030815
              ANDB   INT_MASK,#0BFH   ;030818
;TEST              LDB   NUMREG,S_FLAG
 ;TEST             LDB   X_REG,#0B8H
 ;TEST             LDB   Y_REG,#040H
;TEST              CALL  LCD_NUM2Z
;TEST              LDB   X_REG,#0BAH
;TEST              LDB   NUMREG,INT_PEND 
;TEST              CALL  LCD_NUM2Z   
;TEST              ;030818TEST
             
             EI
             
             LDB  SP_TEMP,SP_STAT
             JBS  SP_TEMP,6,SP_RX  ;RI=1?
             JBS  SP_TEMP,5,SP_TX  ;TI=1?
             NOP
SP_TX:       
             CLRB  FLAG
             LJMP  RETURN 


RETURNX:
	      LJMP    RETURN
SP_RX0041:
	      CMPB    BUFREG,#00H
	      JNE     RETURNX
   
   ;031119
	      CLR     AX
	      ;031119
SP_RX00411:       
                INC   AX
                STB    AL,WDTADDR[0]  
                CMP    AX,#0FFFFH
                JE     RETURNX
                ;031119
                       
	      JBC     INT_PEND,6,SP_RX00411  ;030616
	      ANDB     INT_PEND,#0BFH    ;030616
	      LDB     BUFREG,SBUFRX      ;030616
	        ;LJMP   
	      CLRB    CRC    ;030807
	      CLRB    CRC1	;030807
	          		 			
SP_RX007X:    LJMP    SP_RX007     
SP_RX:       
;******************************031210 
;***********	      STB    AL,WDTADDR[0]  ;030417	
;***********	      ANDB     INT_PEND,#0BFH
;***********	      LDB     BUFREG,SBUFRX
;***********	      CMPB    BUFREG,#0EBH
;***********	      JNE     RETURNX	
;***********	      
;***********	      ;031119
;***********	      CLR     AX
;***********	      ;031119
;***********SP_RX000:       
;***********                INC   AX
;***********                STB    AL,WDTADDR[0]  
;***********                CMP    AX,#0FFFFH
;***********                JE     RETURNX
;***********                ;031119
;***********                 
;***********		JBC     INT_PEND,6,SP_RX000
;***********		ANDB     INT_PEND,#0BFH
;***********		LDB     BUFREG,SBUFRX
;***********	        CMPB    BUFREG,#090H
;***********	        JNE     RETURNX	
;***********       
;***********  ;031119
;***********	      CLR     AX
;***********	      ;031119
;***********SP_RX001:       
;***********                INC   AX
;***********                STB    AL,WDTADDR[0]  
;***********                CMP    AX,#0FFFFH
;***********                JE     RETURNX
;***********                ;031119
;***********                 
;***********		JBC     INT_PEND,6,SP_RX001
;***********		ANDB     INT_PEND,#0BFH
;***********		LDB     BUFREG,SBUFRX
;***********	        CMPB    BUFREG,#0EBH
;***********	        JNE     RETURNX	
;*********** 
;***********  ;031119
;***********	      CLR     AX
;***********	      ;031119
;***********SP_RX002:       
;***********                INC   AX
;***********                STB    AL,WDTADDR[0]  
;***********                CMP    AX,#0FFFFH
;***********                JE     RETURNXXXXXXXXXX
;***********                ;031119
;***********                     
;***********		JBC     INT_PEND,6,SP_RX002
;***********		ANDB     INT_PEND,#0BFH
;***********		LDB     BUFREG,SBUFRX
;***********	        CMPB    BUFREG,#090H
;***********	        JNE     RETURNXXXXXXXXXX
;***********  
;***********  ;031119
;***********	      CLR     AX
;***********	      ;031119
;***********SP_RX003:       
;***********                INC   AX
;***********                STB    AL,WDTADDR[0]  
;***********                CMP    AX,#0FFFFH
;***********                JE     RETURNXXXXXXXXXX
;***********                ;031119
;***********                      
;***********		JBC     INT_PEND,6,SP_RX003
;***********		ANDB     INT_PEND,#0BFH
;***********		LDB     BUFREG,SBUFRX
;***********	        CMPB    BUFREG,#002H
;***********	        JNE     RETURNXXXXXXXXXX	
;***********
;***********  ;031119
;***********	      CLR     AX
;***********	      ;031119
;***********SP_RX004:       
;***********                INC   AX
;***********                STB    AL,WDTADDR[0]  
;***********                CMP    AX,#0FFFFH
;***********                JE     RETURNXXXXXXXXXX
;***********                ;031119
;***********                       
;***********		JBC     INT_PEND,6,SP_RX004
;***********		
;***********;******************************031210 

                STB    AL,WDTADDR[0]  ;030417	
		ANDB     INT_PEND,#0BFH

		LD     CRC16,#0FFFFH
		
		LDB     BUFREG,SBUFRX
	        CMPB    BUFREG,SBADDR
	        JNE     RETURNXXXXXXXXXX     ;031210 SP_RX0041X                ;RETURNX	
            ;031210   SJMP    SP_RX004X ;031119
SP_RX005XX:    
                LJMP    SP_RX005X
SP_RX0041X:
		LJMP    SP_RX0041
RETURNXXXXXXXXXX:
		LJMP    RETURN
;***********031210                 SP_RX004X:
;***********   ;031119
;***********	      CLR     AX
;***********	      ;031119
;***********SP_RX005:       
;***********                INC   AX
;***********                STB    AL,WDTADDR[0]  
;***********                CMP    AX,#0FFFFH
;***********                JE     RETURNXXXXXXXXXX
;***********                ;031119
;***********                 
;***********		JBC     INT_PEND,6,SP_RX005
;***********		ANDB     INT_PEND,#0BFH
;***********		LDB     BUFREG,SBUFRX
;***********		CMPB    BUFREG,#06H
;***********                JNE     SP_RX005XX     ;031119
;***********	      				; 从上位机收ACK信号  
;***********;030807***************************
;***********     
;***********  ;031119
;***********	      CLR     AX
;***********	      ;031119
;***********SP_RX0051:       
;***********                INC   AX
;***********                STB    AL,WDTADDR[0]  
;***********                CMP    AX,#0FFFFH
;***********                JE     RETURNXXX
;***********                ;031119
;***********                  
;***********		JBC     INT_PEND,6,SP_RX0051
;***********		ANDB    INT_PEND,#0BFH
;***********		LDB     BUFREG,SBUFRX
;***********		CMPB    BUFREG,#02H     ; 
;***********		JNE     RETURNXXX
;***********      
;***********  ;031119
;***********	      CLR     AX
;***********	      ;031119
;***********SP_RX0052:       
;***********                INC   AX
;***********                STB    AL,WDTADDR[0]  
;***********                CMP    AX,#0FFFFH
;***********                JE     RETURNXXX
;***********                ;031119
;***********                  
;***********		JBC     INT_PEND,6,SP_RX0052
;***********		ANDB    INT_PEND,#0BFH
;***********		CLRB    CRC1
;***********		ADDB    CRC,SBADDR,#08H
;***********		ADDCB	CRC1,#00H
;***********		LDB     BUFREG,SBUFRX
;***********		CMPB    BUFREG,CRC     ; 
;***********		JNE     RETURNXXX
;***********		
;***********
;***********      
;***********  ;031119
;***********	      CLR     AX
;***********	      ;031119
;***********SP_RX0053:       
;***********                INC   AX
;***********                STB    AL,WDTADDR[0]  
;***********                CMP    AX,#0FFFFH
;***********                JE     RETURNXXX
;***********                ;031119
;***********                  
;***********		JBC     INT_PEND,6,SP_RX0053
;***********		ANDB    INT_PEND,#0BFH
;***********		
;***********		LDB     BUFREG,SBUFRX
;***********		CMPB    BUFREG,CRC1     ; 
;***********		JNE     RETURNXXX
;***********      
;***********  ;031119
;***********	      CLR     AX
;***********	      ;031119
;***********SP_RX0054:       
;***********                INC   AX
;***********                STB    AL,WDTADDR[0]  
;***********                CMP    AX,#0FFFFH
;***********                JE     RETURNXXX
;***********                ;031119
;***********                  
;***********		JBC     INT_PEND,6,SP_RX0054
;***********		ANDB    INT_PEND,#0BFH
;***********		LDB     BUFREG,SBUFRX
;***********		CMPB    BUFREG,#03H     ; 
;***********		JNE     RETURNXXX
;***********		
;030807***************************	        	      				
	      	;LJMP   SP_RX00A1X   ;030417			

SP_RX006X:      
		LJMP  SP_RX006	   

SP_RX005X:      
		CALL    CRCPROC
                  ;031119                                  
	      CLR     AX                       
	      ;031119                          
SP_RX0054:                                 
                INC   AX                   
                STB    AL,WDTADDR[0]       
                CMP    AX,#0FFFFH          
                JE     RETURNXXX           
                ;031119                    
                                           
		JBC     INT_PEND,6,SP_RX0054   
		ANDB    INT_PEND,#0BFH         
		LDB     BUFREG,SBUFRX          

	        CMPB    BUFREG,#03H    ;031210 #048H
	        JNE     RETURNXXX      ;031210 SP_RX006X	
;030807******************************************
                STB    AL,WDTADDR[0]  ;030417
;***********031210                CLRB    CRC1
;***********031210		ADDB    BUFREG,SBADDR
;***********031210		ADDCB   CRC1,#00H
;***********031210		LDB     CRC,BUFREG   ;030807
               
               CALL    CRCPROC
  ;031119
	      CLR     AX
	      ;031119
SP_RX005X11:       
                INC   AX
                STB    AL,WDTADDR[0]  
                CMP    AX,#0FFFFH
                JE     RETURNXXX
                ;031119
                    
		JBC     INT_PEND,6,SP_RX005X11
		ANDB     INT_PEND,#0BFH
		LDB     BUFREG,SBUFRX
	        CMPB    BUFREG,#00H    ;031210 #002H
	        JNE     RETURNXXX	
		CALL    CRCPROC  
     
  ;031119
	      CLR     AX
	      ;031119
SP_RX005X12:       
                INC   AX
                STB    AL,WDTADDR[0]  
                CMP    AX,#0FFFFH
                JE     RETURNXXX
                ;031119
                   
		JBC     INT_PEND,6,SP_RX005X12
		ANDB     INT_PEND,#0BFH
		LDB     BUFREG,SBUFRX
	        CMPB    BUFREG,#08
	        JH     RETURNXXX
	        LDB    FMT_LEN,BUFREG	
                CALL    CRCPROC 
  ;031119
	      CLR     AX
	      ;031119
SP_RX005X13:       
                INC   AX
                STB    AL,WDTADDR[0]  
                CMP    AX,#0FFFFH
                JE     RETURNXXX
                ;031119
                    
		JBC     INT_PEND,6,SP_RX005X13
		ANDB     INT_PEND,#0BFH
		LDB     BUFREG,SBUFRX
	        CMPB    BUFREG,#00H
	        JNE     RETURNXXX	
                CALL    CRCPROC  
                SJMP    SP_RX005X130
RETURNXXX:
	        LJMP  RETURN                
SP_RX005X130:
                
  ;031119
	      CLR     AX
	      ;031119
SP_RX005X14:       
                INC   AX
                STB    AL,WDTADDR[0]  
                CMP    AX,#0FFFFH
                JE     RETURNXXX
                ;031119
                   
		JBC     INT_PEND,6,SP_RX005X14
		ANDB     INT_PEND,#0BFH
		LDB     BUFREG,SBUFRX
	        CMPB    BUFREG,#04
	        JNE     RETURNXXXXXX	  
	        CALL    CRCPROC 

;031119
	      CLR     AX
	      ;031119
SP_RX005X15:       
                INC   AX
                STB    AL,WDTADDR[0]  
                CMP    AX,#0FFFFH
                JE     RETURNXXXXXX
                ;031119
                   
		JBC     INT_PEND,6,SP_RX005X15
		ANDB     INT_PEND,#0BFH
		LDB     BUFREG,SBUFRX
	        CMPB    BUFREG,CRC
	        JNE     RETURNXXXXXX	  
	        	        
;031119
	      CLR     AX
	      ;031119
SP_RX005X16:       
                INC   AX
                STB    AL,WDTADDR[0]  
                CMP    AX,#0FFFFH
                JE     RETURNXXXXXX
                ;031119
                   
		JBC     INT_PEND,6,SP_RX005X16
		ANDB     INT_PEND,#0BFH
		LDB     BUFREG,SBUFRX
	        CMPB    BUFREG,CRC1
	        JNE     RETURNXXXXXX	  	              
	              
;030807***************************************	        
SP_RX005X1:					;查询待发送事件

		
;031210                LD      I2CADDR,#FSFLAGADDR   ;1109
 ;031210               LCALL   OUTPUT_SJ
;031210                LDB     FSFLAG,ZYBUFAL
;031210		CMPB    FSFLAG,#00H
;031210		JE      SP_ACKX		; 发ACK 向上位机 
	
		LCALL   SENDGZ
		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
		
		STB    AL,WDTADDR[0]  ;030417
		;031210   SJMP   SP_RX00AX      ;031119
RETURNXXXXXX:
		LJMP  RETURN          ;030807		
SP_ACKX:
		LJMP  SP_ACK
		     
		;030417 LDB     BL,#01   ;030417 ; 从上位机收ACK信号 
		;030417 LCALL   DELAY     ;030417
		
		;030417 JBC     INT_PEND,6,RETURNXXX  ;030417
SP_RX00AX:		
		  ;031119
	      CLR     AX
	      ;031119
SP_RX00A:       
                INC   AX
                STB    AL,WDTADDR[0]  
                CMP    AX,#0FFFFH
                JE     RETURNXXXXXX
                ;031119
                 
		 JBC     INT_PEND,6,SP_RX00A
		
		ANDB     INT_PEND,#0BFH
		LDB     BUFREG,SBUFRX
	        CMPB    BUFREG,#0EBH
	        JNE     RETURNXXXXXX	
       
  ;031119
	      CLR     AX
	      ;031119
SP_RX00B:       
                INC   AX
                STB    AL,WDTADDR[0]  
                CMP    AX,#0FFFFH
                JE     RETURNXXXXXX
                ;031119
                 
		JBC     INT_PEND,6,SP_RX00B
		ANDB     INT_PEND,#0BFH
		LDB     BUFREG,SBUFRX
	        CMPB    BUFREG,#090H
	        JNE     RETURNXXXXXX	
     
;031119
	      CLR     AX
	      ;031119
SP_RX00C:       
                INC   AX
                STB    AL,WDTADDR[0]  
                CMP    AX,#0FFFFH
                JE     SENDGZX8
                ;031119
		JBC     INT_PEND,6,SP_RX00C
		ANDB     INT_PEND,#0BFH
		LDB     BUFREG,SBUFRX
	        CMPB    BUFREG,#0EBH
	        JNE     SENDGZX8
       
;031119
	      CLR     AX
	      ;031119
SP_RX00D:       
                INC   AX
                STB    AL,WDTADDR[0]  
                CMP    AX,#0FFFFH
                JE     SENDGZX8
                ;031119
		JBC     INT_PEND,6,SP_RX00D
		ANDB     INT_PEND,#0BFH
		LDB     BUFREG,SBUFRX
	        CMPB    BUFREG,#090H
	        JNE     SENDGZX8	
       
;031119
	      CLR     AX
	      ;031119
SP_RX00E:       
                INC   AX
                STB    AL,WDTADDR[0]  
                CMP    AX,#0FFFFH
                JE     SENDGZX8
                ;031119
		JBC     INT_PEND,6,SP_RX00E
		ANDB    INT_PEND,#0BFH

⌨️ 快捷键说明

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