STC89C52的室内火气安全检测装置设计Word文档下载推荐.docx

上传人:b****6 文档编号:22296335 上传时间:2023-02-03 格式:DOCX 页数:31 大小:250KB
下载 相关 举报
STC89C52的室内火气安全检测装置设计Word文档下载推荐.docx_第1页
第1页 / 共31页
STC89C52的室内火气安全检测装置设计Word文档下载推荐.docx_第2页
第2页 / 共31页
STC89C52的室内火气安全检测装置设计Word文档下载推荐.docx_第3页
第3页 / 共31页
STC89C52的室内火气安全检测装置设计Word文档下载推荐.docx_第4页
第4页 / 共31页
STC89C52的室内火气安全检测装置设计Word文档下载推荐.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

STC89C52的室内火气安全检测装置设计Word文档下载推荐.docx

《STC89C52的室内火气安全检测装置设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《STC89C52的室内火气安全检测装置设计Word文档下载推荐.docx(31页珍藏版)》请在冰豆网上搜索。

STC89C52的室内火气安全检测装置设计Word文档下载推荐.docx

非易失性温度报警器触发器TH和TL,可通过软件写入户报警上下限。

图464位ROM结构图

DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可擦除的EERAM。

高速暂存RAM的结构为8字节的存储器,结构如图5所示。

头2个字节包含测得的温度信息,第3和第4字节是TH和TL的拷贝,是易失的,每次上电复位时被刷新。

第5个字节为配置寄存器,它的内容用于确定温度值的数字转换分辨率。

DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。

该字节各位的定义热图6所示。

低5位一直为1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。

在DS18B20出厂时该位被设置为0,用户不要改动,R1和R0决定温度转换得精度位数,即用来设置分辨率,定义方法见表1。

图5高速暂存RAM结构图

图6配置寄存器

表1DS18B20分辨率的定义规定

由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要,系统对DS18B20的各种操作必须按协议进行.操作协议为:

初始化DS18B20→发ROM功能命令→发存储器操作命令→处理数据.

图8DS18B20测温原理图

DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源.另一种是寄生电源供电方式,如图9所示.单片机端口接单线总线,为为保证有效DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉.

图9DS18B20采用寄生电源的电路图

当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us.采用寄生电源供电方式时Vdd和GND端均接地.由于单线制只有一根线,因此发送接口必须是三态的

2.3STC89C2单片机及其引脚说明

89C51是一种高性能低功耗的采用CMOS工艺制造的8位微控制器,它提供下列标准特征:

4K字节的程序存储器,128字节的RAM,32条I/O线,2个16位定时器/计数器,一个5中断源两个优先级的中断结构,一个双工的串行口,片上震荡器和时钟电路。

STC89C52管脚功能图

引脚说明:

·

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时,通过内部上拉电阻把端口拉到高电平,此时可以用作输入口。

P3口同时具有AT89C51的多种特殊功能,具体如下表1所示:

端口引脚

第二功能

P3.0

RXD(串行输入口)

P3.1

TXD(串行输出口)

P3.2

(外部中断0)

P3.3

(外部中断1)

P3.4

T0(定时器0)

P3.5

T1(定时器1)

P3.6

(外部数据存储器写选通)

P3.7

(外部数据存储器都选通)

表1P3口的第二功能

RST:

复位输入。

当振荡器工作时,RST引脚出现两个机器周期的高电平将使单片机复位。

ALE/

:

当访问外部存储器时,地址锁存允许是一输出脉冲,用以锁存地址的低8位字节。

当在Flash编程时还可以作为编程脉冲输出(

)。

一般情况下,ALE是以晶振频率的1/6输出,可以用作外部时钟或定时目的。

但也要注意,每当访问外部数据存储器时将跳过一个ALE脉冲。

程序存储允许时外部程序存储器的读选通信号。

当AT89C52执行外部程序存储器的指令时,每个机器周期

两次有效,除了当访问外部数据存储器时,

将跳过两个信号。

/VPP:

外部访问允许。

为了使单片机能够有效的传送外部数据存储器从0000H到FFFH单元的指令,

必须同GND相连接。

需要主要的是,如果加密位1被编程,复位时EA端会自动内部锁存。

当执行内部编程指令时,

应该接到VCC端。

XTAL1:

振荡器反相放大器以及内部时钟电路的输入端。

XTAL2:

振荡器反相放大器的输出端。

