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

[复制链接]
1315|6
 楼主| ZLDW 发表于 2018-12-14 13:12 | 显示全部楼层 |阅读模式
欧姆龙PLCT5UID2屏连接OS代码

  1. ORG  1000H
  2.     GOTO MAIN  
  3.     ORG  1080H
  4. MAIN:
  5.     CALL INITE  ;初始化串口,用户定时器,初始化使用到得R寄存器
  6.     CALL T300MS ;300ms定时器标志  
  7.     LDBR R0,0X20,1
  8.     LDBR R1,0X00,1        ;键盘确定键地址
  9.     MOVXR R10,1,1
  10.     IJNE R11,0X01,RED_H
  11.       LDBR R0,0X11,1 ;
  12.       LDBR R1,0X00,1 ;指定触摸屏变量地址
  13.       CALL READ_DM_RESP ;读取DM区数据  
  14.       CALL DM_INPUT   ;写DM区
  15.       CALL DM_INPUT1
  16. RED_H:
  17.     IJNE R11,0X02,RED_CIO
  18.       CALL READ_H_RESP ;读取CIO区数据
  19.       CALL H_INPUT    ;写H区
  20.       CALL H_INPUT1    ;写H区
  21. RED_CIO:        
  22.     IJNE R11,0X03,MAIN_END
  23.       CALL READ_CIO_RESP ;读取CIO区数据   
  24.       CALL CIO_INPUT   ;写CIO区
  25.       CALL CIO_INPUT1
  26. MAIN_END:
  27.     GOTO MAIN   
  28. ;***************
  29. ;上电初始化   
  30. INITE:   
  31.             IJNE      R255,0,INIRET
  32.             LDBR      R255,1,1
  33.             COMSET    40H,136        ;设置串口4,波特率115200,上电执行一次
  34.             CONFIG 1,2,1             ;用户定时器初始化

  35.             LDBR      R250,0,3               
  36.             LDBR R70,1,1
  37.             LDBR R71,0,2              ;R变量初始化               
  38. INIRET:     
  39.             RET
  40.   
  41. ;********************  

  42. ;***************
  43. ;300MS定时,每300ms读一次
  44. T300MS:   
  45.     LDBR R30,0X01,1
  46.     LDBR R31,0XF4,1
  47.     MOVDR 37,R20,2
  48.     JU  R20,R30,T300_END
  49.     LDBR  R90,1,1
  50.     LDWR  R20,0
  51.     MOVRD R20,37,2
  52.     LDBR  R250,0,3        
  53. T300_END:
  54.     RET
  55. ;******************

  56. ;********************************
  57. ;发送一次读DM区指令后,响应数据处理
  58. READ_DM_RESP:
  59.     IJNE R90,1,READ_END   ;发送一次读DM区指令后,等待响应
  60.     LDBR  R90,0,1         ;清除300ms标志位
  61.     CALL READ_DM
  62.     MOV R209,R143,1
  63.     CALL ASCII2HEX
  64.     MOV R159,R232,1
  65.          
  66. READ_END:  
  67.     RDXLEN 4,R50          ;串口得数据长度放到R50中;
  68.     IJNE R50,0,RECIVE
  69.     RET
  70.    
  71. RECIVE:   
  72.     MOVDR 17,R20,1
  73.     IJNE R20,0,READ_DM_RESP  
  74.                           
  75. DATA_HAN:         
  76.     RDXDAT 4,R200,R50  
  77.     IJNE R204,0x44,READ_RET
  78.     LDBR R50,0,1        ;读取完成后清除保存再R50中得数据长度
  79.     ;*****以下为数据处理****
  80.    
  81.     MOV R207,R143,1
  82.     CALL ASCII2HEX   ;ASCII转换为HEX
  83.     MOV R159,R230,1
  84.    
  85.     MOV R208,R143,1
  86.     CALL ASCII2HEX   ;ASCII转换为HEX
  87.     MOV R159,R231,1
  88.    
  89.     MOV R209,R143,1
  90.     CALL ASCII2HEX   ;ASCII转换为HEX
  91.     MOV R159,R232,1
  92.    
  93.     MOV R210,R143,1
  94.     CALL ASCII2HEX   ;ASCII转换为HEX
  95.     MOV R159,R233,1
  96.    
  97.     MOV R230,R160,4
  98.       
  99.     LDBR R0,0X11,1
  100.     LDBR R1,0X00,1
  101.     CALL DATA2HMI    ;写到触摸屏
  102.    
  103.     MOV R211,R143,1
  104.     CALL ASCII2HEX   ;ASCII转换为HEX
  105.     MOV R159,R230,1
  106.    
  107.     MOV R212,R143,1
  108.     CALL ASCII2HEX   ;ASCII转换为HEX
  109.     MOV R159,R231,1
  110.    
  111.     MOV R213,R143,1
  112.     CALL ASCII2HEX   ;ASCII转换为HEX
  113.     MOV R159,R232,1
  114.    
  115.     MOV R214,R143,1
  116.     CALL ASCII2HEX   ;ASCII转换为HEX
  117.     MOV R159,R233,1
  118.    
  119.     MOV R230,R160,4
  120.       
  121.     LDBR R0,0X11,1
  122.     LDBR R1,0X01,1
  123.     CALL DATA2HMI    ;写到触摸屏
  124.    
  125.     LDBR R70,0,3
  126.     LDBR R71,1,1
  127. READ_RET:
  128.     RET   
  129. ;***************************

  130. ;***************************
  131. ;R100--R116DM指令占用,所有数据为ASCII码形式
  132. ;R100:[url=home.php?mod=space&uid=72445]@[/url]   R101:0X30  R102:0X30  R103:0X52(R)  R104:0X44(D)  R105-R108:PLC的DM区地址  
  133. ;R109-R112:读取DM区的长度  R113-R114:XOR校验码  R115:0X2A  R116:0X0D
  134. ;R9发送数据得长度
  135. ;读DM区指令RD格式 [url=home.php?mod=space&uid=72445]@[/url]      00        RD          0000         0000       00      *\CR
  136. ;              帧头  PLC单元号  读DM区指令  开始读取的地址     读取长度    XOR校验   结束码0X2A  0X0D
  137. ;读D0009 D0010的数据
  138. READ_DM:
  139.     LDBR R100,0X40,1
  140.     LDBR R101,0X30,2
  141.     LDBR R103,0X52,1
  142.     LDBR R104,0X44,1
  143.     LDBR R105,0X30,1
  144.     LDBR R106,0X30,1
  145.     LDBR R107,0X30,1
  146.     LDBR R108,0X39,1
  147.     LDBR R109,0X30,1
  148.     LDBR R110,0X30,1
  149.     LDBR R111,0X30,1
  150.     LDBR R112,0X32,1
  151.     ;下列代码为R100-R112的XOR计算,并将计算值转换为ascii赋值给R113,R114
  152.     LDBR R120,0X40,1
  153.     XOR  R120,R101,1
  154.     XOR  R120,R102,1
  155.     XOR  R120,R103,1
  156.     XOR  R120,R104,1
  157.     XOR  R120,R105,1
  158.     XOR  R120,R106,1
  159.     XOR  R120,R107,1
  160.     XOR  R120,R108,1
  161.     XOR  R120,R109,1
  162.     XOR  R120,R110,1
  163.     XOR  R120,R111,1
  164.     XOR  R120,R112,1  
  165.     MOV  R120,R121,1
  166.     SHR  R120,1,4   
  167.     CALL HXE2ASCII  ;调用转换,数据已经放入R120
  168.     MOV  R125,R113,1;返回得数据再R125中
  169.    
  170.     MOV  R121,R120,1;数据放入R120中
  171.     CALL HXE2ASCII  ;调用转换
  172.     MOV  R125,R114,1;返回得数据再R125中
  173.    
  174.     LDBR R115,0X2A,1   ;结束字符
  175.     LDBR R116,0X0D,1   ;结束字符
  176.     LDBR R9,17,1
  177.     COMTXD 4,R100,R9
  178.     RET
  179. ;***********************************************
  180.    
  181. ;数字0-F转换位ASCII码,输入数据接口R120,输出数据接口R125,占用R120-R140寄存器;
  182. HXE2ASCII:
  183.     LDBR R125,0X0F,1
  184.     LDBR R124,0X00,1
  185.     AND  R125,R120,1
  186.     LDBR R122,0X00,1
  187.     LDBR R123,0X09,1
  188.     JU         R122,R124 ASCII
  189.     LDBR R130,0X30,1
  190.     OR   R125,R130,1
  191.     RET  
  192. ASCII:
  193.     LDBR R127,0X00,4
  194.     LDBR R130,0X37,1
  195.     LDBR R122,0X00,3
  196.     ADD  R122,R127,R131
  197.     MOV  R138,R125,1
  198.     RET
  199. ;*************************************************   

  200. ;********************
  201. ;ascii码转换为HEX
  202. ;返回得数据提取,输入数据接口R140-R143;输出数据接口R159
  203. ASCII2HEX:
  204.     LDBR R140,0X00,3
  205.     LDBR R144,0X00,1
  206.     LDBR R145,0X30,1   
  207.     JU         R142,R144,HEX_A_F;如果数据>=0X30,满足继续执行,否则跳转其他判断
  208.     LDBR R146,0X00,1
  209.     LDBR R147,0X39,1
  210.     JU         R146,R142,HEX_A_F;满足>=0x30后,判断是否<=0x39,满足继续执行,否则跳转其他判断
  211.     LDBR R148,0,3
  212.     LDBR R151,0X30,1
  213.     LDBR R152,0,8
  214.     SUB  R140,R148,R152
  215.     RET
  216. HEX_A_F:
  217.     LDBR R140,0X00,3
  218.     LDBR R144,0X00,1
  219.     LDBR R145,0X41,1
  220.     JU         R142,R144,AS2HE_END;如果数据>=0X30,满足继续执行,否则跳转其他判断
  221.     LDBR R146,0X00,1
  222.     LDBR R147,0X46,1
  223.     JU         R146,R142,AS2HE_END;满足>=0x30后,判断是否<=0x39,满足继续执行,否则跳转其他判断
  224.     LDBR R148,0,3
  225.     LDBR R151,0X37,1
  226.     LDBR R152,0,8
  227.     SUB  R140,R148,R152
  228. AS2HE_END:
  229.     RET
  230.    
  231. ;*******************
  232. ;数据显示到屏幕,输入接口R160-R163,数据输出接口由R0:R1设定
  233. DATA2HMI:
  234.     SHL R160,1,4
  235.     OR  R160,R161,1
  236.     SHL R162,1,4
  237.     OR  R162,R163,1
  238.     MOV R162,R161,1
  239.     MOVXR R160,0,1
  240.     NOP
  241.     RET
  242. ;*******************

  243. ;***********************
  244. ;输入数据变量地址有R0:R1指定,调用前请给R0:R1赋值
  245. DM_INPUT:
  246.     LDBR R0,0X12,1
  247.     LDBR R1,0X10,1        ;键盘确定键地址
  248.     MOVXR R80,1,1
  249.     IJNE R80,0X5A,DM_IN   ;键盘确定键按下,0x1210赋值0x5A5A,有写操作
  250.     IJNE R81,0X5A,DM_IN
  251.     LDBR R80,0,2
  252.     MOVXR R80,0,1
  253.      
  254.     LDBR R84,0X30,1
  255.     LDBR R85,0X30,1
  256.     LDBR R86,0X30,1
  257.     LDBR R87,0X39,1 ;指定要写入得DM区对应得PLC地址
  258. ;将数据写入到PLC,写入地址有R84:R85:R86:R87指定
  259.     LDBR R100,0X40,1
  260.     LDBR R101,0X30,2
  261.     LDBR R103,0X57,1
  262.     LDBR R104,0X44,1

  263.     MOV  R84,R105,1
  264.     MOV  R85,R106,1
  265.     MOV  R86,R107,1
  266.     MOV  R87,R108,1
  267.    
  268.     LDBR R0,0X12,1
  269.     LDBR R1,0X00,1
  270.     MOVXR R82,1,1
  271.    
  272.     MOV  R82,R120,1
  273.     SHR  R120,1,4    ;转换为ASCII码
  274.     CALL HXE2ASCII  ;调用转换,数据已经放入R120
  275.     MOV  R125,R109,1;返回得数据再R125中
  276.    
  277.     MOV  R82,R120,1  ;转换为ASCII码
  278.     CALL HXE2ASCII  ;调用转换,数据已经放入R120
  279.     MOV  R125,R110,1;返回得数据再R125中
  280.    
  281.     MOV  R83,R120,1
  282.     SHR  R120,1,4   ;转换为ASCII码
  283.     CALL HXE2ASCII  ;调用转换,数据已经放入R120
  284.     MOV  R125,R111,1;返回得数据再R125中
  285.    
  286.     MOV  R83,R120,1  ;转换为ASCII码
  287.     CALL HXE2ASCII  ;调用转换,数据已经放入R120
  288.     MOV  R125,R112,1;返回得数据再R125中

  289.     ;以下为XOR校验   
  290.     LDBR R120,0X40,1
  291.     XOR  R120,R101,1
  292.     XOR  R120,R102,1
  293.     XOR  R120,R103,1
  294.     XOR  R120,R104,1
  295.     XOR  R120,R105,1
  296.     XOR  R120,R106,1
  297.     XOR  R120,R107,1
  298.     XOR  R120,R108,1
  299.     XOR  R120,R109,1
  300.     XOR  R120,R110,1
  301.     XOR  R120,R111,1
  302.     XOR  R120,R112,1  
  303.    
  304.     MOV  R120,R121,1
  305.     SHR  R120,1,4   ;转换为ASCII码
  306.     CALL HXE2ASCII  ;调用转换,数据已经放入R120
  307.     MOV  R125,R113,1;返回得数据再R125中
  308.    
  309.     MOV  R121,R120,1;数据放入R120中
  310.     CALL HXE2ASCII  ;调用转换
  311.     MOV  R125,R114,1;返回得数据再R125中
  312.    
  313.     LDBR R115,0X2A,1   ;结束字符
  314.     LDBR R116,0X0D,1   ;结束字符
  315.     LDBR R9,17,1
  316.     COMTXD 4,R100,R9
  317. INPUT_DM_END:  
  318.     RDXLEN 4,R50          ;串口得数据长度放到R50中;
  319.     IJNE R50,0,INPUT_DM_BACK
  320.     RET
  321.    
  322. INPUT_DM_BACK:   
  323.     MOVDR 17,R20,1
  324.     IJNE R20,0,INPUT_DM_END  
  325.     RDXDAT 4,R170,R50
  326. DM_IN:   RET
  327. ;*****************

  328. ;***********************
  329. ;输入数据变量地址R0:R1指定,调用前请给R0:R1赋值

  330. CIO_INPUT:
  331.     LDBR R0,0X10,1
  332.     LDBR R1,0X01,1          ;按钮LED1输入
  333.     MOVXR R80,1,1
  334.     IJNE R80,0X00,CIO_IN   ;相等不知执行写操作
  335.     IJNE R81,0X01,CIO_IN
  336.     LDBR R80,0,2
  337.     MOVXR R80,0,1
  338.       
  339.     LDBR R84,0X30,1
  340.     LDBR R85,0X30,1
  341.     LDBR R86,0X31,1
  342.     LDBR R87,0X30,1 ;指定要写入得CIO区对应得PLC地址  
  343. CIO_WR:

  344.     ;将数据写入到PLC,写入地址有R84:R85:R86:R87指定
  345.     LDBR R100,0X40,1
  346.     LDBR R101,0X30,2
  347.     LDBR R103,0X57,1
  348.     LDBR R104,0X52,1

  349.     MOV  R84,R105,1
  350.     MOV  R85,R106,1
  351.     MOV  R86,R107,1
  352.     MOV  R87,R108,1 ;写plc得地址
  353.    
  354.     MOV R55,R143,1
  355.     CALL ASCII2HEX
  356.     MOV R159,R55,1  ;转换为ASCII码
  357.    
  358.     LDBR R51,0X01,1
  359.     AND  R51,R55,1
  360.     IJNE R51,0X00,TO_1
  361.     LDBR R51,0X01,1
  362.     OR R55,R51,1
  363.     MOV R55,R120,1
  364.     CALL HXE2ASCII ;转换为ASCII码
  365.     MOV R125,R55,1
  366.     GOTO CIO_SEND
  367. TO_1:
  368.     LDBR R51,0XFE,1
  369.     AND R55,R51,1
  370.    
  371.     MOV R55,R120,1
  372.     CALL HXE2ASCII
  373.     MOV R125,R55,1
  374.    
  375. CIO_SEND:
  376.     MOV  R52,R109,3
  377.     MOV  R55,R112,1
  378.     LDBR R120,0X40,1
  379.     ;xor校验
  380.     XOR  R120,R101,1
  381.     XOR  R120,R102,1
  382.     XOR  R120,R103,1
  383.     XOR  R120,R104,1
  384.     XOR  R120,R105,1
  385.     XOR  R120,R106,1
  386.     XOR  R120,R107,1
  387.     XOR  R120,R108,1
  388.     XOR  R120,R109,1
  389.     XOR  R120,R110,1
  390.     XOR  R120,R111,1
  391.     XOR  R120,R112,1  
  392.    
  393.     MOV  R120,R121,1
  394.     SHR  R120,1,4   ;转换为ASCII码
  395.     CALL HXE2ASCII  ;调用转换,数据已经放入R120
  396.     MOV  R125,R113,1;返回得数据再R125中
  397.    
  398.     MOV  R121,R120,1;数据放入R120中
  399.     CALL HXE2ASCII  ;转换为ASCII码
  400.     MOV  R125,R114,1;返回得数据再R125中
  401.    
  402.     LDBR R115,0X2A,1   ;结束字符
  403.     LDBR R116,0X0D,1   ;结束字符
  404.     LDBR R9,17,1
  405.     COMTXD 4,R100,R9
  406.    
  407. INPUT_CIO_END:  
  408.     RDXLEN 4,R50          ;串口得数据长度放到R50中;
  409.     IJNE R50,0,INPUT_CIO_BACK
  410.     RET
  411.    
  412. INPUT_CIO_BACK:   
  413.     MOVDR 17,R20,1
  414.     IJNE R20,0,INPUT_CIO_END  
  415.     RDXDAT 4,R170,R50
  416. CIO_IN:   RET
  417. ;*****************

  418. H_INPUT:
  419.     LDBR R0,0X10,1
  420.     LDBR R1,0X21,1        ;LED3对应地址
  421.     MOVXR R80,1,1
  422.     IJNE R80,0X00,H_IN;
  423.     IJNE R81,0X01,H_IN     ;按键按下
  424.     LDBR R80,0,2
  425.     MOVXR R80,0,1
  426.    
  427.     LDBR R84,0X30,1
  428.     LDBR R85,0X30,1
  429.     LDBR R86,0X30,1
  430.     LDBR R87,0X30,1 ;指定要写入得H区对应得PLC地址
  431. H_WR:
  432. ;将数据写入到PLC,写入地址有R84:R85:R86:R87指定
  433.     LDBR R100,0X40,1
  434.     LDBR R101,0X30,2
  435.     LDBR R103,0X57,1
  436.     LDBR R104,0X48,1

  437.     MOV  R84,R105,1
  438.     MOV  R85,R106,1
  439.     MOV  R86,R107,1
  440.     MOV  R87,R108,1    ;写PLC得地址
  441.    
  442.     MOV R59,R143,1
  443.     CALL ASCII2HEX     ;转换为ASCII码
  444.     MOV R159,R59,1
  445.    
  446.     LDBR R51,0X01,1
  447.     AND  R51,R59,1
  448.     IJNE R51,0X00,TO_H_1
  449.     LDBR R51,0X01,1    ;按键按下
  450.     OR R59,R51,1
  451.     MOV R59,R120,1
  452.     CALL HXE2ASCII     ;转换为ASCII码
  453.     MOV R125,R59,1
  454.     GOTO H_SEND
  455. TO_H_1:
  456.     LDBR R51,0XFE,1
  457.     AND R59,R51,1
  458.    
  459.     MOV R59,R120,1
  460.     CALL HXE2ASCII
  461.     MOV R125,R59,1
  462.    
  463. H_SEND:
  464.     MOV  R56,R109,3
  465.     MOV  R59,R112,1
  466.     LDBR R120,0X40,1
  467.     XOR  R120,R101,1
  468.     XOR  R120,R102,1
  469.     XOR  R120,R103,1
  470.     XOR  R120,R104,1
  471.     XOR  R120,R105,1
  472.     XOR  R120,R106,1
  473.     XOR  R120,R107,1
  474.     XOR  R120,R108,1
  475.     XOR  R120,R109,1
  476.     XOR  R120,R110,1
  477.     XOR  R120,R111,1
  478.     XOR  R120,R112,1  
  479.    
  480.     MOV  R120,R121,1
  481.     SHR  R120,1,4   ;转换为ASCII码
  482.     CALL HXE2ASCII  ;调用转换,数据已经放入R120
  483.     MOV  R125,R113,1;返回得数据再R125中
  484.    
  485.     MOV  R121,R120,1;数据放入R120中
  486.     CALL HXE2ASCII  ;转换为ASCII码
  487.     MOV  R125,R114,1;返回得数据再R125中
  488.    
  489.     LDBR R115,0X2A,1   ;结束字符
  490.     LDBR R116,0X0D,1   ;结束字符
  491.     LDBR R9,17,1
  492.     COMTXD 4,R100,R9
  493. INPUT_H_END:  
  494.     RDXLEN 4,R50          ;串口得数据长度放到R50中;
  495.     IJNE R50,0,INPUT_H_BACK
  496.     RET
  497.    
  498. INPUT_H_BACK:   
  499.     MOVDR 17,R20,1
  500.     IJNE R20,0,INPUT_H_END  
  501.     RDXDAT 4,R170,R50
  502. H_IN:   RET
  503. ;***************************

  504. ;*******写H区***************
  505. READ_CIO_RESP:
  506.     IJNE R90,1,READ_CIO_END   ;发送一次读DM区指令后,等待响应
  507.     LDBR  R90,0,1         ;清除300ms标志位
  508.     CALL READ_CIO
  509.     MOV R209,R143,1
  510.     CALL ASCII2HEX
  511.     MOV R159,R232,1     
  512. READ_CIO_END:  
  513.     RDXLEN 4,R50          ;串口得数据长度放到R50中;
  514.     IJNE R50,0,RECIVE_CIO
  515.     RET
  516.    
  517. RECIVE_CIO:   
  518.     MOVDR 17,R20,1
  519.     IJNE R20,0,CIO_END                           
  520. DATA_CIO_HAN:         
  521.     RDXDAT 4,R200,R50
  522.     IJNE R204,0X52,CIO_END
  523.     LDBR R50,0,1          ;读取完成后清除保存再R50中得数据长度
  524.     ;*****以下为数据处理****
  525.     MOV R207,R52,4
  526.     LDBR R240,0X01,1
  527.     LDBR R241,0X02,1
  528.    
  529.     AND R240,R210,1   
  530.     LDBR R0,0X10,1
  531.     LDBR R1,0X00,1
  532.     IJNE R240,0X00,CIO10_00_WR_1;等于0,继续执行,不等于零跳
  533.     CALL HMI_WR_ZERO
  534.     GOTO CIO_NO_1
  535. CIO10_00_WR_1:
  536.     CALL  HMI_WR_ONE
  537.                     
  538. CIO_NO_1:
  539.     AND R241,R210,1
  540.     LDBR R0,0X10,1
  541.     LDBR R1,0X10,1
  542.     IJNE R241,0X00,CIO10_01_WR_1;等于0,继续执行,不等于零跳,相应位取反操作
  543.     CALL HMI_WR_ZERO  
  544.     GOTO CIO_END
  545. CIO10_01_WR_1:
  546.     CALL  HMI_WR_ONE      
  547. CIO_END:
  548.     RET

  549. HMI_WR_ZERO:                   ;屏写0,写入地址R0:R1
  550.     LDBR R160,0,2
  551.     MOVXR R160,0,1
  552.     RET                        
  553. HMI_WR_ONE:                       ;屏写1
  554.     LDBR R160,0,1
  555.     LDBR R161,1,1  
  556.     MOVXR R160,0,1
  557.     RET   

  558. READ_CIO:
  559.     LDBR R100,0X40,1
  560.     LDBR R101,0X30,2
  561.     LDBR R103,0X52,1
  562.     LDBR R104,0X52,1
  563.     LDBR R105,0X30,1
  564.     LDBR R106,0X30,1
  565.     LDBR R107,0X31,1
  566.     LDBR R108,0X30,1
  567.     LDBR R109,0X30,1
  568.     LDBR R110,0X30,1
  569.     LDBR R111,0X30,1
  570.     LDBR R112,0X32,1

  571.     ;下列代码为R100-R112的XOR计算,并将计算值转换为ascii赋值给R113,R114
  572.     LDBR R120,0X40,1
  573.     XOR  R120,R101,1
  574.     XOR  R120,R102,1
  575.     XOR  R120,R103,1
  576.     XOR  R120,R104,1
  577.     XOR  R120,R105,1
  578.     XOR  R120,R106,1
  579.     XOR  R120,R107,1
  580.     XOR  R120,R108,1
  581.     XOR  R120,R109,1
  582.     XOR  R120,R110,1
  583.     XOR  R120,R111,1
  584.     XOR  R120,R112,1  
  585.     MOV  R120,R121,1
  586.     SHR  R120,1,4   
  587.     CALL HXE2ASCII  ;调用转换,数据已经放入R120
  588.     MOV  R125,R113,1;返回得数据再R125中
  589.    
  590.     MOV  R121,R120,1;数据放入R120中
  591.     CALL HXE2ASCII  ;调用转换
  592.     MOV  R125,R114,1;返回得数据再R125中
  593.    
  594.     LDBR R115,0X2A,1   ;结束字符
  595.     LDBR R116,0X0D,1   ;结束字符
  596.     LDBR R9,17,1
  597.     COMTXD 4,R100,R9
  598.     RET
  599. ;**********************************************

  600. ;***********************************
  601. ;******读H区*******************
  602. READ_H_RESP:

  603.     IJNE R90,1,READ_H_END   ;发送一次读DM区指令后,等待响应
  604.     LDBR  R90,0,1         ;清除300ms标志位
  605.     CALL READ_H
  606.     MOV R209,R143,1
  607.     CALL ASCII2HEX
  608.     MOV R159,R232,1     
  609. READ_H_END:  
  610.     RDXLEN 4,R50          ;串口得数据长度放到R50中;
  611.     IJNE R50,0,RECIVE_H
  612.     RET
  613.    
  614. RECIVE_H:   
  615.     MOVDR 17,R20,1
  616.     IJNE R20,0,H_END                          
  617. DATA_H_HAN:         
  618.     RDXDAT 4,R200,R50
  619.     IJNE R204,0X48,H_END
  620.     LDBR R50,0,1          ;读取完成后清除保存再R50中得数据长度
  621.     MOV R207,R56,4
  622.     ;*****以下为数据处理****
  623.     LDBR R240,0X01,1
  624.     LDBR R241,0X02,1
  625.    
  626.     AND R240,R210,1   
  627.     LDBR R0,0X10,1
  628.     LDBR R1,0X20,1
  629.     IJNE R240,0X00,H0_00_WR_1;等于0,继续执行,不等于零跳  相应位取反操作
  630.     CALL HMI_WR_ZERO
  631.     GOTO H_NO_1
  632. H0_00_WR_1:
  633.     CALL  HMI_WR_ONE

  634. H_NO_1:                    
  635.     AND R241,R210,1
  636.     LDBR R0,0X10,1
  637.     LDBR R1,0X30,1
  638.     IJNE R241,0X00,H0_01_WR_1;等于0,继续执行,不等于零跳
  639.     CALL HMI_WR_ZERO  
  640.     GOTO H_END
  641. H0_01_WR_1:
  642.     CALL  HMI_WR_ONE      
  643.     GOTO H_END

  644. READ_H:
  645.     LDBR R100,0X40,1
  646.     LDBR R101,0X30,2
  647.     LDBR R103,0X52,1
  648.     LDBR R104,0X48,1
  649.     LDBR R105,0X30,1
  650.     LDBR R106,0X30,1
  651.     LDBR R107,0X30,1
  652.     LDBR R108,0X30,1
  653.     LDBR R109,0X30,1
  654.     LDBR R110,0X30,1
  655.     LDBR R111,0X30,1
  656.     LDBR R112,0X32,1

  657.     ;下列代码为R100-R112的XOR计算,并将计算值转换为ascii赋值给R113,R114
  658.     LDBR R120,0X40,1
  659.     XOR  R120,R101,1
  660.     XOR  R120,R102,1
  661.     XOR  R120,R103,1
  662.     XOR  R120,R104,1
  663.     XOR  R120,R105,1
  664.     XOR  R120,R106,1
  665.     XOR  R120,R107,1
  666.     XOR  R120,R108,1
  667.     XOR  R120,R109,1
  668.     XOR  R120,R110,1
  669.     XOR  R120,R111,1
  670.     XOR  R120,R112,1  
  671.     MOV  R120,R121,1
  672.     SHR  R120,1,4   
  673.     CALL HXE2ASCII  ;调用转换,数据已经放入R120
  674.     MOV  R125,R113,1;返回得数据再R125中
  675.    
  676.     MOV  R121,R120,1;数据放入R120中
  677.     CALL HXE2ASCII  ;调用转换
  678.     MOV  R125,R114,1;返回得数据再R125中
  679.    
  680.     LDBR R115,0X2A,1   ;结束字符
  681.     LDBR R116,0X0D,1   ;结束字符
  682.     LDBR R9,17,1
  683.     COMTXD 4,R100,R9
  684. H_END:
  685.     RET
  686.    
  687.    
  688. ;**************D10*******************/   
  689. DM_INPUT1:
  690.     LDBR R0,0X12,1
  691.     LDBR R1,0X11,1        ;键盘确定键地址
  692.     MOVXR R80,1,1
  693.     IJNE R80,0X5A,DM_IN1   ;键盘确定键按下,0x1210赋值0x5A5A,有写操作
  694.     IJNE R81,0X5A,DM_IN1
  695.     LDBR R80,0,2
  696.     MOVXR R80,0,1
  697.    
  698.     LDBR R84,0X30,1
  699.     LDBR R85,0X30,1
  700.     LDBR R86,0X31,1
  701.     LDBR R87,0X30,1 ;指定要写入得DM区对应得PLC地址
  702. ;将数据写入到PLC,写入地址有R84:R85:R86:R87指定
  703.     LDBR R100,0X40,1
  704.     LDBR R101,0X30,2
  705.     LDBR R103,0X57,1
  706.     LDBR R104,0X44,1

  707.     MOV  R84,R105,1
  708.     MOV  R85,R106,1
  709.     MOV  R86,R107,1
  710.     MOV  R87,R108,1
  711.    
  712.     LDBR R0,0X12,1
  713.     LDBR R1,0X01,1
  714.     MOVXR R82,1,1
  715.    
  716.     MOV  R82,R120,1
  717.     SHR  R120,1,4    ;转换为ASCII码
  718.     CALL HXE2ASCII  ;调用转换,数据已经放入R120
  719.     MOV  R125,R109,1;返回得数据再R125中
  720.    
  721.     MOV  R82,R120,1  ;转换为ASCII码
  722.     CALL HXE2ASCII  ;调用转换,数据已经放入R120
  723.     MOV  R125,R110,1;返回得数据再R125中
  724.    
  725.     MOV  R83,R120,1
  726.     SHR  R120,1,4   ;转换为ASCII码
  727.     CALL HXE2ASCII  ;调用转换,数据已经放入R120
  728.     MOV  R125,R111,1;返回得数据再R125中
  729.    
  730.     MOV  R83,R120,1  ;转换为ASCII码
  731.     CALL HXE2ASCII  ;调用转换,数据已经放入R120
  732.     MOV  R125,R112,1;返回得数据再R125中

  733.     ;以下为XOR校验   
  734.     LDBR R120,0X40,1
  735.     XOR  R120,R101,1
  736.     XOR  R120,R102,1
  737.     XOR  R120,R103,1
  738.     XOR  R120,R104,1
  739.     XOR  R120,R105,1
  740.     XOR  R120,R106,1
  741.     XOR  R120,R107,1
  742.     XOR  R120,R108,1
  743.     XOR  R120,R109,1
  744.     XOR  R120,R110,1
  745.     XOR  R120,R111,1
  746.     XOR  R120,R112,1  
  747.    
  748.     MOV  R120,R121,1
  749.     SHR  R120,1,4   ;转换为ASCII码
  750.     CALL HXE2ASCII  ;调用转换,数据已经放入R120
  751.     MOV  R125,R113,1;返回得数据再R125中
  752.    
  753.     MOV  R121,R120,1;数据放入R120中
  754.     CALL HXE2ASCII  ;调用转换
  755.     MOV  R125,R114,1;返回得数据再R125中
  756.    
  757.     LDBR R115,0X2A,1   ;结束字符
  758.     LDBR R116,0X0D,1   ;结束字符
  759.     LDBR R9,17,1
  760.     COMTXD 4,R100,R9
  761. INPUT_DM_END1:  
  762.     RDXLEN 4,R50          ;串口得数据长度放到R50中;
  763.     IJNE R50,0,INPUT_DM_BACK1
  764.     RET
  765.    
  766. INPUT_DM_BACK1:   
  767.     MOVDR 17,R20,1
  768.     IJNE R20,0,INPUT_DM_END1
  769.     RDXDAT 4,R170,R50
  770. DM_IN1:   RET
  771.    



  772. ;***********************
  773. ;输入数据变量地址R0:R1指定,调用前请给R0:R1赋值

  774. CIO_INPUT1:
  775.     LDBR R0,0X10,1
  776.     LDBR R1,0X11,1          ;按钮LED1输入
  777.     MOVXR R80,1,1
  778.     IJNE R80,0X00,CIO_IN1   ;相等不知执行写操作
  779.     IJNE R81,0X01,CIO_IN1
  780.     LDBR R80,0,2
  781.     MOVXR R80,0,1  
  782.    
  783.     LDBR R84,0X30,1
  784.     LDBR R85,0X30,1
  785.     LDBR R86,0X31,1
  786.     LDBR R87,0X30,1 ;指定要写入得H区对应得PLC地址  
  787. CIO_WR1:

  788.     ;将数据写入到PLC,写入地址有R84:R85:R86:R87指定
  789.     LDBR R100,0X40,1
  790.     LDBR R101,0X30,2
  791.     LDBR R103,0X57,1
  792.     LDBR R104,0X52,1

  793.     MOV  R84,R105,1
  794.     MOV  R85,R106,1
  795.     MOV  R86,R107,1
  796.     MOV  R87,R108,1 ;写plc得地址
  797.    
  798.     MOV R55,R143,1
  799.     CALL ASCII2HEX
  800.     MOV R159,R55,1  ;转换为ASCII码
  801.    
  802.     LDBR R51,0X02,1
  803.     AND  R51,R55,1
  804.     IJNE R51,0X00,TO_11
  805.     LDBR R51,0X02,1
  806.     OR R55,R51,1
  807.     MOV R55,R120,1
  808.     CALL HXE2ASCII ;转换为ASCII码
  809.     MOV R125,R55,1
  810.     GOTO CIO_SEND1
  811. TO_11:
  812.     LDBR R51,0XFD,1
  813.     AND R55,R51,1
  814.    
  815.     MOV R55,R120,1
  816.     CALL HXE2ASCII
  817.     MOV R125,R55,1
  818.    
  819. CIO_SEND1:
  820.     MOV  R52,R109,3
  821.     MOV  R55,R112,1
  822.     LDBR R120,0X40,1
  823.     ;xor校验
  824.     XOR  R120,R101,1
  825.     XOR  R120,R102,1
  826.     XOR  R120,R103,1
  827.     XOR  R120,R104,1
  828.     XOR  R120,R105,1
  829.     XOR  R120,R106,1
  830.     XOR  R120,R107,1
  831.     XOR  R120,R108,1
  832.     XOR  R120,R109,1
  833.     XOR  R120,R110,1
  834.     XOR  R120,R111,1
  835.     XOR  R120,R112,1  
  836.    
  837.     MOV  R120,R121,1
  838.     SHR  R120,1,4   ;转换为ASCII码
  839.     CALL HXE2ASCII  ;调用转换,数据已经放入R120
  840.     MOV  R125,R113,1;返回得数据再R125中
  841.    
  842.     MOV  R121,R120,1;数据放入R120中
  843.     CALL HXE2ASCII  ;转换为ASCII码
  844.     MOV  R125,R114,1;返回得数据再R125中
  845.    
  846.     LDBR R115,0X2A,1   ;结束字符
  847.     LDBR R116,0X0D,1   ;结束字符
  848.     LDBR R9,17,1
  849.     COMTXD 4,R100,R9
  850.    
  851. INPUT_CIO_END1:  
  852.     RDXLEN 4,R50          ;串口得数据长度放到R50中;
  853.     IJNE R50,0,INPUT_CIO_BACK1
  854.     RET
  855.    
  856. INPUT_CIO_BACK1:   
  857.     MOVDR 17,R20,1
  858.     IJNE R20,0,INPUT_CIO_END1  
  859.     RDXDAT 4,R170,R50
  860. CIO_IN1:   RET
  861. ;*****************

  862.    
  863. ;*****************

  864. H_INPUT1:
  865.     LDBR R0,0X10,1
  866.     LDBR R1,0X31,1        ;LED3对应地址
  867.     MOVXR R80,1,1
  868.     IJNE R80,0X00,H_IN1;
  869.     IJNE R81,0X01,H_IN1     ;按键按下
  870.     LDBR R80,0,2
  871.     MOVXR R80,0,1
  872.    
  873.     LDBR R84,0X30,1
  874.     LDBR R85,0X30,1
  875.     LDBR R86,0X30,1
  876.     LDBR R87,0X30,1 ;指定要写入得H区对应得PLC地址
  877. H_WR1:
  878. ;将数据写入到PLC,写入地址有R84:R85:R86:R87指定
  879.     LDBR R100,0X40,1
  880.     LDBR R101,0X30,2
  881.     LDBR R103,0X57,1
  882.     LDBR R104,0X48,1

  883.     MOV  R84,R105,1
  884.     MOV  R85,R106,1
  885.     MOV  R86,R107,1
  886.     MOV  R87,R108,1    ;写PLC得地址
  887.    
  888.     MOV R59,R143,1
  889.     CALL ASCII2HEX     ;转换为ASCII码
  890.     MOV R159,R59,1
  891.    
  892.     LDBR R51,0X02,1
  893.     AND  R51,R59,1
  894.     IJNE R51,0X00,TO_H_11
  895.     LDBR R51,0X02,1    ;按键按下
  896.     OR R59,R51,1
  897.     MOV R59,R120,1
  898.     CALL HXE2ASCII     ;转换为ASCII码
  899.     MOV R125,R59,1
  900.     GOTO H_SEND
  901. TO_H_11:
  902.     LDBR R51,0XFD,1
  903.     AND R59,R51,1
  904.    
  905.     MOV R59,R120,1
  906.     CALL HXE2ASCII
  907.     MOV R125,R59,1
  908.    
  909. H_SEND1:
  910.     MOV  R56,R109,3
  911.     MOV  R59,R112,1
  912.     LDBR R120,0X40,1
  913.     XOR  R120,R101,1
  914.     XOR  R120,R102,1
  915.     XOR  R120,R103,1
  916.     XOR  R120,R104,1
  917.     XOR  R120,R105,1
  918.     XOR  R120,R106,1
  919.     XOR  R120,R107,1
  920.     XOR  R120,R108,1
  921.     XOR  R120,R109,1
  922.     XOR  R120,R110,1
  923.     XOR  R120,R111,1
  924.     XOR  R120,R112,1  
  925.    
  926.     MOV  R120,R121,1
  927.     SHR  R120,1,4   ;转换为ASCII码
  928.     CALL HXE2ASCII  ;调用转换,数据已经放入R120
  929.     MOV  R125,R113,1;返回得数据再R125中
  930.    
  931.     MOV  R121,R120,1;数据放入R120中
  932.     CALL HXE2ASCII  ;转换为ASCII码
  933.     MOV  R125,R114,1;返回得数据再R125中
  934.    
  935.     LDBR R115,0X2A,1   ;结束字符
  936.     LDBR R116,0X0D,1   ;结束字符
  937.     LDBR R9,17,1
  938.     COMTXD 4,R100,R9
  939. INPUT_H_END1:  
  940.     RDXLEN 4,R50          ;串口得数据长度放到R50中;
  941.     IJNE R50,0,INPUT_H_BACK1
  942.     RET
  943.    
  944. INPUT_H_BACK1:   
  945.     MOVDR 17,R20,1
  946.     IJNE R20,0,INPUT_H_END1  
  947.     RDXDAT 4,R170,R50
  948. 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

粉丝
快速回复 在线客服 返回列表 返回顶部