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

📄 test_485.asm

📁 一个485通信测试程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
  
                 ;call    JG4_RD_EEPROM       ;读出在线机组温度状况给文本显示
                  call    JJ_CHKCRC_DSP03     ;求CRC码
                
                  mov     A,RMB_CRCH          ;
                  mov     TTx_CRC_Low,A       ;CRC效验码低位 
                  mov     A,RMB_CRCL          ; 
                  mov     TTx_CRC_High,A      ;CRC效验码高位 
             
                  jmp     JJ_Tx_25bytes       ; 
          
;***********************************************************************;
;                                                                       ;
;                        中转站更新在线机组运行状况                     ;
;                                                                       ;
;***********************************************************************;  
JJ_ONWORK_Looks:                              ;在线机组运行状况0a,0b,0c,0d
                  CALL    JJ_Header_Set       ;
                  mov     A,0ah               ;
                  mov     TTx_Start_AddrL,A   ;起始地址低位    
                  mov     A,04h               ; 
                  mov     TTx_DtLength_L,A    ;数组长度低位
                  mov     A,08h               ;08h
                  mov     TTx_DtLength,A      ;数组字节数
            
                  mov     A,00h               ; 
                  mov     TTx_Data1_H,A       ;数组1高位
                  mov     A,01h               ;从机号
                  mov     TTx_Data1_L,A       ;数组1低位
                  mov     A,00h               ; 
                  mov     TTx_Data2_H,A       ;数组2高位
                  mov     A,00h               ;
                  mov     TTx_Data2_L,A       ;数组2低位
                  mov     A,00h               ; 
                  mov     TTx_Data3_H,A       ;数组3高位
                  mov     A,00h               ;
                  mov     TTx_Data3_L,A       ;数组3低位
                  mov     A,00h               ; 
                  mov     TTx_Data4_H,A       ;数组4高位
                  mov     A,00h               ;
                  mov     TTx_Data4_L,A       ;数组4低位
  
                 ;call    JG5_RD_EEPROM       ;读出在线机组运行状况给文本显示
                  call    JJ_CHKCRC_DSP02     ;求CRC码
                
                  mov     A,RMB_CRCL          ;
                  mov     TTx_Data5_L,A       ;CRC效验码低位 
                  mov     A,RMB_CRCH          ; 
                  mov     TTx_Data5_H,A       ;CRC效验码高位 
             
                  jmp     JJ_Tx_17bytes       ; 
;--------------------------------------------------------------;             
JJ_Header_Set:             
                  mov     A,1                 ; 
                  mov     TTx_Slave_No,A      ;从机号(00~15) 
                  mov     A,10H               ; 
                  mov     TTx_Func_code,A     ;功能码(10h) 
                  mov     A,00h               ;
                  mov     TTx_Start_AddrH,A   ;起始地址高位    
                  mov     A,00h               ;
                  mov     TTx_DtLength_H,A    ;数组长度高位
                  RET          
             
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;                  
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@; 
;---------->  PD7 应用Modbus通信协议的RTU模式发送数据给文本   <----------;
;          设备地址,功能代码,数据数量,数据1~7,校验高,校验低。       ;
;------------------------------------------------------------------------;
;************************************************************************;  
JJ_Tx_8bytes:                              ;设置参数,发送请求8个数据(42h~49H)
                  set     PD.3             ; 
                  set     PD.3             ;
                  mov     A,42h            ;
                  mov     mp0,A            ;42h,43h,44H,45H,46h,47h,48h,49h
JJ_Tx_8B:                  
                  mov     A,r0             ;
                  call    TRANSMIT         ;发送  
                  inc     mp0              ;
                  mov     A,4ah            ;check 4ah 
                  xor     A,mp0            ;
                  snz     z                ;
                  jmp     JJ_Tx_8B         ;
                  clr     PD.3             ;
                  call    JJ_Delay         ;
                  ret                      ;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;                  
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;                  
JJ_Tx_17bytes:                             ;在线机组运行状况,中转站发17个数字 (59h~69h)
                  set     PD.3             ; 
                  set     PD.3             ;
                  mov     A,59h            ;
                  mov     mp0,A            ;59h,5ah,5bh,5ch,5dh,5eh,5fh,60h,61h,62h,63h,64h,65h,66h,67h,68h,69h
