为什么我的“接收完成”中断程序不会被调用?

已锁定

行走江湖

  • 帖子

    128
  • 精华

    0
  • 被关注

    1

论坛等级:游士

注册时间:2004-03-24

普通 普通 如何晋级?

为什么我的“接收完成”中断程序不会被调用?

1209

13

2004-05-17 18:11:07

程序代码:
ORGANIZATION_BLOCK 主:OB1
TITLE=
//程序注释
//按 F1 获得帮助及举例程序
//

BEGIN
NETWORK 1 //Port0设置为自由口协议
//
LD SM0.7
= SM30.0

NETWORK 2 //初始化任务
//
//1.设置通讯端口:PORT0或PORT1;
//2.设置通讯方式:自由口通讯方式;
//3.设置通讯波特率:9.6Kbps;
//4.设置中断;
//
LD SM0.1
CALL First

NETWORK 3 //PLC ---> RUN
//
LD SM0.3
S M0.0 1

NETWORK 4 //1s发送脉冲
//
LDN T96
A M0.0
TON T96 +1000

END_ORGANIZATION_BLOCK

SUBROUTINE_BLOCK First:SBR0
TITLE=
//子程序注释
//按 F1 获得帮助及举例程序
//

BEGIN
NETWORK 1 //设置端口0(Port0)通讯参数
//
//单字节数据通讯格式:
// 偶校验,9.6Kbps,8Bit/字符
LD SM0.0
MOVB 16#08 SMB30

NETWORK 2 //设置要发送的字节数目(1Byte)及各缓冲区首、尾字节地址指针
//
LD SM0.0
MOVB 1 VB100
MOVD &VB1 VD60
MOVD &VB11 VD64
MOVD &VB21 VD70
MOVD &VB31 VD74

NETWORK 3 //设置缓冲区要发送的首字节数据,即开机后要发送的首个数据
//
LD SM0.0
MOVB VB21 VB101

NETWORK 4 //设置接收信息控制字节
//
LD SM0.0
MOVB 16#F0 SMB87
MOVB 30 SMB94
MOVB 'a' SMB88
MOVB 'b' SMB89

NETWORK 5 //设置定时中断0定时时间为100ms
//
LD SM0.0
MOVB 100 SMB34

NETWORK 6
LD SM0.0
MOVW +0 QW0
MOVW +0 VW78
MOVW +0 VW84
MOVB 0 VB240
R M0.1 2

NETWORK 7
LD SM0.0
ATCH T96int 22
ATCH SendData_ok 9
ENI

END_SUBROUTINE_BLOCK

INTERRUPT_BLOCK T96int:INT0
TITLE=
//中断程序注释
//按 F1 获得帮助及举例程序
//

BEGIN
NETWORK 1 //send data
//
LD SM0.0
XMT VB100 0

END_INTERRUPT_BLOCK

INTERRUPT_BLOCK SendData_ok:INT1
TITLE=
//中断程序注释
//按 F1 获得帮助及举例程序
//

BEGIN
NETWORK 1
LD M0.1
JMP 0

NETWORK 2 //“写”格式数据指针处理
//
LD SM0.0
AN M0.1
LPS
INCB VB78
INCD VD70
AENO
MOVB *VD70 VB101
LPP
AB= VB78 11
MOVB 0 VB78
AENO
S M0.1 1

NETWORK 3 //设置下一次要发送的数据及接收缓冲区
//
LD M0.1
EU
MOVD &VB21 VD70
MOVB *VD60 VB101
RCV VB200 0
DTCH 22
ATCH RCV_Data 8

NETWORK 4
LBL 0

NETWORK 5
LDN M0.1
CRETI

NETWORK 6 //“读”格式数据指针处理
//
LD SM0.0
AN M0.2
LPS
INCB VB79
INCD VD60
AENO
MOVB *VD60 VB101
LPP
AB= VB79 11
MOVB 0 VB79
AENO
S M0.2 1

NETWORK 7
LD M0.2
EU
MOVD &VB1 VD60
MOVB *VD60 VB101
RCV VB200 0
DTCH 22
ATCH RCV_Data 8

NETWORK 8
//

END_INTERRUPT_BLOCK

INTERRUPT_BLOCK RCV_Data:INT2
TITLE=
//中断程序注释
//按 F1 获得帮助及举例程序
//

