单片机原理与应用课程设计温度控制系统.docx
《单片机原理与应用课程设计温度控制系统.docx》由会员分享,可在线阅读,更多相关《单片机原理与应用课程设计温度控制系统.docx(23页珍藏版)》请在冰豆网上搜索。
单片机原理与应用课程设计温度控制系统
苏州市职业大学
实习(实训)报告
名称单片机原理与应用课程设计
2013年2月25日至2013年3月1日共1周
院 系
班级
姓名
院 主 任
系主任
指导教师
苏州市职业大学
实习(实训)任务书
名称:
单片机原理与应用课程设计
起讫时间:
2013-2-25-2013-3-1
院系:
电子信息工程系
班 级:
指导教师:
系主任:
一、实习(实训)目的和要求
1.掌握使用MSC51单片机编译软件的方法;
2.掌握常用温度测量方法,了解各种传感器工作原理;
3.设计电路并确定电路参数;
4.完成课程设计说明书,内容:
原理分析、计算说明、调试报告、心得体会;
5.将结果向指导教师演示,由教师提问验收通过。
二、实习(实训)内容
1.目录;
2.单片机结构、原理;
3.温度控制系统硬件设计(原理图、原理图分析);
4.软件设计,软件流程图,调试过程;
5.硬件、软件程序清单。
三、实习(实训)方式
√集中□分散√校内□校外
四、实习(实训)具体安排
1.集中讲解;
2.查阅资料,设计电路;
3.程序调试;
4.完成课程设计说明书,内容:
原理分析、计算说明、调试报告、程序、心得体会;
5.验收,交课程设计报告。
五、实习(实训)报告内容
目录
第一章摘要7
第二章芯片资料8
一、AT89C51单片机说明8
1、简介8
2、引脚说明8
3、引脚第二功能8
二、NTC负温度系数热敏电阻工作原理10
1、简介10
2、工作原理10
三、TLC549芯片11
1、概述11
2、工作原理11
3、工作时序图11
4.、应用接口及采样程序12
四、AT24C02芯片13
1、概述13
2、管脚配置管脚封装13
3、功能描述13
4、结构与寻址13
第三章项目设计14
一、设计电路图14
二、程序设计15
第四章总结报告19
第一章摘要
第二章芯片资料
一、AT89C51单片机说明
1、简介
89C51是一种高性能低功耗的采用CMOS工艺制造的8位微控制器,它提供下列标准特征:
4K字节的程序存储器,128字节的RAM,32条I/O线,2个16位定时器/计数器,一个5中断源两个优先级的中断结构,一个双工的串行口,片上震荡器和时钟电路。
2、引脚说明
•VCC:
电源电压
•GND:
地
•P0口:
P0口是一组8位漏极开路型双向I/O口,作为输出口用时,每个引脚能驱动8个TTL逻辑门电路。
当对0端口写入1时,可以作为高阻抗输入端使用。
当P0口访问外部程序存储器或数据存储器时,它还可设定成地址数据总线复用的形式。
在这种模式下,P0口具有内部上拉电阻。
在EPROM编程时,P0口接收指令字节,同时输出指令字节在程序校验时。
程序校验时需要外接上拉电阻。
•P1口:
P1口是一带有内部上拉电阻的8位双向I/O口。
P1口的输出缓冲能接受或输出4个TTL逻辑门电路。
当对P1口写1时,它们被内部的上拉电阻拉升为高电平,此时可以作为输入端使用。
当作为输入端使用时,P1口因为内部存在上拉电阻,所以当外部被拉低时会输出一个低电流(IIL)。
•P2口:
P2是一带有内部上拉电阻的8位双向的I/O端口。
P2口的输出缓冲能驱动4个TTL逻辑门电路。
当向P2口写1时,通过内部上拉电阻把端口拉到高电平,此时可以用作输入口。
作为输入口,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出电流(IIL)。
P2口在访问外部程序存储器或16位地址的外部数据存储器(例如MOVX@DPTR)时,P2口送出高8位地址数据。
在这种情况下,P2口使用强大的内部上拉电阻功能当输出1时。
当利用8位地址线访问外部数据存储器时(例MOVX@R1),P2口输出特殊功能寄存器的内容。
当EPROM编程或校验时,P2口同时接收高8位地址和一些控制信号。
•P3口:
P3是一带有内部上拉电阻的8位双向的I/O端口。
P3口的输出缓冲能驱动4个TTL逻辑门电路。
当向P3口写1时,通过内部上拉电阻把端口拉到高电平,此时可以用作输入口。
作为输入口,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出电流(IIL)。
P3口同时具有AT89C51的多种特殊功能,具体如下
3、引脚第二功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2(外部中断0)
P3.3(外部中断1)
P3.4T0(定时器0)
P3.5T1(定时器1)
P3.6(外部数据存储器写选通)
P3.7(外部数据存储器都选通)
图1单片机引脚图
•RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期的高电平将使单片机复位。
•ALE/:
当访问外部存储器时,地址锁存允许是一输出脉冲,用以锁存地址的低8位字节。
当在Flash编程时还可以作为编程脉冲输出()。
一般情况下,ALE是以晶振频率的1/6输出,可以用作外部时钟或定时目的。
但也要注意,每当访问外部数据存储器时将跳过一个ALE脉冲。
•PSEN:
程序存储允许时外部程序存储器的读选通信号。
当AT89C52执行外部程序存储器的指令时,每个机器周期两次有效,除了当访问外部数据存储器时,将跳过两个信号。
•VPP:
外部访问允许。
为了使单片机能够有效的传送外部数据存储器从0000H到FFFH单元的指令,必须同GND相连接。
需要主要的是,如果加密位1被编程,复位时EA端会自动内部锁存。
当执行内部编程指令时,应该接到VCC端。
•XTAL1:
振荡器反相放大器以及内部时钟电路的输入端。
•XTAL2:
振荡器反相放大器的输出端。
二、NTC负温度系数热敏电阻工作原理
1、简介
NTC是NegativeTemperatureCoefficient的缩写,意思是负的温度系数,泛指负温度系数很大的半导体材料或元器件,所谓NTC热敏电阻器就是负温度系数热敏电阻器。
它是以锰、钴、镍和铜等金属氧化物为主要材料,采用陶瓷工艺制造而成的。
这些金属氧化物材料都具有半导体性质,因为在导电方式上完全类似锗、硅等半导体材料。
温度低时,这些氧化物材料的载流子(电子和孔穴)数目少,所以其电阻值较高;随着温度的升高,载流子数目增加,所以电阻值降低。
NTC热敏电阻器在室温下的变化范围在10O~欧姆,温度系数-2%~-6.5%。
NTC热敏电阻器可NTC热敏电阻器广泛用于测温、控温、温度补偿等方面.
2、工作原理
NTC(NegativeTemperatureCoefficient)是指随温度上升电阻呈指数关系减小、具有负温度系数的热敏电阻现象和材料.该材料是利用锰、铜、硅、钴、铁、镍、锌等两种或两种以上的金属氧化物进行充分混合、成型、烧结等工艺而成的半导体陶瓷,可制成具有负温度系数(NTC)的热敏电阻.其电阻率和材料常数随材料成分比例、烧结气氛、烧结温度和结构状态不同而变化.现在还出现了以碳化硅、硒化锡、氮化钽等为代表的非氧化物系NTC热敏电阻材料.
图2NTC负温度系数热敏电阻温度范围
它的测量范围一般为-10~+300℃,也可做到-200~+10℃,甚至可用于+300~+1200℃环境中作测温用.
负温度系数热敏电阻器温度计的精度可以达到0.1℃,感温时间可少至10s以下.它不仅适用于粮仓测温仪,同时也可应用于食品储存、医药卫生、科学种田、海洋、深井、高空、冰川等方面的温度测量.
三、TLC549芯片
1、概述
TLC548,TLC549是美国德州仪器公司生产的8位串行A/D转换器芯片,可与通用微处理器、控制器通过I/OCLOCK、CS、DATAOUT三条口线进行串行接口。
具有4MHz片内系统时钟和软、硬件控制电路,转换时间最长17s,TLC548允许的最高转换速率为45500次/s,TLC549为40000次/s。
总失调误差最大为0.5LSB,典型功耗值为6mW。
采用差分参考电压高阻输入,抗干扰,可按比例量程校准转换范围,VREF-接地,VREF+-VREF-1V,可用于较小信号的采样。
2、工作原理
TLC549均有片内系统时钟,该时钟与I/OCLOCK是独立工作的,无须特殊的速度或相位匹配。
其工作时序如图2所示。
当CS为高时,数据输出(DATAOUT)端处于高阻状态,此时I/OCLOCK不起作用。
这种CS控制作用允许在同时使用多片TLC548、TLC549时,共用I/OCLOCK,以减少多路(片)A/D并用时的I/O控制端口。
一组通常的控制时序为:
(1)将CS置低。
内部电路在测得CS下降沿后,再等待两个内部时钟上升沿和一个下降沿后,然后确认这一变化,最后自动将前一次转换结果的最高位(D7)位输出到DATAOUT端上。
(2)前四个I/OCLOCK周期的下降沿依次移出第2、3、4和第5个位(D6、D5、D4、D3),片上采样保持电路在第4个I/OCLOCK下降沿开始采样模拟输入。
(3)接下来的3个I/OCLOCK周期的下降沿将
摘要:
TLC548、TLC549是采用LinCMOSTM技术,以开关电容逐次逼近原理工作的8位串行A/D
芯片。
单电源3V~6V供电范围,控制口线少,时序简单,转换速度快,功耗低,价格便宜,适用于低功耗的袖珍仪器上的单路A/D采样,也可将多个器件并联使用。
(4)最后,片上采样保持电路在第8个I/OCLOCK周期的下降沿将移出第6、7、8(D2、D1、D0)个转换位。
保持功能将持续4个内部时钟周期,然后开始进行32个内部时钟周期的A/D转换。
第8个I/OCLOCK后,CS必须为高,或I/OCLOCK保持低电平,这种状态需要维持36个内部系统时钟周期以等待保持和转换工作的完成。
如果CS为低时I/OCLOCK上出现一个有效干扰脉冲,则微处理器/控制器将与器件的I/O时序失去同步;若CS为高时出现一次有效低电平,则将使引脚重新初始化,从而脱离原转换过程。
在36个内部系统时钟周期结束之前,实施步骤
(1)-(4),可重新启动一次新的A/D转换,与此同时,正在进行的转换终止,此时的输出是前一次的转换结果而不是正在进行的转换结果。
若要在特定的时刻采样模拟信号,应使第8个I/OCLOCK时钟的下降沿与该时刻对应,因为芯片虽在第4个I/OCLOCK时钟下降沿开始采样,却在第8个I/OCLOCK的下降沿开始保存。
3、工作时序图
图3TLC549工作时序图
4.、应用接口及采样程序
TLC549可方便地与具有串行外围接口(SPI)的单片机或微处理器配合使用,也可与51系列通用单片机连接使用。
与51系列单片机的接口如图3所示。
其采样程序框图如图4所示,实际应用程序清单如下:
;初始化:
SETBP1.2;置CS为1。
CLRP1.0;置I/OCLOCK为零。
MOVR0,#00H;移位计数为零。
;A/D过程:
A/DP:
CLRP1.2
NOP;等待1.4s,nop数根据晶振情况选择。
NXT:
SETBP1.0
MOVC,P1.1
RLCA
CLRP1.0
INCR0
CJNER0,#8,NXT
MOVR0,#00
SETBP1.2
MOVDTSVRM,A;DTSVRM:
DATASAVERAM.
RET
TLC549片型小,采样速度快,功耗低,价格便宜,控制简单。
适用于低功耗的袖珍仪器上的单路A/D或多路并联采样。
四、AT24C02芯片
1、概述
AT24C02是一个2K位串行CMOSE2PROM,内部含有256个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗。
AT24C02有一个16字节页写缓冲器。
该器件通过IIC总线接口进行操作,有一个专门的写保护功能。
2、管脚配置管脚封装
DIP:
双列直插式封装,是最简单的一种封装技术。
管脚名称功能A0、A1、A2器件地址选择SDA串行数据、地址SCL串行时钟WP写保护VCC+1.8V~6.0V工作电压VSS地
3、功能描述
AT24C02支持I2C,总线数据传送协议I2C,总线协议规定任何将数据传送到总线的器件作为发送器。
任何从总线接收数据的器件为接收器。
数据传送是由产生串行时钟和所有起始停止信号的主器件控制的。
主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据(发送或接收)的模式,通过器件地址输入端A0、A1和A2可以实现将最多8个AT24C02器件连接到总线上。
AT24C02串行时钟输入管脚用于产生器件所有数据发送或接收的时钟,这是一个输入管脚。
SDA串行数据/地址AT24C02双向串行数据/地址管脚用于器件所有数据的发送或接收,SDA是一个开漏输出管脚,可与其它开漏输出或集电极开路输出进行线或(wire-OR)。
A0、A1、A2器件地址输入端这些输入脚用于多个器件级联时设置器件地址,当这些脚悬空时默认值为0。
当使用AT24C02时最大可级联8个器件。
如果只有一个AT24C02被总线寻址,这三个地址输入脚(A0、A1、A2)可悬空或连接到Vss,如果只有一个AT24C02被总线寻址这三个地址输入脚(A0、A1、A2)必须连接到Vss。
WP写保护如果WP管脚连接到Vcc,所有的内容都被写保护只能读。
当WP管脚连接到Vss或悬空允许器件进行正常的读/写操作
4、结构与寻址
AT24C02的存储容量为2Kb,内容分成32页,每页8B,共256B,操作时有两种寻址方式:
芯片寻址和片内子地址寻址。
(1)芯片寻址:
AT24C02的芯片地址为1010,其地址控制字格式为1010A2A1A0R/W。
其中A2,A1,A0可编程地址选择位。
A2,A1,A0引脚接高、低电平后得到确定的三位编码,与1010形成7位编码,即为该器件的地址码。
R/W为芯片读写控制位,该位为0,表示芯片进行写操作。
(2)片内子地址寻址:
芯片寻址可对内部256B中的任一个进行读/写操作,其寻址范围为00~FF,共256个寻址单位。
第三章项目设计
一、设计电路图
二、程序设计
;**********************************
;难点,EEPROM的读写
;A/D数据读取
;*************************************
WXEQUP3.5
DXEQUP3.6
AD_CSEQUP1.2
AD_CLKEQUP1.0
AD_DOEQUP1.1
RELAYEQUP1.3
SDAEQUP1.6
SCLEQUP1.5
TEMPEQU30H
TEMP_SEQU31H
SD_JGEQU32H;闪动间隔
TEMP_TEQU33H;采集数据暂存
SDEQU20H.0
SD_KGEQU20H.1
XS_IOEQUP0
KEY_IOEQUP2
;***********************************
ORG0000H
AJMPMAIN
ORG000BH
AJMPAD_P
;***********************************
MAIN:
MOVDPTR,#TAB
MOVSP,#5FH
;--------------------
LCALLW_START;当前地址读
MOVA,#0A0H;写设备地址,第0位为1为读
LCALLWRITE
MOVA,#01H;写数据地址
LCALLWRITE
LCALLW_START
MOVA,#0A1H;写设备地址
LCALLWRITE
LCALLREAD
MOVTEMP_S,A
LCALLW_STOP
;---------------------
MOVSD_JG,#5
SETBSD
SETBSD_KG
MOVTMOD,#01H
MOVTH0,#3CH
MOVTL0,#0B0H
SETBEA
SETBET0
SETBTR0
LOOP:
LCALLDISP
LCALLKEY_SCAN
JZLOOP
LCALLTZ_TEMP
AJMPLOOP
;***************************AT24C02保存
W_START:
CLRSCL;I2C总线通讯开始
LCALLS_NOP
SETBSDA
LCALLS_NOP
SETBSCL
LCALLS_NOP
CLRSDA
LCALLS_NOP
CLRSCL
RET
;---------------
W_STOP:
CLRSCL;结束
LCALLS_NOP
CLRSDA
LCALLS_NOP
SETBSCL
LCALLS_NOP
SETBSDA
LCALLS_NOP
RET
;----------------------
WRITE:
MOVR3,#8;逐位发送
W_NEXT:
CLRSCL
RLCA
MOVSDA,C
SETBSCL
CLRSCL
DJNZR3,W_NEXT
SETBSCL
LCALLS_NOP
CLRSCL
LCALLS_NOP
RET
;-----------------------
READ:
MOVR3,#8;逐位接收
R_NEXT:
CLRSCL
LCALLS_NOP
SETBSCL
LCALLS_NOP
MOVC,SDA
RLCA
CLRSCL
DJNZR3,R_NEXT
CLRSCL
LCALLS_NOP
SETBSCL
LCALLS_NOP
RET
;-----------------------------
S_NOP:
NOP
NOP
NOP
NOP
RET
;**********************************
TZ_TEMP:
CJNEA,#1,TZ_END
LP1:
LCALLDISP
LCALLKEY_SCAN
JNZLP1
CLRSD_KG
LP2:
LCALLDISP
LCALLKEY_SCAN
JZLP2
CJNEA,#1,TZ_INC
LP3:
LCALLDISP
LCALLKEY_SCAN
JNZLP3
SETBSD_KG
SETBSD
;----------------------
LCALLW_START;设置完毕,写入E2ROM
MOVA,#0A0H;写入设备地址,第0位为0为写
LCALLWRITE
MOVA,#01H;写入数据地址
LCALLWRITE
MOVA,TEMP_S;写入数据
LCALLWRITE
LCALLW_STOP
;-------------------------
AJMPTZ_END
TZ_INC:
CJNEA,#2,TZ_DEC;设置温度加一按钮0-99
LP4:
LCALLDISP
LCALLKEY_SCAN
JNZLP4
MOVA,TEMP_S
CJNEA,#99,INC_NEXT
MOVTEMP_S,#0
AJMPLP2
INC_NEXT:
INCTEMP_S
AJMPLP2
TZ_DEC:
;----设置温度减一按钮99-0
LP5:
LCALLDISP
LCALLKEY_SCAN
JNZLP5
MOVA,TEMP_S
CJNEA,#0,DEC_NEXT
MOVTEMP_S,#99
AJMPLP2
DEC_NEXT:
DECTEMP_S
AJMPLP2
TZ_END:
RET
;******************************
AD_P:
PUSHACC
PUSHPSW
PUSHDPH
PUSHDPL
MOVTH0,#3CH
MOVTL0,#0B0H
JBSD_KG,AD_NEXT1
DJNZSD_JG,AD_NEXT1
MOVSD_JG,#5
CPLSD
;---------------------------
AD_NEXT1:
SETBAD_CS;读取A/D转换数值,结果在A中
CLRAD_CLK
MOVR2,#8
CLRAD_CS
LCALLS_NOP
NEXT:
SETBAD_CLK
MOVC,AD_DO
RLCA
CLRAD_CLK
DJNZR2,NEXT
MOVR2,#8
SETBAD_CS
;-------------------
MOVTEMP,#0;温度查表
MOVTEMP_T,A
MOVA,#0
MOVDPTR,#TAB1
CX_LP:
MOVCA,@A+DPTR
CJNEA,TEMP_T,NEXT1
NEXT1:
JCNEXT5
AJMPNEXT6
NEXT5:
MOVA,TEMP
CJNEA,#99,NEXT7;检查当前温度值是否超过99
NEXT7:
JCNEXT8
MOVTEMP,#0;超出赋0
AJMPNEXT6
NEXT8:
INCTEMP
INCA
AJMPCX_LP
;-------------------------
NEXT6:
MOVA,TEMP;控制继电器部分
CJNEA,TEMP_S,NEXT2
NEXT2:
JCNEXT3
SETBRELAY
AJMPNEXT4
NEXT3:
CLRRELAY
NEXT4:
POPDPL
POPDPH
POPPSW
POPACC
RETI
;*******************************
DISP:
MOVDPTR,#TAB
JNBSD,D_NEXT
MOVB,#10;显示设置温度
MOVA,TEMP_S
DIVAB
MOVCA,@A+DPTR
MOVXS_IO,#B
SETBWX
CLRWX
MOVXS_IO,A
SETBDX
CLRDX
LCALLDELAY
MOVA,B
MOVCA,@A+DPTR