急寻单片机制作实验报告

2024-11-21 21:11:49
推荐回答(3个)
回答1:

  用单片机制作可编程控制器实验
  韦志诚
  (华东船舶工业学院机械系.江苏镇江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: This paper discussed 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系列单片机8031来实现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 ISH/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
  SBH/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常数
  SBHT053 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

回答2:

http://www.happycampus.com.cn/pages/2005/09/26/D179331.html#
http://spaces.msn.com/members/liuxince/Blog/cns!1p1c1GlbjCWODz339SnTdzgQ!107.entry

回答3:

这是我上个学期的单片机实验报告,程序经过调试的,可以保证结果,你看看可以不?

单片机实验报告 电子时钟实验 02级通信工程
一、实验目的:
通过设计电子时钟的综合实验掌握单片机编程的基本思想,以及中断、定时程序的基本编写方法。

二、实验内容:
利用定时计数器,设计一个电子时钟,从左到右依次显示时分秒。有两种方法实现,一种是在中断程序中计数,产生时分秒计数,送到显示缓冲区。另一种是中断程序每一秒清除一个位变量,而主程序通过监视位变量的变化来知道每秒的时间。
提高要求:
1、可以加入时间调整程序,使用两个或三个按钮,调节当前的时间。类似平常使用的电子表。可以让正在调整的位闪烁显示。
2、可以加入一个闹钟设置,当所定的时间到时,产生断续的蜂鸣声。

三、实验过程:
编程基本思路:在主程序里负责读取存储区的时分秒的值,然后送到显示缓冲区,并且查询秒的存储区,当为0时说明满一分,调用报时子程序;在中断程序中计数,产生时分秒计数,定时器采用方式一,每100ms中断一次,中断10次 为一秒。
程序如下:
org 0000h
ljmp main ;转主程序
org 000bh
ajmp it0p ;转定时器T0中断
org 0100h
main:
mov tmod,#01h ;T0工作在方式1
mov 20h,#0ah
clr a
mov 50h,a
mov 51h,a
mov 52h,a ;清0存放秒分时值的单元
setb et0 ;允许T0中断
setb ea ;允许中断
mov th0,#3ch
mov tl0,#0b0h ;计数器赋初值
setb tr0 ;启动计数器T0
first:
clr p1.0
lcall bell
mov a,52h
anl a,#0fh
mov 78h,a
mov a,52h
anl a,#0f0h
swap a
mov 79h,a ;秒的高低位送79H,78H
mov a,51h
anl a,#0fh
mov 7ah,a
mov a,51h
anl a,#0f0h
swap a
mov 7bh,a ;分的高低位送7BH,7AH
mov a,50h
anl a,#0fh
mov 7ch,a
mov a,50h
anl a,0f0h
swap a
mov 7dh,a ;时的高低位送7DH,7CH
dir: ;显示子程序
mov r0,78h ;置缓冲器指针初值
mov r3,01h ;位选码初值送R3
mov a,3
ld0:
mov dptr,8002h
movx @dptr,
mov dptr,8004h
mov a,r0 ;显示数据送A
add a,0fh ;加偏移量
movc a,a+pc ;查表取段码
dir1:
movx @dptr,a
acall delay ;调用延时1m秒的程序
inc r0 ;指下一个显示数据单元
mov a,3 ;位选码送A
jb acc.5,d1 ;看是否扫描到最右
rl a ;让下一个LED亮
mov r3,a
ajmp ld0
ld1:
ljmp first
table:
db 3fh, 06h, 5bh, 4fh, 66h, 6dh
db 7dh, 07h, 7fh, 6fh ;段码表数字 0到9
delay: ;延时1m秒的子程序
mov r7,02h
dl:
mov r6,0ffh
dl1:
djnz r6,l1
djnz r7,dl
ret

it0p: ;T0中断服务子程序
push psw
push a
mov th0,#3ch
mov tl0,#0b0h ;定时器赋初值
djnz 20h,return ;看10次计数是否到,未到恢复现场
mov 20h,0ah ;到了则重新设置下次10次计数值
mov a,01h
add a,52h ;秒值加1
da a
mov 52h,a
cjne a,#60h,return ;看是否到60秒,未到就恢复现场
mov 52h,#00h
mov a,#01h
add a,51h ;到了60秒就分钟加1,秒位清0
da a
mov 51h,a
cjne a,#60h,return ;看是否到60分,未到就恢复现场
mov 51h,#00h
mov a,#01h
add a,50h ;到了60分就分钟加1,分位清0
da a
mov 50h,a
cjne a,#24,return
mov 50h,#00h ;到了24小时就把小时清0
return:
pop a
pop psw
reti
bell: ;报时子程序
push a
mov a,42h
cjne a,#00h,back
setb p1.0
back:
pop a
ret
end
实验结果:
执行程序后从0开始计时,满60秒进一分,并且报时一次,与预想的结果一样。开始的时候显示时会出乱码,不知道是怎么回事,后来问了老师才知道是数的进制问题,加了一条 DA A的指令就可以了。还有刚开始的时候根本进不了中断定时的程序,仔细检查之后发现自己在开关中断时设置错了。
报时部分是做了,但是键盘部分没有做出来,那部分掌握的不太好,没有很仔细的看书,一个小小的遗憾。
四、实验总结:
这是这个学期的最后一次实验,是一个综合实验。开始还以为特别难,后来慢慢也就做下来了,虽然做的不是特别好。通过一个学期的学习发现《单片机》的确是一门很有用的课程,对今后的学习工作有很大的帮助,因为单片机目前在社会中有在和极其广泛的用途,各个地方都离不开它的。但是我觉得就我们在课堂上学到的这点知识还是极其有限的,更多的东西还靠我们自己去课下学习。老师只起到一个引导我们学习的作用,关键还是在于我们自己,这就是所谓的“师傅领进门,修行在个人”吧。冰冻三尺非一日之寒,滴水穿石非一时之功,谨以此自勉。