找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

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

[复制链接]
admin 发表于 2012-9-3 02:23:33 | 显示全部楼层 |阅读模式

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

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

×
实战攻坚!

上面一讲我们讲述了该如何对照原理图的引脚分配情况来配置你的INIT_CONFIG子程序,这一讲笔者说说其他3个初始化应该如何编写。

我们先在USER_DATA中定义几个用户变量:
INPUT_PORTA EQU DRAM_USER
INPUT_CNT EQU DRAM_USER+1
XINPUT EQU XRAM_USER

在解释这些变量的含义之前,我们首先聊下PLC的工作状态。
PLC的输入端口是和梯形图中的X端口相对应的,也就是说,短接I0和COM0(输入端口统一地端子),梯形图中的X0将会吸合,反应在元件监控画面上X0右边会出现绿色的实心小正方形,表示它的触点已被吸合。同理,I0~I7对应的便是X0~X7。
而PLC的输出端口是和梯形图中的Y端口相对应的,当用户在梯形图中把Y0置1或是元件监控里把Y0强制置1,那么O0端子便和COM1自动短接了。同理,O0~O5对应的便是Y0~Y5。在PLC端子口上是看不到I0和O0的,但是有它们对应的X0和Y0。
下面我们讲讲这几个用户变量:
INPUT_PORTA:用来保存当前8个输入端口的输入状态(X0~X7)的。
INPUT_CNT:输入端子采样次数指针。
XINPUT:输入端子采样值缓冲区。

这些概念朋友们先大概了解一下便好,至于怎么应用到它们,后面还会具体讲到。

INIT_START
接下来,我们开始编写INIT_START用户驱动子程序了,添加的代码如下:
MOV INPUT_CNT,#08H ;1
CLR A ;2
MOV DPTR,#RAM_PX+1 ;3
MOVX @DPTR,A ;4
MOV DPTR,#RAM_PY+1 ;5
MOVX @DPTR,A ;6

1. 我们将INPUT_CNT这个变量初始化为8,这也就意味着,采样的次数我们限定它为8次,如果你设置成4,那么输入端口的采样次数就为4,现在只要知道这些就好,我们以后在讲到TMS这个用户驱动子程序时,会详细给大家分析为什么采样输入端口以及如何采样它。
2. 不用讲了吧…
3. 这个是将间接寻址指针指向X0~X7所在的地址单元,间接寻址指针的表达方式有2种,笔者惯用的是以DPTR形式来进行寻址。至于另外一种,呵呵,自己查说明书吧。
4. 这句话的意思是把寄存器A的值赋给X0~X7,因为A的值为0,实际上这句话的作用就是把X0~X7所代表的寄存器的值清零。看到这里,可能有的朋友就又有问题了,为什么X0~X7所在的地址不是#RAM_PX而是#RAM_PX+1呢,其实这个是和内核定义梯形图单元的寻址地址有关。内核规定,梯形图的单元寄存器都是低位在后,高位在前,也就是说,#RAM_PX并不是对应的X0~X7,而是X10~X17。
5. 这个是将间接寻址指针指向Y0~Y7所在的地址单元。
6. 同4。

INIT_RUN
直接让它返回吧,在这个系统里面,没必要配置这个。

INIT_SET
然后紧接着配置INIT_SET:
CLR A
MOV DPTR,#RAM_PX+1
MOVX @DPTR,A
MOV DPTR,#RAM_PY+1
MOVX @DPTR,A
这里也是清除X0~X7和Y0~Y7的寄存器值,那为什么在这里又要清零呢?会不会跟之前的重复了呢?
当然不会,注意到系统会在什么时候调用INIT_SET呢?是在内核重新上电后进入梯型图下载状态或内核从梯型图运型状态进入梯型图下载状态时调用此程序一次。
看到了吧,PLC在不断电的情况下,也会在上面黑体的部分调用到它,举个例子,PLC在运行过程当中,Y3处于闭合状态,现在你要重新灌梯形图了,这个时候你当然希望Y3不再闭合了,而是等你重新下载梯形图完毕以后,系统重新判断Y3到底该不该为1。由于这个时候PLC并不断电,那么调用INIT_START也就无从谈起,也就无法调用那里面的清零语句。所以你必须要在INIT_SET把它两给的值清除了,才能保证PLC的正常工作。

STEP
也是空的,没必要配置~

下一讲里,我们讲TMS用户驱动子程序,也就是用户2.5ms中断了,这个可是个重点哦~^-^~!

本帖首发中国工控网科威PLC论坛,转载请声明!
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-12-24 02:05 , Processed in 0.057094 second(s), 11 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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