用单片机制作可编程**实验 韦志诚 (华东船舶工业学院机械系.江苏镇江212003) 摘要:分析pt.c的运行原理系统程序的安排.以及用户程序的编译方法.少{在此基础上说明如何用 单片机制作可编程逻辑**。 关键词:中一片机;可编程逻辑** 中图分类号:t p 273文献标识码:13文章编号:1006 7167( 2003) 01-0056-05 using single chip computer to fabricate plc l}fl 77.1-c}7.}1zba (dept.of mechanical eng二east china shipbuilding tnst二7,henjiang 212003, china) abstract: th** ** d**cussed the principle of pt.c and the method to transform pt.c command to cp[丁con mand, and explained how to fabricate pt.c by using single chip computer. key words: single chip computer, programmable logical controller(pt.c) 在普通高校机械系机床电气控制技术》课程中. 可编程**是一项很重要的教学内容.为了配合该 课程的教学一般都开设相应的p1.c实验。 我院机械系实验室也配各了ge公司、二菱公司 等厂商生产的可编程**.供学生实验使用。这对学 生掌握可编程**的应用技能.起到了很好的作用。 在历届实验教学过程中.不少学生j{不满足少 p1.c的应用.常常提出如卜问题:`}'1.c的硬件是怎样 构成的?" }'1.c的运行程序是怎样编制的?”前一个问 题教课}j中有些简略介绍.后一个问题往往是生产厂 商不公开的技术.因此不好向学生解释。 为了解决这个问题.笔者结合单片机实验.尝试用 51系列单片**031来实现p1.c的功能.以满足学生 的要求。 用户 图1 plc硬件组成框图 p1.c运行时.程序执行过程如图2.巡回扫描i p1.c的基木工作方式。 系统程序用户程序 1 plc的构成 p1.c的硬件组成框图如图1: p1.c的软件应包括系统软件和应用软件两部分。 系统软件有以卜功能:(1)系统配置及初始化; }2)系统自诊断;}3)命令识别与处理;(4)用户程序 编译;(5)模块化r程序及调用管理。 应用软件即用户用p1.c程序语言编写的应用程 序。它是根据预期的控制功能编写的.可随时修改。 图2 plc不tly执行流程 如果一个单片机系统可作为p1.c运行.关键碑 该系统能够认识”用p1.c语言编写的命令。其实单) 机系统只认得机器码.因此.若能把p1.c命令编译丈 单片机相应的机器码.此系统就能作p1.c运行了。 2 plc命令到单片机指令的编译 在机床电气控制中通常都作一些逻辑控制p1.c 在该领域的应用也以逻辑控制居多。卜而仅讨论如何 实现这些逻辑控制功能。 组成简易p1.c的单片机系统如图30 +5v x000 茎o(i7 xi)日) xol7 yif?i1 vnz} 图3组成plc的最小单片机系统 用8255的pa口.pr口作为输入端.分别定义为在8031芯片的内部存储器中有一个位寻址区.共 x 000 x 007和x010 x017; pc口作为输出端.定义为有128个可寻址位.地址编号为ooh 7fh.它们正好 y020 y027。按p1.c系统惯例.编号为8进制数。木可以用来作为p1.c的输入、输出映像寄存器.以及其 文只讨论简易系统.所以输入部分略去了光电祸合电它p1.c兀件的映像寄存器。为简便起见.定义输入中- 路.输出部分略去了继电器电路。兀x 000 x 007对应的可寻址位为ooh-07h, xo10- 通常p1.c应该有若干内部继电器m.定时器t x017为loh-17h,输出中一兀y020 y027为20h- 和计数器c等。现只定义16个内部继电器m 130- 27h。对」几内部继电器m130 m137,m140 m147.定时 m137.m140 m147.还有4个定时器t 050 t 053和4器t 050 t 053和计数器c 054-(. 057等.也用cpu内 个计数器c 054-(. 057。这里n_把x 000 , y 020等输入、部ram的可寻址位与之一一对应。 输出中一兀.以及内部继电器m.定时器t.计数器c等列出内部ram的地址分配表如表to 称为p1.c兀件。 表1 8031内部ram地址分配表 20h ooh/x000 oih/x001 02h/x002 03h/x003 04h/x004 osh/x005 06h/x006 07h/x007 ioh/x010 i ih/x01 i 12h/x012 13h/x013 14h/x014 **h/x015 16h/x016 17h/x017 20h/y020 21h/y021 22h/y022 23h/y023 24h/y024 25h/y025 26h/y026 27h/y027 30h/vi 130 31h/vi 131 32h/vi132 33h/vi133 34h/vi134 35h/vi135 36h/vi136 37h/vi 137 40h/vi 140 41h/vi 141 42h/vi142 43h/vi143 44h/vi144 45h/vi145 46h/vi146 47h/vi 147 soh/t 050 58h/t 050 s i h/t o51 59h/t os i 52h/t 052 sa h/t 052 53h/t 053 **h/t053 54h八:054 sc h/c 054 ssh八 sdh/( 56h八 seh/( 57h八:057 sf h/c 057 h h h h h h h h h h h h h hh 21 22 23 24 25 26 27 2829叭2b鱿21) zezf soht 050常数 58ht050 i1数 sihto51 }'数 59ht051 i1数 52ht052 }'数 saht052 i1数 53ht 053常数 **ht053 i1数 54h c 054常数 schc054 i1数 sshco55常数 sdhco55 i1数 56hc056常数 sehc056 i1数 57hc057常数 sfhc057 i1数 表中每个输入、输出l从.内部继电器分别对应一 个可寻址位。ifn每个定时器.计数器分别对应两个可寻 址位还对应两个字节存储单兀。 对应」几p1.c的逻辑控制功能.cpu芯片8031一 般是用位操作指令来进行运算的。卜边讨论如何把 p1.c命令编译成8031位操作指令码。 先看一条简中一的p1.c 二菱系列可编程**。 x000 程序。程序的编制方法参照 比如: x000 xool 丫020 丫020 日一— 日/一一一 这条程序很简龟p1.c命令为1. d x 000, o u t y 0200其逻辑关系为: y 020=x 000 即直接把输入端的状态送到输出端.无须运算。 再看一条控制电动机起动、停止的p1.c程序: x000 xool丫020 第一条plc命令a031指令a031机器码 ldi x000 m0vc,ooii a200 cpl r. r3 机器码为3字节。 又如定时器回路: x000 t 050 日一—(>icloo 一习一/一— 日({2口 p1.c命令为1,d x000, or y020, an1 x001, out y020.逻辑关系如卜: y 020=(x 000+y 020)*x 001 显然一般单片机系统不能处理这个关系式。 假如输入扫描己将输入端状态扫入其对应的映像 寄存器中.那么上述逻辑关系式可转化为: (20h)=l(ooh)+(20h)」*(o1h) 输入、输出单兀分别用它们的映像寄存器取代.地 址山表1确定。这样.中一片机系统就能够实现这条逻辑 运算了。 完成这条逻辑运算所需要的8031指令及机器码 与p1.c命令有如卜对应关系: plc命令a031指令a031机器码 l p x 000 m0vc, 0011 a2 qq o r i 020 o r l c , 2011 72 20 ani x001 anl c, /0111 p}0 o1 olt丫020 m 0v 2011, c 92 2q 只要把p1.c命令转换成右侧的机器码.输入到图 3的用户存储器6264中.即可执行上边这条程序了。 先山系统程序将输入端状态扫入其对应的映像寄存器 中.然后执行用户程序.再山系统程序把结果扫描到输 出-w},。 当输入x 000接通时.输出y 020接通.对应的发 光一极管亮;x 000断开.输出仍山y 020的接l从保持; 只有x 001接通时.输出y 020才断开。 上边有卜划线的数字是与x,y,m,t,c等p1.c 兀件号对应的8031内部ram可寻址位地址.山表1 确定。在这里.它正好与p1.c的兀件号相符。 因此.根据p1.c命令及x,y ,m等兀件的编号. 即可转换成相应的机器码和映像寄存器地址。 分析p1.c命令及相应的8031指令.会发现p1.c 命令多半可转换为2字节机器码.ifn有的命令则转换 为3字节、4字节、甚至多字节机器码必须区别对待。 plc命令a031指令a031机器码 l p x 000 m0vc , ooi i a 2 00 oct 1050 m0v sail c 92 5a k 100 m 0v 50ii#(4ii 75 50 (4 其中与输入时间常数命令对应的机器码为二‘ 节。 位58h也是与t 050对应的可寻址位.它用来 记t 050的输入状态.ifn位50h则表示t 050的输{ 状态。还有字节单兀50h用来存放t 050的定时常鲜 #64h是十进制数100转换成的十六进制数。 再看比较复杂的块ji联回路: x000 xool丫020 川一仁(’ 这条p1.c程序是将上一分支回路的运算结果 卜一分支回路的运算结果相或后送到输出端.因此) 先把上一分支回路的运算结果保存起来.然后才能j 行卜一分支回路的运算.否则就会造成逻辑混乱。所} 简中一地套用前述ijd命令的编译方法就不行了。 根据p1.c编程经验.不管有无分支回路.每档, 形图程序总是以1.d或1.d1命令开始的。我们可以二 1.d,1.d1命令编译程序的开头处加一条8031指令.: 位运算器c的状态(即上一分支回路的运算结果)’ 存起来.等遇到块步{联0rt3命令时再取出来和卜 分支回路的运算结果相或.这样就不会造成逻辑混l 了。可以采用指定专用位存储器寄存的办法.也可采) 专用字节存储器移位寄存的办法。参考资料[2],后 种方法较好。这里指定8031的片内存储器1fh中- 为专用移位寄存器.用来暂存位运算器c的状态。 这样一来.对」几有步{联分支回路的p1.c程序.) 需要的8031指令及机器码与p1.c命令有如卜对应 系: plc命令a031指令a031机器码 l p x 000 m0va,1fii i;5 1f rlc a 33 m()、 m()、 1fii, a c, ooii and x001 t. d x 002 and x003 ()rr 0 t; t丫020 anl c, olii m 0ya, 1fii rlc a m 0y 1fii, a m 0yc, 02ii anl c, 03ii m 0ya, 1fii rr a m 0y 1fii, a orl c,acc. moy 20ii, c fs 1f a 2 00 82 o1 ds 1f 33 fs 1f a 2 02 82 03 ds 1f 03 fs 1f 72 l7 92 20 注意.第一条1.d命令对应的8031指令先把位运 算器c的状态(即上一分支回路的运算结果)存入 1fh中一兀的do位。待到ort3命令时.对应的8031指 令则把1fh中一兀的do位状态存入累加器acc的d7 位中。山j几该右循环指令不影响位运算器c.此时c的 状态仍为卜一分支回路的运算结果.这样c与acc.7 相或就是总的运算结果。 为了处理ji联分支回路.1.d命令和ort3命令对 应的机器码为7字节.if}j 1.d1则更多。 另外.第一条1.d命令对应的左循环指令在这里 无效。但为了编译方便.只要是1.d命令.或1.d1命令. 编译时都作左循环处理.包括前边的例r。 与ort3命令对应的右循环指令又还原了上一分 支回路的运算结果.以便处理多分支ji联回路。 采用这种移位循环方法最多可以处理8路ji联分 支的p1.c程序。 关」几ji联块与ji联块的串联.这种情况要用到块 串联命令ant3.可仿照上述办法处理。 通过以上分析.可以看出对j几不同的p1.c命令. 8031都有与之对应的操作码.ifn随后的操作数则山相 应的p1.c兀件号确定。根据这个规律.把p1.c命令编 译成8031的机器码就不难了。 前边己经提到了定时器的编程.现在对定时器的 运行再作一些说明。 以t 050为例.表1列出了它的两个可寻址位为 50h和58h,前者存放它的输出状态.后者存放它的输 入状态。因为定时器的输出状态不仅仅山其输入状态 决定.还要取决」几计时是否到.所以每个定时器要,片用 两个可寻址位。另外还要有两个字节存储器50h和 58h.前者存放它的预置时间常数.后者用来作它的计 数器。 在系统程序中安排一个定时器中断.时标为0. 1 秒。运行中若检测到可寻址位58h(输入状态)为1.则 在中断程序中把字节存储器58h加to当其中的计数 与字节存储器50h中的预置数相等时则将可寻址位 50h(输出状态)置1。木例中常数为k 100.故t 050的 定时值为10秒。 木文只讨论用中一个存储器来计数.因ifn定时范围 有限。若要扩大定时范围.则用双存储器来计数。 对j几计数器c 054-(. 057.可用外部中断实现其功 能。编程方法及系统程序的安排与定时器相似。 系统cpu在处理定时器、计数器时.需用字节操 作指令。所以在p1.c系统中.位操作指令和字节操作 指令都要用到。 关」几p1.c的主控命令mc,mcr.其实只是多一 条综合逻辑关系;还有常用的sft ,rst命令.用」几对 计数器置位、复位。这些都不难分析。 至」几fnd命令.实际上是安排一条跳转指令.山 用户程序跳转到系统程序输出扫描的入口处去。这条 命令是必不可少的。 不难看出.只要适当安排p1.c的兀件号.步{在编 译时作时号”处理.表1中空白的内部ram可寻址 位都是可以利用的。这就意味着.只用8031芯片内部 ram.就可以把p1.c的兀件(x,y,m,t,c等)做到 100个以上。 3结束语 笔者利用复h过去生产的一块mcs 51通用实验 板和一块24键,8只数码管的键盘显示器一试作了用 51中一片机制作可编程**实验。p1.c用户程序到 8031指令的编译在作为编程器的键盘显示器中完成. 对应的机器码顺序存入图3的6264中。ifn p1.c的主 程序输入扫描、输出扫描、定时器中断、计数器中断等 则固化在2764中。所用的p1.c编程方法参照了二菱 系列产品.符合通用可编程**惯例。它的技术指标 女口卜: 输入1(点x000- x007. x010- x017 输出8点1' 000- 1' 007 内部继电器24点m 100- m 107. m 110- m 117 m 120-m 127 定时器4点t 050 t 053时标0. 1 s最人定时伯 25. 5s i}一数器4点c 054-c 057最人i}一数伯255 编程命令ld ldi and ani or ori olt m c m cr orp} anp} 51;t r5t nnn 输入程序步数soo 20210311