在本次设计中,采用89C51作为CPU处理器,充分利用其硬件资源,结合D触发器CD4013,分频器CD4060,模拟转换开关CD4051,计数器74LS90等数字处理芯片,主要控制两大硬件模块,量程切换以及显示模块。

下面还将详细说明。

2.4信号调理及放大整形模块,LM358芯片LM358内部包括有两个独立的、高增益、内部频率补偿的双运算放大器,适合于电源电压范围很宽的单电源使用,也适用于双电源工作模式,在推荐的工作条件下,电源电流与电源电压无关。

它的使用范围包括传感放大器、直流增益模块和其他所有可用单电源供电的使用运算放大器的场合。

特性:

内部频率补偿

直流电压增益高(约100dB)

单位增益频带宽(约1MHz)

电源电压范围宽:

单电源(3—30V);

双电源(±

1.5一±

15V)

低功耗电流,适合于电池供电,低输入偏流

低输入失调电压和失调电流

共模输入电压范围宽,包括接地

差模输入电压范围宽,等于电源电压范围

输出电压摆幅大(0至Vcc-1.5V)

第3节软件设计

统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等等.

1.主程序

主程序的主要功能是负责温度的实时显示,读出并处理DS18B20的测量温度值,温度测量1s进行一次,其程序流程图见图10.

2.读出温度子程序

读出温度子程序的主要功能是读出RAM中的9个字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写.其程序流程图如图11所示.

图10DS18B20温度计主程序流程图

图11读出温度子程序流程图

3.温度转换命令子程序

温度转换命令子程序主要是发温度转换开始命令,当采用12分辨率时转换时间为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成.温度转换命令子程序流程图如图12所示.

图12温度转换命令子程序流程图

4.计算温度子程序

计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判断,其程序流程图如图13所示.

图13计算温度子程序流程图

5.显示数据刷新子程序

显示数据刷新子程序主要是对显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位.程序流程图如图14所示.

图14显示数据刷新子程序流程图

结束语

通过这两周的课程设计,我运用相关知识,自己从头至尾完完全全的制作了一块板子,并进行调试。

对“纸上学来终觉浅,绝知此事要躬行”这句话的含义也了解的更加透彻了。

虽然,讲解枯燥乏味;

虽然,焊接烫伤了手;

虽然……但还是很开心(也有放假两周的喜悦)。

最后做完了,验收时效果不是很好,心里还是有点淡淡的小伤感。

呵呵,算了不想了,下次努力吧(如果有下次的话)。

事实上,只有通过自己亲力亲为的去解决,才能体会到成功是的那份收获时的喜悦,从这次课程设计中,我深切的体会自己动手创造出来的劳动成果才是可贵的,不仅如此,在参与动手的过程中会有很多意想不到的收获。

参考文献

[1]李光飞,楼苗然主编.51系列单片机.北京:

北京航空航天大学出版社,2003

[2] 

孙江宏、李良玉等.《Protel99电路设计与应用》.机械工业出版社.2003.2

[3]康华光.邹寿彬.电子技术基础(数字部分)[M].高等教育出版社.1998.7

[4]张毅刚.单片机原理及应用[M].高等教育出版社.2003

[5]陈步月.基于单片机的测试技术原理与应用[M].机械工业出版社.2007.3

[6]李忠国.陈刚.单片机应用技能实训[M].辽宁科技出版社.2006.11

[7]冯育长.马金强.单片机系统设计于实例分析[M].2007.5

附录一:

#include<

reg52.h>

intrins.h>

//包含_nop_()函数定义的头文件

#defineucharunsignedchar

#defineuintunsignedint

#defineledP0

#definekeyP2

uinty1,y2,y3,y4;

unsignedcharTL;

//储存暂存器的温度低位

unsignedcharTH;

//储存暂存器的温度高位

uinttemph,templ;

uintTN;

//储存温度的整数部分

uintTD;

//储存温度的小数部分

floatTD1;

//以小数形式储存温度的小数部分

uinttemp;

sbitw1=P1^7;

sbitw2=P1^6;

sbitw3=P1^5;

sbitw4=P1^4;

sbitMQ=P1^3;

sbitfmq=P3^5;

sbitdeng=P3^6;

uchars=0;

//模式切换标志位

ucharcodetable2[]={0xc0,0xcf,0xa4,0x86,0x8b,0x92,0x90,0xc7,0x80,0x82,0xff};

//没点的反

