基于MCS51单片机的温度测量系统Word格式文档下载.docx
- 文档编号:22470331
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:31
- 大小:449.72KB
基于MCS51单片机的温度测量系统Word格式文档下载.docx
《基于MCS51单片机的温度测量系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于MCS51单片机的温度测量系统Word格式文档下载.docx(31页珍藏版)》请在冰豆网上搜索。
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
地址输入
2
A1
3
A2
4
GND
接地
5
SDA
串行数据输入/输出
4.5
6
SCL
串行时钟输入
7
WP
写保护
8
Vcc
电源
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)
REF+
正基准电压输入端
2.5V≤REF+≤Vcc+0.1
ANALOG
模拟信号输入端
1或0
REF-
负基准电压输入端
-0.1V≤REF-≤2.5V
/CS
芯片选择输入端
VIN≥2V或≤0.8V
DATAOUT
转换结果数据串行输出端
高位在前,低位在后
I/OCLOCK
外接输入/输出时钟输入端
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:
SETBRELAYSETBRELAY
PRO:
LCALLKEY_SCANLCALLKEY_SCAN
JZPRO1_ENDJZPRO1_END
CJNEA,#1,NO_1KEYCJNEA,#1,NO_1KEY
CJNEA,#99,CMP1JZPRO_END
CMP1:
JNCPRO_END
INCTEMP_SETDECTEMP_SET
AJMPPRO_ENDAJMPPRO_END
NO_1KEY:
NO_1KEY:
CJNEA,#2,PRO_ENDCJNEA,#2,PRO_END
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;
重新写入初始温度
再读出温度
NO_OVER99:
MOVTEMP_SET,A
MOVTMP,A
MOVB,#10;
将温度转化为BCD码输出
DIVAB
MOVDISP2,B
MOVDISP1,A
;
****************按键处理***********************
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
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
显示程序
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
AJMPT1_END
NO_DIS1:
CJNEA,#2,NO_DIS2;
显示第二个数码管
SETBSCAN1
CLRSCAN2
MOVA,DISP2
AJMPT1_END
NO_DIS2:
CJNEA,#3,NO_DIS3;
显示第三个数码管
CLRSCAN3
SETBSCAN2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MCS51 单片机 温度 测量 系统