- ORG 1000H
- GOTO MAIN
- ORG 1080H
- MAIN:
- CALL INITE ;初始化串口,用户定时器,初始化使用到得R寄存器
- CALL T300MS ;300ms定时器标志
- LDBR R0,0X20,1
- LDBR R1,0X00,1 ;键盘确定键地址
- MOVXR R10,1,1
- IJNE R11,0X01,RED_H
- LDBR R0,0X11,1 ;
- LDBR R1,0X00,1 ;指定触摸屏变量地址
- CALL READ_DM_RESP ;读取DM区数据
- CALL DM_INPUT ;写DM区
- CALL DM_INPUT1
- RED_H:
- IJNE R11,0X02,RED_CIO
- CALL READ_H_RESP ;读取CIO区数据
- CALL H_INPUT ;写H区
- CALL H_INPUT1 ;写H区
- RED_CIO:
- IJNE R11,0X03,MAIN_END
- CALL READ_CIO_RESP ;读取CIO区数据
- CALL CIO_INPUT ;写CIO区
- CALL CIO_INPUT1
- MAIN_END:
- GOTO MAIN
- ;***************
- ;上电初始化
- INITE:
- IJNE R255,0,INIRET
- LDBR R255,1,1
- COMSET 40H,136 ;设置串口4,波特率115200,上电执行一次
- CONFIG 1,2,1 ;用户定时器初始化
- LDBR R250,0,3
- LDBR R70,1,1
- LDBR R71,0,2 ;R变量初始化
- INIRET:
- RET
-
- ;********************
-
- ;***************
- ;300MS定时,每300ms读一次
- T300MS:
- LDBR R30,0X01,1
- LDBR R31,0XF4,1
- MOVDR 37,R20,2
- JU R20,R30,T300_END
- LDBR R90,1,1
- LDWR R20,0
- MOVRD R20,37,2
- LDBR R250,0,3
- T300_END:
- RET
- ;******************
- ;********************************
- ;发送一次读DM区指令后,响应数据处理
- READ_DM_RESP:
- IJNE R90,1,READ_END ;发送一次读DM区指令后,等待响应
- LDBR R90,0,1 ;清除300ms标志位
- CALL READ_DM
- MOV R209,R143,1
- CALL ASCII2HEX
- MOV R159,R232,1
-
- READ_END:
- RDXLEN 4,R50 ;串口得数据长度放到R50中;
- IJNE R50,0,RECIVE
- RET
-
- RECIVE:
- MOVDR 17,R20,1
- IJNE R20,0,READ_DM_RESP
-
- DATA_HAN:
- RDXDAT 4,R200,R50
- IJNE R204,0x44,READ_RET
- LDBR R50,0,1 ;读取完成后清除保存再R50中得数据长度
- ;*****以下为数据处理****
-
- MOV R207,R143,1
- CALL ASCII2HEX ;ASCII转换为HEX
- MOV R159,R230,1
-
- MOV R208,R143,1
- CALL ASCII2HEX ;ASCII转换为HEX
- MOV R159,R231,1
-
- MOV R209,R143,1
- CALL ASCII2HEX ;ASCII转换为HEX
- MOV R159,R232,1
-
- MOV R210,R143,1
- CALL ASCII2HEX ;ASCII转换为HEX
- MOV R159,R233,1
-
- MOV R230,R160,4
-
- LDBR R0,0X11,1
- LDBR R1,0X00,1
- CALL DATA2HMI ;写到触摸屏
-
- MOV R211,R143,1
- CALL ASCII2HEX ;ASCII转换为HEX
- MOV R159,R230,1
-
- MOV R212,R143,1
- CALL ASCII2HEX ;ASCII转换为HEX
- MOV R159,R231,1
-
- MOV R213,R143,1
- CALL ASCII2HEX ;ASCII转换为HEX
- MOV R159,R232,1
-
- MOV R214,R143,1
- CALL ASCII2HEX ;ASCII转换为HEX
- MOV R159,R233,1
-
- MOV R230,R160,4
-
- LDBR R0,0X11,1
- LDBR R1,0X01,1
- CALL DATA2HMI ;写到触摸屏
-
- LDBR R70,0,3
- LDBR R71,1,1
- READ_RET:
- RET
- ;***************************
- ;***************************
- ;R100--R116DM指令占用,所有数据为ASCII码形式
- ;R100:[url=home.php?mod=space&uid=72445]@[/url] R101:0X30 R102:0X30 R103:0X52(R) R104:0X44(D) R105-R108:PLC的DM区地址
- ;R109-R112:读取DM区的长度 R113-R114:XOR校验码 R115:0X2A R116:0X0D
- ;R9发送数据得长度
- ;读DM区指令RD格式 [url=home.php?mod=space&uid=72445]@[/url] 00 RD 0000 0000 00 *\CR
- ; 帧头 PLC单元号 读DM区指令 开始读取的地址 读取长度 XOR校验 结束码0X2A 0X0D
- ;读D0009 D0010的数据
- READ_DM:
- LDBR R100,0X40,1
- LDBR R101,0X30,2
- LDBR R103,0X52,1
- LDBR R104,0X44,1
- LDBR R105,0X30,1
- LDBR R106,0X30,1
- LDBR R107,0X30,1
- LDBR R108,0X39,1
- LDBR R109,0X30,1
- LDBR R110,0X30,1
- LDBR R111,0X30,1
- LDBR R112,0X32,1
- ;下列代码为R100-R112的XOR计算,并将计算值转换为ascii赋值给R113,R114
- LDBR R120,0X40,1
- XOR R120,R101,1
- XOR R120,R102,1
- XOR R120,R103,1
- XOR R120,R104,1
- XOR R120,R105,1
- XOR R120,R106,1
- XOR R120,R107,1
- XOR R120,R108,1
- XOR R120,R109,1
- XOR R120,R110,1
- XOR R120,R111,1
- XOR R120,R112,1
- MOV R120,R121,1
- SHR R120,1,4
- CALL HXE2ASCII ;调用转换,数据已经放入R120
- MOV R125,R113,1;返回得数据再R125中
-
- MOV R121,R120,1;数据放入R120中
- CALL HXE2ASCII ;调用转换
- MOV R125,R114,1;返回得数据再R125中
-
- LDBR R115,0X2A,1 ;结束字符
- LDBR R116,0X0D,1 ;结束字符
- LDBR R9,17,1
- COMTXD 4,R100,R9
- RET
- ;***********************************************
-
- ;数字0-F转换位ASCII码,输入数据接口R120,输出数据接口R125,占用R120-R140寄存器;
- HXE2ASCII:
- LDBR R125,0X0F,1
- LDBR R124,0X00,1
- AND R125,R120,1
- LDBR R122,0X00,1
- LDBR R123,0X09,1
- JU R122,R124 ASCII
- LDBR R130,0X30,1
- OR R125,R130,1
- RET
- ASCII:
- LDBR R127,0X00,4
- LDBR R130,0X37,1
- LDBR R122,0X00,3
- ADD R122,R127,R131
- MOV R138,R125,1
- RET
- ;*************************************************
- ;********************
- ;ascii码转换为HEX
- ;返回得数据提取,输入数据接口R140-R143;输出数据接口R159
- ASCII2HEX:
- LDBR R140,0X00,3
- LDBR R144,0X00,1
- LDBR R145,0X30,1
- JU R142,R144,HEX_A_F;如果数据>=0X30,满足继续执行,否则跳转其他判断
- LDBR R146,0X00,1
- LDBR R147,0X39,1
- JU R146,R142,HEX_A_F;满足>=0x30后,判断是否<=0x39,满足继续执行,否则跳转其他判断
- LDBR R148,0,3
- LDBR R151,0X30,1
- LDBR R152,0,8
- SUB R140,R148,R152
- RET
- HEX_A_F:
- LDBR R140,0X00,3
- LDBR R144,0X00,1
- LDBR R145,0X41,1
- JU R142,R144,AS2HE_END;如果数据>=0X30,满足继续执行,否则跳转其他判断
- LDBR R146,0X00,1
- LDBR R147,0X46,1
- JU R146,R142,AS2HE_END;满足>=0x30后,判断是否<=0x39,满足继续执行,否则跳转其他判断
- LDBR R148,0,3
- LDBR R151,0X37,1
- LDBR R152,0,8
- SUB R140,R148,R152
- AS2HE_END:
- RET
-
- ;*******************
- ;数据显示到屏幕,输入接口R160-R163,数据输出接口由R0:R1设定
- DATA2HMI:
- SHL R160,1,4
- OR R160,R161,1
- SHL R162,1,4
- OR R162,R163,1
- MOV R162,R161,1
- MOVXR R160,0,1
- NOP
- RET
- ;*******************
- ;***********************
- ;输入数据变量地址有R0:R1指定,调用前请给R0:R1赋值
- DM_INPUT:
- LDBR R0,0X12,1
- LDBR R1,0X10,1 ;键盘确定键地址
- MOVXR R80,1,1
- IJNE R80,0X5A,DM_IN ;键盘确定键按下,0x1210赋值0x5A5A,有写操作
- IJNE R81,0X5A,DM_IN
- LDBR R80,0,2
- MOVXR R80,0,1
-
- LDBR R84,0X30,1
- LDBR R85,0X30,1
- LDBR R86,0X30,1
- LDBR R87,0X39,1 ;指定要写入得DM区对应得PLC地址
- ;将数据写入到PLC,写入地址有R84:R85:R86:R87指定
- LDBR R100,0X40,1
- LDBR R101,0X30,2
- LDBR R103,0X57,1
- LDBR R104,0X44,1
- MOV R84,R105,1
- MOV R85,R106,1
- MOV R86,R107,1
- MOV R87,R108,1
-
- LDBR R0,0X12,1
- LDBR R1,0X00,1
- MOVXR R82,1,1
-
- MOV R82,R120,1
- SHR R120,1,4 ;转换为ASCII码
- CALL HXE2ASCII ;调用转换,数据已经放入R120
- MOV R125,R109,1;返回得数据再R125中
-
- MOV R82,R120,1 ;转换为ASCII码
- CALL HXE2ASCII ;调用转换,数据已经放入R120
- MOV R125,R110,1;返回得数据再R125中
-
- MOV R83,R120,1
- SHR R120,1,4 ;转换为ASCII码
- CALL HXE2ASCII ;调用转换,数据已经放入R120
- MOV R125,R111,1;返回得数据再R125中
-
- MOV R83,R120,1 ;转换为ASCII码
- CALL HXE2ASCII ;调用转换,数据已经放入R120
- MOV R125,R112,1;返回得数据再R125中
- ;以下为XOR校验
- LDBR R120,0X40,1
- XOR R120,R101,1
- XOR R120,R102,1
- XOR R120,R103,1
- XOR R120,R104,1
- XOR R120,R105,1
- XOR R120,R106,1
- XOR R120,R107,1
- XOR R120,R108,1
- XOR R120,R109,1
- XOR R120,R110,1
- XOR R120,R111,1
- XOR R120,R112,1
-
- MOV R120,R121,1
- SHR R120,1,4 ;转换为ASCII码
- CALL HXE2ASCII ;调用转换,数据已经放入R120
- MOV R125,R113,1;返回得数据再R125中
-
- MOV R121,R120,1;数据放入R120中
- CALL HXE2ASCII ;调用转换
- MOV R125,R114,1;返回得数据再R125中
-
- LDBR R115,0X2A,1 ;结束字符
- LDBR R116,0X0D,1 ;结束字符
- LDBR R9,17,1
- COMTXD 4,R100,R9
- INPUT_DM_END:
- RDXLEN 4,R50 ;串口得数据长度放到R50中;
- IJNE R50,0,INPUT_DM_BACK
- RET
-
- INPUT_DM_BACK:
- MOVDR 17,R20,1
- IJNE R20,0,INPUT_DM_END
- RDXDAT 4,R170,R50
- DM_IN: RET
- ;*****************
- ;***********************
- ;输入数据变量地址R0:R1指定,调用前请给R0:R1赋值
- CIO_INPUT:
- LDBR R0,0X10,1
- LDBR R1,0X01,1 ;按钮LED1输入
- MOVXR R80,1,1
- IJNE R80,0X00,CIO_IN ;相等不知执行写操作
- IJNE R81,0X01,CIO_IN
- LDBR R80,0,2
- MOVXR R80,0,1
-
- LDBR R84,0X30,1
- LDBR R85,0X30,1
- LDBR R86,0X31,1
- LDBR R87,0X30,1 ;指定要写入得CIO区对应得PLC地址
- CIO_WR:
- ;将数据写入到PLC,写入地址有R84:R85:R86:R87指定
- LDBR R100,0X40,1
- LDBR R101,0X30,2
- LDBR R103,0X57,1
- LDBR R104,0X52,1
- MOV R84,R105,1
- MOV R85,R106,1
- MOV R86,R107,1
- MOV R87,R108,1 ;写plc得地址
-
- MOV R55,R143,1
- CALL ASCII2HEX
- MOV R159,R55,1 ;转换为ASCII码
-
- LDBR R51,0X01,1
- AND R51,R55,1
- IJNE R51,0X00,TO_1
- LDBR R51,0X01,1
- OR R55,R51,1
- MOV R55,R120,1
- CALL HXE2ASCII ;转换为ASCII码
- MOV R125,R55,1
- GOTO CIO_SEND
- TO_1:
- LDBR R51,0XFE,1
- AND R55,R51,1
-
- MOV R55,R120,1
- CALL HXE2ASCII
- MOV R125,R55,1
-
- CIO_SEND:
- MOV R52,R109,3
- MOV R55,R112,1
- LDBR R120,0X40,1
- ;xor校验
- XOR R120,R101,1
- XOR R120,R102,1
- XOR R120,R103,1
- XOR R120,R104,1
- XOR R120,R105,1
- XOR R120,R106,1
- XOR R120,R107,1
- XOR R120,R108,1
- XOR R120,R109,1
- XOR R120,R110,1
- XOR R120,R111,1
- XOR R120,R112,1
-
- MOV R120,R121,1
- SHR R120,1,4 ;转换为ASCII码
- CALL HXE2ASCII ;调用转换,数据已经放入R120
- MOV R125,R113,1;返回得数据再R125中
-
- MOV R121,R120,1;数据放入R120中
- CALL HXE2ASCII ;转换为ASCII码
- MOV R125,R114,1;返回得数据再R125中
-
- LDBR R115,0X2A,1 ;结束字符
- LDBR R116,0X0D,1 ;结束字符
- LDBR R9,17,1
- COMTXD 4,R100,R9
-
- INPUT_CIO_END:
- RDXLEN 4,R50 ;串口得数据长度放到R50中;
- IJNE R50,0,INPUT_CIO_BACK
- RET
-
- INPUT_CIO_BACK:
- MOVDR 17,R20,1
- IJNE R20,0,INPUT_CIO_END
- RDXDAT 4,R170,R50
- CIO_IN: RET
- ;*****************
- H_INPUT:
- LDBR R0,0X10,1
- LDBR R1,0X21,1 ;LED3对应地址
- MOVXR R80,1,1
- IJNE R80,0X00,H_IN;
- IJNE R81,0X01,H_IN ;按键按下
- LDBR R80,0,2
- MOVXR R80,0,1
-
- LDBR R84,0X30,1
- LDBR R85,0X30,1
- LDBR R86,0X30,1
- LDBR R87,0X30,1 ;指定要写入得H区对应得PLC地址
- H_WR:
- ;将数据写入到PLC,写入地址有R84:R85:R86:R87指定
- LDBR R100,0X40,1
- LDBR R101,0X30,2
- LDBR R103,0X57,1
- LDBR R104,0X48,1
- MOV R84,R105,1
- MOV R85,R106,1
- MOV R86,R107,1
- MOV R87,R108,1 ;写PLC得地址
-
- MOV R59,R143,1
- CALL ASCII2HEX ;转换为ASCII码
- MOV R159,R59,1
-
- LDBR R51,0X01,1
- AND R51,R59,1
- IJNE R51,0X00,TO_H_1
- LDBR R51,0X01,1 ;按键按下
- OR R59,R51,1
- MOV R59,R120,1
- CALL HXE2ASCII ;转换为ASCII码
- MOV R125,R59,1
- GOTO H_SEND
- TO_H_1:
- LDBR R51,0XFE,1
- AND R59,R51,1
-
- MOV R59,R120,1
- CALL HXE2ASCII
- MOV R125,R59,1
-
- H_SEND:
- MOV R56,R109,3
- MOV R59,R112,1
- LDBR R120,0X40,1
- XOR R120,R101,1
- XOR R120,R102,1
- XOR R120,R103,1
- XOR R120,R104,1
- XOR R120,R105,1
- XOR R120,R106,1
- XOR R120,R107,1
- XOR R120,R108,1
- XOR R120,R109,1
- XOR R120,R110,1
- XOR R120,R111,1
- XOR R120,R112,1
-
- MOV R120,R121,1
- SHR R120,1,4 ;转换为ASCII码
- CALL HXE2ASCII ;调用转换,数据已经放入R120
- MOV R125,R113,1;返回得数据再R125中
-
- MOV R121,R120,1;数据放入R120中
- CALL HXE2ASCII ;转换为ASCII码
- MOV R125,R114,1;返回得数据再R125中
-
- LDBR R115,0X2A,1 ;结束字符
- LDBR R116,0X0D,1 ;结束字符
- LDBR R9,17,1
- COMTXD 4,R100,R9
- INPUT_H_END:
- RDXLEN 4,R50 ;串口得数据长度放到R50中;
- IJNE R50,0,INPUT_H_BACK
- RET
-
- INPUT_H_BACK:
- MOVDR 17,R20,1
- IJNE R20,0,INPUT_H_END
- RDXDAT 4,R170,R50
- H_IN: RET
- ;***************************
- ;*******写H区***************
- READ_CIO_RESP:
- IJNE R90,1,READ_CIO_END ;发送一次读DM区指令后,等待响应
- LDBR R90,0,1 ;清除300ms标志位
- CALL READ_CIO
- MOV R209,R143,1
- CALL ASCII2HEX
- MOV R159,R232,1
- READ_CIO_END:
- RDXLEN 4,R50 ;串口得数据长度放到R50中;
- IJNE R50,0,RECIVE_CIO
- RET
-
- RECIVE_CIO:
- MOVDR 17,R20,1
- IJNE R20,0,CIO_END
- DATA_CIO_HAN:
- RDXDAT 4,R200,R50
- IJNE R204,0X52,CIO_END
- LDBR R50,0,1 ;读取完成后清除保存再R50中得数据长度
- ;*****以下为数据处理****
- MOV R207,R52,4
- LDBR R240,0X01,1
- LDBR R241,0X02,1
-
- AND R240,R210,1
- LDBR R0,0X10,1
- LDBR R1,0X00,1
- IJNE R240,0X00,CIO10_00_WR_1;等于0,继续执行,不等于零跳
- CALL HMI_WR_ZERO
- GOTO CIO_NO_1
- CIO10_00_WR_1:
- CALL HMI_WR_ONE
-
- CIO_NO_1:
- AND R241,R210,1
- LDBR R0,0X10,1
- LDBR R1,0X10,1
- IJNE R241,0X00,CIO10_01_WR_1;等于0,继续执行,不等于零跳,相应位取反操作
- CALL HMI_WR_ZERO
- GOTO CIO_END
- CIO10_01_WR_1:
- CALL HMI_WR_ONE
- CIO_END:
- RET
- HMI_WR_ZERO: ;屏写0,写入地址R0:R1
- LDBR R160,0,2
- MOVXR R160,0,1
- RET
- HMI_WR_ONE: ;屏写1
- LDBR R160,0,1
- LDBR R161,1,1
- MOVXR R160,0,1
- RET
- READ_CIO:
- LDBR R100,0X40,1
- LDBR R101,0X30,2
- LDBR R103,0X52,1
- LDBR R104,0X52,1
- LDBR R105,0X30,1
- LDBR R106,0X30,1
- LDBR R107,0X31,1
- LDBR R108,0X30,1
- LDBR R109,0X30,1
- LDBR R110,0X30,1
- LDBR R111,0X30,1
- LDBR R112,0X32,1
- ;下列代码为R100-R112的XOR计算,并将计算值转换为ascii赋值给R113,R114
- LDBR R120,0X40,1
- XOR R120,R101,1
- XOR R120,R102,1
- XOR R120,R103,1
- XOR R120,R104,1
- XOR R120,R105,1
- XOR R120,R106,1
- XOR R120,R107,1
- XOR R120,R108,1
- XOR R120,R109,1
- XOR R120,R110,1
- XOR R120,R111,1
- XOR R120,R112,1
- MOV R120,R121,1
- SHR R120,1,4
- CALL HXE2ASCII ;调用转换,数据已经放入R120
- MOV R125,R113,1;返回得数据再R125中
-
- MOV R121,R120,1;数据放入R120中
- CALL HXE2ASCII ;调用转换
- MOV R125,R114,1;返回得数据再R125中
-
- LDBR R115,0X2A,1 ;结束字符
- LDBR R116,0X0D,1 ;结束字符
- LDBR R9,17,1
- COMTXD 4,R100,R9
- RET
- ;**********************************************
- ;***********************************
- ;******读H区*******************
- READ_H_RESP:
- IJNE R90,1,READ_H_END ;发送一次读DM区指令后,等待响应
- LDBR R90,0,1 ;清除300ms标志位
- CALL READ_H
- MOV R209,R143,1
- CALL ASCII2HEX
- MOV R159,R232,1
- READ_H_END:
- RDXLEN 4,R50 ;串口得数据长度放到R50中;
- IJNE R50,0,RECIVE_H
- RET
-
- RECIVE_H:
- MOVDR 17,R20,1
- IJNE R20,0,H_END
- DATA_H_HAN:
- RDXDAT 4,R200,R50
- IJNE R204,0X48,H_END
- LDBR R50,0,1 ;读取完成后清除保存再R50中得数据长度
- MOV R207,R56,4
- ;*****以下为数据处理****
- LDBR R240,0X01,1
- LDBR R241,0X02,1
-
- AND R240,R210,1
- LDBR R0,0X10,1
- LDBR R1,0X20,1
- IJNE R240,0X00,H0_00_WR_1;等于0,继续执行,不等于零跳 相应位取反操作
- CALL HMI_WR_ZERO
- GOTO H_NO_1
- H0_00_WR_1:
- CALL HMI_WR_ONE
- H_NO_1:
- AND R241,R210,1
- LDBR R0,0X10,1
- LDBR R1,0X30,1
- IJNE R241,0X00,H0_01_WR_1;等于0,继续执行,不等于零跳
- CALL HMI_WR_ZERO
- GOTO H_END
- H0_01_WR_1:
- CALL HMI_WR_ONE
- GOTO H_END
- READ_H:
- LDBR R100,0X40,1
- LDBR R101,0X30,2
- LDBR R103,0X52,1
- LDBR R104,0X48,1
- LDBR R105,0X30,1
- LDBR R106,0X30,1
- LDBR R107,0X30,1
- LDBR R108,0X30,1
- LDBR R109,0X30,1
- LDBR R110,0X30,1
- LDBR R111,0X30,1
- LDBR R112,0X32,1
- ;下列代码为R100-R112的XOR计算,并将计算值转换为ascii赋值给R113,R114
- LDBR R120,0X40,1
- XOR R120,R101,1
- XOR R120,R102,1
- XOR R120,R103,1
- XOR R120,R104,1
- XOR R120,R105,1
- XOR R120,R106,1
- XOR R120,R107,1
- XOR R120,R108,1
- XOR R120,R109,1
- XOR R120,R110,1
- XOR R120,R111,1
- XOR R120,R112,1
- MOV R120,R121,1
- SHR R120,1,4
- CALL HXE2ASCII ;调用转换,数据已经放入R120
- MOV R125,R113,1;返回得数据再R125中
-
- MOV R121,R120,1;数据放入R120中
- CALL HXE2ASCII ;调用转换
- MOV R125,R114,1;返回得数据再R125中
-
- LDBR R115,0X2A,1 ;结束字符
- LDBR R116,0X0D,1 ;结束字符
- LDBR R9,17,1
- COMTXD 4,R100,R9
- H_END:
- RET
-
-
- ;**************D10*******************/
- DM_INPUT1:
- LDBR R0,0X12,1
- LDBR R1,0X11,1 ;键盘确定键地址
- MOVXR R80,1,1
- IJNE R80,0X5A,DM_IN1 ;键盘确定键按下,0x1210赋值0x5A5A,有写操作
- IJNE R81,0X5A,DM_IN1
- LDBR R80,0,2
- MOVXR R80,0,1
-
- LDBR R84,0X30,1
- LDBR R85,0X30,1
- LDBR R86,0X31,1
- LDBR R87,0X30,1 ;指定要写入得DM区对应得PLC地址
- ;将数据写入到PLC,写入地址有R84:R85:R86:R87指定
- LDBR R100,0X40,1
- LDBR R101,0X30,2
- LDBR R103,0X57,1
- LDBR R104,0X44,1
- MOV R84,R105,1
- MOV R85,R106,1
- MOV R86,R107,1
- MOV R87,R108,1
-
- LDBR R0,0X12,1
- LDBR R1,0X01,1
- MOVXR R82,1,1
-
- MOV R82,R120,1
- SHR R120,1,4 ;转换为ASCII码
- CALL HXE2ASCII ;调用转换,数据已经放入R120
- MOV R125,R109,1;返回得数据再R125中
-
- MOV R82,R120,1 ;转换为ASCII码
- CALL HXE2ASCII ;调用转换,数据已经放入R120
- MOV R125,R110,1;返回得数据再R125中
-
- MOV R83,R120,1
- SHR R120,1,4 ;转换为ASCII码
- CALL HXE2ASCII ;调用转换,数据已经放入R120
- MOV R125,R111,1;返回得数据再R125中
-
- MOV R83,R120,1 ;转换为ASCII码
- CALL HXE2ASCII ;调用转换,数据已经放入R120
- MOV R125,R112,1;返回得数据再R125中
- ;以下为XOR校验
- LDBR R120,0X40,1
- XOR R120,R101,1
- XOR R120,R102,1
- XOR R120,R103,1
- XOR R120,R104,1
- XOR R120,R105,1
- XOR R120,R106,1
- XOR R120,R107,1
- XOR R120,R108,1
- XOR R120,R109,1
- XOR R120,R110,1
- XOR R120,R111,1
- XOR R120,R112,1
-
- MOV R120,R121,1
- SHR R120,1,4 ;转换为ASCII码
- CALL HXE2ASCII ;调用转换,数据已经放入R120
- MOV R125,R113,1;返回得数据再R125中
-
- MOV R121,R120,1;数据放入R120中
- CALL HXE2ASCII ;调用转换
- MOV R125,R114,1;返回得数据再R125中
-
- LDBR R115,0X2A,1 ;结束字符
- LDBR R116,0X0D,1 ;结束字符
- LDBR R9,17,1
- COMTXD 4,R100,R9
- INPUT_DM_END1:
- RDXLEN 4,R50 ;串口得数据长度放到R50中;
- IJNE R50,0,INPUT_DM_BACK1
- RET
-
- INPUT_DM_BACK1:
- MOVDR 17,R20,1
- IJNE R20,0,INPUT_DM_END1
- RDXDAT 4,R170,R50
- DM_IN1: RET
-
- ;***********************
- ;输入数据变量地址R0:R1指定,调用前请给R0:R1赋值
- CIO_INPUT1:
- LDBR R0,0X10,1
- LDBR R1,0X11,1 ;按钮LED1输入
- MOVXR R80,1,1
- IJNE R80,0X00,CIO_IN1 ;相等不知执行写操作
- IJNE R81,0X01,CIO_IN1
- LDBR R80,0,2
- MOVXR R80,0,1
-
- LDBR R84,0X30,1
- LDBR R85,0X30,1
- LDBR R86,0X31,1
- LDBR R87,0X30,1 ;指定要写入得H区对应得PLC地址
- CIO_WR1:
- ;将数据写入到PLC,写入地址有R84:R85:R86:R87指定
- LDBR R100,0X40,1
- LDBR R101,0X30,2
- LDBR R103,0X57,1
- LDBR R104,0X52,1
- MOV R84,R105,1
- MOV R85,R106,1
- MOV R86,R107,1
- MOV R87,R108,1 ;写plc得地址
-
- MOV R55,R143,1
- CALL ASCII2HEX
- MOV R159,R55,1 ;转换为ASCII码
-
- LDBR R51,0X02,1
- AND R51,R55,1
- IJNE R51,0X00,TO_11
- LDBR R51,0X02,1
- OR R55,R51,1
- MOV R55,R120,1
- CALL HXE2ASCII ;转换为ASCII码
- MOV R125,R55,1
- GOTO CIO_SEND1
- TO_11:
- LDBR R51,0XFD,1
- AND R55,R51,1
-
- MOV R55,R120,1
- CALL HXE2ASCII
- MOV R125,R55,1
-
- CIO_SEND1:
- MOV R52,R109,3
- MOV R55,R112,1
- LDBR R120,0X40,1
- ;xor校验
- XOR R120,R101,1
- XOR R120,R102,1
- XOR R120,R103,1
- XOR R120,R104,1
- XOR R120,R105,1
- XOR R120,R106,1
- XOR R120,R107,1
- XOR R120,R108,1
- XOR R120,R109,1
- XOR R120,R110,1
- XOR R120,R111,1
- XOR R120,R112,1
-
- MOV R120,R121,1
- SHR R120,1,4 ;转换为ASCII码
- CALL HXE2ASCII ;调用转换,数据已经放入R120
- MOV R125,R113,1;返回得数据再R125中
-
- MOV R121,R120,1;数据放入R120中
- CALL HXE2ASCII ;转换为ASCII码
- MOV R125,R114,1;返回得数据再R125中
-
- LDBR R115,0X2A,1 ;结束字符
- LDBR R116,0X0D,1 ;结束字符
- LDBR R9,17,1
- COMTXD 4,R100,R9
-
- INPUT_CIO_END1:
- RDXLEN 4,R50 ;串口得数据长度放到R50中;
- IJNE R50,0,INPUT_CIO_BACK1
- RET
-
- INPUT_CIO_BACK1:
- MOVDR 17,R20,1
- IJNE R20,0,INPUT_CIO_END1
- RDXDAT 4,R170,R50
- CIO_IN1: RET
- ;*****************
-
- ;*****************
- H_INPUT1:
- LDBR R0,0X10,1
- LDBR R1,0X31,1 ;LED3对应地址
- MOVXR R80,1,1
- IJNE R80,0X00,H_IN1;
- IJNE R81,0X01,H_IN1 ;按键按下
- LDBR R80,0,2
- MOVXR R80,0,1
-
- LDBR R84,0X30,1
- LDBR R85,0X30,1
- LDBR R86,0X30,1
- LDBR R87,0X30,1 ;指定要写入得H区对应得PLC地址
- H_WR1:
- ;将数据写入到PLC,写入地址有R84:R85:R86:R87指定
- LDBR R100,0X40,1
- LDBR R101,0X30,2
- LDBR R103,0X57,1
- LDBR R104,0X48,1
- MOV R84,R105,1
- MOV R85,R106,1
- MOV R86,R107,1
- MOV R87,R108,1 ;写PLC得地址
-
- MOV R59,R143,1
- CALL ASCII2HEX ;转换为ASCII码
- MOV R159,R59,1
-
- LDBR R51,0X02,1
- AND R51,R59,1
- IJNE R51,0X00,TO_H_11
- LDBR R51,0X02,1 ;按键按下
- OR R59,R51,1
- MOV R59,R120,1
- CALL HXE2ASCII ;转换为ASCII码
- MOV R125,R59,1
- GOTO H_SEND
- TO_H_11:
- LDBR R51,0XFD,1
- AND R59,R51,1
-
- MOV R59,R120,1
- CALL HXE2ASCII
- MOV R125,R59,1
-
- H_SEND1:
- MOV R56,R109,3
- MOV R59,R112,1
- LDBR R120,0X40,1
- XOR R120,R101,1
- XOR R120,R102,1
- XOR R120,R103,1
- XOR R120,R104,1
- XOR R120,R105,1
- XOR R120,R106,1
- XOR R120,R107,1
- XOR R120,R108,1
- XOR R120,R109,1
- XOR R120,R110,1
- XOR R120,R111,1
- XOR R120,R112,1
-
- MOV R120,R121,1
- SHR R120,1,4 ;转换为ASCII码
- CALL HXE2ASCII ;调用转换,数据已经放入R120
- MOV R125,R113,1;返回得数据再R125中
-
- MOV R121,R120,1;数据放入R120中
- CALL HXE2ASCII ;转换为ASCII码
- MOV R125,R114,1;返回得数据再R125中
-
- LDBR R115,0X2A,1 ;结束字符
- LDBR R116,0X0D,1 ;结束字符
- LDBR R9,17,1
- COMTXD 4,R100,R9
- INPUT_H_END1:
- RDXLEN 4,R50 ;串口得数据长度放到R50中;
- IJNE R50,0,INPUT_H_BACK1
- RET
-
- INPUT_H_BACK1:
- MOVDR 17,R20,1
- IJNE R20,0,INPUT_H_END1
- RDXDAT 4,R170,R50
- H_IN1: RET