烤箱温度控制设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

烤箱温度控制系统的设计
(计算机控制技术基础课程设计)
专业:自动化
组员:吴传林唐思黄定肖骁
重庆大学自动化学院
2013年9月
目录
摘要 (1)
序言 (1)
1.设计内容 (2)
1.1已知参数和设计要求 (2)
1.2实现方法 (2)
2.组员分工 (2)
3. 硬件部分组成 (3)
3.1硬件连接 (3)
3.2.1 AD574 (3)
3.2.2 PT100 (4)
3.2.3 芯片8255 (4)
4.操作说明 (5)
5.设计总体思路 (5)
5.1设计步骤 (6)
5.1.1主程序的设计 (6)
5.1.2温度设定子程序 (6)
5.1.3读取当前温度子程序 (6)
5.1.4温度比较以及加热子程序 (6)
5.1.5报警子程序 (7)
5.2原理分析 (7)
6.实验结果 (7)
7.原程序清单 (8)
8.设计感想 (8)
8.1吴传林感想 (8)
8.2唐思感想 (9)
8.3肖骁感想 (10)
附录 (12)
系统框图 (12)
程序代码: (18)
摘要
本文是对烤箱温度控制系统进行设计,在烤箱温度控制系统中,利用计算机对烤箱的继电器发出不同的信号,来控制继电器的开断,从而能够实现控制烤箱加热与否的控制。

本系统采用了反馈控制,是经典控制理论在实际中成功应用的典型实例。

本次采用的信号输出芯片是8255。

而温度采集则是用了PT100感温电阻,将电信号送至A/D574中,利用A/D574的模数转换功能,将采集的温度模拟信号转换成计算机可以识别的电信号,进而在计算机内对这些电信号进行处理,经过反馈控制算法来输出控制烤箱的电信号。

关键词:反馈控制算法,A/D574模数转换,计算机控制
序言
温度控制技术广泛应用于社会生活的各个领域,如家电、汽车、材料、电力电子等,传统的温度控制技术中最常见的是继电器调温,但由于继电器动作频繁,温度控制范围小,精度不高,可能会因触点不良而影响正常工作。

最近几年快速发展的有PID 温控、模糊控制、神经网络以及遗传算法在温度控制中的应用。

烤箱是热处理生产中应用最广的加热设备,它电流通过电热元件产生热量,借助辐射和对流的传递方式,将热量传递给所要加热的物品,使其加热到所要求的温度。

本文设计的烤箱温度控制系统,是利用计算机对其温度进行控制,采用反馈控制算法,以实现对烤箱温度控制,达到控制性能要求的指标。

1.设计内容
1.1已知参数和设计要求
1.某烤箱的温度控制要求为:控制烤箱温度从室温上升到目标温度并一直保持在该目标温度,要求控制的精度达±3%,调节时间≤20秒。

2.目标温度应可以通过键盘任意修改。

3.完成温度检测、温度变松,温度显示(LED和CRT曲线)、温度控制、通过键盘设定上、下限温度报警值,温度超限报警(声、光)等功能。

1.2实现方法
采用PD-32E实验装置实现(限≤5人选做)
2.组员分工
姓名职务负责的部分
吴传林组长键盘扫描、判断控制、显示模块程序编写,程序的编译和调

唐思组员AD574转换,标度变换,控制算法,PWM波生成,程序的编译
和调试
肖骁组员报警程序、读入温度值拆分、键盘输入值合并,报告撰写
黄定组员
3.硬件部分组成
3.1硬件连接
1)8255部分(第5片)连线:
8255(5)的CS结CS2 300H,PA0~PA3接键盘P0~P3,PB0~PB3接键盘Q0~Q3,PC0接烤箱的PWM 控制信号接收端。

2)AD574连线:
AD574的CS接地址输入端CS7,AD574的12/8接VCC;AD574的A0接GND,AD574的10VIN接其上方的±5V,10VIN接PT100模块的PT_OUT。

3)蜂鸣器接8255的PC1口。

3.2硬件介绍
3.2.1 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,即可从数据端读取数据。

3.2.2 PT100
pt100是铂热电阻,它的阻值会随着温度的变化而改变。

PT后的100即表示它在0℃时阻值为100欧姆,在100℃时它的阻值约为138.5欧姆。

