全新论坛MCU智学网上线,欢迎访问新论坛!稀缺资源、技术干货、参考设计、原厂资料尽在MCU智学网
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

科威PLC芯片组开发实例(十)

[复制链接]
1302 0

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
实战攻坚!

下面我们讲讲该在TMS用户驱动子程序里面写些什么代码。

首先笔者得说说科威PLC的输入端口采样原理,为什么要进行输入端口采样呢?答案很简单,就是为了滤波。在PLC实际运行过程中,X端口可能会因为现场干扰收到一些毛刺信号,这些毛刺信号如果不进行处理,就会影响到PLC对X端口的状态的判断,那么我们必须得剔除掉这些毛刺,使系统工作在一个稳定的环境。
我们规定,如果连续采样8次X端口的值都是一致的,就判断此刻X端口的状态是实际的输入状态,这个也就是为什么我们把INPUT_CNT这个变量设置为8的原因。

还是老规矩,笔者贴出TMS的代码并为大家分析:
TMS
TMS: MOV C,KEY_SET ;1
MOV P4.3,C ;2
MOV C,PLC_PRO_ERR ;3
CPL C ;4
MOV P4.2,C ;5
MOV A,INPUT_CNT ;6
JNZ TMS1 ;7
RET

TMS1: DEC A ;8
MOV DPTR,#XINPUT ;9
ADD A,DPL ;10
MOV DPL,A ;11
MOV A,DPH ;12
ADDC A,#00H ;13
MOV DPH,A ;14
MOV A,P3 ;15
MOVX @DPTR,A ;16
DEC INPUT_CNT ;17
RET

1. 第1~5句:这4条语句是给RUN/SET和ERR两个灯赋状态的。在原理图中看到,由于ERR的LED与实际的P4.2中间反了一次向,故此在程序中也需要对此端口反向赋值。
2. 第6句:取INPUT_CNT当前值赋给寄存器A
3. 第7句:这句是一句跳转指令,作用是看对X输入端口当前的8次采样完成了没有,如果完成了,就直接返回,在SCAN用户驱动子程序会对其X0~X7寄存器的值进行更新;如果8次采样没有完成,则跳转到TMS1中进行X输入端口采样。
4. 第8~16句:将P3端口的值(即当前X输入端口的采样值)存放到从#XINPUT+7开始到#XINPUT一共8个单元。值得注意的是,完成8次采样的时间为2.5ms * 8 = 20ms。也就是说,从第1次采样开始到8次采样结束需要20ms的时间。结束时,#XINPUT~#XINPUT+7这8个单元的地址已被填充,等待SCAN用户驱动子程序的处理。这段程序通过改变采样指针DPTR的DPH和DPL,使其指向不同的外部寻址单元,这个小技巧希望大家能够熟练掌握。
5. 第17句:将INPUT_CNT减1。不要忘记这句话,否则你的程序将始终填充#XINPUT+7这个单元的数据,采样指针永远也指不到#XINPUT+6和其以下的单元。

好了,TMS就给大家分析完了,下一讲笔者将给大家讲述最后一个部分:SCAN。

本帖首发中国工控网科威PLC论坛,转载请声明!

举报

回复
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

打开支付宝扫一扫,最高立得1212元红包
搜索

图文热点

更多

社区学堂

更多

客服中心

QQ:187196467 服务时间:周一至周日 8:30-20:30

关注我们

关于我们
关于我们
友情链接
联系我们
帮助中心
网友中心
购买须知
支付方式
服务支持
资源下载
售后服务
定制流程
关注我们
官方微博
官方空间
官方微信
快速回复 返回顶部 返回列表