基于MCS51单片机的温度测量系统.docx

上传人:b****7 文档编号:9334266 上传时间:2023-02-04 格式:DOCX 页数:31 大小:449.72KB
下载 相关 举报
基于MCS51单片机的温度测量系统.docx_第1页
第1页 / 共31页
基于MCS51单片机的温度测量系统.docx_第2页
第2页 / 共31页
基于MCS51单片机的温度测量系统.docx_第3页
第3页 / 共31页
基于MCS51单片机的温度测量系统.docx_第4页
第4页 / 共31页
基于MCS51单片机的温度测量系统.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

基于MCS51单片机的温度测量系统.docx

《基于MCS51单片机的温度测量系统.docx》由会员分享,可在线阅读,更多相关《基于MCS51单片机的温度测量系统.docx(31页珍藏版)》请在冰豆网上搜索。

基于MCS51单片机的温度测量系统.docx

基于MCS51单片机的温度测量系统

 

 

第一章MSC51单片机的结构与原理

1.1MSC51单片机的发展

随着集成电路技术的发展,单片微型计算机的功能也不断增强,许多高性能的新型机种不断涌现出来。

单片机以其功能强、体积小、可靠性高、造价低和开发周期短等优点,称为自动化和各个测控领域中广泛应用的器件,在工业生产中称为必不可少的器件,尤其是在日常生活中发挥的作用也越来越大。

单片机作为微型计算机的一个重要分支,应用面很广,发展很快。

自单片机诞生至今,已发展为上百种系列的近千个机种。

1.2单片机的结构

1.2.1MSC51单片机的基本结构

图1.1单片机的基本结构

图中包括:

1.一个8位中央处理器CPU数据处理、测试位,置位,复位,位操作

2. 数据存储器RAM(128B与SFR)在程序运行时存储工作变量和资料

3.程序存储器ROM(4KB或8KB)永久性存储应用程序,掩模ROM、EPROM、EEPROM

4.并行输入/输出口(I/O)作系统总线、扩展外存、I/O接口芯片

5.串行输入/输出口(2条)串行通信、扩展I/O接口芯片

6.定时/计数器(16位)计满溢出、中断标志置位、向CPU提出中断请求,与CPU之间独立工作

7.中断控制系统2个外中断、2个定时/计数器中断、1个串行口终端

8.时钟电路内振外振

1.2.2单片机的内部结构

单片机由CPU、存储器(包括RAM和ROM)、I/O接口、定时/计数器、中断控制功能等均集成在一块芯片上,片内各功能通过内部总线相互连接起来。

图1.2单片机的内部结构

1.3单片机的引脚

单片机实际有效的引脚共有40个,有三种封装形式。

引脚主要有:

主电源引脚GND和VCC,时钟电路引脚,控制信号引脚,输入输出引脚,RST复位引脚,XTAL1、XTAL2接外部晶体的引脚等。

下图是DIP封装形式,这是普通的40脚双列直插形式。

为了尽可能缩小体积,减少引脚数,单片机的不少引脚具有第二功能,也称为复用功能。

图1.3单片机引脚图

1.4MCS51的存储器结构

MCS-51的程序存储器与数据存储器是分开的,体系结构为哈佛结构。

1.4.1程序存储器ROM

1、程序存储器作用及寻址范围

作用:

存放指令(程序)的存储器,用PC作地址指针。

寻址范围:

0000~FFFFH,共64KB;片内、片外统一编址。

片内:

PC=0000~0FFFH;片外:

PC=1000~FFFFH

2、ROM低端的几个特殊入口地址

0000H:

CPU开始执行指令时的第一个取指单元,执行时PC的内容从0000H开始;

0003H~0002B:

中断专用固定入口地址(系统规定);

1.4.2数据存储器RAM

1、片内128字节的数据存储器可分为三部分

(1)工作寄存器区0~3区

地址从00H~1FH,共有32个字节。

每8个字节(记作R0~R7)构成一个区,共4个区。

工作寄存器区的选择由程序状态字PSW中的RS1和RS0位的值来确定。

(2)位寻址区

该区域地址从20H到2FH,共16个字节,128位,使用指令可寻址到位。

(3)数据区

地址从30H到7FH,共80个字节,可作为用户数据存储器,按字节访问。

用户堆栈通常在该区域开辟。

2、特殊功能寄存器区SFR

