1 引言
针对传统测温元件(热电偶、热电阻)组成的温度测量电路复杂,软件调试繁琐等缺点,设计基于MSC-51单片机及ADC0809的温度采集控制系统。该系统利用单片机中空余的I/O接口,以中断的方式实现温度的实时采集与控制,充分利用CPU的资源空间,简化了测量电路以及程序调试的复杂过程,方便了技术人员在实际中的开发和应用。
2 硬件电路设计
2.1 系统组成
图1为系统硬件组成框图。外部传感器将与温度相对应的电信号传至A/D转换器,进行模数转换,完成后将数据传送至单片机,单片机进行数据处理后将数据送至译码器,最后在数码管上显示。当有键盘输入控制温度时,单片机内部比较此时得到的A/D转换数据与控制设定温度,若低于设定温度,外部装置加热,LED单色灯亮;反之,则不加热,LED单色灯熄灭。
2.2 系统模块设计
(1)主控制模块 选用单片机MSC-51的最小系统作为主控制器件,且采用MSC-51单片机的最小主控制模块,由于程序控制简单,器件内部空间足够存储程序,无需外扩存储器,选用P0、P1口作为输出接口,P2口作为输入接口。
(2)温度采集模块温度采集模块由外部传感器、电热器以及ADC0809器件组成。传感器的测量范同是0℃~50℃。在理想情况下,A/D转换器输出的数值D与输入的电压信号V之间有以下关系式成立
式中,Vmax为连接在器件Vref+引脚的“高基准电压值”;Vmin为连接在器件Vref-引脚的“低基准电压值”。DMAx为当输入电压为Vmax时,接口输出的转换数值。Dmin为当输入电压为Vmin时,接口输出的转换数值。
(3)温度显示模块 温度显示模块由8279器件与数码管组成,8279内部的OUTA0~OUTA3、OUTB0~OUTB3与译码器74LS138连接,控制七段数码管的显示。
(4)温度控制模块温度控制模块由键盘、MSC-51器件、电热器、A/D转换器等组成。键盘数值的输入也由8279器件通过行列扫描控制,再通过MSC-51的内部数值比较,电热器控制温度,进而达到保温的目的。
2.3 系统硬件连接
系统选用MSC-51单片机作为主控制器件,进行数据的处理与传输。设计中将74LS273的引脚P0.4与外部电热器的开关相连接,控制加热。同时将 LED单色灯与74LS273的引脚P0.4口连接.以显示外部电热器的状态。A/D转换器ADC0809的引脚CS与编号为“8300H”的译码器输出端连接,EOC信号接MSC-51的引脚P1.7,IN1与温度传感器相连接。数码显示控制器件8279的引脚CS与编号为“8700H”的译码器输出端连接。图2为键盘及数码管显示电路,图3为A/D转换电路。
3软件设计
软件采用MSC-51的单片机汇编语言编写,运用单片机内部定时器的中断实现中断程序的调用以及5 s刷新数据的功能,从而大大节约CPU的资源,提高了工作效率。
3.1 主程序流程
在主程序开始之前设置伪指令,方便程序编写时查找各个器件地址及初始化命令。主程序中设置定时器1的中断程序,其定时产生中断并进入中断子程序。主程序入口地址是0000H,中断入口地址是001BH。为避免程序的存储位置与单片机预设的存储位置发生冲突,在各个入口地址中只放置跳转指令。主程序的存放地址从0500H开始。
主程序以“START”开始,经设置堆栈栈底以及各接口器件的初始化程序后.启动定时器1开始计时,当计数时间为50 ms时,定时器1产生中断,转入中断子程序运行。主程序流程如图4所示。
主程序部分代码如下:
3.2 系统中断子程序流程
图5是中断子程序流程,其程序步骤如下:单片机响应定时器1的中断,进入中断子程序“FRESH”,设置50 ms的定时时间循环100次后,得到5 s的刷新时间,当到达5 s定时,随即进人A/D转换器的读取数据。将A/D转换器得到的数值与预设温度值相比较。测量值低于预设温度则启动电热器,L=ED亮;反之,继续下一步。数码管初始化,并将A/D转换后的十六进制数值转换为十进制数值并显示输出。
4 结束语
该方案具有节约接口资源,CPU利用率高,执行速度快,简单易行等特点,具有推广价值。但基于系统本身及器件转换中存在误差的缺点,该设计还需进一步提高控制精度,减小误差,从而提高系统的整体性能。
关键字:51单片机 温度采集
引用地址:
51单片机用于温度采集与控制系统的设计
推荐阅读最新更新时间:2024-03-16 12:43
单片机学习笔记51单片机基础
1980年因特尔退出MCS-51单片机 现在扩展告诉IO口 AD转换器 PWM WDT(看门狗) IIC等 MCS-51停产 与MCS-51兼容的有 Atmel公司 AT89C5X 停产 不支持ISP下载 已经被AT89S5X取代 这个可以ISP下载 SST公司 SST89E5X 带监控程序 可以简单仿真 宏晶STC(大陆的) STC89C5X 支持串口下载 STC89C52 AT表示 Atmel公司的芯片 9表示flash存储器 S表示可以下载的flash LV表示低电压 3.3V 52是型号 2表示8K的ROM 24表示最高使用晶振24M P表示双列直插封装的 D陶瓷封装
[单片机]
51单片机教程第3讲-控制引脚
在51单片机教程第1讲中,我已经说过,学单片机就是两个内容,一个是学习控制单片机引脚,一个是学习单片机内部寄存器的配置。这一讲,来学习如何控制51单片机的引脚。 控制单片机的引脚,分为两个知识点,一个是怎么让引脚单片机输出高低电平,一个是怎么检测接入到引脚上的电平是高还是低。我们有时候会听到这样的话:“此单片机有几个IO口?”这里说的IO口,就是输入(input)输出(output)接口。一般情况下,单片机的引脚当中,除了电源引脚和晶振引脚,其它的都是IO口。当我们控制单片机的引脚高低时,我们把引脚当做输出引脚;当我们需要检测连接到单片机引脚上的电平时,我们把引脚当做输入引脚使用。 使引脚P1.5输出高电平,可以这样写: P1=0
[单片机]
基于51单片机-C语言之预处理总结
预处理命令由符号“#”开头,包括宏定义,文件包含,条件处理三个部分。 其中条件编译我还没有用过,所以就详细介绍一下宏定义和文件包含。 一.宏定义 宏定义命令为#define,它的作用就是实现用一个简单易读的字符串来代替 另一个字符串。增加程序的可读性,和维护性。 宏定义分为不带参数的宏定义,和带参数的宏定义。 不带参的宏定义: 一般格式:#define 标识符 常量表达式 例如用一个字符代替一个常数 #define PI 3.1415926 当程序中出现3.1415926这个常数的时候就可以用PI这个字符代替,如果想修改这个常数只需要修改这个宏定义中的常数,就可以达到修改整个文件中这个常数的
[单片机]
基于51单片机利用中断实现100以内的按键计数
具体功能实现: 按下“计数”按键可以自增1,按下“清零”按键可以将两位数码管全部置0 使用器件: 两只数码管、总线、排阻、两个按键、AT89C51芯片 Proteus仿真原理图: 仿真: 知识介绍 : Proteus布线 为了让整个原理图看上去简洁明了,我们对元器件的导线进行标号,而不是直接和芯片相连。 数码管共阳、阳极断码 共阳极(1-9): 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 共阴极(1-9): 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f 中断系统 执行现程序的过程中,出现某些急需处理的异常情况或
[单片机]
构造一个51单片机的实时操作系统的方法
目前,大多数的产品开发是在基于一些小容量的单片机上进行的。51系列单片机,是我目前使用最多的单片机系列之一,有非常广大的应用环境与前景,多年来的资源积累,使51系列单片机仍是许多开发者的首选。针对这种情况,近几年涌现出许多基于51内核的扩展芯片,功能越来越齐全,速度越来越快,也从一个侧面说明了51系列单片机在国内的生命力。 多年来我们一直想找一个合适的实时操作系统,作为自己的开发基础。根据开发需求,整合一些常用的嵌入式构件,以节约开发时间,尽最大可能地减少开发工作量;另外,要求这个实时操作系统能非常容易地嵌入到小容量的芯片中。毕竟,大系统是少数的,而小应用是多数而广泛的。显而易见,μC/OS—II是不太适合于以上要求的,而Keil
[单片机]
51单片机编程之蜂鸣器响生日快乐
附上电路图: (资料大多引用于网上的大神) #include reg51.h #define uint unsigned int #define uchar unsigned char sbit speaker=P1^0; //学校给的学习板次了点,用两个I/O口控制蜂鸣器。不过大多数的学习板是一个I/O口控制。 sbit speaker1=P1^1; //如果你的板是一个I/O控制的,这行可以删掉。 uint k,i; unsigned char timer0h,timer0l,time; //生日歌 code unsigned char sszymmh ={ 5,1,1, 5,1,1, 6
[单片机]
关于51单片机电子时钟精度的问题
前几天用STC89C52单片机制作了一个电子时钟,经过一段时间的实验,发现时间精度存在误差,一分钟慢4秒左右。 这可了不得,十分钟就要慢40秒,一天下来不得慢半96分钟!!! 这个单片机晶振频率为11.0592mhz,和大部分时钟的晶振频率相同,应该没有问题。 后天考虑到源代码: 在定时器中断函数里: void t0(void) interrupt 1 using 0 { tcount++; if(tcount==4000) {tcount=0; second++; if(second==60) {second=0; minute++; if(minute==60) {minute=0;
[单片机]
51单片机边沿触发中断响应时刻的测量
MCS51单片机系列属于8位单片机,它是Intel公司继MCS48系列的成功设计之后,于1980年推出的产品。由于MCS51系列具有很强的片内功能和指令系统,因而使单片机的应用发生了一个飞跃,这个系列的产品也很快成为世界上第二代的标准控制器。51系列单片机有5个中断源,其中有2个是外部输入中断源INT0和INT1。可由中断控制寄存器TCON的IT1(TCON.2)和IT0(TCON.1)分别控制外部输入中断1和中断0的中断触发方式。若为0,则外部输入中断控制为电平触发方式;若为1,则控制为边沿触发方式。这里是下降沿触发中断。 1 问题的引出 几乎国内所有的单片机资料对单片机边沿触发中断的响应时刻方面的定义都是不明确的或者是错误
[单片机]