找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6397|回复: 0
打印 上一主题 下一主题
收起左侧

单片机自动加料机控制系统设计 附源码

[复制链接]
跳转到指定楼层
楼主
ID:420142 发表于 2018-11-7 22:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目录
第一章  绪 论
1.1   题目来源及课题意义
1.2   自动加料机控制系统的工作原理及技术要求              1
1.3   系统的主要技术参数:              1
第二章    方案论证
2.1   单片机的选择
2.2   物位传感器的选择
2.3  存储器扩展电路的选择              5
2.4  LED显示电路选择              7
2.5. 键盘输入电路              8
第三章    自动加料机主电路
3.1  系统结构原理图
3.2  主机电路核心器件介绍              10
3.3  显示电路
3.4   继电器控制电路
3.5   键盘及显示电路
3.6   外部存储器扩展电路
3.7   看门狗MAX813L电路
3.8   料位开关
第四章    系统的抗干扰及可靠性
第五章  软件设计
第六章    结论语
参考文献:
附录A:系统框图
附录B:系统硬件框图
程序清单:

第一章  绪 论
1.1   题目来源及课题意义
在现代科学技术的许多领域中,自动控制技术起这愈来愈重要的作用,并且,随着生产和科学技术的发展,自动化水平也越来越高。自动控制利用控制装置使被控对象的某个参数自动的按照预定的规律运行。本设计的自动加料机控制系统就是采用自动控制技术来实现功能的,这样就大大提高了工作的效率,整个过程又快又稳。
1.2   自动加料机控制系统的工作原理及技术要求
本设计的由单片机控制的自动加料系统是与料斗式干燥机配套的加料系统。根据加料工艺要求,其工作原理是:先将真空管关闭,启动电机,用低真空气流将塑料树脂粒子送入真空管,电机停转,再将粒子排入料斗,如此循环。
在设计的控制系统中,可用一个电机控制两个加料生产线,由方向阀切换。两个生产线既可单独运行,也可同时运行。假如两者同时运行,当一生产线输送结束后,判断到另一个生产线排料已经结束,那么,电机不停转而方向阀换向,从而为另一个生产线送料。这样可以发挥控制系统和电机的效率,从而实现供料自动化。
控制系统的控制器有单片机89C51和扩展电路组成,单片机控制继电器,继电器控制交流接触器,又由接触器控制电机等执行机构的运动。本控制系统可以根据送料工艺的需要,设置两条生产线的输送、排料、满料、空料等参数值,也可装载系统前次工艺参数值。
1.3   系统的主要技术参数:
  • 用一台电机控制两条生产线
  • 要能检测到满料状态,并显示出输送、排料、满料时间
  • 时间误差:0.1
  • 具有抗干扰能力