8051把CPU中的专用寄存器、并行端口锁存器、串行口与定时器/计数器内的控制寄存器等集中安排到一个区域,离散地分布在地址80H~FFH范围内,这个区域称为特殊功能寄存器区SFR。

图1.4片内数据存储器RAM地址空间

 

第二章温度控制系统硬件设计

2.1系统使用的仪器设备及芯片

此温度控制系统使用的仪器和设备主要有PC机、WAVE软件、E51/S仿真器+POD8X5X仿真头、MULT_51C实验板、仿真器专用电源等,所使用的芯片有串行E2PROM芯片AT24C02、串行A/D转换芯片TLC1549、8D锁存器74573、LED数码显示器等。

2.2实验相关芯片介绍

2.2.1串行E2PROM芯片AT24C02

AT24C02是带I2C总线接口的E2PROM存储器,具有掉电记忆功能,并内含256×8位存储空间,具有+5V单电源供电、二线串行接口、低功耗CMOS技术、双向数据传输协议、8字节页面写模式、允许写部分页面、自定时写周期、内部结构256X8(2K)、工作电压宽(2.5~5.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)高可靠性,数据保留时间长等特点。

图2.1AT24C02芯片工作及引脚图

表2.1AT24C02芯片引脚功能说明

序号

符号

功能

直流电压(V)

1

A0

地址输入

0

2

A1

地址输入

0

3

A2

地址输入

0

4

GND

接地

0

5

SDA

串行数据输入/输出

4.5

6

SCL

串行时钟输入

4.5

7

WP

写保护

0

8

Vcc

电源

5

 

I2C数据传送过程如下:

图2.2数据传送过程

在数据传送过程中,必须确认数据传送的开始和结束。

当时钟线SCL为高电平时,数据线SDA由高电平跳变为低电平定义为“开始”信号;当SCL线为高电平时,SDA线发生低电平到高电平的跳变为“结束”信号。

开始和结束信号都是由主器件产生。

在开始信号以后,总线即被认为处于忙状态;在结束信号以后的一段时间内,总线被认为是空闲的。

在设计硬件中,该芯片串行实现与单片机传输数据的传送。

该芯片的SCL和SDA与单片机的P1.5与P1.6连接。

该设计中式实现设定温度的存储。

2.2.2串行A/D转换芯片TLC1549

TLC1549是以10位开关电容逐次逼近式A/D转换器为基础而构造的一种低价位、高性能的8位CMOSA/D转换器,它以8位开关电容逐次逼近的方法实现A/D转换,其转换速度小于17us,它能方便地采用三线串行接口方式与各种微处理器连接,构成各种廉价的测控应用系统。

具有片内提供4MHz内部系统时钟,并与操作控制用的外部I/OCLOCK相互独立、存取与转换时间转换速率达40000次/秒、差分高阻抗基准电压输入等特点。

图2.3TLC1549芯片的引脚图

表2.2LTC1549芯片引脚功能说明

序号

符号

功能

电压(V)

1

REF+

正基准电压输入端

2.5V≤REF+≤Vcc+0.1

2

ANALOG

模拟信号输入端

1或0

3

REF-

负基准电压输入端

-0.1V≤REF-≤2.5V

4

GND

接地

0

5

/CS

芯片选择输入端

VIN≥2V或≤0.8V

6

DATAOUT

转换结果数据串行输出端

高位在前,低位在后

7

I/OCLOCK

外接输入/输出时钟输入端

0

8

Vcc

电源

3V~6V

 

单片机的P1口相关引脚相连,温度传感器和电阻分压后经其转换为数字量,将温度转换为数字量传入单片机。

本系统的温度采集模块,主要采用的是热敏电阻器NTC对温度进行测量,测量的温度的模拟量送入到A/D转换器(TLC549),经转换成数字量输出。

实验图如下

图2.4串行A/D转换图

2.2.38D锁存器74573

74HC373的输出端O0~O7可直接与总线相连。

当三态允许控制端OE为低电平时,O0~O7为正常逻辑状态,可用来驱动负载或总线。

当OE为高电平时,O0~O7呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。

当锁存允许端LE为高电平时,O随数据D而变。

当LE为低电平时,O被锁存在已建立的数据电平。

 

图2.58D锁存器74573的引脚排列