它的工作原理:当PT100在0摄氏度的时候他的阻值为100欧姆,它的阻值会随着温度上升而成近似匀速的增长。

但他们之间的关系并不是简单的正比的关系,而更应该趋近于一条抛物线。

常见的pt100感温元件有陶瓷元件,玻璃元件,云母元件,它们是由铂丝分别绕在陶瓷骨架,玻璃骨架,云母骨架上再经过复杂的工艺加工而成。

PT100/PT1000铂电阻RT曲线图表:
图3.1
3.2.3 芯片8255
8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。

具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。

其各口功能可由软件选择,使用灵活,通用性强。

8255可作为单片机与多种外设连接时的中间接口电路。

8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。

同时必须具有与外设连接的接口A、B、C口。

由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与CPU连接部分、与外设连接部分、控制部分。

图3.2
4.操作说明
键盘上的A键为启动键,B键为复位键,D为设置温度上限,E为设置温度下限,0
-9数字键输入温度值。

5.设计总体思路
框图如图所示:
控制器烤箱
温度采集
我们采用的是传统的反馈控制策略,其具体过程如下:
一开始,给定一个输入信号,即期望温度,此时,控制程序还没有起作用,此信号通过变送器送至继电器,继电器导通,使烤箱处于工作状态。

这时,温度传感器就把烤箱内的温度转变成电信号送至计算机中。

计算机则将此电信号与输入的期望温度进行比较,通过控制器,根据不同的设定及差值,选择不同的控制算法。

由于计算机内的电信
号都是脉冲信号,因此,可以调节脉冲信号的占空比来调节继电器的断开与导通的时间。

期望值与测量值的差距大,就增大占空比,使一个周期内的加热时间增长,反之,则减小占空比。

采用上述的控制策略,即可以实现温度调节,达到控制指标的要求。

5.1设计步骤
5.1.1主程序的设计
首先确定主程序所要实现的目标,即:预设显示输出,输入温度上限、温度下限,输入设定温度值,显示预设温度,实时刷新当前温度并显示,比较实时温度与设定温度差值并进行反馈控制,控制温度达到性能指标要求。

然后,确定了主程序所要实现的功能以后,在相应的编写各个子程序模块。

同时,要考虑在整个系统实现的过程中,所要运用到的芯片,好进行芯片的初始化。

如8255,AD574等
5.1.2温度设定子程序
温度设定子程序,即,从键盘上输入3个数字,将其存放在指定的空间区域内。

5.1.3读取当前温度子程序
即AD574的使用过程。

首先,先将AD574初始化,启动转换,转换结果屏蔽高4位后,将所得到的结果存放在指定单元中,为当前温度。

5.1.4温度比较以及加热子程序
将前一步骤采集到的当前温度进行标度变换,比较设定值的大小与当前温度和设定值之差,然后做出相应的标记,然后根据不同的标记跳到相应的加热子程序中。

其基本原则就是:实际温度和期望温度差距越大,加热子程序中,每个周期的高电平占空比就越大,若设定值比较大,则直接采用满程输出。

5.1.5报警子程序
烤箱工作时,当烤箱温度超过设置温度上限和低于温度下限时,调用子程序,否则跳出子程序;其中接蜂鸣器的控制信号为第五片8255A的PC1口输出信号,输出0时,蜂鸣器发出警报,输出为1时,声音停止。

5.2原理分析
制烤箱温度的系统,我们采用反馈控制算法。

利用计算机控制中的A/D转换器,将采集到的模拟信号转换成数字信号,然后送入计算机进行处理。

在计算机中,我们编写了控制算法,将送入的电信号经过该算法,输出一个控制继电器开关的脉冲信号,我们可以通过调节脉冲高电平的占空比,来控制一个信号周期内加热时间的长短。

从而实现控制。

又由于这个占空比是实时变化的,所以,这是一个变比例系数的P控制器。

利用这个控制器,我们可以使烤箱内的温度保持在我们所设定的期望值。

6.实验结果
实验结果如下表所示:
实验次数初始温度设定温度调节时间超调量误差
1351004℃ 1.3%
2401402℃ 1.2%
3601602℃ 1.5%
4502201℃2%
本次设计总体上还是比较成功,基本上实现了任务要求。

