西门子S7-200 SMART与T5UID3屏软硬件连接OS代码

[复制链接]
985|1
 楼主 | 2019-2-12 15:02 | 显示全部楼层 |阅读模式
  1.     ORG  1000H
  2.     GOTO MAIN  
  3.     ORG  1080H
  4. MAIN:
  5.     CALL INITE  ;初始化串口,用户定时器,初始化使用到得R寄存器
  6.     CALL T300MS ;300ms定时器标志  
  7.     LDBR R0,0X10,1
  8.     LDBR R1,0X00,1        ;确定页码地址,页码寄存器
  9.     MOVXR R10,1,1
  10.     IJNE R11,0X01,READ_I
  11.       CALL READ_Q03
  12.       CALL WRITE_Q03
  13. READ_I:
  14.     IJNE R11,0X02,READ_M
  15.       CALL READ_I00
  16. READ_M:
  17.     IJNE R11,0X03,MAIN_END
  18.       CALL READ_M00
  19.       CALL WRITE_M00
  20. MAIN_END:
  21.     GOTO MAIN   
  22. ;***************
  23. ;上电初始化   
  24. INITE:   
  25.             IJNE      R255,0,INIRET
  26.             LDBR      R255,1,1
  27.             COMSET    40H,136        ;设置串口4,波特率115200,上电执行一次
  28.             CONFIG 1,2,1             ;用户定时器初始化               
  29. INIRET:     
  30.             RET
  31.   
  32. ;******************  

  33. ;******************
  34. ;300MS定时,每300ms读一次
  35. T300MS:   
  36.     LDBR R30,0X01,1
  37.     LDBR R31,0XF4,1
  38.     MOVDR 37,R20,2
  39.     JU  R20,R30,T300_END
  40.     LDBR  R90,1,1
  41.     LDWR  R20,0
  42.     MOVRD R20,37,2
  43.     LDBR  R250,0,3        
  44. T300_END:
  45.     RET
  46. ;******************

  47. ;******************
  48. ;读线圈Q0.3
  49. READ_Q03:

  50.     IJNE R90,1,READ_Q_END      ;发送一次读DM区指令后,等待响应
  51.     LDBR R90,0,1               ;清除300ms标志位
  52.     LDBR R100,0X01,2           ;R100从站设备号01,R101功能码01
  53.     LDBR R102,0X00,2           ;读取得线圈地址:Q0.0
  54.     LDBR R104,0X00,1
  55.     LDBR R105,0X08,1           ;读取得字节长度01
  56.     LDBR R10,6,1               ;R100-R105
  57.     CRCA R100,R106,R10         ;6字节做ANSI CRC计算,放入到R106,R107中
  58.     LDBR R9,8,1                ;发送到串口4得字节长度
  59.     COMTXD 4,R100,R9           ;数据发送到串口4
  60. RECIVE_Q:  
  61.     RDXLEN 4,R50               ;串口得数据长度放到R50中;
  62.     IJNE R50,0,RECIVE_Q_handle ;串口接收数据长度不为0,则跳转到RECIVE_handle
  63.     GOTO RECIVE_Q              ;接收数据长度为0,在此处死循环等待响应
  64.    
  65. RECIVE_Q_handle:   
  66.     MOVDR 17,R20,1             ;若接收到数据,读取通讯超时标志位,通讯超时,说明结束数据完成
  67.     IJNE R20,0,RECIVE_Q        ;等于0,则通讯超时,向下继续执行,不等于,循环(跳转到RECIVE_handle)读取通讯超时标志,直到等于0         
  68.       RDXDAT 4,R200,R50        ;读取接收得数据到R200
  69.       LDBR R50,0X00,1          ;清除数据长度缓冲区
  70.       LDBR R0,0X11,1           
  71.       LDBR R1,0X00,1           ;触摸屏对应地址0x1100
  72.       LDBR R202,0X00,1         ;将R202清零
  73.       LDBR R11,0X04,1
  74.       AND  R203,R11,1
  75.       MOVXR R202,0,1           ;将数据R202,R203写入到0x1100              
  76. READ_Q_END:
  77.     RET
  78. ;******************

  79. ;******************
  80. ;写线圈Q0.0
  81. WRITE_Q03:
  82.     LDBR R0,0X11,1           
  83.     LDBR R1,0X01,1             ;触摸屏对应地址0x1100
  84.     MOVXR R10,1,1
  85.     IJNE R10,0X5A,WRITE_Q_END  
  86.     IJNE R11,0X5A,WRITE_Q_END  ;判断是否有按键按下
  87.     LDBR R10,0X00,2            ;清按键值
  88.     MOVXR R10,0,1
  89.     LDBR R100,0X01,1           ;从站地址01
  90.     LDBR R101,0X0F,1           ;功能码05
  91.     LDBR R102,0X00,1           
  92.     LDBR R103,0X00,1           ;写入地址
  93.     LDBR R104,0X00,1           
  94.     LDBR R105,0X08,1                ;写入寄存器个数
  95.     IJNE R203,0X00,WRITE_0_Q   ;原值为0,则写1
  96.       LDBR R106,0X00,1  
  97.       LDBR R107,0X04,1
  98.       GOTO WRITE_Q_SEND
  99. WRITE_0_Q:                     ;原值为1则写0
  100.     LDBR R106,0X00,1  
  101.     LDBR R107,0X00,1  
  102. WRITE_Q_SEND:
  103.     LDBR R10,8,1               ;R100-R105
  104.     CRCA R100,R108,R10         ;6字节做ANSI CRC计算,放入到R106,R107中
  105.     LDBR R9,10,1                ;发送到串口4得字节长度
  106.     COMTXD 4,R100,R9           ;数据发送到串口4
  107. WRITE_Q_RESP:  
  108.     RDXLEN 4,R50               ;串口得数据长度放到R50中;
  109.     IJNE R50,0,WRITE_Q_RESP_OK ;串口接收数据长度不为0,则跳转到RECIVE_handle
  110.     GOTO WRITE_Q_RESP              ;接收数据长度为0,在此处死循环等待响应
  111.    
  112. WRITE_Q_RESP_OK:   
  113.     MOVDR 17,R20,1             ;若接收到数据,读取通讯超时标志位,通讯超时,说明结束数据完成
  114.     IJNE R20,0,WRITE_M_RESP
  115.       RDXDAT 4,R150,R50        ;读取接收得数据到R200
  116.       LDBR R50,0X00,1          ;清除数据长度缓冲区
  117. WRITE_Q_END:
  118.     RET
  119. ;******************   
  120.    
  121. ;******************
  122. ;读输入I0.0
  123. READ_I00:

  124.     IJNE R90,1,READ_I_END      ;发送一次读DM区指令后,等待响应
  125.     LDBR  R90,0,1              ;清除300ms标志位
  126.     LDBR R100,0X01,1           ;R100从站设备号01
  127.     LDBR R101,0X02,1           ;R101功能码02
  128.     LDBR R102,0X00,2           ;读取得地址:I0.0
  129.     LDBR R104,0X00,1
  130.     LDBR R105,0X01,1           ;读取得字节长度01
  131.     LDBR R10,6,1               ;R100-R105
  132.     CRCA R100,R106,R10         ;6字节做ANSI CRC计算,放入到R106,R107中
  133.     LDBR R9,8,1                ;发送到串口4得字节长度
  134.     COMTXD 4,R100,R9           ;数据发送到串口4
  135. RECIVE_I:  
  136.     RDXLEN 4,R50               ;串口得数据长度放到R50中;
  137.     IJNE R50,0,RECIVE_I_handle ;串口接收数据长度不为0,则跳转到RECIVE_handle
  138.     GOTO RECIVE_I              ;接收数据长度为0,在此处死循环等待响应
  139.    
  140. RECIVE_I_handle:   
  141.     MOVDR 17,R20,1             ;若接收到数据,读取通讯超时标志位,通讯超时,说明结束数据完成
  142.     IJNE R20,0,RECIVE_I        ;等于0,则通讯超时,向下继续执行,不等于,循环(跳转到RECIVE_handle)读取通讯超时标志,直到等于0         
  143.       RDXDAT 4,R200,R50        ;读取接收得数据到R200
  144.       LDBR R50,0X00,1          ;清除数据长度缓冲区
  145.       LDBR R0,0X12,1           
  146.       LDBR R1,0X00,1           ;触摸屏对应地址0x1100
  147.       LDBR R202,0X00,1         ;将R202清零
  148.       MOVXR R202,0,1           ;将数据R202,R203写入到0x1100              
  149. READ_I_END:
  150.     RET
  151. ;******************

  152. ;******************
  153. READ_M00:
  154.     IJNE R90,1,READ_M_END      ;发送一次读DM区指令后,等待响应
  155.     LDBR  R90,0,1              ;清除300ms标志位
  156.     LDBR R100,0X01,1           ;R100从站设备号01
  157.     LDBR R101,0X03,1           ;R101功能码02
  158.     LDBR R102,0X00,1           
  159.     LDBR R103,0X05,1           ;读取得地址:M0.0
  160.     LDBR R104,0X00,1         
  161.     LDBR R105,0X02,1           ;读取得字节长度01
  162.     LDBR R10,6,1               ;R100-R105
  163.     CRCA R100,R106,R10         ;6字节做ANSI CRC计算,放入到R106,R107中
  164.     LDBR R9,8,1                ;发送到串口4得字节长度
  165.     COMTXD 4,R100,R9           ;数据发送到串口4
  166. RECIVE_M:  
  167.     RDXLEN 4,R50               ;串口得数据长度放到R50中;
  168.     IJNE R50,0,RECIVE_M_handle ;串口接收数据长度不为0,则跳转到RECIVE_handle
  169.     GOTO RECIVE_M              ;接收数据长度为0,在此处死循环等待响应
  170.    
  171. RECIVE_M_handle:   
  172.     MOVDR 17,R20,1             ;若接收到数据,读取通讯超时标志位,通讯超时,说明接收数据完成
  173.     IJNE R20,0,RECIVE_M        ;等于0,则通讯超时,向下继续执行,不等于,循环(跳转到RECIVE_handle)读取通讯超时标志,直到等于0         
  174.       RDXDAT 4,R200,R50        ;读取接收得数据到R200
  175.       LDBR R50,0X00,1          ;清除数据长度缓冲区
  176.       
  177.       LDBR R0,0X13,1           
  178.       LDBR R1,0X00,1           ;触摸屏对应地址0x1300
  179.       MOVXR R203,0,1           ;将数据R203,R204写入到0x1300
  180.       
  181.       LDBR R0,0X13,1           
  182.       LDBR R1,0X01,1           ;触摸屏对应地址0x1301
  183.       MOVXR R205,0,1           ;将数据R203,R204写入到0x1301              
  184. READ_M_END:
  185.     RET
  186. ;******************

  187. ;******************
  188. WRITE_M00:
  189.     LDBR R0,0X13,1           
  190.     LDBR R1,0X02,1           ;触摸屏对应地址
  191.     MOVXR R10,1,1
  192.     IJNE R10,0X5A,WRITE_M_END
  193.     IJNE R11,0X5A,WRITE_M_END
  194.     LDBR R10,0X00,2            ;清按键值
  195.     MOVXR R10,0,1
  196.     LDBR R100,0X01,1           ;从站地址01
  197.     LDBR R101,0X06,1           ;功能码05
  198.     LDBR R102,0X00,1           
  199.     LDBR R103,0X05,1           ;写入地址
  200.     LDBR R0,0X13,1           
  201.     LDBR R1,0X03,1           ;触摸屏对应地址
  202.     MOVXR R104,1,1
  203.     LDBR R10,6,1               ;R100-R105
  204.     CRCA R100,R106,R10         ;6字节做ANSI CRC计算,放入到R106,R107中
  205.     LDBR R9,8,1                ;发送到串口4得字节长度
  206.     COMTXD 4,R100,R9           ;数据发送到串口4
  207. WRITE_M_RESP:  
  208.     RDXLEN 4,R50               ;串口得数据长度放到R50中;
  209.     IJNE R50,0,WRITE_M_RESP_OK ;串口接收数据长度不为0,则跳转到RECIVE_handle
  210.     GOTO WRITE_M_RESP              ;接收数据长度为0,在此处死循环等待响应
  211.    
  212. WRITE_M_RESP_OK:   
  213.     MOVDR 17,R20,1             ;若接收到数据,读取通讯超时标志位,通讯超时,说明结束数据完成
  214.     IJNE R20,0,WRITE_M_RESP
  215.       RDXDAT 4,R150,R50        ;读取接收得数据到R200
  216.       LDBR R50,0X00,1          ;清除数据长度缓冲区
  217. WRITE_M_END:
  218.     RET
  219. ;******************   


复制代码


| 2019-3-13 12:57 | 显示全部楼层
可以的啊!!!!!!
扫描二维码,随时随地手机跟帖
*滑动验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /4 下一条

快速回复 返回顶部 返回列表