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