只有调节时间的,可能是冗长的程序,或者是电烤箱的功率问题,又或者是自己反馈补偿参数设计不够完善,总
之,不能达到要求的20秒以内,此为设计的瑕疵。

7.原程序清单
见附录4
8.设计感想
8.1吴传林感想
作为我们团队的组长,需要确定合适的电路,对电路进行调试,将变送器调至最合适的范围。

同时还要确定与硬件相关的软件主体思想。

一个项目的成败,与组长的整体协调能力关系很大。

这次的时间比较紧张,而且之前没怎么做过过程控制类的题目,所以可以说是时间短、任务重。

热敏电阻PT100之前接触过,但是没有和计算机连起来使用,也是一个新的挑战。

这次设计我吸取的上次计算机硬件课程设计的教训,学会多利用子程序,而不是要把所有的问题都用一个主程序解决,却很少使用子程序。

这样,不但别人读不懂自己的程序,就连自己有时候都读不懂自己的程序。

这次课程设计感觉比以前进步的一点就是程序的模块化思想更加深刻。

之前总也用程序段的方式插入的主程序中,而这次则是尽量减少主程序的内容,将所有的处理部分都写成子程序,设计好入口参数,就可以是整个程序思路清晰,一目了然。

一个好的程序编写者并不是会把所有的模块都自己写出来,而是可以将自己搜索到的各种模块与自己的项目结合,设计好接口参数,达到事半功倍的效果。

这次的程序就用了之前做过的一些设计的模块,如实时显示刷新模块,延时程序,报警子程序等。

这些之前积累下来的宝贵资料大大加快了本次课程设计的速度。

通过了这次课程设计,虽然很累,但过得很充实,收获也很多,我们将学到的知识又重新的复习了一遍,在原来的基础上巩固了对理论知识的理解并且提升了自己的实践能力。

对汇编语言的使用有了进一步的提高,对一个大系统进行模块化分析是以前没有尝试过的,分工合作也让我们学会团结互助,让我们对团队合作精神理解得更透彻,对于我们以后的学习或者工作中都有深远的意义。

8.2唐思感想
这次的课程设计我们小组总算是顺利地完成了。

虽然只有短短一个星期,但让我真正见识到了什么是团队的力量。

从接到此次课程设计任务开始,大家就分配好了各自的任务,并且经常聚在一起各抒己见地讨论各个方案的可行性,气氛那是十分的热烈。

在我们小组中也许有的同学能力强些,有些同学能力没那么强,分工时能力强的同学可能任务就重些,但是大家都没有任何的怨言,全力地专注于自己的那一部分任务,所以团结协作是我们小组能顺利完成此次课程设计的一项非常重要的保证,而这次设计也正好锻炼我们这一点,这也是非常宝贵的。

我们这次是设计对烤箱温度控制系统,对于温度的控制系统,我们需要完成温度的采集,温度的控制,能通过键盘,显示接口实现恒温时间设置,系统初始参数设置,报警设置等功能。

我们一起讨论,一起研究,经过几番努力,初步编出的程序,问题很多,也总找不到原因,然后参考书上的例题程序,修改了很多,有些问题是子程序与主程序的连接没弄好,还是很多问题,然后仔细复习书上所学过的知识,对我们的程序再次发现问题,修改问题,后来经过多次的修改最终完成了初步的可行性程序,也算一个进步。

在调试过程中又遇到了烤箱失灵等各种客观问题,但最终在同学的协作以及我们自身的努力下,都将这些困难一一克服并得到了比较理想的结果。

在这次设计中,我主要负责的是烤箱控制算法及输出部分,刚开始的时候还是出现很多问题,在同学的帮助以及参考其他组的一些程序后,初步完成了这段程序,然后经过自己的多次修改,完成了这部分的编写,设计了一个符合烤箱实际情况的合理算法。

在温度较还远未达到设定值时,采用满程的输出,在接近时,采用PWM波,并且在设定值不同区间时采用不同脉宽的PWM波,当设定值过高时,采用满程输出。

当实际温度超过设定值,立即关机,待温度降到设定值以下再次输出。

经过这个部分的编写,让自己明白了很多,课堂上学的东西远远不够,还是需要自己课后的更多的付出和复习,才能让自己所学的东西学以致用,才能让书上的知识变成自己的,也才能让自己变得更加充实,学得更多。

最后顺利地完成了课程设计,大家心情都很喜悦,虽然过程有点累,但是看到努力后的成果,还是很欣慰。