BEGIN
NETWORK 1
LD SM0.0
LPS
ATCH RcvData_ok 23
AB= SMB2 97
ORB 16#80 QB0
LPP
AB= SMB2 98
ORB 16#80 QB1

END_INTERRUPT_BLOCK

INTERRUPT_BLOCK RcvData_ok:INT3
TITLE=
//中断程序注释
//按 F1 获得帮助及举例程序
//

BEGIN
NETWORK 1 //Q0.0:显示用
//
LDB= SMB86 16#20
ORB 1 QB0
NOT
CRETI

NETWORK 2 //接收到“错误回应码”
//
LDB= VB202 VB36
AB= VB203 VB37
AB= VB204 VB38
AB= VB205 VB39
LPS
A M0.1
R M0.1 1
LRD
A M0.2
R M0.2 1
LRD
MOVB 200 SMB35
LRD
ATCH Timer1 11
LPP
CRETI

NETWORK 3 //“写”格式回应码接收正确
//
LD M0.1
AB= VB202 VB32
AB= VB203 VB33
AB= VB204 VB34
AB= VB205 VB35
= Q0.1
ATCH Timer0 10
CRETI

NETWORK 4 //单片机地址从头开始
//
LDB= VB240 8
MOVB 16#20 VB2
MOVB 16#20 VB7
MOVB 16#20 VB22
MOVB 16#20 VB27
MOVB 16#20 VB32
MOVB 16#20 VB36
MOVB 16#20 VB40
MOVB 0 VB220

NETWORK 5 //“读”格式回应码接收正确
//
LD M0.2
AB= VB202 VB40
AB= VB203 VB41
AB= VB204 VB42
BMB VB205 VB400 16
INCB VB240
INCB VB2
INCB VB7
INCB VB22
INCB VB27
INCB VB32
INCB VB36
INCB VB40
R M0.1 1
MOVB 250 SMB34
ATCH Timer0 10

END_INTERRUPT_BLOCK

INTERRUPT_BLOCK Timer0:INT4
TITLE=
//中断程序注释
//按 F1 获得帮助及举例程序
//

BEGIN
NETWORK 1
LD SM0.0
ATCH T96int 22
DTCH 10

END_INTERRUPT_BLOCK

INTERRUPT_BLOCK Timer1:INT5
TITLE=
//中断程序注释
//按 F1 获得帮助及举例程序
//

BEGIN
NETWORK 1
LD SM0.0
LPS
AN M0.1
ORB 16#02 MB0
LRD
AN M0.2
ORB 4 MB0
LRD
ATCH T96int 22
LPP
DTCH 11

END_INTERRUPT_BLOCK

数据块:
//PLC发送数据组1:读取下位方式
VB1 16#A0 //发送数据组起始值
VB2 16#20 //8085单片机地址
VB3 16#20 //数据组号
VB4 16#01 //命令标志:读取下位(8085单片机)
VB5 16#11 //参数D1
VB6 16#12 //参数D2
VB7 16#20 //重复8085单片机地址
VB8 16#20 //重复数据组号
VB9 16#01 //重复命令标志:读取下位(8085单片机)
VB10 16#11 //重复参数D1
VB11 16#12 //重复参数D2

//PLC发送数据组2:写入下位方式
VB21 16#B0 //发送数据组起始值
VB22 16#20 //8085单片机地址
VB23 16#20 //数据组号
VB24 16#10 //命令标志:写入下位(8085单片机)
VB25 16#21 //参数D1
VB26 16#22 //参数D2
VB27 16#20 //重复8085单片机地址
VB28 16#20 //重复数据组号
VB29 16#10 //重复命令标志:写入下位(8085单片机)
VB30 16#21 //重复参数D1
VB31 16#22 //重复参数D2

//PLC“读”下位回应码
VB40 16#20 //8085单片机地址
VB41 16#20 //数据组号
VB42 16#10 //字长
//VB43~VB58 //实时数据(16Byte)

//PLC“写”下位回应码:
VB32 16#20 //8085单片机地址
VB33 16#20 //数据组号
VB34 16#00 //字长
VB35 16#01 //参数1

//单片机命令接收错误回应码:
VB36 16#20 //8085单片机地址
VB37 16#20 //数据组号
VB38 16#00 //字长
VB39 16#00 //参数1

为什么我的“接收完成”中断程序不会被调用? 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33257条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。