第二章    方案论证
2.1     单片机的选择
20世纪80年代以来,单片机的发展非常迅速,就通用单片机而言,世界上一些著名的计算机厂家已投放市场的产品就有50多个系列,数百个品种。目前世界上较为著名的8位单片机的生产厂家和主要机型如下:
美国Intel公司:MCS—51系列及其增强型系列
美国Motorola公司:6801系列和6805系列
美国Atmel公司:89C51等单片机
美国Zilog公司:Z8系列及SUPER8
美国Fairchild公司:F8系列和3870系列
美国Rockwell公司:6500/1系列
美国TI(德克萨司仪器仪表)公司:TMS7000系列
NS(美国国家半导体)公司:NS8070系列   等等。
尽管单片机的品种很多,但是在我国使用最多的还是Intel公司的MCS—51系列单片机和美国Atmel公司的89C51单片机
MCS—51系列单片机包括三个基本型8031、8051、8751
8031内部包括一个8位CPU、128个字节RAM,21个特殊功能寄存器(SFR)、4个8位并行I/O口、1个全双工串行口、2个16位定时器/计数器,但片内无程序存储器,需外扩EPROM芯片。比较麻烦,不予采用
8051是在8031的基础上,片内集成有4K ROM,作为程序存储器,是一个程序不超过4K字节的小系统。ROM内的程序是公司制作芯片时,代为用户烧制的,出厂的8051都是含有特殊用途的单片机。所以8051适合与应用在程序已定,且批量大的单片机产品中。也不予采用。
8751是在8031基础上,增加了4K字节的EPROM,它构成了一个程序小于4KB的小系统。用户可以将程序固化在EPROM中,可以反复修改程序。但其价格相对8031较贵。8031外扩一片4KB EPROM的就相当与8751,它的最大优点是价格低。随着大规模集成电路技术的不断发展,能装入片内的外围接口电路也可以是大规模的。也不予采用。
AT89C51是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,片内含4K bytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机存取数据存储器(ROM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元。功能强大AT89C51单片机可提供许多高性价比的应用场合,可灵活应用于各种控制领域。此设计就采用AT89C51。

2.2     物位传感器的选择
物位是指贮存容器或工业生产设备里的液体、粉粒壮固体、气体之间的分界面位置,也可以是互不相溶的两种液体间由于密度不等而形成的界面位置。根据具体用途分为液位、料位、界位传感器或变送器。物位不仅是物料耗量或产量计量的参数,也是保证连续生产和设备安全的重要参数。特别是在现代工业中,生产规模大,速度高,且常有高温、高压、强腐蚀性或易燃易爆物料,对于物位的监视和自动控制更是至关重要。
物位测量可用于计算物料储量。对于粉粒体,必须考虑到颗粒间有空隙,应区分密度和容重。密度是指不含空隙的物料每单位体积的质量,即通常的质量密度,如果乘以重力加速度g,就成为重力密度r,简称为重度。容重是包含空隙在内的每单位体积的重量v,也就是视在重度或宏观重度,它总要比颗粒物质本身的重度小,其差额决定于空隙率。而空隙率又取决与许多因素。例如颗粒形状、尺寸的一致程度、是否受外力压实、是否经受过振动、有无黏结性等,所以粉粒体物料的体积储量和质量储量之间不易精确换算,这是需要注意的。






      • 电容式物位传感器
利用物料介电常数恒定时极间电容正比与物位的原理,可构成电容式物位传感器。
根据电机的结构可将容式物位传感器分为三中:(1)适用与导电容器中的绝缘性物料,且容器为立式圆筒形,器壁为一极,沿轴线插入金属棒为另一极,其间构成的电容C与物位成比例。也可悬挂带重锤的软导线作为电机。(2)适用与非金属容器,或虽为金属容器但非立式圆筒形,物料为绝缘性的。这时在棒壮电极周围用绝缘支架套装金属筒,筒上下开口,或整体上均匀分布多个孔,使内外物位相同。中央圆棒和与之同轴的套筒构成两个电极,其间电容和容器形状无关,只取决于物位。所以这种电极只用于液位,粉粒体容易滞留在极间。(3)用于导电性物料,起外形和(1)一样,但中央圆棒电极上包有绝缘材料,电容是由绝缘材料的介电常数和物位决定的,与物料的介电常数无关,导电物料使筒壁与中央电极间的距离缩短为绝缘层的厚度,物位升降相当于电极面积改变。
电容式物位传感器无可动部件,与物料密度无关,但应注意物料中含水分时将对测量结果影响很大,并且要求物料的介电常数与空气介电常数差别大,需用高频电路。所以不予采用。






      • 阻力式料位传感器
阻力式料位传感器是指物料对机械运动所呈现的阻挡力。粉末颗粒状物料比液态物质流动性差,对运动物体有明显的阻力,利用这一特点可构成各种料位传感器。
(1)重锤探索法:在容器顶部安装由脉冲分配器控制的步进电机,此电机正转时缓缓释放悬有重锤的钢索。重锤下降到与料面接触后,钢索受到的合力突然减小,促使力传感器发出脉冲。此脉冲改变门电路的状态,使步进电机改变转向重锤提升,同时开始脉冲计数。待重锤升至顶部触及行程开关,步进电机停止转动,同时计数器也停止计数并显示料位(料位值即容器全高减去重锤行程之差)。显示值一直保持到下次探索后刷新为另一值。开始探索的触发信号可由定时电路周期性地供给,也可以人为地启动。不进行探索时,重锤保持在容器顶部,以免物料将重锤淹埋。万一重锤被物位埋没,排放物料时产生的强大拉力就可能拉断钢索报警措施及出料过滤栅。
但这种方法运用了逻辑电路和数字技术,可连续测量料位值并输出数字量,是数字传感器,但其采样是周期性的,对时间而言不连续,此设计不予采用。
(2)旋桨或推板法:这是一种位式传感器,或称料位开关。在容器壁的某一高度处装小功率电动机,其轴伸入容器内,末端带有桨状叶片。叶片不接触物料时,自由旋转的空载状态下电动机的电流很小,一旦料位上升到与叶片接触,转动阻力增加,甚至成堵转状态,电流显著加大。根据电流的大小使继电器的接点动作,发出料位报警或位式控制信号。如电机轴经过曲柄连杆机构变为往复运动,则可带动活塞或平板在容器中做推拉动作,即成推板法。旋桨法或推板法不一定都是靠电机电流的大小时继电器接点动作,也可以利用离合器或连杆上的传动机构,在叶片或推板负载增大时改变电接点的通断状态。所用电动机应能在长时间堵转状态下,或离合器打滑状态下,不致过热而损坏。
这类原理构成的料位开关,只能安装在容器壁上,安装高度取决于动作所对应的料位值。应用不那么广泛,所以次设计也不予采用。
(3)音叉法:根据物料对振动中的音叉有无阻力探知料位是否到达或超过某高度,并发出通断信号,这种原理不需要大幅度的机械运动,驱动功率小,机械结构简单、灵敏而可靠。
音叉由弹性良好的金属制成,本身具有确定的固有频率,如外加交变力的频率与其固有频率一致,则叉体处于共振状态。由于周围空气对振动的阻尼微弱,金属内部的能量损耗又很少,所以只需微小的驱动功率就能维持较强的振动。当粉粒体物料触及叉体之后,能量消耗在物料颗粒间的摩擦上,迫使振幅急剧衰减,音叉停振。
为了给音叉提供交变的驱动力,利用放大电路对压电元件施加交变电场,靠逆压电效应产生机械力作用在叉体上。用另外一组压电元件的正压电效应检测振动,它把振动力 为微弱的交变电信号。再由电子放大器和移相电路,把检振元件的信号放大。经过移相,施加到驱动元件上去,构成闭环振荡器。在这个闭环中,既有机械能也有电能,叉体是其中的一个环节,倘若受到物料阻尼难以振动,正反馈的幅值和相位都将明显的改变,破坏了振荡条件,就会停振。只要在放大电路的输出端接以适当的器件,不难得到开关信号。
为了保护压电元件免受物料损坏和粉尘污染,将驱动和检振元件装在叉体内部,经过金属膜片传递振动。如果在容器的上下方都装叉体,可以实现自动进料或自动出料的逻辑控制,或者把料位越限信号远传到控制室。在控制室里的控制电路判断料位是否越限,并按要求使被控的进出料设备启停。
并且叉体的制造和装配良好时,音叉也可用于液体测量和控制。在测量时不需要大幅度的机械运动,驱动功率小,机械结构简单、灵敏而可靠。此设计选择音叉法阻力式料位传感器。

2.3  存储器扩展电路的选择
2.3.1  24C01扩展
串行总线上的各单片机或集成电路模块,通过一条数据线(SDA)和一条时钟线(SCL),按照通信规约进行寻址和信息传输。每个集成电路模块都有唯—伪地址,既可以是主控机(能控制总线,并能完成一次传输过程的初始化和产生时钟信号及传输终止信号的器件)或被控机(被主控器寻址的器件),可以是发送器(在总线1:发送信息的器件)或接收器(从总线上接收治息的器件)  I2C总线上的器件,根据它的不同工作状态,可分为主控发送器、主控接收器、被控发送器、被控接收器。当多个主控器同时企图控制总线而不丢失信,这叫多主竞争。这时就要进行仲裁,仲裁就是针对这种情况进行裁决的过程。只允许其卞一个主控器继续占用总线,其它退出丰搀器状态。仲裁过程中还要保证总线的信息不丢失。多主竞争时必须对所有参与竞争的主控器的时钟信号进行同步处理。信息传输时,SCL为高电平期间,SDA上的信息必须保持稳定不变,只有SCL为低电平期间,SDA上的信息才允许变化。同时SDA上信息每一位部和SCL的时钟脉冲相对应。SCL没有时钟信号,SDA信息将停止传输处于等待状态。这因为线“与”逻辑,使SCL在低电平时钳住总线。实现线“与”逻辑功能各I2C总线接口的输出端必须是漏极开路或集电极开路结构。SCL保持高电平期间,SDA由高电平向低电平变化这种状态定义为起始信号。SCL保持高电平期间,SDA由低电平向高电平变化,这种状态定义为终止信号。SDA传输的每个字节必须8位(最高有效位首先传送),每个传送字节必须跟随一位应答位。与应答信号相应的时钟信号由主控器产生,发送器在这个时钟信号释放SDA,使它处于高电平状态,以便接收由接收器在这位发出的应答信号。这时接收器还必须SCL在这位高电平期间,在SDA上输出一个恒定低电平信气以完成应答信号的输出。整个传输过程中,传输的字节数目是没有限制的。数据传输一段时间后,接收器无法继续接收更多的数据,主控器同样可以终止数据的传送
24C01是一种128字节串行CMOS  EEPROM,它具有如下特点:1.存储容量为128字节。2.串行接口可使用普通两根I/O接口。3.具有页写模式:每页4字节。4.同步周期小于10ms。它只使用一条数据线和一条时钟线,采用ATMEL公司的24C01串口存储器,应用简单方便,但是其编程较为复杂。
2.3.2    2864A芯片扩展
2864A是一种并行EEPROM,它的特点同上,但每页有16字节,2864A与8051单片机的接口电路如下图所示,2864A的片选端与高地址线P2.7连接,P2.7=0才能选中2864A,这种线选法决定了2864A对应多组地址空间,即0000H~1FFFH,2000H~3FFFH,4000H~5FFFH,6000H~7FFFH,这8K字节存储器可作为数据存储器使用,但掉电后数据不丢失
2864A的四种工作方式:
(1)维持方式:当为高电平时,2864A进入低功耗维持状态。此时,输出线呈高阻状态,芯片的电流从140mA下降至维持电流60mA。
(2)读方式:当均为低电平而为高电平时,内部的数据缓冲器被打开,数据送上总线,此时,可进行读操作。
(3)写方式:2864A提供了两种数据写入方式:页写入和字节写入。
页写入:为了提高写入速度,2864A片内设置了16字节的“页缓冲器”,并将整个存储器阵列划分成512页,每页16个字节。页的区分可由地址的高9位(A4~A12)来确定,地址线的低四位(A0~A3)用以选择页缓冲器中的16个地址单元之一。对2864A的写操作可分为两步来实现:第一步,在软件控制下把数据写入页缓冲器,这部称为页装载,与一般的静态RAM写操作是一样的。第二步,在最后一个字节(即第16个字节)写入到页缓冲器后20ns自动开始,把页缓冲器的内容写到EEPROM阵列中对应的地址单元中,这一步成为页存储。


写方式时,为低电平,在下降沿,地址码A0~A12被片内锁存器锁存,在上升沿时数据被锁存片内还有一个字节装载限时定时器,只要时间未到,数据可以随机地写入页缓冲器。在连续向页缓冲器写入数据的过程中,不用担心限时定时器会溢出,因为每当下降沿时,限时定时器自动被复位并重新启动计时。限时定时器要求写入一个字节数据的操作时间须满足;3μS<<20μS,这样是正确完成对2864A页面写入操作的关键。当一页装载完毕,不再有信号时,限时定时器将溢出,于是页存储操作随即自动开始。首先把选中页的内容擦除,然后写入的数据由页缓冲器传递到EEPROM阵列中。
字节写入:字节写入的过程与页写入的过程类似,不同之处在于仅写入一个字节,限时定时器就溢出。
(4)数据查询方式:数据查询是指用软件来检测写操作中的页存储周期是否完成。
在页存储期间,如对2864A执行读操作,那么读出的是最后写入的字节,若芯片的转储工作未完成,则读出数据的最高位是原来写入字节最高位的反码。据此,CPU可判断芯片的编程是否结束。如果读出的数据与写入的数据相同,表示芯片已完成编程,CPU可继续向2864A装载下一页数据。并且编程起来比较简单,所以此设计采用此方案。

2.4  LED显示电路选择
LED显示器是由N个LED显示块拼接成N位LED显示器。N个LED显示块有N跟位选线,根据显示方式的不同,位选线和段选线的连接方法也各不相同,段选线控制显示字符的字型,而位选线为各个LED显示块的公共端,它控制该LED显示位的亮、暗。LED显示器有静态显示和动态显示两种显示方式。






      • LED静态显示方式
LED显示器工作于静态显示方式时,各位的共阴极(或共阳极)连接在一起并接地(或+5V);每位的段选线(a~dp)分别与一个8位的锁存器输出相连。所以称为静态显示。各个LED的显示字符一经确定,相应锁存器的输出将维持不变,直到显示另一个字符为止。也正因此如此,静态显示器的亮度都较高。这种显示方式接口编程容易。付出的代价是占用口线较多,若用I/O接口,则要占用4个8位I/O口,若用锁存器接口,则要用4片74LS373芯片。如果显示器位数增多,则静态显示方式更是无法适应,因此在显示位数较多的情况下,一般都采用动态显示方式。






      • LED动态显示方式
在多位LED显示时,为了简化硬件电路,通常将所有位的段选线相应的并联在一起,有一个8位I/O口控制,形成段选线的多路复用。而各位的共阳极或共阴极分别由相应的I/O线控制,实现各位的分时选通。其中段选线占用一个8位I/O口,而位选线占用一个4位I/O口。由于各位的段选线并联,段码的输出对各位来说都是相同的,因此,同一时刻,如果各位位选线都处于选通状态的话,4位LED将显示相同的字符。若要各位LED能够显示出与本位相应的显示字符,就必须采用扫描显示方式,即在某一时刻,只让某一位的位选线状态,而其他各位的位选线处于关闭状态,同时,段选线上输出相应位要显示字节的段码。在确定LED不同位显示的时间间隔,不能太短,因为发光二极管从导通到发光有一定的延时,导通时间太短,发光太弱人眼无法看清。但也不能太长,因为毕竟要受限于临界闪烁频率,而且此时间越长,占用CPU时间也越多,另外,显示位增多,也将占用大量的CPU时间,因此动态显示实质是一牺牲CPU时间来换取元件的减少。
所以,由于本系统只涉及到2位显示输出,就采用了和2片8位移位寄存器串级使用的LED静态显示方式。

2.5.   键盘输入电路
2.5.1    矩阵式键盘接口
矩阵式键盘(也称行列式键盘)适用于按键数目较多的场合,它由行线和列线组成,按键位于行列的交点上。一个3×3的行列结构可以构成一个有9个按键的键盘。同理,一个4×4的行列结构可以构成一个16键的键盘,很明显,在按键数量较多的场合,矩阵式键盘与独立式键盘相比,要节省很多的I/O口线。按键设置在行列线交点上,行列线分别接到按键开关两端。行线通过上拉电阻接到+5V上。平时无按键按下时,行线处于高电平状态,而当有按键按下时,行线电平状态将由于此行线相连的列线电平决定。列线电平如果为低电平,则行线电平为低电平,列线电平如果为高电平,则行线电平为高电平。这是识别矩阵键盘按键是否按下的关键所在。由于矩阵键盘中行列线为多键公用,各按键均影响该键所在行列的电平。因此各按键彼此将相互发生影响,所以必须将行列信号配合起来比做适当的处理,才能确定闭合键的位置。
2.5.2    独立式按键接口
独立式按键就是各按键相互独立,每个按键各接入一根输入线,一根输入线上的按键工作状态不会影响其他输入线上的工作状态。因此,通过检测输入线的电平状态可以很容易判断哪个按键按下了。独立式按键电路配置灵活,软件简单。但每个按键需要占用一个输入口线,在按键数量较多时,需要较多的输入口线且电路结构复杂,故此种键盘适用于按键较少或操作速度较高的场合。
由于此系统中共有启动两条生产线的“启动1”键和“启动2”键、分秒选择键、时间设置加、时间设置减、显示生产线状态的切换键,时间设置键、时间切换键。只有这8个键,比较简单。所以就采用独立式按键接口电路。

第三章  自动加料机主电路
   主电路采用AT89C51,由于AT89C51内含4KB容量,因此在设计中不需要外扩ROM。硬件电路主要有LED显示电路、键盘接受电路、继电器控制电路、EEPROM外部存储器扩展电路,以及看门狗MAX813L等组成。
3.1 系统结构原理图
主电路采用AT89C51,由于AT89C51内含4KB容量,因此在设计中不需要外扩ROM。硬件电路主要有LED显示电路、键盘接受电路、继电器控制电路、EEPROM外部存储器扩展电路,以及看门狗MAX813L等组成。电路原理框图
如图所示:

3.2  主机电路核心器件介绍
AT89C51是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,片内含4K bytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机存取数据存储器(ROM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元。功能强大AT89C51单片机可提供许多高性价比的应用场合,可灵活应用于各种控制领域。






      • AT89C51主要性能参数
.与MCS-51产品指令系统完全兼容
.4K字节可重擦写Flash闪速存储器
.1000次擦写周期
.全静态操作:0Hz---24MHz
.三级加密程序存储器
.128×8字节内部RAM
.32个可编程I/O 口线
.2个16位定时/计数器
.6个中断源
.可编程串行UART通道
.低功率空闲和掉电模式
3.2.2  AT89C51 功能特性概述
AT89C51提供以下标准功能:4K字节Flash闪速存储器,128字节内部RAM,32个I/0 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可将至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其他所有部件工作直到下一个硬件复位。






      •   AT89C51 引脚功能说明

.Vcc:电源电压
.GND:地
.P0口:P0口是一组8位漏极开路型双向I/O,也即地址/数据总线复用口作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在Flash编程时,P0接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
.P1口:P1口是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉倒高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
Flash编程和程序校验期间,P1接收低8位地址。
.P2口:P2口是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVE @DPTR指令)时。P2口送出高8位地址数据。在访问8位地址的外部数据存储器(例如执行MOVX @RI指令)时,P2口线上的内容(也即特殊功能寄存器(SFR)区总R2寄存器的内容),在整个访问期间不改变。
Flash编程或校验时,P2亦接收高位地址和其他控制信号。
.P3口:P3口是一组带有内部上拉电阻的8位双向I/O口,P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如下表所示:
端 口 引 脚
      第  二  功  能
P3.0
RXD  (串行输入口)
P3.1
TXD  (串行输出口)
P3.2
(外中断0)
P3,3
(外中断1)
P3.4
T0    (定时/计数器0)
P3.5
T1    (定时/计数器1)
P3.6
   (外部数据存储器写选通)
P3.7
    (外部数据存储器读选通)

P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。
.RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将单片机复位。
.ALE/当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器。ALE仍一时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。但要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。
对Flash存储器编程期间,该引脚还用于输入编程脉冲()。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令ALE才会被激活,此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。
.程序存储允许()输出是外部程序存储器的读选通信号,当AT89C51由外部程序存储器取指令(或数据)时,每个机器周期两次有效,即输出两个脉冲,在此期间,当访问外部数据存储器,这两次有效的信号不出现。
.EA/VPP:外部访问允许,欲使              CPU仅访问外部程序存储器(地址为0000H--FFFFH),EA端必须保持低电平(接地)。需要注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。
如EA端为高电平(接Vcc端),CPU则执行内部会锁存EA端状态。
Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。
.XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。
.XTAL2:振荡器3放大器的输出端。






      • 时钟振荡器
AT89C51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL和XTAL2分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,振荡电路如图:

外接石英晶体(或陶瓷振荡器)及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。对外接电容C1、C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低,振荡器工作的稳定性,起振的难易程序及温度稳定性,如果使用石英晶体,则推荐电容使用30pF10pF,而如使用陶瓷振荡器建议选择40pF10F。
用户也可以采用外部时钟,采用时钟的电路如图。在这种情况下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。
由于外部时钟信号是通过一个2分钟触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。






      •   空闲节电模式
    AT89C51有两种可用软件编程的省电模式,它们是空闲模式和掉点工作模式。这两种方式是控制专用寄存器PCON(即电源控制寄存器)中的PD(PCON.1)和IDL(PCON.0)位来实现的。PD是掉电模式,当PD=1时,激活掉电工作模式,单片机模式,即PD和IOL同时为1,则先激活掉电模式。
在空闲工作模式状态,CPU保持睡眠状态而所有片内的外设保持激活状态,这种方式由软件产生。此时,片内RAM和所有特殊功能寄存器的内容保持不变。空闲模式可由任何允许的中断请求或硬件复位终止。
终止空闲工作模式的方法有两种,其一是任何一条被允许中断的事件被激活,IDL(PCON.0)被硬件清除,即刻终止空闲工作模式。程序会首先响应中断,进入中断服务程序,执行完中断服务程序并紧随RETI(中断返回)指令后,下一条要执行的指令就是使单片机进入空闲模式那条指令后面的一条指令。
其二是通过硬件复位也可将空闲工作模式终止。需要注意的是,当有硬件复位来终止空闲工作模式时,CPU通常是从激活空闲模式那条指令的下一条指令开始继续执行程序的,要完成内部复位操作,硬件复位脉冲要保持两个机器周期(24个时钟周期)有效,在这种情况下,内部禁止CPU访问片内RAM,而允许访问其它端口。为了避免可能对端口产生意外写入,激活空闲模式的那条指令后一条指令不应是一条对端口或外部存储器的写入指令。






      • 掉电模式
在掉点模式下,振荡器停止工作,进入掉电模式的指令是最后一条被执行的指令,片内RAM和特殊功能寄存器的内容在终止掉电模式前被冻结。退出掉电模式的唯一方法是硬件复位,复位后将重新定义全部特殊功能寄存器但不改变RAM中的内容,在VCC恢复到正常电平前,复位应无效,且必须保持一定时间以使振荡器重启动并稳定工作。
模式
程序存储器
ALE
/PSEN
P0
P1
P2
P3
空闲模式
   内部
  1
1
数据
数据
数据
数据
空闲模式
   外部
  1
1
浮空
数据
地址
数据
掉电模式
   内部
0
0
数据
数据
数据
数据
掉电模式
   外部
  0
0
浮空
数据
数据
数据
  空闲和掉电模式外部引脚状态

3.2.7    程序存储器的加密
AT89C51可使用对芯片上的3个加密位LB1、LB2、LB3进行编程(P)或不编程(U)来得到下表所示的功能:
加密位保护功能表
                        程序加密位
保护类型

LB1
LB2
LB3
1
U
U
U
没有程序保护功能

2

P

U

U
禁止从外部程序存储器中执行MOVC指令读取内部程序存储器的内容
3
P
P
U
除上表功能外,还禁止程序校验
4
P
P
P
除以上功能外,同时禁止外部执行
当加密位LB1被编程时,在复位期间,EA端的逻辑电平被采样并锁存,如果单片机上电后一直没有复位,则锁存起的初始值是一个随机数,且这个随机数会一直保存到真正复位为止,为使单片机能正常工作,被锁存的EA电平必须与该引脚当前的逻辑电平一致。此外,加密位只能通过整片擦除的方法清除。
Flash闪速存储器的编程
AT89C51单片机内部有4K字节的Flash              PEROM,这个Flash存储阵列出厂时已处于擦除状态(即所有存储单元的内容均为FFH),用户随时可对其进行编程。编程接口可接收高电压(+12V)或低电压(Vcc)的允许编程信号。低电压编程模式适合于用户在线编程系统,而高电压编程模式可与通用EPROM编程器兼容。
AT89C51单片机中,有些属于低电压编程方式,而有些则是高电压编程方式。用户可从芯片上的型号和读取芯片内的签名字节获得该信息。如图

Vpp=12V
Vpp=5V

芯片顶面标识
AT89C51
xxxx
yyww
AT89C51
xxxx—5
yyww

签名字节
(030H)=1EH
(031H)=51H
(032H)=FFH
(030H)=1EH
(031H)=51H
(032H)=05H
AT89C51的程序存储器列阵采用字节写入方式编程的,每次写入一个字节,要对整个芯片内的PEROM程序存储器写入一个非空字节,必须使用擦除的方式将整个存储器的内容清楚。






      • 编程方法
编程前,先设置好地址,数据及控制信号,编程单元的地址加在P1口和P2口的P2.0—P2.3(11位地址范围为0000H—0FFFH),数据从P0口输入,引脚P2.6、P2.7和P3.6、P3.7的电平,PSEN为低电平,RST保持高电平,EA/Vpp引脚是编程电源的输入端,按要求加上编程电压,ALE/PROG引脚输入编程脉冲(负脉冲)。编程时,可采用4—20MHz的时钟振荡器,AT89C51编程方法如下:
  • 在地址线上加上要编程单元的地址信号。
  • 在数据线上加上要写入的数据字节。
  • 激活相应的控制信号。
  • 在高电压编程方式时,将/EA/Vpp端加上+12V编程电压。
  • 每对Flash存储阵列写入一个字节或每写入一个程序加密位,加上一个ALE/PROG编程脉冲。
改变编程单元的地址和写入的数据,重复1—5步骤,直到全部文件编程结束。
每个字节写入周期是自身定时的,通常约为1.5ms







      •   数据查询
AT89C51单片机用数据查询方式来检测一个写周期是否结束,在一个写周期中,如需读取最后写入的那个字节,则读出的数据的最高位(P0.7)是原来写入字节最高的反码,写周期完成后,有效的数据就会出现在所有输出端上,此时,可进入下一个字节的写周期,写周期开始后,可在任意时刻进行数据查询。
Ready/Busy:字节编程的进度可通过RDY/BSY输出信号监测,编程期间,ALE变成高电平“H”后P3.4端电平被拉低,表示正在编程状态。编程完成后。P3.4变为高电平表示准备就绪状态。
3.2.11     程序校验及芯片擦除
如果加密位LB1、LB2没有进行编程,则代码数据可通过地址和数据线读回原编写的数据。采用下图电路。程序存储器的地址由P1和P2口的P2.0-P2.3输入,数据有P0口读出,P2.6、P2.7和P3.6、P3.7的控制信号保持低电平,ALE、和RST保持高电平。校验时P0口须接上10K左右的上拉电阻。
加密位不可直接校验,加密位的校验可通过对存储器的校验和写入状态来验证。
利用控制信号的正确组合并保持ALE/引脚10ms的低电平脉冲宽度即可将PEROM阵列(4k字节)和三个加密位整片擦除,代码阵列在片擦除操作中将任何非空单元写入“1”,这步骤需再编程之前进行。
3.2.12    读片内签名字节及编程接口
AT89C51单片机内有3个签名字节,地址为030H、031H和032H。用于声明该器件的厂商、型号和编程电压。读签名字节的过程和单元030H、031H和032H的正常校验相仿,只需将P3.6、P3.7保持低电平,返回值意义如下:
  (030H)=1EH 声明产品由ATMEL公式制造。
  (031H)=51H 声明为AT89C51单片机。
(032H)=FFH 声明为12V编程电压。
(032H)=05H 声明为5V编程电压。
编程接口:采用控制信号的正确组合可对Flash闪速存储阵裂中的每一代码字节进行写入和存储器的整片擦除,写操作周期是自身定时的,初始化后它将自动定时到操作完成。
3.2.13   AT89C51的极限参数:
极限参数:工作温度………………-55℃to+125℃
          储藏温度………………-65℃to+150℃
          任一引脚对地电压………-1.0Vto+7.0V
          最高工作电压………………………6.6V
        直流输出电流……………………15.0mA

3.3  显示电路
在单片机应用系统中,如果需要显示的内容只有数码和某些字母,使用LED数码管是一种较好的选择。LED数码管显示清晰、成本低廉、配置灵活,与单片机接口简单易行。LED数码管是由发光二极管作为显示字段的数码型显示器件,其中七只发光二极管分别对应a~g笔端构成“日”字形,另一只发光二极管Dp作为小数点。因此这种LED显示器称为七段数码管或八段数码管。如图所示:

LED数码管按电路中的连接方式可分为共阴型和共阳型两大类,共阳型是将各段发光二极管的正极连在一起,作为公共端COM,公共端COM接高电平,a~g、Dp各笔段通过限流电阻接控制端。某笔段控制端低电平时,该笔段发光,高电平时不发光。控制某几段笔端发光,就能显示出某个数码或字符。共阴型是将各段发光二极管的负极连在一起,作为公共端COM接地,某笔段通过限流电阻接高电平时发光。
在自动加料机控制系统中运行是要显示输送、排料、满料、空料时间,有时间切换键和标志哪条生产线的发光二极管表示,显示的位数少,所以就采用静态显示的方式。LED显示器工作于静态显示方式时,各位的共阴极(或共阳极)连接在一起并接地(或+5V);每位的段选线(a~dp)分别与一个8位的锁存器输出相连。所以称为静态显示。各个LED的显示字符一经确定,相应锁存器的输出将维持不变,直到显示另一个字符为止。也正因此如此,静态显示器的亮度都较高。这种显示方式接口编程容易。若用I/O接口,则要占用4个8位I/O口,若用锁存器接口,则要用4片74LS373芯片。如果显示器位数增多,则静态显示方式便无法适应。
在设计中,LED显示电路采用74LS377驱动器和MC14511B译码器控制LED数码管。

3.3.1  74LS377芯片介绍


.D0~D7:8个信号输入端。
.Q0~Q7:8个信号输出端。
.CLK:时钟信号输入端。
.锁存允许信号。当=0时,CLK端的上跳变将把8位D输入端的数据打入8位锁存器。
74LS377真值表
CLK
D
Q
1
X
X
Q0
0
1
1
0
0
0
X
0
X
Q0







      •   MC14511B芯片介绍


.A~D:四个信号输入端。
.a~g:七个信号输出端。
.LT、BI:接地。
.LE:接电源。






      • LED接口电路
   LED显示电路采用74LS377驱动器和MC14511B译码器控制LED数码管。两个LED显示一条生产线一个工作过程的秒数。两片MC14511B把P0口的高四位和低四位译码成十进制控制LED显示。电路图如下:

3.4   继电器控制电路
在电气控制领域或产品中,凡是需要逻辑控制的场合,几乎都需要使用继电器,从家用电器到工农业应用,甚至国民经济各个部门,可谓无所不见。继电器是一种利用各种物理量的变化,将电量或非电量信号转化为电磁力(有触头式)或使输出状态发生阶跃变化(无触头式),从而通过其触头或突变量促使在同一电路或另一电路中的其它器件或装置动作的一种控制元件。根据转化的物理量的不同,可以构成各种各样的不同功能的继电器,以用于各种控制电路中进行信号传递、放大、转换、联锁等,从而控制主电路和辅助电路中的器件或设备按预定的动作程序进行工作,实现自动控制和保护的目的。被转化或施加于继电器的电量或非电量称为继电器的激励量,当继电器被激励,从一个起始位置达到预定的工作位置,并完成电路的切换动作,称为继电器的工作特性,包括吸合。不吸合,保持与释放状态。当输入量变化到高于它的吸合值或低于它的释放值时,继电器动作,对于有触头式继电器其触头闭合或断开,对于无触头式继电器起输出发生阶跃变化,以此提供一定的逻辑变量。
自动加料机是把塑料粒子送到一个真空管,在输送时真空管关闭合,排料时真空管需要打开,将粒子送到排料漏斗。本设计共需2个继电器控制交流接触器,一个接带动生产的电动机。另一个为控制工作方向的方向阀。经考虑采用4123无极12V直流控制24V的交流继电器,并利用光耦合器件P521和MCU隔开。89C51的P1初始值为0FFH,所以加一个74LS04反相器使得继电器初始不产生闭合,使用MC1413为无源驱动器,IN4007组成继电器的续流二极管。
电路图如下:

3.5   键盘及显示电路
键盘在单片机应用系统中能实现向单片机输入数据、传送命令等功能,是人工干扰单片机的主要手段本设计采用8255A为I/O扩展。
3.5.1   键盘接口
非编码键盘与单片机的接口单片机系统所用的键盘有编码键盘和非编码键盘两种。
编码键盘本身除了按键之外,还包括产生键码的硬件电路,只要按下某一个键,就能产生这个键的代码,一般称为键码,同时,还能产生一个脉冲信号,以通知CPU接收(输入)键码。这种键盘的使用比较方便,亦不需要编写很多程序,但使用的硬件较复杂,在微型计算机控制系统中使用还不多。
非编码键盘是由一些按键排列成的一个行列矩阵。按键的作用,只是简单地实现接点的接通和断开,但必须有一套相应的程序与之配合,才能产生出相应的键码。非编码键盘几乎不需要附加什么硬件电路,目前,在微型计算机控制系统中使用比较普遍。
使用非编码键需要用软件来解决按键的识别,防止抖动以及键码的产生等工作。
设有一个6行×5列的非编码键盘,其中有16个为数字键0~F,其余的为控制键,用以发布各种控制命令。键盘的行线接8155C口的六条线PC5~PC0,键盘的列线则接8155B口的5条线。在没有任何键按下时,所有键盘列线上的信号都是高电平。当有按键按下时,就会出现键的识别、防止抖动以及确定键码等一系列问题。
按键识别有各种方法,此系统只 “行扫描”法:
(1)确定是否有按键按下。CPU通过并行口输出000000到键盘的行线,然后检测键盘的列线信号。若没有键按下,则为11111。若有任一个按键按下,则有某一条列线为0,也就是当PB4~PB0不为11111时,就表示有键按下。
(2)通过“行扫描”确定已按键的行、列位置。所谓行扫描就是依次给每条行线输入0信号,而其余各行都输入1,并检测每次扫描时所对应的列信号。在图2中就是在C口先输出111110(PC5~PC0),然后是111101,直到最后是011111,并检测每次所对应的B口输入。
只有在某行上有键按下时,在这一行上输入0(其他行为1),在列输出上才能检测到0信号。若是输入为0的这一行上没有按键按下,则收到的列信号仍然全是1。因此,只要记下列信号不全为1时的C口输出及B口输入,就能确定以按键的位置。设图2中处于第3行第1列的键已按下,则必须是行输出信号为110111,检测到的列信号为11101。对应于其他的行信号,列信号都是11111。这样,通过行扫描,就可以确定按键的行、列坐标。
(3)确定是否有多键同时按下。有时一次按下的键不止一个,这在一般情况下是由于误操作引起的,是不应该出现的通常称为窜键。出现这种情况时,就可能有不止一次会得到列信号不为全1,这时就不容易判断哪个键是真正需要按下的。为了处理这种情况可采取两种办法:一是行扫描一定是扫到最后一行才结束,而不是检测到列信号不为全1时就结束,以便发现窜键;二是如果出现了窜键,最简单的处理办法就是这次行扫描不算,再来一遍,即以最后放开的那个键为准。实际上,由于扫描的速度很快,真正找到两个键同时按下的情况是很少的。
(4)消除键抖动。一般按键在按下的时候有抖动的问题,即键的簧片在按下时会有轻微的弹跳,需经过一个短暂的时间才会可靠地接触。若在簧片抖动时进行扫描就可能得出不正确的结果。因此,在程序中要考虑防抖动的问题。最简单的办法是在检测到有键按下时,等待(延迟)一段时间再进行“行扫描”,延迟时间为10~20ms。这可通过调用子程序来解决,当系统中有显示子程序时,调用几次显示子程序也能同时达到消除抖动的目的。
3.5.2  8255A芯片介绍
自动加料系统有8个按键:启动两条生产线的“启动1”键和“启动2”键、分秒选择键、时间设置加/减键、显示生产线状态切换键,时间设置键,时间切换键,由于单片机的并行口有限。本系统采用8255A扩展并行口。
(1).8255A的内部结构
8255A的内部结构有以下几部分组成:
a.并行I/O端口A、B、C 8255A的内部有3个8位并行I/O口:A口、B口、C口。3个I/O口都可以通过编程选择为输入口或输出口,但在结构和功能上有所不同。
A口:含有一个8位数据输出锁存/缓冲器和一个8位输入锁存器。
B口:含有一个8位数据输出锁存/缓冲器和一个8位输入锁存器(不锁存)。
C口:含有一个8位数据输出锁存/缓冲器和一个8位输入锁存器(不锁存)。
当数据传送不需要联络信号时,这3个端口都可以用作输入口或输出口。当A口B口需要有联络信号时,C口可以作为A口和B口的联络信号线。
b.工作方式控制电路:8255A的三个端口在使用使可分为A、B两组。A组包括A口8位和C口高4位:B组包括B口8位和C口低4位。两组的控制电路中分别有控制寄存器,根据写入的控制字决定两组的工作方式,也可对C口每一位置“1” 或清“0”。
c.数据总线缓冲器:数据总线缓冲器是三态双向的8位缓冲器,是8255A与单片机数据总线的接口,8255A的D0~D7可以和AT89C51单片机的P0.0~P0.7直接相连。数据的输入输出、控制字和状态信息的传递,均可通过数据总线缓冲器进行。
d.读/写控制逻辑:8255A读/写控制逻辑的作用是从CPU的地址和控制总线上接受有关信号,转变成各种控制命令送到数据缓冲器及A组和B组的控制电路,控制A、B、C3个端口的操作。
3.5.3   8255A引脚功能

8255A共有40个引脚,一般为双列直插DIP封装,40个引脚可分为与CPU连接的数据线、地址和控制信号以及与外围设备连接的三个端口线。
.D0~D7:双向三态数据总线。
.RESET:复位信号,输入,高电平有效。复位后,控制寄存器清0,A口、B口、C口被置为输入方式。
.:片选信号,输入,低电平有效。
.:读信号,输入,低电平有效。有效时,允许CPU通过8255A D0~D7读取数据或状态信息。
.:写信号,输入,低电平有效。有效时,允许
.A1A0:端口控制信号,输入。2位可构成四种状态,分别寻址A口、B口、C口和控制寄存器
.PA0~PA7:A口数据线,双向。
.PB0~PB7:B口数据线,双向。
.PC0~PC7:C口数据/信号线,双向。当8255A工作于方式0时,PC0~PC7分为两组(每组4位)并行I/O数据线;当8255A工作于方式1或方式2时,PC0~PC7为A口、B口提供联络信号。
   A1A0与 信号一起,可确定8255A的操作状态,如图所示:
8255A功能操作
A1
A0
操    作
0
0
1
0
1
0
0
0
0
1
1
1
0
0
0
A口→数据总线
B口→数据总线
C口→数据总线

输入操作
0
0
1
1
0
1
0
1
1
1
1
1
0
0
0
0
0
0
0
0
数据总线→A口
数据总线→B口
数据总线→C口
数据总线→控制口

输出操作
x
1
x
x
1
x
X
0
1
x
1
1
1
0
0
数据总线为高阻态
非法状态
数据总线为高阻态

禁止操作
   8255A与AT89C51接口电路。
在连接键盘电路采用8255A为扩展I/O口时,要在中间加入一个74LS373,74LS373是一个三态门的8D锁存器,它可以作为AT89C51外部的一个扩展输入口,借口电路的工作原理是当外设把数据准备好后,发出一个控制信号加到373的G端,即锁存端,使输入数据在373中锁存,同时信号加到AT89C51单片机的中断请求端,单片机响应中断,在中断服务程序中执行下面程序:
   MOV  DPTR,#0BFFFH
   MOVX  A,@DPTR
在执行上面的第二条指令时,P2.6=0,有效,通过或门后加到373的端,即373的三态门控制端,使三态门畅通,锁存的数据读入到累加器A中。
电路如图所示:


3.6   外部存储器扩展电路
自动加料机存在两条生产线的输送、排料、满料、空料,共8个设置的重要数据需要读/写,并且能够提供掉点保护,所以就需要外阔程序存储器。程序存储器一般采用自读存储器,因为这种存储器在电源关断后,仍能保存程序,在系统上电后,CPU可取出这些指令予以重新执行。只读存储器简称ROM。ROM中的信息一旦写入之后,就不能随意更改,特别是不能在程序运行的过程中写入新的内容,故称之为只读存储器。
向ROM中写入信息叫做ROM编程。根据编程的方式不同,ROM分为以下几种:
(1)掩膜ROM是在制造过程中编程。因编程是以掩膜工艺实现的,因此称为掩膜ROM。这种芯片存储结构简单,集成度高,但由于掩膜工艺由于成本较高,因此只适合于大批量生产。
(2)可编程ROM(PROM)
PROM芯片出厂是并没有任何程序信息,是由用户用独立的编程器写入的,但PROM只能写入一次,写入内容后,就不能在进行修改。
(3)EPROM
EPROM是用电信号编程,用紫外线擦除的只读存储器芯片。在芯片外壳上的中间位置有一个圆形窗口,通过这个窗口照射紫外线射就可擦除原有的信息。
(4)E2PROM
这是一种用电信号编程,也用电信号擦除的ROM芯片,对E2PROM的读写操作与RAM存储器几乎没有什么差别,只是写入的速度慢一些,但断电后能够保存信息。
此设计采用外扩E2PROM的扩展方式。E2PROM是电擦除可编程自读存储器,其突出优点是能够在线擦除和改写,无须像ERPOM那样必须用紫外线照射才能擦彻,较新的E2PROM产品在写入时能自动完成擦除,且不再需要专用的编程电源,可以直接使用单片机系统的+5V电源。
常用的E2PROM芯片有2816/1816A,2817/2817A,2864A。本设计采用的是用2864A的扩展方式。
2864A有四种工作方式:
  • 维持方式
为高电平时,2864A进入低耗维持方式。此时,输出线呈高阻态,芯片的电流从140mA降至维持电流60mA。
  • 读方式
均为低电平而为高电平时,内部的数据缓冲器被打开,数据送上总线,此时,可进行读操作。
  • 写方式
   2864A提供了两种数据 方式:字节写入和页写入
页写入:2864A片内设置了16字节的“页缓冲器”,并将整个存储器阵列划分成512页,每页16个字节。页的区分可由地址的高9位来确定,地址线的低4位用以选择页缓冲器中的16个地址单元之一。写方式时,为低电平,在下降沿,地址码A0~A12被片内锁存器锁存,在上升时数据被锁存。片内还有一个字节装载限时定时器,只要时间未到,数据可以随机地写入页缓冲器。在连续向页缓冲器写入数据的过程中,不用担心限时定时器会益处,因为每当下降沿时,限时定时器自动被复位并重新启动计时。
字节写入:字节写入的过程与页写入的过程类似,不同之处是仅写入一个字节,限时定时器就溢出。
  • 数据查询方式
数据查询是指用软件来检测写操作中的页存储周期是否完成。
在页存储期间,如对2864A执行读操作,那么读出的是最后写入的字节,若芯片的转储工作未完成,则读出数据的最高位是原来写入字节最高位的反码。据此,CPU可判断 的编程是否结束。如果读出的数据与写入的数据相同,表示芯片已完成编程,CPU可继续向2864A装载下一页数据。
    2864A与单片机接口时,2864A的片选端与高地址线P2.7连接,P2.7=0才能选中2864A,这种线选法决定了2864A对应多组地址空间,即:0000H~1FFFFH,2000H~3FFFH,4000H~5FFFH,6000H~7FFFH。这8K字节存储器可作为数据存储器使用,但掉电后数据不丢失。2864A与AT89C51接口电路如图:单片机由于受引脚数的限制,数据线和地址线是复用的,由P0口兼用。为了将它们分离出来,以便同单片机片外的扩展芯片正确的连接,需要在单片机外部增加地址锁存器。我们这本设计中使用74LS373。74LS373是一种带有三态门的8D锁存器,其引脚如图所示

图 3.6.1 锁存器74LS373的引脚
其引脚的功能如下:
D7~D0:8位数据输入线
Q7~Q0:8位数据输出线
G:数据输入锁存选通信号,高电平有效。当该信号为高电平的时候,外部数据选通到内部锁存器,负跳变时,数据锁存到锁存器中。
:数据输出允许信号,低电平有效。当该信号为低电平的时候,三态门打开,锁存器中数据输出到数据输出线。当该信号为高电平的时候,输出线为高阻态。
74LS373的功能表见表

G
D
Q
0
1
1
1
0
1
0
0
0
0
×
不变
1
×
×
高阻态

连接电路图:


3.7   看门狗MAX813L电路
几乎所有的单片机都需要复位电路,对复位电路的基本要求是:在单片机上电时能可靠复位,在下电时能防止程序乱飞导致EPROM中的数据被修改;另外,单片机系统在工作时,由于干扰等各种因素的影响,有可能出现死机现象导致单片机系统无法正常工作,为了克服这一现象,除了充分利用单片机本身的看门狗定时器(有些单片机无看门狗定时器)外,还需外加看门狗电路;除此以外,有些单片机系统还要求在掉电瞬间单片机能将重要数据保存下来,因掉电的发生往往是根随机的,因而此类单片机系统需要电源监控电路,在掉电刚发生时能告知单片机。MAXIM公司推出的MAX813L刚好能满足这些要求,下面具体介绍该芯片的性能特点及使用方法。   

MAX813L有双列直插和贴片两种封装形式,其双列直插如图所示,引脚功能如下:   
第①脚为手动复位输入,低电平有效;第②、②脚分别为电源和地;第④脚为电源故障输入;第⑤脚为电源故障输出;第⑥脚为看门狗输入,第⑦脚为复位输出,第⑧脚为看门狗输出。   
MAX813L的性能特点:

MAX813L的内部结构框图如图所示,具有以下主要性能特点:由图可知该芯片具有以下主要性能特点:
(1)复位输出。系统上电、掉电以及供电电压降低时,第⑦脚产生复位输出,复位脉冲宽度的典型值为200ms,高电平有效,复位门限的典型值为4.65V。
(2)看门狗电路输出。如果在1.6s内没有触发该电路(即第⑥脚无脉冲输入),则第⑧脚输出一个低电平信号。   
(3)手动复位输入,低电平有效,即第①脚输入一个低电平,则第⑦脚产生复位输出。   
(4)1.25V门限值检测器,第④脚为输入,第⑤脚为输出。当第④脚电压低于1.25V时,第⑤脚输出一个低电平信号。   

MAX813L的典型应用电路:

MAX813L的典型应用电路如图所示。图中单片机以AT89C51为例,MAX813L的第①脚与第⑧脚相连。第⑦脚接单片机的复位脚(AT89C51的第⑨脚);第⑥脚与单片机的P1.4相连。在软件设计中,P1.4不断输出脉冲信号,如果因某种原因单片机进入死循环,则P 1.4无脉冲输出。于是1.6s后在MAX813L的第⑧脚输出低电平,该低电平加到第①脚,使MAX813L产生复位输出,使单片机有效复位,摆脱死循环的困境。另外,当电源电压低于门限值4.65V时,MAX813L也产生复位输出,使单片机处于复位状态,不执行任何指令,直至电源电压恢复正常,可有效防止因电源电压较低时单片机产生错误的动作。   

电源故障输入PFI通过一个电阻分压器监测未稳压的直流电源。当PFI低于1.25V时,电源故障输出脚第⑤脚PF0变低,可引起AT89C51中断,进行电源故障处理,或将重要数据保存下来。把分压器接到未稳压的直流电源是为了更早地对电源故障告警。


MAX813L是一体积小、功耗低、性价比高的带看门狗和电源监控功能的复位芯片;它使用简单、方便,它所提供的复位信号为高电平,因而是应用于复位信号为高电平场合的单片机系统的理想芯片。
3.8   料位开关
在料体进入料斗式干燥机后,要能检测到什么时候到达满料状态,所以就选用简单的阻力式传感器,阻力式料位传感器是指物料对机械运动所呈现的阻挡力。粉末颗粒状物料比液态物质流动性差,对运动物体有明显的阻力,利用这一特点可构成各种料位传感器。
采用音叉法,音叉法:根据物料对振动中的音叉有无阻力探知料位是否到达或超过某高度,并发出通断信号,这种原理不需要大幅度的机械运动,驱动功率小,机械结构简单、灵敏而可靠。
音叉由弹性良好的金属制成,本身具有确定的固有频率,如外加交变力的频率与其固有频率一致,则叉体处于共振状态。由于周围空气对振动的阻尼微弱,金属内部的能量损耗又很少,所以只需微小的驱动功率就能维持较强的振动。当粉粒体物料触及叉体之后,能量消耗在物料颗粒间的摩擦上,迫使振幅急剧衰减,音叉停振。
为了给音叉提供交变的驱动力,利用放大电路对压电元件施加交变电场,靠逆压电效应产生机械力作用在叉体上。用另外一组压电元件的正压电效应检测振动,它把振动力 为微弱的交变电信号。再由电子放大器和移相电路,把检振元件的信号放大。经过移相,施加到驱动元件上去,构成闭环振荡器。在这个闭环中,既有机械能也有电能,叉体是其中的一个环节,倘若受到物料阻尼难以振动,正反馈的幅值和相位都将明显的改变,破坏了振荡条件,就会停振。只要在放大电路的输出端接以适当的器件,不难得到开关信号。
为了保护压电元件免受物料损坏和粉尘污染,将驱动和检振元件装在叉体内部,经过金属膜片传递振动。如果在容器的上下方都装叉体,可以实现自动进料或自动出料的逻辑控制,或者把料位越限信号远传到控制室。在控制室里的控制电路判断料位是否越限,并按要求使被控的进出料设备启停。
并且叉体的制造和装配良好时,音叉也可用于液体测量和控制。在测量时不需要大幅度的机械运动,驱动功率小,机械结构简单、灵敏而可靠。
系统采用LD-YC/YG 型 音叉式物位限位开关


LD-YC/YG型音叉式物位限位开关作为一种新型的物位传感器,具有安装简单,不用标定,搅动、气泡对测量无影响等优点。在未来工业过程中将全面取代如浮球液位开关等落后的检测方式广泛应用于各行各业。
原理
传感器安装于仓的顶部或仓的侧壁上。音叉由压电晶体驱动产生振动,当叉体被液体浸没或被物料埋没时振动频率发生变化。这个变化由电子电路检出并输出一个开关量用于报警或控制。
适用范围
中等粘度、腐蚀性液体。流动性好的粉状物料和颗粒状物料。
禁用范围
高温、高粘度液体。高温、易结垢固体、块状物料。
主要技术指标
[YC 部分]
供电电压:直流 24V 或 10-55V (防爆型用 DC 24V)
交流 25-250V 50Hz
工作温度:叉体 -40-80℃ 仪表 -20-45℃
输出方式:
直流24V 供电时为继电器输出(AC 220V 1A)
直流10-55V 供电时为集电极开路输出(350mA
防爆型产品≤50mA)
交流25-250V 供电时为两线制输出(220V
4.4W-77W)
功 耗:直流供电时 0.25W(DC 24V)
交流供电时 1.5W(AC 220V)
安装方式:G1 管螺纹
防爆标志:本安 iaⅡBT4 隔爆型 dⅡBT4
[YG 部分]
供电电压:直流 24V 或 18-55V
交流50-250V 50Hz
工作温度:叉体 -40-150℃ 仪表 -20-70℃
输出方式:
直流24V 供电时为继电器输出(AC 220V 1A)
直流18-55V 供电时为集电极开路输出
(350mA)
交流50-250V 供电时为两线输出(220V
350mA 防爆型产品≤50mA)
功 耗:直流供电时 0.25W(DC 24V)
交流供电时 1.5W(AC 220V)
安装方式:G1.5 管螺纹

第四章  系统的抗干扰及可靠性
单片机系统供电线路是干扰的主要来源,电源采用隔离变压器接入电网,隔离变压器在初级和次级之间加了一层屏蔽层。交流接触器是继电器控制的,在紧靠交流接触器的输入端口并上一个电阻和电容串联的电路滤去高次谐波。每个集成电路芯片的电源和地之间要并上0.1F的陶瓷电容。在输入输出通道上要加光藕P521。除了在继电器通道上外,两个满料信号也要经过P521光藕才送至 INT0、INT1。另外,数字地和模拟地要分开,数字地线要粗而短。
软件抗干扰方面,本系统采用指令冗余和软件陷阱。当CPU受到干扰后,会把一些操作数当作指令码来执行,引起程序混乱。由于当PC指针飞到单字节指令上时,会自动步入正轨。因此我们在程序中人为地在 RET、RET1、LCALL、LJMP、AJMP、DJZE、JZ、CJNE等处插入一些单字节指令(NOP)。并在继电器开闭指令 SET、CLR前插入两条NOP指令。同时,当程序飞到ROM中未使用的非程序区时,非程序区要能捕获PC指针并强行拉到处理故障程序中。所以非程序区要每隔一段设置一个软件陷阱。软件陷阱
由三条指令构成:
NOP
NOP
LJMP ERROR
ERROR 处理过程放在 0030H
开始处

第五章   软件设计
   程序设计包括主程序、中断程序、故障处理程序,系统中用到了两个定时器中断:定时器0每隔1.2s使P1.7产生脉冲信号;定时器1产生1s的定时,使LED显示递减。故障处理程序使PC指针跳回到原来起动的相应程序段;主程序完成内部RAM数据区初始化、8255初始化,并根据按键信号跳转到想应程序段。


第六章  结论语
本设计是基于AT89C51的自动加料系统没有外扩ROM和RAM,程序直接放在AT89C51内部闪存中。设定数据通过串行口存入2864A中,另外,系统从硬件和软件方面采取了抗干扰措施。
但是在物体送到料斗式干燥机后没有设计如何把物体从干燥机排除来,如果考虑到这一点,那设计就更加完美了。
附录A:系统框图
     











附录B:系统硬件框图












单片机源程序如下:
  1. ORG
  2. LJMP IINT0
  3. ORG 0080H                 
  4. MAIN:MOV SP,#60H         
  5. MOV PSW,#00H
  6. MOV 71H,#14H
  7. MOV 72H,#           
  8. MOV 73H,#00H
  9. MOV 74H,#00H
  10. MOV 75H,#00H
  11. MOV 76H,#00H
  12. MOV TMOD,#01H     
  13. MOV TL0,#0B0H      
  14. MOV TH0,#3CH
  15. SETB TR0               ;,开中断
  16. SETB EA
  17. SETB ET0
  18. JMCGS:JMB P1.2,KK           
  19. NOP
  20. NOP
  21. JB P1.2,KK
  22. NOP
  23. MOV 70H,#01H
  24. KK:LJMP JMCGS                ;等待中断
  25.          ORG 0100H            ;中断服务子程序
  26. IINT0:PUSH A                   ;入栈保护
  27. PUSH PSW
  28. CLR EA                   ;关中断
  29. CLR TR0                 
  30. DJNZ 71H,ZDFH            ;不到2秒直接中断返回
  31. MOV A,70H
  32. MOV B,72H               
  33. MVL AB
  34. MOV R6,B
  35. MOV R5,A
  36. MOV R2,#02H
  37. LCALL CHUFA            
  38. MOV 73H,R5               
  39. LCALL KZCX              
  40. MOV 74H,73H            
  41. ZDFH:SETB EA                   ;开中断
  42. SETB ET0
  43. MOV TMOD,#01H           0重新赋初值
  44. MOV TL0,#0B0H
  45. MOV TH0,#3CH
  46. SETB TR0                 
  47. POP PSW                  ;出栈
  48. POP A
  49. RETI                       ;中断返回
  50. CHUFA:MOV R7,#08H
  51. CHU1:CLR C
  52. MOV A,R5
  53. RLC A
  54. MOV R5,A
  55. MOV A,R6
  56. RLC A
  57. MOV 07H,C
  58. CLR C
  59. SUBB A,R2
  60. JB 07H,CHU2
  61. JNC CHU2
  62. ADD A,R2
  63. AJMP CHU3
  64. CHU2:INC R5
  65. CHU3:MOV R6,A
  66. JNE R7,CHU1
  67. RET
  68. KZCX:MAIN A,73H            ;控制子程序
  69. CJNE A,74H,KZ2      
  70. ZJFH:RET                     ;直接返回
  71. KZ2:JC PFKZ                 
  72. CFKZ:MOV B,#03H            
  73. DIV AB
  74. MOV 75H,A
  75. CJNE A,#04H,ZJFH
  76. JC ZJFH
  77. MOV A,75H
  78. CJNE A,#0AH,CFKZ1
  79. JNC CFKZ2
  80. CFKZ1:MOV TMOD,#10H         
  81. MOV TL0,#0B0H
  82. MOV TH0,#3CH
  83. SETB TR1
  84. SETB P1.0
  85. DELAY:JNB TF1,DELAY
  86. CLR TR1
  87. CLR TF1
  88. CLR P1.0
  89. LJMP ZJFH
  90. CFKZ2:MOV R4,#02H            
  91. CFKZ3:MOV TMOD,#10H
  92. MOV TH0,#3CH
  93. SETB TR1
  94. SETB P1.0
  95. DELAY:JNB TF1,DELAY1
  96. CLR TR1
  97. CLR TF1
  98. CLR P1.0
  99. DJNZ R4,CFKZ3
  100. LJMP ZJFH
  101. PFKZ:MOV B,#03H           
  102. DIV AB
  103. MOV 76H,A
  104. CJNE A,#08H,ZJFH
  105. JC ZJFH
  106. MOV A,76H
  107. CJNE A,#0AH,PFKZ1
  108. JNC PFKZ2
  109. PFKZ1:MOV TMOD,#10H        
  110. MOV TL0,#3CH
  111. SETB TR1
  112. SETB P1.1
  113. DELAY:JNB TF1,8
  114. CLR TR1
  115. CLR TF1
  116. CLR P1.1
  117. LJMP ZJFH
  118. PFKZ2:MOV R4,#02H            
  119. PFKZ3:MOV TMOD,#10H
  120. MOV TL0,#0B0H
  121. MOV TH0,#3CH
  122. SETB TR1
  123. SETB P1.1
  124. DELAY4:JNB TF1,DELAY4
  125.         CLR TR1
  126.         CLR TF1
  127.         CLR P1.1
  128.         DJNZ R4,PFKZ3
  129.         LJMP ZJFH



  130. 存储器扩展子程序
  131. STORE:  SETB VSDA;
  132. SETB VSCL;
  133. NOP;
  134. NOP;
  135. NOP;
  136. NOP;
  137. CLR  VSDA;
  138. NOP;
  139. CLR  VSDA;
  140. NOP;
  141. NOP;
  142. NOP;
  143. NOP;
  144. CLR VSCL;
  145. RET;
  146. STOP:CLR VSDA;
  147. SETB VSCL;
  148. NOP;
  149. NOP;
  150. NOP;
  151. NOP;
  152. SETB VSDA;
  153. NOP;
  154. NOP;
  155. NOP;
  156. NOP;
  157. CLR     VSDA;
  158. CLR     VSCL;
  159. RET;
  160. MACK: CLR VSDA;
  161. SETB    VSCL;
  162. NOP;
  163. NOP;
  164. NOP;
  165. NOP;
  166. CLR     VSCL;
  167. SETB    VSDA;
  168. RET;
  169. MNACK:SETB VSDA;
  170. SETB    VSCL;
  171. NOP;
  172. NOP;
  173. NOP;
  174. NOP;
  175. CLR VSCL;
  176. CLR VSDA;
  177. RET;
  178. CACK: SETB VSDA;
  179. SETB VSCL;
  180. CLR F0;
  181. MOV C,VSDA;
  182. JNC CEND;
  183. SETB F0;
  184. CEND:CLR VSCL;
  185. RET;
  186. WRBYT: MOV R0,#08H;
  187. WLP: RLC A;
  188. JC WR1;
  189. AJMP WR0;
  190. WLP1:DJNZ R0,WLP;
  191. RET;
  192. WR1:SETB VSDA;
  193. SETB VSCL;
  194. NOP;
  195. NOP;
  196. NOP;
  197. NOP;
  198. CLR VSCL;
  199. CLR VSDA;
  200. AJMP WLP1;
  201. WR0:CLR VSDA;
  202. SETB VSCL;
  203. NOP;
  204. NOP;
  205. NOP;
  206. NOP;
  207. CLR VSCL;
  208. AJMP WLP1;
  209. RDBYT:MOV R0,#08H;
  210. RLP: SETB VSDA;
  211. SETB VSCL;
  212. MOV C,VSDA;
  213. MOV A,R2;
  214. RLC A;
  215. MOV R2,A;
  216. CLR VSCL;
  217. DJNZ R0,RLP;
  218. RET;
  219. WRNBYT:MOV R3,NUMBYT;
  220. LCALL STA;
  221. MOV  A,SLA;
  222. LCALL  WRBYT;
  223. LCALL  CACK;
  224. JB  F0,WRNBYT;
  225. MOV  R1,#MTD;
  226. WRDA:MOV A,@R1;
  227. LCALL WRBYT;
  228. LCALL CACK;
  229. JB F0,WRNBYT;
  230. INC R1;
  231. DJNZ R3,WRDA;
  232. LCALL STOP;
  233. RET;
  234. RDNBYT:MOV R3,NUMBYT;
  235. LCALL STA;
  236. MOV A,SLA;
  237. LCALL WRBYT;
  238. LCALL CACK;
  239. JB F0,RDNBYT;
  240. RDN:MOV R1,#MRD;
  241. RDN1:LCALL RDBYT;
  242. MOV @R1,A;
  243. DJNZ R3,ACK;
  244. LCALL MNACK;
  245. LCALLSTOP;
  246. RET;
  247. ACK:LCALL MACK;
  248. INC R1;
  249. SJMP RDN1;

  250. 中断服务子程序:
  251. X0S:    MOV DPTR,#2000H
  252.             MOVX @DPTR,A
  253.              SETB TR0
  254.              MOV 3AH,#20H
  255.              MOV 3BH,#00H
  256.              MOV R7,#00H
  257.            MOV R6,#04H
  258.              CLR 70H
  259. X0S0:   CLR01H
  260. X0S1:   JNB 01H,X0S1
  261.              CJNE R6,#00H,X0S0
  262.              CJNE R7,#00H,X0S0
  263.             CLR TR0
  264.              CLR EX0
  265.              SETB 00H
  266.              RETI


  267. 键盘程序:
  268. KEYI:ACALL   KS1                                          ;调用判有无键闭合子程序
  269. JNZ      LK1                                                        ;有键闭合,跳LK!
  270. NI:    ACALL  DIR                                          ;无键闭合,调用显示子程序,延时
  271. AJMP   KEYI
  272. LK1:                 ACALL  DIR                            ;可能有键闭合,延时12MS软件区
  273. ACALL  DIR
  274. ACALL  KS1                                                                      ;调用判有无子程序
  275. JNZ     LK2                                                                      ;经去消抖,判断确实有键按下跳
  276. ACALL  DIR                                                                      ;调用显示子程序延时6MS
  277. AJMP    KEYI                                                                      ;抖动引起跳KEYI去处理
  278.           LK2:  MOV   R2,#0FEH                                                        ;列选码—〉R2
  279.                 MOV    R4,#00H                                                        ;R4 为列号计数器
  280.           LK4:  MOV    DPTR,#7F01H                                          ;列选码—〉8155H
  281. MOV    A,R2
  282. MOVX  @DPTR,A
  283. INC     DPTR                                                                      ;数据指针增2,指向PC口
  284. INC     DPTR
  285. MOVX   A,@DPTR                                          ;读8155H的PC口
  286. JB      Acc.0,LONE                                          ;第0行线为高,无键闭合,跳LONE
  287. ;转判第1行
  288. MOV    A,#00H                                                        ;第0行有键闭合,首键号—〉A
  289. AJMP   LKP                                                                      ;跳LKP,计算键号
  290. LONE: JB      Acc.1,LTOW                                          ;1行线为高,无键闭合,跳LTW0
  291. ;转判断第2行
  292.                 MOV  A,#08H                                                                      ;1行有键闭合,首键号8—〉A
  293.                 AJMP  LKP                                                                      ;跳LKP ,计算键号
  294. LTW0:  JB   Acc.2,LTHR                                                        ;2行线为高,无键闭合跳LTHR
  295. ;转判;第3行
  296.                 MOV A,#10H                                                                      ;2行有键闭合,首键号10H—〉A
  297. AJMP LKP                                                                                    ;跳LKP,计算键号
  298. LTHR:  JB Acc.3,NEXT                                                                      ;3行线为高,无键闭合跳NEXT,
  299. ;准备下一列的扫描
  300.                 MOV  A,#18H                                                                      ;3行有键按下,首键号18H—>A
  301. LKP:     ADD A,R4                                          ;计算键号
  302. PUSH A                                                                                                  ;键号进栈保护
  303. LK3:  ACALL DIR                                                                      ;调用显示子程序,延时6MS
  304. ACALL DIR                                                                      ;调用判有无键闭合子程序,延时6MS
  305. JNZ LK3                                                                                    ;判键释放否,未释放,则循环
  306. POP A                                                                                                  ;键已释放,键号出栈->A
  307. RET
  308. NEXT: INC  R4                                                        ;列计数器加1,为下一列扫描做准备
  309.               MOV A,R2                                                                                    ;判是否已扫到最后一列(最右一列)
  310.               NB  Acc.7,KND                                                        ;键扫描已到最后一列,跳KND重新
  311. ;进行整个
  312. ;键盘的扫描
  313. RL     A                                                                                    ;键扫描未扫到最后一列,位选码左
  314. ;移一位
  315. MOV  R2,A                                                                      ;位选码->R2
  316. AJMP LK4
  317. KND: AJMP KEYI
  318. KS1:  MOV  DPTR ,#7F01H              ;判有无键闭合子程序,全0->扫描(PA口)
  319. MOV   A,#00H                                                        ;列线全为低电平
  320. MOVX  @DPTR,A              ;
  321. INC  DPTR                                                                      ;DPTR增2,指向PC 口
  322. INC  DPTR
  323. MOVX A,@DPTR                                                        ;从PC口读行线的状态
  324. CPL A                                                                                                  行线的状态取反,如无键按下,则A
  325. ;中内容为0
  326. ANL A,#0FH                                                                      ;屏蔽无用的高4位
  327. RET

  328. PID: MOV   R5,3 1H            ;取W
  329.                           MOV   R4,32H
  330.                           MOV   R3,#00H                                 :取Yi
  331.                           MOV   R2,2AH
  332.                           ACALL  CPL1                                    ;取Yi的补码
  333.                           ACALL  DSUM                                   ;计算ei=W-Yi
  334.                           MOV   39H,R7                                  ;存ei
  335.                           MOV   3AH,R6
  336.                           MOV   R5,35H                                               ;取I
  337. MOV   R4,36H
  338. MOV   R0,#4 AH                                ;R0放乘积高位字节地址指针
  339. ACALL  MULT1                                  ;计算Pi=I*ei
  340. MOV   R5,39H                                  :取ei
  341. MOV   R4,3AH
  342. MOV   R3,3BH                                               ;取ei-1
  343. MOV   R2,3CH
  344. ACALL  CPL1                                    ;求ei-1:的补码
  345. ACALL  DSUB                                                 ;求pp=△ei=ei-ei-1:
  346. MOV   A,R7
  347. MOV R5,A                                       :存△ei
  348. MOV    A,R6
  349. MOV    R4,A
  350. MOV    R3,4BH                                 ;取Pi
  351. MOV    R2,4AH
  352. ACALL  DSUM                                   ;求Pi+Pp
  353. MOV    4BH,R7
  354. MOV    4AH,R6                                 ;存和(Pi+即)
  355. MOV    R5,39H
  356. MOV    R4,3AH                                 ;取ei
  357. MOV    R3,3DH
  358. MOV    R2,3EH                                 ;取ei-2
  359. ACALL  DSUM                                   :计算ei=ei-2
  360. MOV    A,R7
  361. MOV    R5,A
  362. MOV    A,R6
  363. MOV    R4,A
  364. MOV    R3,  3BH
  365. MOV    R2,3CH                                 ;取ei-1
  366. ACALL  CPL1                                    :求ei-1,补码
  367. ACALL  DSUM                                   ;计算ei=ei-2-ei-1
  368. MOV    A,R7
  369. MOV    R5,A                                   ;存和
  370. MOV    A,R6
  371. MOV    R4,A
  372. MOV    R3,3BH
  373. MOV    R3,3CH                                              ;取ei-l
  374. ACALL  CPL1                                    :求ej-1补码
  375. ACALL  DSUM                                   ;计算ei=ei- 2-2e i-1、
  376. MOV    R5,37H                                 ;取D
  377. MOV    R4,38H
  378. MOV    R0,#46H
  379. ACALL  MULT1                                                ;求出Pd=D*(ei=ei-2-2ei-1)
  380. MOV    R5,47H
  381. MOV    R4,46H                                 :存Pd
  382. MOV    R3,4BH
  383. MOV    R2,4AH                                 ;取(pi+PP)
  384.                            ACALL  DSUM                                   ;计算pi+pp+pd
  385.                          MOV    R5,33H                                 ;取Kp
  386.                      MOV   R4,34H
  387.                          MOV   R0,#46H
  388.                          ACALL  MULTl                                   ;计算Kp*(Pi+Pp+Pd)
  389.                          MOV   R3,47H
  390.                          MOV    R2,46H
  391.                          MOV    R5,2FH                                 ;取ui-1
  392.                          MOV    R4,30H
  393.                          ACALL  DSUM                                    ;求出ui=ui-l+KP*(Pi+Pp +pd)
  394.                          MOV    2FH,R7                                  ;存ui~ui_,
  395.                          MOV    30H,R6
  396.                          MOV    3DH,3BH                                ;ei-l-ei-2
  397.                          MOV    3EH,3CH
  398.                          MOV    3BH,39H                                :ei-ei-1
  399.                          MOV    3CH,3AH
  400.                             RET
  401. DSUM: MOV   A,R4
  402.                                      ADD   A,R2
  403.                                      MOV   R6,A
  404.                                      MOV   A,R5
  405.                                      ADDC   A,R3
  406.                                      MOV    R7,A
  407.                                      RET
  408. CPLI: MOV    A,R2
  409.                                      CPL     A
  410.                                      ADD    A,#0lH
  411.                                      MOV    R2,A
  412.                                      MOV    A,R3
  413.                                      CPL     A
  414.                                     ADDC   A,#00H
  415.                                      MOV    R3,A
  416.                                      RET
  417. MULTI: MOV     A,R7
  418.                                     RLC     A
  419.                                      MOV     SIGN1,C                                ;存被乘数符号位
  420.                                      JNC      POS1                                    ;被乘数为正转
  421.                                      MOV     A,R6                                  ;求补
  422.                                     CPL      A
  423.                                      ADD     A,#0lH
  424.                                      MOV     R6,A
  425.                                      MOV     A,R7
  426.                                     CPL      A
  427.                                      ADDC    A,#00H
  428.                                      MOV     R7,A
  429. POSI: MOV    A,R5
  430.                                     RLC     A
  431.                                      MOV    SIGN2,C                                :存乘数符号位
  432.                                      JNC     POS2                                     ;乘数为正转
  433.                                      MOV    A,R4
  434.                                      CPL     A
  435.                                      ADD    A,#0lH
  436.                                      MOV    R4,A
  437.                                      MOV    A,R5
  438.                                      CPL     A
  439.                                      ADDC   A,#00H
  440.                                      MOV    R5,A
  441. POSZ: ACALL  MUL1,
  442.                                      MOV    C,SIGN1
  443.                                      ANL     C,SIGN2
  444.                                      JC      TPL                                       ;C=1是两个负数相乘转
  445.                                      MOV    C,SIGN1
  446.                                      ORL     C,SIGN2
  447.                                      JNC     TPL                                       ;C=0是两个正数相乘转
  448.                                     DEC    R0
  449.                                      DEC   R0
  450.                                      DEC   R0
  451.                                      MOV   A,@R0
  452.                                      CPL     A
  453.                                      ADD    A,#0lH
  454.                                     MOV    @R0,A
  455.                                      INC    R0
  456.                                      MOV     A,@RO
  457.                                      CPL      A
  458.                                      ADDC    A,#00H
  459. TPL: RET
  460. MULT: MOV    A,R6                                     ;取b
  461.                                     MOV    B,R4                                    ;取d
  462.                                     MUL    AB                                       ;求bd
  463.                                      MOV    @Ro,A                                  ;求bdL
  464.                                      MOV    R3, B                                   ;求bdL~R3
  465.                                      MOV    A, R4                                  ;取d
  466.                                      MOV    B,R7                                    ;取a
  467.                                      MUL    AB                                       ;求ad
  468.                                      ADD    A,R3                                   ;求adL+bdH
  469.                                      MOV    R3,A                                    ;暂存adL+bdH
  470.                                      MOV    A,B
  471.                                      ADDC   A,#00H                                  ;adH+进位
  472. MOV    R2, A                                   ;暂存
  473. MOV   A,R6                                     ;取b
  474. MOV    B,R5                                    ;取c
  475. MUL    AB                                       ;求bc
  476. ADD    A, R3                                   ;求adL+bcL+bdH
  477. INC    R0                                        ;修改指针
  478. MOV   @R0,A                                   ;乘积第三字节存入
  479. CLR    55BH                                     ;清标志
  480. MOV   A,R2
  481. ADDC  A,B                                     ;求adH+bcH
  482. MOV   R2,A
  483. JNC    LAST                                     ;无进位数
  484. SETB   5BH                                      ;置进位标志
  485. MOV   A,R7                                    ;取a
  486. MOV   B,R5                                    ;取c
  487. MUL  AB                                        ;求ac
  488. ADD   A,R2                                    ;求acL+adH+bcH
  489. INC R0
  490. MOV   @R0,A                                  ;存积的第二个字节
  491. MOV    A,B
  492. ADDC   A,#00H
  493. MOV   C,5BH
  494. ADDC  A,#00H
  495. INC    R0                                                     :修改指针
  496. MOV  @R0,A                                   ;存积的最高字节
  497. RET

  498. 显示子程序:
  499. ORG 055CH
  500. MOV  R0,#79H
  501. MOV  @R0,#01H
  502. INC  R0
  503. MOV  @R0,#01H
  504. INC  R0
  505. MOV  R0,#05H
  506. INC  R0
  507. MOV  @R0,#16H
  508. INC  R0
  509. MOV  @R0,#1BH
  510. INC  R0
  511. MOV  @R0,#1EH
  512. MOV  DPTR,#4F00H
  513. ……………………
  514. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
自动加料机控制系统.doc (807 KB, 下载次数: 34)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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