欧姆龙PLC与T5UID2屏连接OS代码

[复制链接]
1016|6
手机看帖
扫描二维码
随时随地手机跟帖
ZLDW|  楼主 | 2018-12-14 13:12 | 显示全部楼层 |阅读模式
欧姆龙PLCT5UID2屏连接OS代码

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


相关帖子

Harvard| | 2018-12-16 23:47 | 显示全部楼层
迪文搞这个os开发方式 不靠谱... 违背规律啊 .友商都在搞GUI,在搞c直接开发.. 您这是..... 越来越难用啊

使用特权

评论回复
ZLDW|  楼主 | 2018-12-17 09:29 | 显示全部楼层
Harvard 发表于 2018-12-16 23:47
迪文搞这个os开发方式 不靠谱... 违背规律啊 .友商都在搞GUI,在搞c直接开发.. 您这是..... 越来越难用啊 ...

迪文新推出的C编译器,有需要的话欢迎使用,也希望多提一些宝贵的建议。

使用特权

评论回复
Harvard| | 2018-12-17 14:45 | 显示全部楼层
ZLDW 发表于 2018-12-17 09:29
迪文新推出的C编译器,有需要的话欢迎使用,也希望多提一些宝贵的建议。 ...

有吗 ? 发个资料来看看

使用特权

评论回复
ZLDW|  楼主 | 2018-12-17 16:40 | 显示全部楼层
Harvard 发表于 2018-12-17 14:45
有吗 ? 发个资料来看看

要不您留一下您的邮箱?压缩文件内容较大,传不上来。

使用特权

评论回复
Harvard| | 2018-12-18 00:27 | 显示全部楼层
ZLDW 发表于 2018-12-17 16:40
要不您留一下您的邮箱?压缩文件内容较大,传不上来。

谢谢 我也是迪文老用户了 .但是仅限于dgus开发. dgus II T5 OS 对我都比较陌生.  请指导.
harvardx@foxmail.com

使用特权

评论回复
ZLDW|  楼主 | 2018-12-18 11:00 | 显示全部楼层
Harvard 发表于 2018-12-18 00:27
谢谢 我也是迪文老用户了 .但是仅限于dgus开发. dgus II T5 OS 对我都比较陌生.  请指导.
...

您好!已经给您发邮件了,包括C编译器以及迪文自主研发T5 CPU智能屏开发指南,您可以看一下,有什么其他问题欢迎留言。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

34

帖子

1

粉丝