迪文T5L 串口4 crc-modbus实现
平台OSBuildmicro define;T5设置串口波特率115200值15667200/设置的波特率。 9600:1632 115200: 136 ;T5L设置串口波特率115200值25804800/设置的波特率。 9600:2688 115200: 224 ;校验码含帧头1帧头2长度为命令开始的字节包含校验码 ;应答 收到的前4字节(帧头1帧头2lenCMD)4F4Bcrchcrcl。 串口号 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帧头2lenCMD)4F4Bcrchcrcl。 ;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(LENR5) 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(LENR5): LDBR R5,0,1 LDBR R9,1,1 LDWR R10,0 LOOPD1: IJNE R4,0,1 GOTO 读数据到R10LENR5RET RDXDAT 串口号,R8,R9 DEC R4,0,1 IJNE R8,帧头1,LOOPD1 MOV R8,R10,1 IJNE R4,0,1 GOTO 读数据到R10LENR5RET LOOPD2: RDXDAT 串口号,R8,R9 DEC R4,0,1 IJNE R4,0,R8帧头1 GOTO 读数据到R10LENR5RET 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 读数据到R10LENR5RET 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 读数据到R10LENR5RET LDBR R5,0,1 读数据到R10LENR5RET: 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文件中配置触摸变量改变自动上传