迪文T5L 串口4 crc-modbus实现

平台:OSBuild

micro define

;T5设置串口波特率115200,值=15667200/设置的波特率。  9600:1632    115200: 136
;T5L设置串口波特率115200,值=25804800/设置的波特率。 9600:2688    115200: 224
;校验码含帧头1帧头2,长度为命令开始的字节,包含校验码
;应答: 收到的前4字节(帧头1+帧头2+len+CMD)+4F4B+crchcrcl。
串口号 EQU  4
波特率 EQU  224
帧头1  EQU  0x5A
帧头2  EQU  0xA5
补发   EQU  1
超时   EQU  8000

程序

;20210913徐自成修改完善版
;T5设置串口波特率115200,值=15667200/设置的波特率。  9600:1632    115200: 136
;T5L设置串口波特率115200,值=25804800/设置的波特率。 9600:2688    115200: 224
;校验码含帧头1帧头2,长度为命令开始的字节,包含校验码
;应答: 收到的前4字节(帧头1+帧头2+len+CMD)+4F4B+crchcrcl。
;R248R249 CRCH CRCL
;R250  补发次数
;R251  串口号
;R252R253 备份指针
;R254  按键处理标志
;R255  程序步进控制
            ORG       1000H
            GOTO      MAIN                 ;串口号
            ORG       1080H
MAIN:       LDBR      R251,串口号,1      ;串口号=4,5
            CALL      串口号初始化
MANI:       CALL      程序步进0     
            CALL      程序步进1
            CALL      程序步进2
            CALL      程序步进3     
            CALL      程序步进4
            CALL      程序步进5
            ;CALL      触控变量上传   
            GOTO      MANI
;===============================  
串口号初始化: IJNE      R251,5,2
            COMSET    0X50,波特率          
            GOTO      串口号初始化RET         
            IJNE      R251,4,串口号初始化RET
            COMSET    0X40,波特率         
串口号初始化RET: 
            RET
;===============================         
程序步进0:   IJNE      R255,0,程序步进0RET 
            LDWR      R0,0x0F00
            MOVXR     R4,1,2       ;R4 5 6 7
            IJNE      R4,0,1
            GOTO      步进=1
            LDBR      R254,1,1     ;按键处理标志
步进=1:      LDBR      R255,1,1
程序步进0RET:NOP            
            RET
;===============================            
程序步进1:   IJNE        R255,1,程序步进1RET 
            RDXLEN     串口号,R8
            IJNE       R8,0,2
            LDBR       R255,4,1    ;步进=4
            GOTO       程序步进1RET
            MOVDR      17,R8,1     ;4等超时
            IJNE       R251,5,1
            MOVDR      18,R8,1     ;5等超时
            IJNE       R8,0,2
            LDBR       R255,3,1    ;步进=3
            GOTO       程序步进1RET 
            LDBR       R255,2,1    ;步进=2
程序步进1RET:NOP            
            RET            
;==============================            
程序步进2:   IJNE        R255,2,程序步进2RET 
            MOVDR      17,R8,1     ;4等超时
            IJNE       R251,5,1
            MOVDR      18,R8,1     ;5等超时
            IJNE       R8,0,程序步进2RET
            LDBR       R255,3,1    ;步进=3
程序步进2RET:NOP            
            RET             
;==============================            
程序步进3:   IJNE        R255,3,程序步进3RET            
LOOPDX1:    RDXLEN     串口号,R4
            IJNE       R4,0,2
            LDBR       R255,4,1    ;步进=4
            GOTO       程序步进3RET
            CALL       读数据到R10(LEN=R5)
            IJNE       R5,0,处理8283指令
            GOTO       LOOPDX1
处理8283指令:CALL       处理82指令           
            CALL       处理83指令 
            GOTO       LOOPDX1
程序步进3RET:NOP            
            RET 
;==============================            
程序步进4:   IJNE        R255,4,程序步进4RET   ;5A A5 0 83 10 00 01 XX XX CRCH CRCL          
            IJNE        R254,1,步进=0
            IJNE        R250,补发,3
            LDBR        R250,0,1    ;补发次数
            LDBR        R254,0,1    ;按键处理标志
            GOTO        步进=0
            LDBR        R10,帧头1,1
            LDBR        R11,帧头2,1
            LDWR        R0,0x0F00
            MOVXR       R13,1,2       ;R4 5 6 7
            LDBR        R13,0X83,1
            MOV         R16,R9,1
            MOV         R14,R0,2
            MOVXR       R17,1,0
            SHL         R9,1,1
            INC         R9,0,6;测试+
            ;测试-;INC         R9,0,4
            MOV         R9,R12,1
            ;测试-INC         R9,0,3
            INC         R9,0,1;测试+
            COMTXD      串口号,R10,R9
            DEC 		R9,0,3;测试+
            CRCA        R13,R248,R9
            COMTXI      串口号,R248,2
            LDWR        R8,0
            MOVRD       R8,35,2
            LDBR        R255,5,1       ;步进=5
            GOTO        程序步进4RET
步进=0:      LDBR        R255,0,1       ;步进=0      
程序步进4RET:NOP            
            RET 
;==============================
程序步进5:   IJNE        R255,5,程序步进5RET  ;5A A5 07 83 4F4B CRCH CRCL          
            RDXLEN      串口号,R8
            LDBR        R7,0,1
            LDWR        R5,8
            JS          R7,R5,4
            LDBR        R250,0,1    ;补发次数
            LDBR        R254,0,1    ;按键处理标志
            LDBR        R255,0,1    ;步进=0 
            GOTO        程序步进5RET
            LDWR        R4,超时
            MOVDR       35,R6,2
            JU          R6,R4,程序步进5RET
            LDBR        R255,4,1     ;步进=4
            INC         R250,0,1 