ucharcodetable4[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2e,0x20};

//0~9的ASCii码

unsignedcharcodetable1[]=

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

//没点的正

unsignedcharcodetable3[]=

{0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xff};

//有点的正

voiddelay(uintz)

{

uintx,y;

for(x=z;

x>

0;

x--)

for(y=110;

y>

y--);

}

voiddelay_2us()//延时2us

{

ucharp;

for(p=0;

p<

1;

p++)

_nop_();

}

/*****************************************************

函数功能:

延时若干纳秒

入口参数:

n

***************************************************/

voiddelay_nus(ucharn)//延时2nus

n;

delay_2us();

voiddelay1ms()

uchari,j;

for(i=0;

i<

2;

i++)

for(j=0;

j<

30;

j++);

延时若干微秒

voiddelayms(ucharn)

uchari;

delay1ms();

位置寻找函数

findout(uintr,uinty)

uinti;

11;

if(table4[i]==r)

break;

y=i;

/************************************************************************

以下是DS18B20的操作程序

************************************************************************/

sbitDQ=P1^0;

uchartime;

//设置全局变量,专门用于严格延时

将DS18B20传感器初始化,读取应答信号

出口参数:

flag

bitInit_DS18B20(void)

bitflag;

//储存DS18B20是否存在的标志,flag=0,表示存在;

flag=1,表示不存在

DQ=1;

//先将数据线拉高

for(time=0;

time<

time++)//略微延时约6微秒

;

DQ=0;

//再将数据线从高拉低,要求保持480~960us

200;

time++)//略微延时约600微秒

//以向DS18B20发出一持续480~960us的低电平复位脉冲

//释放数据线(将数据线拉高)

10;

time++)

//延时约30us(释放总线后需等待15~60us让DS18B20输出存在脉冲)

flag=DQ;

//让单片机检测是否输出了存在脉冲(DQ=0表示存在)

time++)//延时足够长时间,等待存在脉冲输出完毕

return(flag);

//返回检测成功标志

从DS18B20读取一个字节数据

dat

***************************************************/

unsignedcharReadOneChar(void)

unsignedchari=0;

unsignedchardat;

//储存读出的一个字节数据

for(i=0;

8;

DQ=1;

//先将数据线拉高

//等待一个机器周期

DQ=0;

//单片机从DS18B20读书据时,将数据线从高拉低即启动读时序

dat>

>

=1;

DQ=1;

//将数据线"

人为"

拉高,为单片机检测DS18B20的输出电平作准备

for(time=0;

//延时约6us,使主机在15us内采样

if(DQ==1)

dat|=0x80;

//如果读到的数据是1,则将1存入dat

else

dat|=0x00;

//如果读到的数据是0,则将0存入dat

//将单片机检测到的电平信号DQ存入r[i]

//延时3us,两个读时序之间必须有大于1us的恢复期

}

return(dat);

//返回读出的十进制数据

向DS18B20写入一个字节数据

WriteOneChar(unsignedchardat)

unsignedchari=0;

for(i=0;

i<

i++)

DQ=0;

//将数据线从高拉低时即启动写时序

DQ=dat&

0x01;

//利用与运算取出要写的某位二进制数据,

//并将其送到数据线上等待DS18B20采样

time++)

//延时约30us,DS18B20在拉低后的约15~60us期间从数据线上采样

DQ=1;

//释放数据线

//延时3us,两个写时序间至少需要1us的恢复期

//将dat中的各二进制位数据右移1位

4;

time++);

//稍作延时,给硬件一点反应时间

显示温度的整数部分

x

voiddisplay_temp1(ucharx)

uchark,l;

//j,k,l分别储存温度的百位、十位和个位

k=x/10%10;

//取十位

l=x%10;

//取个位

w1=0;

led=table1[k];

delay(4);

w1=1;

led=table3[l];

w2=0;

w2=1;

//小数部分

voiddisplay_temP3(ucharx)

w3=0;

led=table1[x];

w3=1;

w4=0;

led=0xC6;

w4=1;

做好读温度的准备

voidReadyReadTemp(void)

Init_DS18B20();

//将DS18B20初始化

WriteOneChar(0xCC);

//跳过读序号列号的操作

WriteOneChar(0x44);

//启动温度转换

100;

time++);

//温度转换需要一点时间

//跳过读序号列号的操作

WriteOneCh

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

当前位置:首页 > PPT模板 > 动物植物

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

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