平台: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文件中配置触摸变量改变自动上传