恭喜,你发布的帖子
发布于 2017-04-03 16:22:56
6楼
先不管中断、通讯等。
先调通第一段的采集部分。
采集是没有问题的,我在仿真软件中用一个简单的程序做了相应的测试,这样采集是可行的,缓存区的值会随着模拟量的改变而改变。。。而E231模拟模块的输入不需要驱动,所以会不会是程序整体结构的问题,硬件问题应该可以排除吧。。无能的楼主只能再一次把程序奉上,希望各位的火眼金睛能看出什么端倪。。
OB1//主程序
LD SM0.1//初次扫描时,
MOVB 16#09, SMB30//定义通信参数,波特率96000,无奇偶校验。
MOVB 16#94, SMB87//初始化RCV控制字节,
MOVB 16#23, SMB88//定义起始字符“#”
MOVB 16#21, SMB89//定义结束字符“!”
MOVW +5, SMW92//空闲时间检测,
MOVB 100, SMB94//指定最大接收字符为100
ATCH INT_0:INT0, 23//将接收完成中断事件与中断服务程序int0联系,并开启中断,
ATCH INT_2:INT2, 9//将发送完成中断事件与中断服务程序int1联系,并开启中断,
ENI//允许全局中断
RCV VB100, 0//初始化接收信息
INT0//中断服务程序0
LDB= SMB86, 16#04//如果检测到结束字符而结束接收,则
MOVB 10, SMB34//定义一个10ms定时中断
ATCH INT_1:INT1, 10//将定时中断与中断服务程序int1联系,并开启中断
CRETI//返回中断
NOT//如果因其他原因而结束接收,
RCV VB100, 0//则开始新的接收。
INT1//中断服务程序1
NETWORK1
LD SM0.0//一直导通
DTCH 10//隔离定时中断
MOVB 1, AC0//给AC0赋初值1,
CFND VB100, "0123456789+-", AC0//从第一个字符开始查找数字,并把起始位置的地址放入AC0
STR VB100, AC0, VD100//从缓冲区读取以AC0为开始的实数,并存入VD100
NETWORK2
LD SM0.0//一直导通,
MOVB 10, VB300//定义以VB300为起始位置的一个长度为10的字符串
MOVB 1, VB400//同上
MOVW AIW0, VW200//模拟量输入映像区AIW0的值传送至VW200
ITD VW200, VD200//将整型数据转化为双整型数据
DTR VD200, VD200//将双整型数据转化为实型数据
-R 0.0, VD200//
*R 0.003125, VD200//对VD200做线性变换将其转化为
NETWORK3
LDR> VD200, VD100//如果VD200>VD100,则触点闭合
MOVB 1, QB0//将值“1”传送至输出映像区
NETWORK4
LDR< VD200, VD100
MOVB 2, QB0
NETWORK5
LDR= VD200, VD100
MOVB 0, QB0
NETWORK6
LD SM0.0//一直导通
RTS VD200, VB300, 16#51//将实数型数据转化为字节型数据,长度为5,小数点后1位小数
MOVB 16#23, VB401//将字符“#”传送至存储区单元VB401
SCAT VB300, VB400//把字符串VB300添加到VB400后面,
SCAT "!", VB400//把字符串“!”添加到VB400后面
XMT VB400, 0//将VB400内的数据通过PORT0发送至上位机
NETWORK7
LD SM0.0//一直导通
CRETI//返回中断
INT2//中断服务程序2
LD SM0.0//一直导通
RCV VB100, 0//开启新的接收
CRETI//返回中断
请填写推广理由:
分享
只看
楼主