总的来说,通过历时一个星期的课程设计,发现了自己的很多不足,以及自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。

经过这个课程设计,同时也证明一个团队的力量比一个人的力量大得多,完成一个复杂的问题效率也会高很多,我自己也从此次课程设计中学到了很多东西,实在是令我受益匪浅。

8.3肖骁感想
这次课程设计让我体会到了团队的温暖。

由于我将要参加研究生入学考试,所以精力大都放到复习考研上面去了。

但是我的团队给了最大的包容和理解,让我负责了较为轻松的报警程序、将实际温度转化为字型码和将输入的三个数合成一个数的子程序编写。

这已经不是我第一次团队合作做课程设计了,但是这次让我最为记忆犹新。

本次课程设计我们小组做的是烤箱,我的主要工作是报警子程序的编写。

通过此次课程设计,总的来说收获还是挺大的。

我的工作是参与了部分子程序的编写,主要有用报警子程序,字型码转化等。

这次的课程设计我们小组总算是顺利地完成了。

虽然只有短短一个星期,但让我真正见识到了什么是团队的力量。

从接到此次课程设计任务开始,大家就分配好了各自的任务,并且经常聚在一起各抒己见地讨论各个方案的可行性。

在我们小组中也许有的同学能力强些,有些同学能力没那么强,分工时能力强的同学可能任务就重些,但是大家都没有任何的怨言,全力地专注于自己的那一部分任务,所以团结协作是我们小组能顺利完成此次课程设计的一项非常重要的保证,而这次设计也正好锻炼我们这一点,这也是非常宝贵的。

我们这次是设计对烤箱温度控制系统,对于温度的控制系统,我们需要完成温度的采集,温度的控制,能通过键盘对温度的显示,初始参数设置,报警设置等功能。

我们一起讨论,一起研究,经过几番努力,初步编出的程序,问题很多,也总找不到原因,然后参考书上的例题程序,修改了很多,有些问题是硬件连线问题,我们的烤箱是低电平有效的,我们还将它接到了地。

还有很多问题,然后仔细复习书上所学过的知识,对我们的程序再次发现问题,修改问题,后来经过多次的修改最终完成了初步的可行性程序,也算一个进步。

在调试过程中又遇到了烤箱温度达不到等各种客观问题,但最终在同学的协作以及我们自身的努力下,都将这些困难一一克服并得到了比较理想的结果。

最后顺利地完成了课程设计,大家心情都很喜悦,虽然过程有点累,但是看到努力后的成果,还是很欣慰。

总的来说,通过历时一个星期的课程设计,发现了自己的很多不足,以及自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。

经过这个课程设计,同时也证明一个团队的力量比一个人的力量大得多,完成一个复杂的问题效率也会高很多,我自己也从此次课程设计中学到了很多东西。

在一个星期的时间里,我们完成了此次课程设计,虽然付出了很多,但是也收获了很多。

这也让我明白了一个道理,大家需要团结在一起才能更大的发挥自己的能力,效率才会更高。

+12V
-12V
20K 电位器
Oab_3p
1K 100Ω电位器100K 5.1K 5.1K
1K
10K PT100
212.02
附录
系统框图
PD-32
SSR 8255 烤箱
AD574
PT100 图1 系统框图 图2 电路原理图
开始
初始化
键盘扫描
AD转换
标度变换
是否执行状态否

控制算法
执行
警报
图3 主程序流程图







开始
图4 算法控制流程图 设定值-实际值
输出标志为0 满输出 算法1 算法2
返回
设定值大于实际值 差值小于10 设定大于150 设定大于100 输入设定值
开始
控制值为0


进行控制值
次循环送0
进行100-控制
值次循环送1
返回
图5 执行子程序流程图
大于
小于
小于
大于
开始 比较读回值与上限
比较读回值与下限 蜂鸣器送0
蜂鸣器送1 返回
图6 报警子程序流程图
开始
读回温度值
除以100查表
的高位字型码
余数除以10再查表得
次字型码
余数为低位,查
表得字型码
返回
图7 温度转字型码子程序流程图
程序代码:
.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
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
MOV EAX,80808080H ;1~4片8255初始化
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 ; 得到上限温度
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只显示最高位,绿色
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。

相关文档
最新文档