|
|

楼主 |
发表于 2019-8-16 16:32:26
|
显示全部楼层
- ;UART4串口接收82 83 指令并进行处理
- ORG 1000H
- GOTO MAIN
- NOP
- NOP
- NOP
- ORG 1080H
- MAIN:
- CALL INITE
- CALL READ_82
- CALL SEND_82
- CALL SEND_83
- GOTO MAIN
-
- ;*************************************
- ; 系统初始化
- ;*************************************
- INITE: IJNE R255,0,INIRET
- LDBR R255,1,1
- COMSET 40H,136; //设置串口4,波特率115200,上电执行一次
-
- INIRET: NOP
- RET
- ;****************************************
- ; 接收82指令
- ;******************************************
- READ_82:
- LDBR R12,2,1
- ;COMTXD 4,R10,R12
- RDXLEN 4,R17
- IJNE R17,0,RD1; //检查返回串口的数据长度
- RET
-
- RD1: MOVDR 17,R10,1
- IJNE R10,0,RET82; //R10检查是否溢出
- RDXDAT 4,R40,R17; //长度在R17里面,数据在R40里面
- IJNE R40,0X5A,RET82; //比较帧头
- IJNE R41,0XA5,RET82
- IJNE R43,0X82,READ_83; //判定是82指令还是83指令
- DEC R17,0,6
- MOV R17,R9,1
- MOV R46,R200,0; //需要交换的数据放入R200里
-
- LDBR R10,0,7
- LDBR R20,0,7
- LDBR R27,2,1
- DIV R10,R20,0
- MOV R17,R9,1; //需要写入的字长度在R9里
- LDBR R254,1,1; //启动SEND_82处理82指令
-
- RET82: RET
- ;******************************************
- ; 接收83指令
- ;*****************************************
- READ_83: IJNE R43,0X83,RET83; //R46字长度
- MOV R44,R0,2
- MOV R46,R9,1
- MOVXR R157,1,0; //数据读到R157
- MOV R43,R153,4
-
- LDBR R10,0,18
- LDBR R18,2,1
- LDBR R27,4,1
- MOV R46,R13,1
- MAC R10,R15,R20; //计算返回指令中83后的字节数
- MOV R27,R152,1
- INC R27,0,3; //需要返回串口的字节长
- LDBR R253,1,1; //启动SEND_83处理83指令
- RET83: NOP
- RET
- ;***************************************
- ; 处理82指令
- ;******************************************
- SEND_82: IJNE R254,1,SD82
- LDBR R254,0,1
- MOV R44,R0,2
- MOVXR R200,0,0; //写入变量地址
- SD82: NOP
- RET
- ;******************************************
- ; 处理83指令
- ;********************************************
- SEND_83: IJNE R253,1,SD83
- LDBR R253,0,1
- LDWR R150,5AA5H
- COMTXD 4,R150,R27; //通过串口返回83指令
-
- SD83: NOP
- RET
复制代码 |
|