烤箱温度控制设计.pdf
烤箱温度控制设计 Newly compiled on November 23,2020 烤箱温度控制系统的设计(计算机控制技术基础课程设计)专 业:自动化 组 员:吴传林 唐思 黄定 肖骁 重庆大学自动化学院 2013 年 9 月 目 录 摘要 本文是对烤箱温度控制系统进行设计,在烤箱温度控制系统中,利用计算机对烤箱的继电器发出不同的信号,来控制继电器的开断,从而能够实现控制烤箱加热与否的控制。本系统采用了反馈控制,是经典控制理论在实际中成功应用的典型实例。本次采用的信号输出芯片是8255。而温度采集则是用了PT100 感温电阻,将电信号送至A/D574中,利用 A/D574 的模数转换功能,将采集的温度模拟信号转换成计算机可以识别的电信号,进而在计算机内对这些电信号进行处理,经过反馈控制算法来输出控制烤箱的电信号。关键词:反馈控制算法,A/D574模数转换,计算机控制 序言 温度控制技术广泛应用于社会生活的各个领域,如家电、汽车、材料、电力电子等,传统的温度控制技术中最常见的是继电器调温,但由于继电器动作频繁,温度控制范围小,精度不高,可能会因触点不良而影响正常工作。最近几年快速发展的有PID 温控、模糊控制、神经网络 以及遗传算法在温度控制中的应用。烤箱是热处理生产中应用最广的加热设备,它电流通过电热元件产生热量,借助辐射和对流的传递方式,将热量传递给所要加热的物品,使其加热到所要求的温度。本文设计的烤箱温度控制系统,是利用计算机对其温度进行控制,采用反馈控制算法,以实现对烤箱温度控制,达到控制性能要求的指标。1.设计内容 已知参数和设计要求 1.某烤箱的温度控制要求为:控制烤箱温度从室温上升到目标温度并一直保持在该目标温度,要求控制的精度达3%,调节时间20 秒。2.目标温度应可以通过键盘任意修改。3.完成温度检测、温度变松,温度显示(LED 和 CRT 曲线)、温度控制、通过键盘设定上、下限温度报警值,温度超限报警(声、光)等功能。实现方法 采用 PD-32E 实验装置实现(限5 人选做)2.组员分工 3.硬件部分组成 硬件连接 1)8255部分(第 5 片)连线:8255(5)的 CS 结 CS2 300H,PA0PA3 接键盘 P0P3,PB0PB3 接键盘 Q0Q3,PC0 接烤箱的 PWM控制信号接收端。2)AD574 连线:AD574的 CS 接地址输入端 CS7,AD574 的 12/8 接 VCC;AD574的 A0接 GND,AD574的 10VIN接其上方的5V,10VIN 接 PT100 模块的 PT_OUT。3)蜂鸣器接 8255 的 PC1 口。硬件介绍 姓名 职务 负责的部分 吴传林 组长 键盘扫描、判断控制、显示模块程序编写,程序的编译和调试 唐思 组员 AD574 转换,标度变换,控制算法,PWM 波生成,程序的编译和调试 肖骁 组员 报警程序、读入温度值拆分、键盘输入值合并,报告撰写 黄定 组员 AD574 AD574A 是单片高速 12 位逐次比较型 A/D 转换器,内置双极性电路构成的混合集成转换芯片,具有外接元件少,功耗低,精度高等特点,并且具有自动校零和自动极性转换功能,只需外接少量的阻容件即可构成一个完整的A/D 转换器,其主要功能特性如下:在 CE=1、CS=0 同时满足时,AD574A 才会正常工作,在 AD574 处于工作状态时,当R/C=0 时 A/D 转换,当 R/C=1 是进行数据读出。和 A0 端用来控制启动转换的方式和数据输出格式。A0=0 时,启动的是按完整 12 位数据方式进行的。当 A0=1 时,按 8 位A/D 转换方式进行。当 R/C=1,也即当 AD574A 处于数据状态时,A0 和 R/C 控制数据输出状态的格式。当 R/C=1 时,数据以 12 位并行输出,当 R/C=0 时,数据以 8 位分两次输出。而当 A0=0 时,输出转换数据的高 8 位,A0=1 时输出 A/D 转换数据的低 4 位,这四位占一个字节的高半字节,低半字节补零。如果需 AD574A 工作于单一模式,只需将 CE、端接至+5V 电源端,和 A0 接至 0V,仅用端来控制 A/D 转换的启动和数据输出。当=0 时,启动 A/D 转换器,经 25us 后STS=1,表明 A/D 转换结束,此时将置 1,即可从数据端读取数据。PT100 pt100 是铂热电阻,它的阻值会随着温度的变化而改变。PT 后的 100 即表示它在0时阻值为 100 欧姆,在 100时它的阻值约为欧姆。它的工作原理:当PT100 在 0摄氏度的时候他的阻值为 100 欧姆,它的阻值会随着温度上升而成近似匀速的增长。但他们之间的关系并不是简单的正比的关系,而更应该趋近于一条抛物线。常见的 pt100 感温元件有陶瓷元件,玻璃元件,云母元件,它们是由铂丝分别绕在陶瓷骨架,玻璃骨架,云母骨架上再经过复杂的工艺加工而成。PT100/PT1000 铂电阻 RT 曲线图表:图 芯片 8255 8255 是 Intel 公司生产的可编程并行 I/O 接口芯片,有 3 个 8 位并行 I/O 口。具有 3 个通道 3 种工作方式的可编程并行接口芯片(40 引脚)。其各口功能可由软件选择,使用灵活,通用性强。8255 可作为单片机与多种外设连接时的中间接口电路。8255 作为主机与外设的连接芯片,必须提供与主机相连的 3 个总线接口,即数据线、地址线、控制线接口。同时必须具有与外设连接的接口 A、B、C 口。由于 8255可编程,所以必须具有逻辑控制部分,因而 8255 内部结构分为 3 个部分:与 CPU 连接部分、与外设连接部分、控制部分。图 4.操作说明 键盘上的 A 键为启动键,B 键为复位键,D 为设置温度上限,E 为设置温度下限,0-9 数字键输入温度值。5.设计总体思路 框图如图所示:我们采用的是传统的反馈控制策略,其具体过程如下:一开始,给定一个输入信号,即期望温度,此时,控制程序还没有起作用,此信号通过变送器送至继电器,继电器导通,使烤箱处于工作状态。这时,温度传感器就把烤箱内的温度转变成电信号送至计算机中。计算机则将此电信号与输入的期望温度进行比较,通过控制器,根据不同的设定及差值,选择不同的控制算法。由于计算机控制器 烤箱 温度采集 内的电信号都是脉冲信号,因此,可以调节脉冲信号的占空比来调节继电器的断开与导通的时间。期望值与测量值的差距大,就增大占空比,使一个周期内的加热时间增长,反之,则减小占空比。采用上述的控制策略,即可以实现温度调节,达到控制指标的要求。设计步骤 首先确定主程序所要实现的目标,即:预设显示输出,输入温度上限、温度下限,输入设定温度值,显示预设温度,实时刷新当前温度并显示,比较实时温度与设定温度差值并进行反馈控制,控制温度达到性能指标要求。然后,确定了主程序所要实现的功能以后,在相应的编写各个子程序模块。同时,要考虑在整个系统实现的过程中,所要运用到的芯片,好进行芯片的初始化。如8255,AD574 等 温度设定子程序,即,从键盘上输入 3 个数字,将其存放在指定的空间区域内。即 AD574 的使用过程。首先,先将 AD574 初始化,启动转换,转换结果屏蔽高 4位后,将所得到的结果存放在指定单元中,为当前温度。将前一步骤采集到的当前温度进行标度变换,比较设定值的大小与当前温度和设定值之差,然后做出相应的标记,然后根据不同的标记跳到相应的加热子程序中。其基本原则就是:实际温度和期望温度差距越大,加热子程序中,每个周期的高电平占空比就越大,若设定值比较大,则直接采用满程输出。报警子程序 烤箱工作时,当烤箱温度超过设置温度上限和低于温度下限时,调用子程序,否则跳出子程序;其中接蜂鸣器的控制信号为第五片8255A 的 PC1 口输出信号,输出 0时,蜂鸣器发出警报,输出为1 时,声音停止。原理分析 制烤箱温度的系统,我们采用反馈控制算法。利用计算机控制中的A/D 转换器,将采集到的模拟信号转换成数字信号,然后送入计算机进行处理。在计算机中,我们编写了控制算法,将送入的电信号经过该算法,输出一个控制继电器开关的脉冲信号,我们可以通过调节脉冲高电平的占空比,来控制一个信号周期内加热时间的长短。从而实现控制。又由于这个占空比是实时变化的,所以,这是一个变比例系数的P控制器。利用这个控制器,我们可以使烤箱内的温度保持在我们所设定的期望值。6.实验结果 实验结果如下表所示:实验次数 初始温度 设定温度 调节时间 超调量 误差 1 35 100 4%2 40 140 2%3 60 160 2%4 50 220 1 2%本次设计总体上还是比较成功,基本上实现了任务要求。只有调节时间的,可能是冗长的程序,或者是电烤箱的功率问题,又或者是自己反馈补偿参数设计不够完善,总之,不能达到要求的20 秒以内,此为设计的瑕疵。7.原程序清单 见附录 4 8.设计感想 吴传林感想 作为我们团队的组长,需要确定合适的电路,对电路进行调试,将变送器调至最合适的范围。同时还要确定与硬件相关的软件主体思想。一个项目的成败,与组长的整体协调能力关系很大。这次的时间比较紧张,而且之前没怎么做过过程控制类的题目,所以可以说是时间短、任务重。热敏电阻 PT100 之前接触过,但是没有和计算机连起来使用,也是一个新的挑战。这次设计我吸取的上次计算机硬件课程设计的教训,学会多利用子程序,而不是要把所有的问题都用一个主程序解决,却很少使用子程序。这样,不但别人读不懂自己的程序,就连自己有时候都读不懂自己的程序。这次课程设计感觉比以前进步的一点就是程序的模块化思想更加深刻。之前总也用程序段的方式插入的主程序中,而这次则是尽量减少主程序的内容,将所有的处理部分都写成子程序,设计好入口参数,就可以是整个程序思路清晰,一目了然。一个好的程序编写者并不是会把所有的模块都自己写出来,而是可以将自己搜索到的各种模块与自己的项目结合,设计好接口参数,达到事半功倍的效果。这次的程序就用了之前做过的一些设计的模块,如实时显示刷新模块,延时程序,报警子程序等。这些之前积累下来的宝贵资料大大加快了本次课程设计的速度。通过了这次课程设计,虽然很累,但过得很充实,收获也很多,我们将学到的知识又重新的复习了一遍,在原来的基础上巩固了对理论知识的理解并且提升了自己的实践能力。对汇编语言的使用有了进一步的提高,对一个大系统进行模块化分析是以前没有尝试过的,分工合作也让我们学会团结互助,让我们对团队合作精神理解得更透彻,对于我们以后的学习或者工作中都有深远的意义。唐思感想 这次的课程设计我们小组总算是顺利地完成了。虽然只有短短一个星期,但让我真正见识到了什么是团队的力量。从接到此次课程设计任务开始,大家就分配好了各自的任务,并且经常聚在一起各抒己见地讨论各个方案的可行性,气氛那是十分的热烈。在我们小组中也许有的同学能力强些,有些同学能力没那么强,分工时能力强的同学可能任务就重些,但是大家都没有任何的怨言,全力地专注于自己的那一部分任务,所以团结协作是我们小组能顺利完成此次课程设计的一项非常重要的保证,而这次设计也正好锻炼我们这一点,这也是非常宝贵的。我们这次是设计对烤箱温度控制系统,对于温度的控制系统,我们需要完成温度的采集,温度的控制,能通过键盘,显示接口实现恒温时间设置,系统初始参数设置,报警设置等功能。我们一起讨论,一起研究,经过几番努力,初步编出的程序,问题很多,也总找不到原因,然后参考书上的例题程序,修改了很多,有些问题是子程序与主程序的连接没弄好,还是很多问题,然后仔细复习书上所学过的知识,对我们的程序再次发现问题,修改问题,后来经过多次的修改最终完成了初步的可行性程序,也算一个进步。在调试过程中又遇到了烤箱失灵等各种客观问题,但最终在同学的协作以及我们自身的努力下,都将这些困难一一克服并得到了比较理想的结果。在这次设计中,我主要负责的是烤箱控制算法及输出部分,刚开始的时候还是出现很多问题,在同学的帮助以及参考其他组的一些程序后,初步完成了这段程序,然后经过自己的多次修改,完成了这部分的编写,设计了一个符合烤箱实际情况的合理算法。在温度较还远未达到设定值时,采用满程的输出,在接近时,采用PWM 波,并且在设定值不同区间时采用不同脉宽的 PWM 波,当设定值过高时,采用满程输出。当实际温度超过设定值,立即关机,待温度降到设定值以下再次输出。经过这个部分的编写,让自己明白了很多,课堂上学的东西远远不够,还是需要自己课后的更多的付出和复习,才能让自己所学的东西学以致用,才能让书上的知识变成自己的,也才能让自己变得更加充实,学得更多。最后顺利地完成了课程设计,大家心情都很喜悦,虽然过程有点累,但是看到努力后的成果,还是很欣慰。总的来说,通过历时一个星期的课程设计,发现了自己的很多不足,以及自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。经过这个课程设计,同时也证明一个团队的力量比一个人的力量大得多,完成一个复杂的问题效率也会高很多,我自己也从此次课程设计中学到了很多东西,实在是令我受益匪浅。肖骁感想 这次课程设计让我体会到了团队的温暖。由于我将要参加研究生入学考试,所以精力大都放到复习考研上面去了。但是我的团队给了最大的包容和理解,让我负责了较为轻松的报警程序、将实际温度转化为字型码和将输入的三个数合成一个数的子程序编写。这已经不是我第一次团队合作做课程设计了,但是这次让我最为记忆犹新。本次课程设计我们小组做的是烤箱,我的主要工作是报警子程序的编写。通过此次课程设计,总的来说收获还是挺大的。我的工作是参与了部分子程序的编写,主要有用报警子程序,字型码转化等。这次的课程设计我们小组总算是顺利地完成了。虽然只有短短一个星期,但让我真正见识到了什么是团队的力量。从接到此次课程设计任务开始,大家就分配好了各自的任务,并且经常聚在一起各抒己见地讨论各个方案的可行性。在我们小组中也许有的同学能力强些,有些同学能力没那么强,分工时能力强的同学可能任务就重些,但是大家都没有任何的怨言,全力地专注于自己的那一部分任务,所以团结协作是我们小组能顺利完成此次课程设计的一项非常重要的保证,而这次设计也正好锻炼我们这一点,这也是非常宝贵的。我们这次是设计对烤箱温度控制系统,对于温度的控制系统,我们需要完成温度的采集,温度的控制,能通过键盘对温度的显示,初始参数设置,报警设置等功能。我们一起讨论,一起研究,经过几番努力,初步编出的程序,问题很多,也总找不到原因,然后参考书上的例题程序,修改了很多,有些问题是硬件连线问题,我们的烤箱是低电平有效的,我们还将它接到了地。还有很多问题,然后仔细复习书上所学过的知识,对我们的程序再次发现问题,修改问题,后来经过多次的修改最终完成了初步的可行性程序,也算一个进步。在调试过程中又遇到了烤箱温度达不到等各种客观问题,但最终在同学的协作以及我们自身的努力下,都将这些困难一一克服并得到了比较理想的结果。最后顺利地完成了课程设计,大家心情都很喜悦,虽然过程有点累,但是看到努力后的成果,还是很欣慰。总的来说,通过历时一个星期的课程设计,发现了自己的很多不足,以及自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。经过这个课程设计,同时也证明一个团队的力量比一个人的力量大得多,完成一个复杂的问题效率也会高很多,我自己也从此次课程设计中学到了很多东西。在一个星期的时间里,我们完成了此次课程设计,虽然付出了很多,但是也收获了很多。这也让我明白了一个道理,大家需要团结在一起才能更大的发挥自己的能力,效率才会更高。+12V-12V20K 电位器Oab_3p1K100 电位器100K5.1K5.1K1K10KPT100212.02附录 系统框图 PD-32 SSR 8255 烤箱 AD574 PT100 图 1 系统框图 图 2 电路原理图 开始 初始化 键盘扫AD转 标度变 否 是 否 否 是 是 否 开始 图 4 算法控制流程图 设定值-实际输出标志为 0 满输出 算法算法 2 返回 设定值大于实际值 差值小于设定大于 150 设定大于输入设定值 是 否 开始 控制值为进行控制进行 100-控 返回 图 5 执行子程序流程图 大于 小于 小于 大于 开始 比较读回值与上比较读回值与下蜂鸣器送 0 蜂鸣器送 1 返回 图 6 报警子程序流程图 程序代码:.486 CODE SEGMENT USE16 ASSUME CS:CODE ORG 2000H BEG:JMP START XISHU1 DW 5 ;补偿算法系数 1 XISHU2 DW 3 ;补偿算法系数 2 AJZ DB ;记录按键的数值 AJCS DB 0;记录按下键的次数 WDSX DW 300;上限温度值 WDXX DW 0;下限温度值 YSWD DW ;预设温度值 SJWD DW ;实际温度值 ZCWD DW ;温度暂存 YSXS DB,;预设温度显示 SWXS DB,;实际温度显示 SRXS DB,;输入温度的三位数值 ADJG DW 0 ;存放 AD转换的结果 BDBHJG DW 0;存放标度变换的结果 ZKB DW 0 ;占空比 LED DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;三色 LED字型码 KEY DB 开始 图 7 温度转字型码子程序流程读回温度值 除以 100 查余数除以 10 再查余数为低 返回 0EEH,0EDH,0EBH,0E7H,0DEH,0DDH,0DBH,0D7H,0BEH,0BDH,0BBH,0B7H,7EH,7DH,7BH,77H;键特征值 START:CALL CSH ;调用初始化子程序 LL0:CALL JPSM ;调用键盘扫描子程序 CALL ADZH ;进行 AD转换 CALL BDBH ;进行标度变换 CALL XSSW ;显示实际温度值 MOV AL,AJCS CMP AL,4 ;比较 AJCS 是否为 4,为 4的话说明是在温度控制执行状态 JNZ LL0 ;不等于 4,向上跳转 CALL KZSF ;调用控制算法子程序,处理获得的温度差 CALL PWM ;调用产生 PWM 波形子程序 CALL BJQ ;调用报警器子程序 JMP LL0 ;-显示初始化-CSH PROC MOV DX,30CH;第 5 片 8255 初始化 MOV AL,90H OUT DX,AL MOV DX,20CH OUT DX,EAX MOV DX,208H;将 LED全熄灭 MOV EAX,0F0F0F0FH OUT DX,EAX MOV DX,30CH MOV AL,00000011B;为第五片 8255 的 PC1、PC0 赋值 1 OUT DX,AL RET CSH ENDP;-键盘扫描-JPSM PROC PUSHA MOV BL,0F7H;从 Q3列开始扫描 SM:MOV AL,BL MOV DX,304H OUT DX,AL;送出列信号 MOV DX,300H IN AL,DX;读入行信号 AND AL,0FH CMP AL,0FH JNZ LL1;有键按下,跳转 ROR BL,1;调整列信号 JC SM JMP JPSM3;无键按下,跳出程序 LL1:;以列信号为高四位,行信号为低四位,形成键特征值 SHL BL,4 OR BL,AL CALL DLY_L ;延时去抖动 DDSF:MOV AL,0 ;等待释放 MOV DX,304H OUT DX,AL MOV DX,300H IN AL,DX AND AL,0FH CMP AL,0FH JNZ DDSF LEA SI,KEY ;键特征值的首地址 MOV AJZ,0 ;用 AJZ记录下按下键的数值 JPSM1:MOV AL,AJZ MOV AH,0 MOV BP,AX CMP BL,SI+BP;按下的键从零开始的比较 JZ JPSM2 INC AJZ JMP JPSM1 JPSM2:CALL PANDUAN ;判断输入值 JPSM3:POPA RET JPSM ENDP;-去抖动延时-DLY_L PROC PUSH CX MOV CX,0FFFFH DLYL_AGN:NOP LOOP DLYL_AGN POP CX RET DLY_L ENDP;-判断输入值-PANDUAN PROC PUSHA MOV BL,AJZ ;按下的键值 MOV BH,AJCS ;按键次数 CMP BL,9 JA PAN1 ;大于 9 跳转 CMP BH,2 JA PAN7 ;大于 2 跳转 INC AJCS ;次数加一 CALL YSZXS ;调用预设值显示子程序 JMP PAN7 PAN1:CMP BL,0BH JZ PAN4 ;等于 B跳转 CMP BL,0CH JZ PAN5 ;等于 C 跳转 CMP BL,0FH JZ PAN7 ;等于 F跳转 CMP BH,3 ;判断次数 AJCS 是否等于 3 JNZ PAN7 ;不等于 3 跳转 CALL ZUHE ;将输入的三个数组合 MOV CX,ZCWD ;将组合好的数存放在 CX CMP BL,0AH JNZ PAN2 ;不等于 A跳转 CMP CX,WDSX ;与上限温度比较 JA PAN7 ;大于上限温度跳转 CMP CX,WDXX ;与下限温度比较 JB PAN7 ;小于下限温度跳转 INC AJCS ;次数加 1,变为 4 MOV YSWD,CX ;得到预设温度 JMP PAN7 PAN2:CMP BL,0DH JNZ PAN3 ;等于 D跳转 MOV WDSX,CX ;得到上限温度 JMP PAN6 PAN3:MOV WDXX,CX ;得到下限温度 JMP PAN6 PAN4:CMP BH,3 JA PAN7 ;大于 3 跳转 JMP PAN6 PAN5:CMP BH,4 JNZ PAN7 ;不等于 4 跳转 PAN6:MOV AJCS,0 ;次数清零 MOV DX,20AH ;8255(3)C口地址 MOV AX,0F0FH ;预设温度显示关闭 OUT DX,AX PAN7:POPA RET PANDUAN ENDP;-预设值显示-YSZXS PROC PUSHA MOV CL,AJCS LEA BX,LED ;将存放三色 LED字型码地址给 BX MOV AL,AJZ ;将按下键的数值给 AL,以待查表转换 LEA DI,SRXS ;将存放输入温度数值的地址给 DI LEA SI,YSXS ;将存放显示温度字型码的地址给 SI MOV DX,20AH ;8255(3)C口地址 CMP CL,1 JZ SH1 ;等于 1 跳转 CMP CL,2 JZ SH2 ;等于 2 跳转 CMP CL,3 JZ SH3 ;等于 3 跳转 JMP SH5 SH1:MOV DI,AL ;将最高位存放 XLAT ;查表转换 MOV SI,AL ;将最高位的字型码存放 MOV AX,0F0EH;LED只显示最高位,绿色 JMP SH4 SH2:MOV DI+1,AL;将次高位存放 XLAT MOV SI+1,AL;将次高位的字型码存放 MOV AX,0F0AH;LED显示前两位,绿色 JMP SH4 SH3:MOV DI+2,AL;将最低位存放 XLAT MOV SI+2,AL;将最低位的字型码存放 MOV AX,0E0AH;LED显示三位,绿色 JMP SH4 SH4:OUT DX,AX MOV DX,202H ;8255(3)A口地址 LEA SI,YSXS;将显示温度的字型码地址给 SI CALL XIANSHIOUT;显示 SH5:POPA RET YSZXS ENDP;-实际值显示-XSSW PROC PUSHA CALL ZHUAN ;将实际温度转换为字型码 MOV DX,208H ;8255(1)C口地址 MOV AX,0D05H;红色 OUT DX,AX MOV DX,200H ;8255(1)A口地址 LEA SI,SWXS;将显示温度的字型码地址给 SI CALL XIANSHIOUT;显示输出 POPA RET XSSW ENDP;-显示输出-XIANSHIOUT PROC PUSHA MOV AL,SI OUT DX,AL;输出最高位 INC SI MOV AL,SI ADD DX,4 OUT DX,AL;输出次高位 INC SI MOV AL,SI SUB DX,3 OUT DX,AL;输出最低位 POPA RET XIANSHIOUT ENDP;-将输入的三个数组合成一个数-ZUHE PROC PUSHA LEA SI,SRXS;输入温度数值的地址 MOV CL,10 MOV AL,SI MOV AH,0 MUL CL;最高位乘以 10 INC SI ADD AL,SI;加次高位 MUL CL;和再乘以 10 INC SI MOV BL,SI MOV BH,0 ADD AX,BX;再加最低位 MOV ZCWD,AX;得到温度值 ZUHE1:POPA RET ZUHE ENDP;-实际温度转换为字型码-ZHUAN PROC PUSHA LEA SI,SWXS;显示温度字型码地址 LEA BX,LED;三色 LED字型码地址 MOV AX,SJWD;实际温度值 MOV CL,100 DIV CL;除以 100,商是最高位 XLAT MOV SI,AL;将最高位的字型码存放 INC SI MOV AL,AH MOV AH,0 MOV CL,10 DIV CL;余数除以 10,商是次高位,余数为最低位 XLAT MOV SI,AL;将次高位存放 INC SI MOV AL,AH XLAT MOV SI,AL;将最低位存放 POPA RET ZHUAN ENDP;-标度变换子程序-BDBH PROC NEAR PUSHA MOV AX,ADJG MOV CX,10 MUL CX MOV CX,3 DIV CX MOV CX,2 MUL CX MOV CX,91 DIV CX MOV BDBHJG,AX ;保存标度变换后的结果 MOV SJWD,AX POPA RET BDBH ENDP;-A/D转换子程序-ADZH PROC NEAR PUSHA MOV DX,3C0H ;A/D 地址 MOV AL,0 ;虚写,启动 12位 A/D转换 OUT DX,AL MOV CX,20h LOOP$;延时等待 A/D转换完成 IN AX,DX ;一次性读取 12位转换结果 AND AX,00FFFH ;屏蔽掉高 4 位 MOV ADJG,AX ;保存结果 POPA RET ADZH ENDP;-控制算法子程序-KZSF PROC;用于输出控制标志 ZKB PUSHA MOV AX,BDBHJG MOV BX,YSWD CMP AX,BX JB KZ1 MOV CX,0 ;设定值小于实际值,输出的控制标志为 0 MOV ZKB,CX JMP KZED KZ1:SUB BX,AX MOV CX,10 CMP BX,CX JA F100 CMP YSWD,150 JA F100 CMP YSWD,100 JB KZ2 MOV AX,BX MUL XISHU ADD AX,50 MOV BX,AX JMP KZ3 KZ2:MOV AX,BX MUL XISHU2 MOV BX,AX KZ3:MOV ZKB,BX;设定值比实际值大 10以内,采用补偿算法 JMP KZED F100:MOV CX,100 MOV ZKB,CX;设定值比实际值大 10以外,输出为满程 KZED:POPA RET KZSF ENDP;-PWM波形成子程序-PWM PROC ;用来将控制标志转换为 PWM 波形 PUSHA MOV CX,ZKB MOV BX,0 ;特殊处理 ZKB为 0 的情况,避免出现问题 CMP BX,CX JZ PWM1 PWM0:NOP NOP NOP MOV DX,30CH MOV AL,00000000B;为第五片 8255 的 PC0赋值 0 OUT DX,AL NOP NOP LOOP PWM0 ;进行 ZKB次循环,由于 PC0 的输出始终为 1,达到加热效果 PWM1:MOV CX,ZKB MOV BX,100 SUB BX,CX MOV CX,BX MOV BX,0 CMP BX,CX JZ PWM3 ;特殊处理 ZKB为 0 的情况,避免出现问题 PWM2:NOP NOP NOP MOV DX,30CH MOV AL,00000001B;为第五片 8255 的 PC0赋值 1 OUT DX,AL NOP NOP LOOP PWM2 ;进行(100-ZKB)次循环,由于 PC0 的输出始终为1,达到加热效果 PWM3:POPA RET PWM ENDP;-报警子程序-BJQ PROC ;此函数用来处理于温度上下限有关的警报的内容 PUSHA MOV AX,WDSX MOV BX,BDBHJG CMP AX,BX JB FMQ ;小于的话跳到蜂鸣器执行环节 MOV AX,WDXX MOV BX,BDBHJG CMP AX,BX JA FMQ ;大于的话跳到蜂鸣器执行环节 JMP BJQ1 FMQ:MOV DX,30CH MOV AL,00000010B;为第五片 8255 的 PC1赋值 0 OUT DX,AL CALL JPSM CALL ADZH CALL BDBH JMP BJQ1 BJQ1:MOV DX,30CH MOV AL,00000011B;为第五片 8255 的 PC1赋值 1 OUT DX,AL POPA RET BJQ ENDP;-程序结束-CODE ENDS END START