电子科技大学中山学院微处理器实验报告(12)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1微处理器实验报告班级13电科A姓名张益航学号2012010201070实验名称数字温度计设计实验时间2015年12月23日成绩教师签名批改时间报告内容一、实验目的1、熟悉单总线及DS18B20传感器的特性和工作原理。2、掌握数字温度计的硬件结构及程序设计方法。二、实验原理与普通温度计相比,以单片机为核心的数字温度计具有数字显示、超温报警、记录存储、数据上传等优点,因而得到了广泛应用。根据性能要求和器件选型的不同,数字温度计可有多种不同的实现方案。温度传感器是数字温度计中的关键器件。传统的温度传感器有热电阻、热电偶、PN结等类型,这些传感器的输出均为微弱的模拟信号,必须经过放大、滤波、A/D转换等电路处理,才能得到可为单片机接受的数字量。相比之下,新型数字温度传感器将温度传感元件、数字量转换电路、数据存储器、通信接口等部件集成在一块芯片上,可通过几根(最少只要一根)串行通信线直接输出数字形式的温度值,大大简化了数字温度计的硬件设计。470Ωx8VccA01A12A23E36E14E25Y015Y114Y213Y312Y411Y510Y69Y77VCC16GND874HC138STC12C5A60S21A021A141A261A381OE11Y0181Y1161Y2141Y312GND10VCC202OE192A0112A1132A2152A3172Y092Y172Y252Y3374HC240855010K10KVccVcc共阳极a11g5com112b7c4d2e1f10dp3com29com38com46a11g5com112b7c4d2e1f10dp3com29com38com46数码管GND1DQ2VCC3DS18B204.7kVccP0.039P0.138P0.237P0.336P0.435P0.534P0.633P0.732P4.429P2.021P2.122P2.223P2.324P3.717MCU18550BZ1Vcc2KP1.01P3.0/RXDP3.1/TXD1011USBRS232KX0KX1KX2P3.2P3.4P3.5121415图3.12.1数字温度计电路DS18B20是DALLAS公司生产的单总线(1-Wire)接口的数字温度传感器,数据传输仅需一根信号线。温度测量范围为-55~+125℃,在-10~+85℃范围内,精度可达±0.5℃,有效数据位数可通过程序设置为9~12位,12位时分辨率可达0.0625℃。每个DS18B20具有唯一64位序列码,多个器件可并联在一根数据线上,实现多点测温。ZSC-1实验箱配置了DS18B20数字温度传感器以及LED数码管、蜂鸣器、按键等外设,另外还设有RS232、USB两种外部通信接口,为实现数字温度计功能提供了很好的硬件支持。图3.12.1为具体硬件电路。DS18B20的数据线DQ与单片机P3.7口线相连,单片机通过程序模拟单总线时序,实现与DS18B20的通信。LED数码管用于显示DS18B20所测温度(实际只用3位),蜂鸣器BZ1用于超温报警,按键KX0~KX2用于报警温度的设置。通信接口用于连接PC机,实现温度上传等功能。为完成一次温度采集,单片机首先按照单总线协议的时序要求,对DS18B20进行初始化,初始化成功后,发送命令字CCH,跳过ROM序列码匹配操作(多个DS18B20并联时才需要通过ROM序列码匹配命令来选择某个DS18B20),接下来发送命令字44H,启动DS18B20进行温度转换。转换一次所需时间为93.75~750ms(取决于DS18B20的位数设置,12位对应的转换时间为750ms)。此后,单片机对DS18B20重新进行初始化,并相继发送CCH和BEH命令,再进行连续两字节读操作,即可得到16位温度值(低字节在先)。DS18B20温度值采用16位补码,其格式如图3.12.2所示。低字节中的D-1~D-4为小数位,12位分辨率时全部有效,11位分辨率时D-4无效,10位分辨率时D-4和D-3无效,9位分辨率时D-4、D-3和D-2无效。高字节中的S为符号位,温度为正时全为0,温度为负时全为1。低字节D3D2D1D0D-1D-2D-3D-4高字节SSSSSD6D5D4图3.12.2DS18B20温度值格式DS18B20所有总线读写操作都由一个初始化序列开始,如图3.12.3所示。单总线平时为高电平状态,初始化时,单片机先将单总线拉低至少480us然后再释放(总线将通过4.7K上拉电阻迅速拉高),从而发出一个复位脉冲。正常情况下,DS18B20会在检测到总线释放后,先等待15-60us,然后将总线拉低60-240us,再释放。至此,完成一个初始化序列。图3.12.3DS18B20初始化序列2DS18B20读写操作包括单片机向DS18B20发送命令、参数以及DS18B20向单片机发送序列码、温度值、CRC校验码等,每个字节包括8位,传输时低位在先,且每位各对应一个时隙(timeslot)。DS18B20每个时隙至少为60us,并且两个相邻时隙之间至少需要1us的恢复时间。图3.12.4所示的位写时隙给出了单片机通过单总线向DS18B20发送1位数据的定时要求。发送0时,单片机将总线拉低60-120us,然后释放至少1us;发送1时,单片机先将总线拉低,然后在1-15us内释放总线,直到时隙结束。图3.12.4DS18B20位写时隙图3.12.5所示的位读时隙给出了单片机通过单总线从DS18B20接收1位数据的定时要求。单片机将总线拉低至少1us然后释放,并在15us内采样总线实际状态,采样得到的0或1作为当前接收位(即DS18B20当前发送位)。图3.12.5DS18B20位读时隙三、实验设备1、PC机一台(已安装KeiluVision、STC_ISP等软件);2、ZSC-1单片机实验箱一台。四、实验内容1、设计程序,利用DS18B20检测温度,并通过数码管显示。//*****************************头文件声明****************************#includereg51.h//****************************数据类型定义***************************typedefunsignedcharuint8;typedefunsignedintuint16;//****************************I/O口线声明****************************#defineSEG_CODE_PORTP0#defineBIT_CODE_PORTP2sbitDS18B20_DATA=P3^7;//************************常量数组(段码表)声明*********************uint8codeSegCodeTable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//****************************全局变量声明***************************intTemperature;//****************************函数原型声明***************************voidDS18B20Init();voidDS18B20BitWrite(bitBit);bitDS18B20BitRead();voidDS18B20ByteWrite(uint8Byte);uint8DS18B20ByteRead();voidGetTemperature();voidDispTemperature();3voidDelay(uint16ms);//*******************************主函数******************************voidmain(){while(1){GetTemperature();//采集当前温度DispTemperature();//显示当前温度}}//*************************DS18B20初始化函数*************************voidDS18B20Init(){uint16i;while(1){DS18B20_DATA=0;i=640;while(--i);//延时800us(STC12C5A60S2,11.0592MHz,代码5级优化)DS18B20_DATA=1;i=56;while(--i);//延时70usif(DS18B20_DATA==1)continue;//无响应则重发复位脉冲i=224;while(--i);//延时280usif(DS18B20_DATA==1)break;//复位成功}i=160;while(--i);//延时200us}//***********************DS18B20位写操作函数*************************voidDS18B20BitWrite(bitBit){uint16i;DS18B20_DATA=0;i=4;while(--i);//延时5usDS18B20_DATA=Bit;//发送1位数到DS18B20i=48;while(--i);//延时60usDS18B20_DATA=1;}//**********************DS18B20位读操作函数**************************bitDS18B20BitRead(){bittemp;uint16i;DS18B20_DATA=0;i=4;while(--i);//延时5usDS18B20_DATA=1;i=4;while(--i);//延时5ustemp=DS18B20_DATA;//读来自DS18B20的1位数i=48;while(--i);//延时60usreturntemp;}//**********************DS18B20字节写操作函数************************voidDS18B20ByteWrite(uint8Byte){uint8i;4for(i=0;i8;i++)//一共发送8位{if(Byte&0x01==1)//先发最低位DS18B20BitWrite(1);//发送1elseDS18B20BitWrite(0);//发送0Byte=1;}}//**********************DS18B20字节读操作函数************************uint8DS18B20ByteRead(){uint8i,temp=0;for(i=0;i8;i++)//一共读8位{temp=1;//字节变量右移if(DS18B20BitRead()==1)//读取1位数据并存入临时变量temp中temp|=0x80;//temp最高位置1}returntemp;//返回读到的8位数}//*****************************温度采集函数**************************voidGetTemperature(){uint8Buff[2],i;DS18B20Init();//DS18B20初始化DS18B20ByteWrite(0xCC);//跳过ROM匹配(因为只有一个DS18B20)DS18B20ByteWrite(0x44);//启动温度转换for(i=0;i250;i++)DispTemperature();//等待750ms,期间不断刷新LED显示DS18B20Init();//DS18B20初始化DS18B20ByteWrite(0xCC);//跳过ROM匹配(因为只有一个DS18B20)DS18B20ByteWrite(0xbe);//准备读转换结果Buff[0]=DS18B2

1 / 5
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功