在硬件电路中使用两个74573,通过OC选通其中一个锁存器,一个用于控制LED数码管的字段,通过P0口输入要显示的数码管字段所表示的8位,另一个用于控制LED数码管的字位,将其输出端控制scanf0--scanf4选择哪一个数码管工作,scanf5与P2口联系,将其键盘输入读入,判断哪一个键按下。

2.3LED数码管显示器

单片机中通常使用的是由7个发光二极管,即七段LED按“日”字排列成的数码管。

七段LED的阳极连在一起称为共阳极接法,而阴极连在一起称为极接法。

每段LED的笔画分别称为a、b、c、d、e、f、g,另有一段构成小数点。

图2.6(a)LED器件(b)共阳极接法(c)共阴极接法

在选用共阴的LED时,只要在某一个发光二极管加上高电平,该段即点亮,反之则暗。

而选共阳的LED时,要使某一段发光二极管发亮,则需加上低电平,反之则暗,为了保护各段LED不被损坏,需外加限流电阻。

为了要显示某个字形,则应使此字形的相应段点亮,也即送一个不同的电平组合代表的数据来控制LED的显示字形,此数据称为字符的段码。

数据字位数与LED段码的关系如表所示:

表2.3数据字位数与LED段码的关系

数据位数

D7

D6

D5

D4

D3

D2

D1

D0

LED段码

dp

g

f

e

d

c

b

a

在该设计中用到4个LED显示数码管,分别显示设计的温度和实际测量的温度。

与上述的锁存器配合,显示相应的数值。

实验电路图如下:

图2.7静态按键、LED显示

 

第3章温度控制系统软件设计

3.1温度控制系统软件实验内容

温度传感器和电阻分压后的电压经TLC1549连续采样、转换为数字量,通过编程得到实际温度值,送入DISP3和DISP4两个内部RAM单元中;通过键盘输入温度设定值,送入AT24C02中保存。

显示时从AT24C02中取出温度设定值,送入DISP1和DISP2两个内部RAM单元中。

显示程序将DISP1~DISP4中的内容显示在4位LED上。

通过对温度的设定值与实际值的比较、判断,实现温度控制。

3.2软件设计

此程序是由4位LED数码管动态显示、静态按键显示、I2C总线实验—AT24C02串行E2PROM、串行A/D转换器TLC549等实验综合写成。

1.主函数MAIN子程序

首先初始化所有的寄存器的值,包括定时器的初始值,设定温度的初始值,显示的初始值,按调用按键扫描,判断有无键按下,然后修改温度的设定值,再将设定后的值送入DISPLAY1/2中,在通过显示的时间是否为500ms,时间没到的话就继续循环等待,到了500MS后就可以通过AT24C02存储器写入重新设定的值,而同时由中断系统始终不断输出实测的和设定的温度。

2.数码管动态显示子程序

经过定时器T1中断处理实现显示,分别调用DISOUT0实现选中数码管,在调用DISOUT1中的查表来实现数码管显示温度数值目的。

3.按键处理子程序

通过按键控制设置温度加减,循环查询,通过检测p2口的按键,利用CJNEA,#0F0H,MAY_KEY比较用SCAN5判断是否有键按下,按键“1”时,设定的温度值加1,按键“2”时,设定的温度值减1。

4.A/D转换程序

利用TRANS调用ADCA实现采样温度的模拟值转换为数字值,再通过程序MOVCA,A+@DPRT查表得到实际的温度值。

5.读写功能(数据写入、读出子程序)

写入或者读出数据时,通过软件实现串行读出(BD_DATA)或写入(WD_DATA)数据到ACC中。

同时实现开始信号(BSTRAR)、停止信号(BSTOP)、读写字节R/WBATE)的软件编写。

6.延时子程序

通过循环判断DJNE延时或定时器检查TFO是否为1(JBCTFO,LP1)延时。

7.查表程序

利用DB来实现查询。

3.3程序的修改

在源程序的基础上修改了一段程序:

将原来按键“1”设定的温度值加1,按键“2”设定的温度值减1修改为相反功能。

原来的程序修改的程序

WAIT:

WAIT:

;*******按键处理*********;*******按键处理*********

MOVA,TEMP_SETMOVA,TEMP_SET

SUBBA,TEMPCJNEA,TEMP,LOOP

JCOVER0LOOP:

JCOVER0

CLRRELAYCLRRELAY

AJMPPROAJMPPRO

OVER0:

OVER0:

SETBRELAYSETBRELAY

PRO:

PRO:

LCALLKEY_SCANLCALLKEY_SCAN

JZPRO1_ENDJZPRO1_END

CJNEA,#1,NO_1KEYCJNEA,#1,NO_1KEY

MOVA,TEMP_SETMOVA,TEMP_SET

CJNEA,#99,CMP1JZPRO_END

CMP1:

JNCPRO_END

INCTEMP_SETDECTEMP_SET

AJMPPRO_ENDAJMPPRO_END

NO_1KEY:

NO_1KEY:

CJNEA,#2,PRO_ENDCJNEA,#2,PRO_END

MOVA,TEMP_SETMOVA,TEMP_SET

JZPRO_ENDCJNEA,#99,CMP1

DECTEMP_SETCMP1:

JNCPR0_END

AJMPPRO_ENDINCTEMP_SET

AJMPPRO_END

3.4程序流程图

图3.1程序流程图

第四章心得体会

对于单片机的学习,我很是苦恼,刚开始我什么也不懂。

一个简单的程序也要看一个晚上。

可能是太幼稚了,刚开始为了计算机二级,自考根本就没有时间看单片机。

在忙完了这些才开始从头抓起,真的好吃力。

有时在课堂上我也会提出许多简单的问题(在同学看来都是不是问题的问题)可是我不会。

刚开始还是问可是后来就不问了但在课余时间我用了N备的时间为了一个简单的程序在不断的写,不断的记忆。

我知道只有先背过了,才有可能去了解,去运用。

虽然二级勉强过了,可是发觉比别人落后了一步总觉的落后了好多。

曾经一度的后悔,可是已经成为事实,此刻只有用不多的时间才能赶上。

在背了部分的程序后对程序渐渐有了信心,但还是总觉的不如别人,我就不断的告诉自己我不如别人,只有这样,我才能不断的激励自己要坚持学下去。

可是对于知识的积累还需要漫长的过程。

很遗憾的是考完试了,和其他的人一起放纵直到课程设计才回到课本中。

通过这次课程设计,使我对单片机有了进一步的了解,我不知道以后能够用到多少可我觉的既然我学了这一课程,我就要尽力将他学好。

考试只是一个阶段的东西,考试只能说还行,不过我觉的我懂的太少,要想掌握还需要未来的不断努力。

课程设计为我们提供了一个从课本过度到工作中的一个平台。

但这次的课程设计老师已经把程序给了我们,开始我都看不懂,我想假如让我去编写一个程序,此时的我是编不出的。

要能够编出一个完整的程序需要走的路还很长。

学了单片机,我们此刻也只是在婴儿阶段,还是刚出生的婴儿,在学习的过程中,都是付出是别人几倍的时间,可是也得到了和别人相似或差些的成绩。

但是我始终相信机会给于有准备的人。

感谢在我成长中给与我帮助的同学和老师。

 

附录(源程序)

SEL0EQUP3.5

SEL1EQUP3.7

DOUTEQUP1.1

CIOEQUP1.0

CSEQUP1.2

RELAYEQUP1.3

DISP1EQU30H

DISP2EQU31H

DISP3EQU32H

DISP4EQU33H

COUNTEQU34H

TEMPEQU35H

TMPEQU38H

TEMP_SETEQU36H

KEY_LASTEQU37H

CNT500MSEQU39H

F_500MSEQU21H.0

SCANEQU20H

SCAN1EQU20H.0

SCAN2EQU20H.1

SCAN3EQU20H.2

SCAN4EQU20H.3

SCAN5EQU20H.4

SCAN6EQU20H.5

SCAN7EQU20H.6

SCLEQUP1.5

SDAEQUP1.6

 

ORG0000H

LJMPMAIN

ORG001BH

AJMPDISPLAY

MAIN:

MOVTMOD,#00010000B;T1定时器方式1定时

MOVTH1,#0ECH;T1初始值

MOVTL1,#78H

SETBET1;允许T1中断

SETBPT1;设T1为高优先级

SETBEA;允许CPU中断

SETBTR1;开启T1工作

MOVCOUNT,#0

MOVCNT500MS,#0

CLRSET0

CLRSEL1

MOVDISP1,#2

MOVDISP2,#0

MOVDISP3,#0

MOVDISP4,#6

MOVR0,#00H

CLRF_500MS