JJ_Tx_17B:                  
                  mov     A,r0             ;
                  call    TRANSMIT         ;发送  
                  inc     mp0              ;
                  mov     A,6ah            ;check 6ah 
                  xor     A,mp0            ;
                  snz     z                ;
                  jmp     JJ_Tx_17B        ;
                  clr     PD.3             ;
                  call    JJ_Delay         ;
                  ret                      ;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;                  
JJ_Tx_25bytes:                             ;温度选择查看,中转站发25个数字(59h~71h)
                  set     PD.3             ; 
                  set     PD.3             ;
                  mov     A,59h            ;
                  mov     mp0,A            ;59h,5ah,5bh,5ch,5dh,5eh,5fh,60h,61h,62h,63h,64h,65h
JJ_Tx_25B:                                 ;66h,67h,68h,69h,6ah,6bh,6ch,6dh,6eh,6fh,70h,71h
                  mov     A,r0             ;
                  call    TRANSMIT         ;发送  
                  inc     mp0              ;
                  mov     A,72h            ;check 72h 
                  xor     A,mp0            ;
                  snz     z                ;
                  jmp     JJ_Tx_25B        ;
                  clr     PD.3             ;
                  call    JJ_Delay         ;
                  ret                      ;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;                  
JJ_Tx_13bytes:                             ;故障描述/设备状态 查看,中转站发13个数字(59h~65h)
                  set     PD.3             ; 
                  set     PD.3             ;
                  mov     A,59h            ;
                  mov     mp0,A            ;59h,5ah,5bh,5ch,5dh,5eh,5fh,60h,61h,62h,63h,64h,65h
JJ_Tx_13B:                                 ;
                  mov     A,r0             ;
                  call    TRANSMIT         ;发送  
                  inc     mp0              ;
                  mov     A,66h            ;check 66h 
                  xor     A,mp0            ;
                  snz     z                ;
                  jmp     JJ_Tx_13B        ;
                  clr     PD.3             ;
                  call    JJ_Delay         ;
                  ret                      ;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;                  
JJ_Tx_11bytes:                             ;机组运行状况查看,中转站发11个数字(59h~63h)
                  set     PD.3             ; 
                  set     PD.3             ;
                  mov     A,59h            ;
                  mov     mp0,A            ;59h,5ah,5bh,5ch,5dh,5eh,5fh,60h,61h,62h,63h
JJ_Tx_11B:                                 ;
                  mov     A,r0             ;
                  call    TRANSMIT         ;发送  
                  inc     mp0              ;
                  mov     A,64h            ;check 64h 
                  xor     A,mp0            ;
                  snz     z                ;
                  jmp     JJ_Tx_11B        ;
                  clr     PD.3             ;
                  call    JJ_Delay         ;
                  ret                      ;
             
;------------------------------------------------------------------------;
;------------------------------------------------------------------------;
;------------------------------------------------------------------------;
;---------->    Modbus协议通信的RTU模式CRC校验,求CRC校验码    <----------;
;          设备地址,功能代码,数据数量,数据1~7,校验高,校验低。       ;
;------------------------------------------------------------------------;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; 
JJ_CHKCRC_MW10:
                  mov     A,50h            ;MW10选择(5个) 
                  mov     mp0,A            ;4ah~50h
                  mov     A,0ffh           ;
                  mov     RMB_CRCH,A       ;1.预置 16 位寄存器为十六进制 FFFF(即全为 1),低字节
                  mov     RMB_CRCL,A       ;  预置 16 位寄存器为十六进制 FFFF(即全为 1),高字节
                  mov     A,5              ;
                  mov     Rx_Leng,A        ;待校验的数据串长度
                  jmp     JJ_CRC_Set       ;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;                  