程序步进5RET:NOP            
            RET 
;==============================
读数据到R10(LEN=R5):
            LDBR       R5,0,1
            LDBR       R9,1,1
            LDWR       R10,0
LOOPD1:     IJNE       R4,0,1
            GOTO       读数据到R10LEN=R5RET
            RDXDAT     串口号,R8,R9
            DEC        R4,0,1
            IJNE       R8,帧头1,LOOPD1
            MOV        R8,R10,1
            IJNE       R4,0,1
            GOTO       读数据到R10LEN=R5RET
LOOPD2:     RDXDAT     串口号,R8,R9
            DEC        R4,0,1
            IJNE       R4,0,R8=帧头1
            GOTO       读数据到R10LEN=R5RET
R8=帧头1:    IJNE       R8,帧头1,R8=帧头2
            GOTO       LOOPD2              ;5A A5 07 82 10 00 XX XX CRCH CRCL 
R8=帧头2:    IJNE       R8,帧头2,LOOPD1     ;5A A5 06 83 10 00 01 CRCH CRCL     
            MOV        R8,R11,1 
            RDXDAT     串口号,R12,R9        ;
            MOV        R12,R6,1 
            LDBR       R2,8,1
            LDBR       R3,13,1
LOOPD3:     RDXDAT     串口号,R8,R9
            DEC        R4,0,1
            IJNE       R4,0,2
            LDBR       R5,0,1
            GOTO       读数据到R10LEN=R5RET
            MOVA
            INC        R3,0,1 
            INC        R5,0,1  
            DEC        R6,0,1
            IJNE       R6,0,LOOPD3
            ;MOV        R12,R7,1
            ;INC        R7,0,3
            ;CRCA       R10,R248,R7
            ;RDXDAT     串口号,R6,R9 
           ; RDXDAT     串口号,R7,R9 
           ; CJNE       R6,R248,2
;           ; CJNE       R7,R249,1
            GOTO       读数据到R10LEN=R5RET
            LDBR       R5,0,1
读数据到R10LEN=R5RET:
            RET  
;;*****************************************
;;          处理82指令  
;;******************************************
处理82指令:   ;R10R11R12R13R14R15R16R17R18R19
            ; 5A A5 L  C  AD AD XX XX XX XX
            ; 5A A5 07 82 10 00 XX XX XX XX
            IJNE       R13,0X82,处理82指令结束
            MOV        R12,R9,1
            ;测试-;;DEC        R9,0,3
            ;测试-;SHR        R9,1,1 
            ;测试+
            CRCA 	   R13,R248,R9
            IJNE       R248,0,处理82指令结束
            IJNE       R249,0,处理82指令结束
            ;测试+
            DEC        R9,0,5;得出字节长度
            SHR        R9,1,1;一个数据两个字节,所以右移一位
            MOV        R14,R0,2
            MOVXR      R16,0,0 
            ;测试-;LDBR       R9,6,1 
            LDBR       R9,3,1
            ;测试-;LDBR       R12,03,1
            LDBR       R12,05,1;测试+
            LDWR       R14,0X4F4B           
            CRCA       R13,R16,R9
            COMTXI     串口号,R10,8       
            ;COMTXI     串口号,R10,6
处理82指令结束:NOP
             RET
;;******************************************
;;          处理83指令  5a a5 04 83 1001  02
;;******************************************
处理83指令:   IJNE     R13,0X83,处理83指令结束
			 ;测试+
			 MOV      R12,R9,1
			 CRCA     R13,R248,R9
			 IJNE     R248,0,处理83指令结束
             IJNE     R249,0,处理83指令结束
			 ;测试+
             MOV      R14,R0,2;把地址写入R0
             MOV      R16,R9,1;长度给R9
             LDWR     R6,100 
             LDBR     R8,0,1
             JS       R8,R6,1
             LDBR     R9,100,1
             MOVXR    R17,1,0
             SHL      R9,1,1
             INC      R9,0,4 
             CRCA     R13,R248,R9;测试+
             INC      R9,0,2;测试+
             MOV      R9,R12,1
             ;测试-;INC      R9,0,3
             INC      R9,0,1;测试+
             COMTXD   串口号,R10,R9	
             COMTXI   串口号,R248,2;测试+
处理83指令结束:NOP
             RET
;******************************************             

            



;******************************************             
;          触控变量上传;5A A5 08 83 0F 00 02   00 11 00 01 表示变量地址0x1100上传了1个字的数据
;                     5a a5 06 83 1001  01 data
;********************************************             
触控变量上传:	;
            LDWR     R0,0F00H
            MOVXR    R4,1,2   ;r4 5 6 7
            IJNE     R4,5AH,触控变量上传结束  
            LDBR     R10,0,4
            MOVXR    R10,0,2
            
            MOV      R7,R2,1
            SHL      R2,1,1
            LDBR     R3,FEH,1
            AND      R2,R3,1
            INC      R2,0,7
            MOV      R2,R9,1
            LDWR     R15,5AA5H  ;
            
            MOV      R5,R19,2 ;发出来的地址
            MOV      R5,R0,2
            MOVXR    R22,1,0
            DEC      R2,0,3
            MOV      R2,R17,1 
             
            MOV      R7,R21,1  ;修改标记0221
            LDBR     R18,83H,1
            COMTXD   4,R15,R9      
              
            
触控变量上传结束:	
            RET
                        
			;测试代码
			;LDWR R0,0X1001
			;LDWR R200,0X0001
			;MOVXR R200,0,1	
			;测试代码












             
             

这个是有CRC的,没有CRC的可以到迪文论坛找。

触摸要自动上传的话,要在*.CFG文件中配置触摸变量改变自动上传

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值