LCALLRD_DATA;读出芯片的初始值

CJNEA,#99,CMP0;判断温度是否超出99

CMP0:

JCNO_OVER99

MOVR0,#00H;芯片的片地址

MOVR1,#20;设初始温度

LCALLWR_DATA;重新写入初始温度

LCALLRD_DATA;再读出温度

NO_OVER99:

MOVTEMP_SET,A

MOVTMP,A

MOVB,#10;将温度转化为BCD码输出

DIVAB

MOVDISP2,B

MOVDISP1,A

WAIT:

;****************按键处理***********************

MOVA,TEMP_SET;将温度再次写入A中

CJNEA,TEMP,LOOP;所设温度与实测的温度比较

LOOP:

JCOVER0;判断是否溢出

CLRRELAY;没溢出继电器不响

AJMPPR0

OVER0:

SETBRELAY;若溢出继电器响

PR0:

LCALLKEY_SCAN;调用键盘扫描

JZPR01_END;判断是否有键盘按下

CJNEA,#1,NO_1KEY;判断是否为1键

MOVA,TEMP_SET

JZPRO_END;若小于0则不能再减1

DECTEMP_SET;温度减1

AJMPPRO_END

NO_1KEY:

CJNEA,#2,PRO_END;判断按键是否为2键

MOVA,TEMP_SET

CJNEA,#99,CMP1

CMP1:

JNCPRO_END;若大于99则不能加1

INCTEMP_SET;温度加1

AJMPPRO_END

PRO_END:

MOVA,TEMP_SET;这一段将温度转化为BCD码显示

MOVB,#10

DIVAB

MOVDISP2,B

MOVDISP1,A

PRO1_END:

;**************************************************

JNBF_500MS,MYDS;判断是否已经过500MS

CLRF_500MS;若已经经过则清0

AJMPDS_PRO

MYDS:

AJMPWAIT;若没经过则跳转到WAIN继续等待

DS_PRO:

MOVA,TMP;将之前的温度给A

CJNEA,TEMP_SET,NO_XD;判断现设温度是否与之前设的温度相等

AJMPNO_PROSET;若相等直接跳转到NO_PROSET

;*******************不相等则记忆该函数****************

NO_XD:

MOVTMP,TEMP_SET;若不想等则重新刷新温度

MOVR0,#0

MOVR1,TEMP_SET;将重新的而温度赋给R1

LCALLWR_DATA;把重设的温度送入芯片内

;*******************相等则不记忆********************

NO_PROSET:

LCALLTRANS;调用数模转换,等到实测外部的温度

MOVB,#10

DIVAB

MOVDISP3,A;显示实测的温度

MOVDISP4,B

AJMPWAIT

 

DISOUT1:

MOVDPTR,#TAB;温度查表地址

MOVCA,@A+DPTR;将查表的温度送给A

MOVP0,A;将温度送给P0口显示

SETBSEL1;选中控制字段锁存器

NOP

CLRSEL1

RET

DISOUT0:

MOVA,SCAN;将控制允许端送给A

MOVP0,A;在送给P0口

SETBSEL0;选中控制字位

NOP

CLRSEL0

RET

;**************************************************

;显示程序

;**************************************************

DISPLAY:

MOVTH1,#0ECH;重新给T1赋值

MOVTL1,#78H

PUSHACC;保护现场

PUSHPSW

;********500MS产生程序****************中断延时

INCCNT500MS

MOVA,CNT500MS

CJNEA,#100,NO_500MS

MOVCNT500MS,#0

SETBF_500MS

NO_500MS:

;****************************

INCCOUNT;控制数码管的显示顺序

MOVA,COUNT

CJNEA,#1,NO_DIS1;显示第一个数码管

CLRSCAN1

SETBSCAN2

SETBSCAN3

SETBSCAN4

LCALLDISOUT0

MOVA,DISP1

LCALLDISOUT1

MOVA,DISP1

AJMPT1_END

NO_DIS1:

CJNEA,#2,NO_DIS2;显示第二个数码管

SETBSCAN1

CLRSCAN2

SETBSCAN3

SETBSCAN4

LCALLDISOUT0

MOVA,DISP2

LCALLDISOUT1

AJMPT1_END

NO_DIS2:

CJNEA,#3,NO_DIS3;显示第三个数码管

SETBSCAN1

CLRSCAN3

SETBSCAN2

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1