您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 单片机项目实践教程刘燎原-项目六数字温度计
微控制器系统设计与应用刘燎原江苏建筑职业技术学院•复习:ADC0809是典型的8位8通道逐次逼近式A/D转换器,可模拟电压量实现分时转换为8位数字量。Vref/Vin=2n/D即Vin/D=5/255转换步骤:1.有clock时钟信号(典型值500KHZ,周期2us)用定时器0产生周期2us方波信号作为CLOCK2.Start、ALE有效,开始转换VinStart、ALE需要正脉冲,通过置1或0得到3.转换过程中,EOC=0;当转换结束时,EOC=1.(转换时间大概100us左右)利用查询等待方式,while(eoc==0);……4.转换结束后,设置OE=1后,才可以读取转换后的数字量OE=1;m=P0;OE=0;5.数字量送数码管显示XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51X1CRYSTALC130pFC230pFC310uFR112345678161514131211109RN1300R410kR510kOUT121ADDB24ADDA25ADDC23VREF(+)12VREF(-)16IN31IN42IN53IN64IN75START6OUT58EOC7OE9CLOCK10OUT220OUT714OUT615OUT817OUT418OUT319IN228IN127IN026ALE22U2ADC0808RV11kQ1PN2907Q2PN2907234567891RP1RESPACK-81.十六进制显示转化为十进制显示unsignedchari,j;i=m/51;j=m%51;j=j/5;2.带小数点显示的段值举例说明带小数点共阴数码管:+80HP1=sz1[i]+80H带小数点共阳数码管:-80HP1=sz1[i]-80H温度计制作(4学时)温度计温度计电路板(2学时)学时安排:项目六数字温度计-----学习DS18B20模块DS-18B20数字温度传感器DS18B20是美国DALLAS公司生产的1-wire式单总线的数字温度传感器。具有耐磨耐碰,体积小,线路简单,使用方便,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量。例如:冷冻库,粮仓,储罐,电讯机房,电力机房,电缆线槽等测温,汽车空调、冰箱、冷柜、以及中低温干燥箱等。一、主要特点1.1-wire式只要一个端口即可实现和单片机的双向通信(图上DQ端),电路连接简单单总线通常要求外接一个约为4.7K—10K的上拉电阻,这样,当总线闲置时其状态为高电平。2.分辨率可以在9-12位选择(温度转换后的数字信号是9-12位)3.测温范围-55℃~+125℃,在-10~+85°C范围内,精度为±0.5°C。唯一的序列号4.每个器件都有5.内部有温度上限、下限的报警设置,有报警功能6.支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现多点测温7.供电方式灵活,可以外接电源,也可以通过内部寄生电路从数据线上获取电源27.0DQ2VCC3GND1U3DS18B20二、DS18B20管脚排列DS18B20的管脚排列1.GND为电源地;2.DQ为数字信号输入/输出端;3.VDD为外接供电电源输入端(在寄生电源接线方式时接地)外接电源工作方式两种供电方式:三、DS18B20内部结构如图所示,主要由4部分组成:64位光刻ROM、温度传感器、温度报警触发器TH和TL、配置寄存器。1.64位光刻ROM64位ROM中存储的信息是出厂前被光刻好的,存储的主要是序列号。64位光刻ROM的排列是:开始8位(地址:28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,它可以看作是该DS18B20的地址序列码,每个DS18B20的64位序列号均不相同最后8位则是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。由于每一个DS18B20的ROM数据都各不相同,因此微控制器就可以通过单总线对多个DS18B20进行寻址,从而实现一根总线上挂接多个DS18B20的目的。2.温度传感器DS18B20中的温度传感器完成对温度的测量,把温度转换为对应的数字量(9位或12位,出厂时默认12位,最高位是符号位)。为了存放12位的数字量,用16位符号扩展的二进制补码形式表示来存放。举例。该数字量和温度之间的对应转换格式,见下图,其中S为符号位,即数据格式以0.0625℃/LSB形式表达。补码三个部分:符号:高字节的高4位整数:高字节的低4位、低字节的高4位小数:低字节的低4位对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。例如:1.转换后的数字量12位,扩展为16位后为(十六进制):00C1H,则对应的温度值应为:+12.0625℃若为负温度,如何计算?2.转换后的数字量12位,扩展为16位后为(十六进制):FF5EH,则对应的温度值应为:-10.125℃;12位3.配置寄存器其中配置寄存器的格式如下:最高位用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,工作模式,用户不要去改动。R1和R0用来设置分辨率,如下图所示:(DS18B20出厂时被设置为12位)低五位一直都是“1”配置寄存器与分辨率关系表4.高速暂存存储器RAM高速暂存存储器由9个字节组成,见下图.转换所得的温度值以两个字节补码形式存放在高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后。四、DS18B20的工作时序(单线接口访问DS18B20的协议)单片机对DS18B20操作:温度转换、读取温度、存取报警上下限等。根据DS18B20的通讯协议,单片机每次访问DS18B20都必须遵循以下顺序:初始化18B20;发对ROM操作命令;发对RAM操作命令:相应操作。1.ROM操作命令2.RAM操作命令DS18B20的RAM指令集3.温度的转换流程DS18B20进行一次温度的转换,那具体的操作就是:(1)、初始化18B20(主机作复位操作)(2)、发对ROM操作命令(主机写跳过ROM的操作(CCH)命令)(3)、发对RAM操作命令(主机写转换温度的操作(44H)命令)后面释放总线至少一秒,让DS18B20完成转换的操作。整个操作的总线状态如下图。4.读取RAM内的温度数据流程具体的操作就是:(1)、初始化18B20(主机作复位操作)(2)、发对ROM操作命令(主机写跳过ROM的操作(CCH)命令)(3)、发对RAM操作命令(主机写读取RAM的操作(BEH)命令)(4)、随后主机依次读取DS18B20发出的从第0一第8,共九个字节的数据。如果只想读取温度数据,那在读完第0和第1个数据后就不再理会后面DS18B20发出的数据即可。同样读取数据也是低位在前的。整个操作的总线状态如下图:初始化DS18B20跳过ROM匹配开始温度转换转换结束了否?初始化DS18B20跳过ROM匹配读温度值结束开始YNDS18B20温度测量操作流程1.初始化DS18B202.发出跳过ROM的操作(CCH)命令3.发出温度转换(44H)命令4.延时等待转换完5.初始化DS18B206.发出跳过ROM的操作(CCH)命令7.发出读温度(BEH)命令8.把温度(两个字节)从RAM中读出,保存起来9.读出的温度的数字量进行数据转换,送数码管显示在以上流程中,反复用到初始化、写、读时序,我们先编程对应程序五、DS18B20的基本操作在以上的工作流程中,首先要初始化18B20,然后发各种命令以及数据传输都涉及到对DS18B20的读写操作,所以共涉及到以下3个工作时序:1.初始化操作2.写操作(发命令)3.读操作(读温度)1.初始化时序DS18B20的初始化(1)先将数据线置高电平“1”。(2)延时(该时间要求的不是很严格,但是尽可能的短一点)(3)数据线拉到低电平“0”。(4)延时750微秒(该时间的时间范围可以从480到960微秒)。(5)数据线拉到高电平“1”。(6)延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由DS18B20所返回的低电平“0”。据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。(7)若单片机读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。(8)将数据线再次拉高到高电平“1”后结束。unsignedcharpresence;init_ds18b02(void)//DS18B20初始化{DQ=1;delay_8us(3);//延时约25微秒DQ=0;delay_8us(80);//延时约650微秒DQ=1;delay_8us(2);presence=DQ;delay_8us(20);//延时约170微秒DQ=1;return(presence);}DS18B20的写操作(1)数据线先置低电平“0”。(2)延时确定的时间为15微秒,表示写周期开始。(3)按从低位到高位的顺序发送字节(一次只发送一位)。(4)延时时间为45微秒。(5)将数据线拉到高电平。(6)重复上(1)到(6)的操作直到所有的字节全部发送完为止。(7)最后将数据线拉高。若主机想写0,则拉低电平最少60微秒直至写周期结束,然后释放总线为高电平。若主机想写1,在一开始拉低总线电平1微秒后就释放总线为高电平,一直到写周期结束。2.写时序voidwrite_byte(unsignedchardat)//单片机向DS18B20写入一个字节数据,先低后高{unsignedchari;for(i=0;i8;i++){DQ=0;DQ=dat&0x01;//单片机逐位发出数据给DS18B20delay_8us(4);//延时约52微秒,给DS18B20采样DQ=1;dat=1;}}3.读时序完成一个读时序过程,至少需要60us才能完成DS18B20的读操作(1)将数据线拉高“1”。(2)延时2微秒。(3)将数据线拉低“0”。(4)延时15微秒。(5)将数据线拉高“1”。(6)延时15微秒,对总线进行采样检测。(7)读数据线的状态得到1个状态位,并进行数据处理。(8)延时30微秒。unsignedcharread_byte(void)//单片机从DS18B20读出一个字节数据{unsignedchari,dat;for(i=0;i8;i++){DQ=0;dat=1;//一举两得DQ=1;if(DQ)//存储采样到的值dat|=0x80;delay_8us(4);}returndat;}例:设计温度计,4位显示,1位小数点。程序流程初始化DS18B20跳过ROM匹配开始温度转换转换结束了否?初始化DS18B20跳过ROM匹配读温度值结束开始YN1.初始化DS18B202.发出跳过ROM的操作(CCH)命令3.发出温度转换(44H)命令4.延时等待转换完5.初始化DS18B206.发出跳过ROM的操作(CCH)命令7.发出读温度(BEH)命令8.把温度(两个字节)读出保存起来9.数据转换,送数码管显示每个步骤具体化:1.初始化DS18B20
本文标题:单片机项目实践教程刘燎原-项目六数字温度计
链接地址:https://www.777doc.com/doc-768650 .html