JJ_CHKCRC_SET02:
                  mov     A,52h            ;开/关主机选择参数(7个) 
                  mov     mp0,A            ;4ah~52h
                  mov     A,0ffh           ;
                  mov     RMB_CRCH,A       ;1.预置 16 位寄存器为十六进制 FFFF(即全为 1),低字节
                  mov     RMB_CRCL,A       ;  预置 16 位寄存器为十六进制 FFFF(即全为 1),高字节
                  mov     A,7              ;
                  mov     Rx_Leng,A        ;待校验的数据串长度
                  jmp     JJ_CRC_Set       ;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;                  
JJ_CHKCRC_SET03:
                  mov     A,54h            ;主机参数设定(9个) 
                  mov     mp0,A            ;4ah~54h
                  mov     A,0ffh           ;
                  mov     RMB_CRCH,A       ;1.预置 16 位寄存器为十六进制 FFFF(即全为 1),低字节
                  mov     RMB_CRCL,A       ;  预置 16 位寄存器为十六进制 FFFF(即全为 1),高字节
                  mov     A,9              ;
                  mov     Rx_Leng,A        ;待校验的数据串长度
                  jmp     JJ_CRC_Set       ;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;                  
JJ_CHKCRC_SET04:
                  mov     A,58h            ;定时开关机参数设定(13个) 
                  mov     mp0,A            ;4ah~58h
                  mov     A,0ffh           ;
                  mov     RMB_CRCH,A       ;1.预置 16 位寄存器为十六进制 FFFF(即全为 1),低字节
                  mov     RMB_CRCL,A       ;  预置 16 位寄存器为十六进制 FFFF(即全为 1),高字节
                  mov     A,13             ;
                  mov     Rx_Leng,A        ;待校验的数据串长度
;------------------------------------------------------------------------;
JJ_CRC_Set:
                  mov     A,r0             ;2.把第一个 8 位数据与 16 位 CRC 寄存器的低位相异或,
                  xor     A,RMB_CRCH       ; 并把结果放于CRC 寄存器
                  mov     RMB_CRCH,A       ;
                  mov     A,8              ; 
                  mov     Rx_count,A       ;
JJ_CRC_W2:
                  mov     A,RMB_CRCL       ;3.把寄存器的内容右移一位(朝低位),先移动高字节
                  clr     C                ;
                  RRC     ACC              ;
                  mov     RMB_CRCL,A       ;
                  mov     A,RMB_CRCH       ;再移动低字节
                  RRC     ACC              ;
                  mov     RMB_CRCH,A       ;

                  snz     C                ;4.检查最低位(移出位),如果最低位为 0 ,重复第 3 步(再次移位)
                  JMP     JJ_CRC_W3        ;
    
                  mov     A,RMB_CRCH       ;如果最低位为 1,CRC 寄存器与多项式 A001 进行异或
                  xor     A,01h            ;01h
                  mov     RMB_CRCH,A       ;
    
                  mov     A,RMB_CRCL       ;
                  xor     A,0a0h           ;0a0h
                  mov     RMB_CRCL,A       ;
JJ_CRC_W3:
                  sdz     Rx_count         ;5.重复步骤 3 和 4,直到右移 8 次,这样整个 8 位数据全部进行了处理
                  JMP     JJ_CRC_W2        ;
                  DEC     MP0              ;
                  sdz     Rx_Leng          ;6.重复步骤2 到步骤 5,进行下一个 8 位数据的处理
                  JMP     JJ_CRC_Set       ;
                  ret                      ;

;------------------------------------------------------------------------;
;------------------------------------------------------------------------;
JJ_CHKCRC_SET01:                           ;发请求 
                  mov     A,42h            ;设置参数(6个) 
                  mov     mp0,A            ;42h~47h
                  mov     A,0ffh           ;
                  mov     RMB_CRCH,A       ;1.预置 16 位寄存器为十六进制 FFFF(即全为 1),低字节
                  mov     RMB_CRCL,A       ;  预置 16 位寄存器为十六进制 FFFF(即全为 1),高字节
                  mov     A,6              ;
                  mov     Rx_Leng,A        ;待校验的数据串长度
                  jmp     JJ_CRC_1         ;
;---

⌨️ 快捷键说明

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