版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
主编:李文华“十四五”职业教育国家规划教材经全国职业教育教材审定委员会审定制作数字温度计任务18任务要求
单片机的fosc=11.0592MHz,用P3.7口线作单总线,控制单总线接口芯片DS18B20,用P1、P2两个并行口控制3位数码管的显示,P1口作段选口,P2口作位选口,定时/计数器T1作扫描定时器,使3位数码管扫描显示不超过99℃的环境温度,其中0号数码管显示温度值的个位,1号数码管显示温度值的十位,2号数码管显示温度的符号。温度为正时,符号位不显示;温度为负时,显示负号“-”。相关知识1、DS18B20的引脚功能引脚功
能NC空引脚,不与任何电路相接GND接地脚,接电源地DQ数据输入/输出脚,接单总线VDD可选的供电电源引脚,接正电源或悬空2、单片机与DS18B20的接口电路单片机用一根I/O口线作单总线VDD引脚接+3V~+5V的外部电源GND引脚接地单总线上接4.7KΩ~10KΩ的上拉电阻,保证总线空闲时,总线呈高电平状态DQ引脚接单总线3、DS18B20的内部结构
主要由64位光刻ROM、高速缓存RAM、EEPROM存储器、温度传感器、单总线接口、存储与控制逻辑、寄生电源等几部分组成,但使用者只需掌握其存储组织。
①64位激光ROM
8个字节,只读不能写作用:保存芯片的ROM序列号,即ID标识码。各器件的ID标识码全球唯一,用作器件寻址。3、DS18B20的内部结构②高速缓存RAM结构如图共9个字节,用来存放各类数据。字节0、字节1:存放当前16位的温度转换结果,字节1为高字节,字节0为低字节。其数据为16位补码形式,格式如下:字节0、字节13、DS18B20的内部结构符号位SS=0:温度为正S=1:温度为负温度的整数位温度的小数位说明温度的小数位数与分辨率有关。分辨率为9位时,D3位有效,D2~D0无效;分辨率为10位时,D3、D2有效,D1、D0无效;分辨率11位时,D3~D1有效,D0无效;分辨率为12位时,D3~D0均有效。无效位的值为0,有效位的值为实际温度值。
依次为高温触发器TH和低温触发器TL,用来临时存放用户设定的报警温度的上限值和下限值。
DS18B20完成温度转换后,就会将温度测量值与这两个字节中的温度上、下限值相比较,如果测量值高于TH中的值或者低于TL中的值,就会自动地将内部报警标志位置位,该DS18B20就能够响应随后单片机发出的第一个报警搜索命令,否则就不响应报警搜索命令。D7D6D5D4D3D2D1D00R1R0111113、DS18B20的内部结构字节2、字节3字节4:配置寄存器,用来临时存放用户设定的配置数据。配置寄存器的结构温度转换精度的选择控制位R1R0的取值组合与分辨率的关系R1R0分辨率转换精度最大转换时间009位0.50C93.75ms0110位0.250C187.5ms1011位0.1250C375ms1112位0.06250C750ms
字节5~字节7:保留字节。
字节8:CRC校验字节,其内容为高速缓存RAM的前8个字节内容的冗余循环校验值。3、DS18B20的内部结构③EEPROM存储器3、DS18B20的内部结构
保存用户对DS18B20的设定值。
共3个字节,分别与高速缓存RAM的字节2(TH)、字节3(TL)、字节4(配置寄存器)相对应,如图所示。3、DS18B20的内部结构【说明】①单片机读写温度触发数据或配置数据时,是对高速缓存RAM中的对应字节进行读写。②复制高速缓存RAM命令0x48是将RAM中这3个字节的内容保存到EEPROM中。复制这3个字节数据时,必须在DS18B20复位之前一次性地复制完毕,否则本次复制数据全部无效。③每次上电复位时DS18B20都会自动地用EEPROM中的内容分别对这3个字节进行刷新。⑴初始化时序4、DS18B20的操作时序初始化的作用:确定系统中是否存在DS18B20初始化的时序图初始化的时序参数参数含义参数值单位最小典型最大tRST单片机产生的启动脉冲的宽度480
960µstREC单片机的接收数据阶段持续时间480
960µstDLDS18B20发送应答信号的延迟时间15
60µstACKDS18B20产生的应答信号的脉冲宽度60
240µs4、DS18B20的操作时序初始化流程图及程序4、DS18B20的操作时序bit init_ow(void){ bit flag; //定义位变量 dq=0; //拉低总线 delay500us(); //延时500μs
dq=1; //产生上升沿,释放总线 delay60us(); //延时60μs flag=dq; //读总线上的应答信号 delay500us(); //延时500μs return flag;
//返回应答}⑵读数操作时序读取一位数据的时序如下:4、DS18B20的操作时序注意:DS18B20是以字节为单位向单总线发送数据的,先发送低位,后发送高位。读一位数据的时序参数参数含义参数值单位最小典型最大tSRD单片机产生的启动读脉冲的宽度1<tSRD<15µstDDS18B20发送数据的时间153060µstRDC单片机读一位数据时,读数期持续时间60
µstREC读恢复期持续时间1
µs4、DS18B20的操作时序读数流程图及程序4、DS18B20的操作时序uchar rdbyte(void){uchar i,m;for(i=0;i<8;i++){ dq=0; _nop_();_nop_(); dq=1; delay20us(); m=m>>1; if(dq) m=m|0x80; delay40us();
}return m;}
⑶写数操作时序4、DS18B20的操作时序
单片机向DS18B20写数时,DS18B20是以字节为单位从单总线上接收数据的,先接收低位,后接收高位。单片机向DS18B20写一位数据的时序如图写一位数据的时序参数参数含义参数值单位最小典型最大tSWR单片机产生的启动写脉冲的宽度1<tSWR<15µstDDS18B20接收数据的时间153060µstWRC单片机写一位数据时,写数期持续时间60
µstREC写恢复期持续时间1
µs4、DS18B20的操作时序⑶写数操作流程图及程序4、DS18B20的操作时序void wrbyte(ucharm){uchar i;for(i=0;i<8;i++){ dq=0;
_nop_();_nop_();
if(m&0x01)dq=1; else dq=0; delay60us(); dq=1; _nop_(); m=m>>1;
}}5、DS18B20的访问命令分为ROM命令和存储控制命令两类。ROM命令主要用于后续访问操作的定位。命令代码用法说明读ROM0x33读取64位光刻ROM的内容。用于单总线上只挂接了一个DS18B20的场合。匹配ROM0x55该命令发布后,要紧随发送64位光刻ROM序列号,之后只有与该序列号相匹配的DS18B20才对后续的存储控制命令作出响应。用于单总线上挂接有多DS18B20时,对某个DS18B20进行寻址。跳过ROM0xcc忽略64位的ROM序列号的匹配而直接访问单总线上的DS18B20。适用于单总线系统中只有一个DS18B20的场合。搜索ROM0xf0获取单总线上各DS18B20的64位光刻ROM序列号。报警搜索0xec搜索处于温度报警状态的DS18B20的ROM代码。该命令发布后,只有最后一次温度测量时,测量值超过报警温度的上、下限值的DS18B20才对此命令作响应。存储控制命令命令代码用法说明温度转换0x44启动DS18B20进行温度转换。DS18B20温度转换结束后会自动地将结果存入内部高速缓存RAM的字节0、字节1中。在该命令之后接着发布读一位时序可以检测温度转换工作是否完成,若温度转换尚没结束,则所读数位值为0,否则所读数位值为1。写高速缓存RAM0x4e命令后要紧随1—3个字节的待写入的数据。用于将数据依次写入高速缓存RAM中的高温触发寄存器TH中、低温触发寄发器TL中、配置寄存器中。在DS18B20复位之前,这3个字节数据必须全部写完。5、DS18B20的访问命令存储控制命令5、DS18B20的访问命令命令代码用法说明读高速缓存RAM0xbe命令执后,DS18B20会依次将高速缓存RAM中的字节0至字节8的内容发送到单总线上。如果不必读取9个字节中的数据,可以通过发布复位命令(即初始化DS18B20)来中止后续数据的传输工作。复制高速缓存RAM0x48将高速缓存RAM中字节2至字节4的内容复制到片内E2PROM中。在该命令之后接着发布读一位时序可以检测复制工作是否完成,若复制工作尚没完成,则所读得数位值为0,否则所读得的数位值为1。读EEPROM0xb8将片内E2PROM的内容对应地复制到高速缓存RAM的字节2至字节4中。上电时,DS18B20会自动用E2PROM的内容刷新高速缓存RAM的字节2至字节4。读电源供电方式0xb4该命令发布后,接着发布读一位时序,则所读得的数据位为DS18B20的供电方式值。0:寄生供电方式,1:外部供电电源。6、DS18B20的访问方法通过单总线访问DS18B20的步骤
①初始化DS18B20。其作用是,确定系统中是否存在DS18B20。其方法是,直接调用前面介绍的初始化函数init_ow()。如果初始化成功,则进行下面的操作。
②发送表某个ROM命令。其作用是,对系统中的器件寻址。其方法是,调用前面介绍的字节写函数wrbyte(),向DS18B20写入ROM命令。
③发送某个存储命令。其作用是,通知DS18B20进行某种处理或者与单片机交换数据。其方法是,调用字节写函数wrbyte(),向DS18B20写入表7-20中的存储命令。
④根据第3步所发送存储命令的类型,从总线上读取数据或者向总线写数据。单片机访问DS18B20的流程图6、DS18B20的访问方法有关说明
①系统中只有一片DS18B20时,ROM命令常选用跳过ROM命令(0xcc),即不必进行器件寻址。6、DS18B20的访问方法
②用DS18B20测量环境温度时,需要先让DS18B20执行启动温度转换命令,然后再读高速缓存中的温度转换值,否则所读得的数据并不是当前的环境温度。这一过程需要DS18B20执行两次存储控制命令(一次是启动温度转换,一次是读缓存),每一次执行存储控制命令都必须按前面所介绍的访问流程进行操作。
③DS18B20进行温度转换时需要一定时间,启动温度转换后需要延时一段时间后才能读温度转换值,否则,所读数据错误。任务实施1、搭建硬件电路2、编写软件程序(1)流程图任务19中,我们用定时/计数器T1作3个数码管的扫描定时器,将显示程序放在T1的定时中断服务函数中,其他程序放在主函数main中。根据任务12的计算,T1的定时时长应为6ms。系统的fosc=11.0592MHz时,定时器T1的计数次数为5528。按照任务要求,main函数需要完成以下工作:①从DS18B20中获取16位的温度转换值。②从温度转换值中截取8位带符号的整数温度值。③对带符号的8位整数温度值进行处理,得出符号位和数值位的个位、十位的显示代码并保存至显示数组disdat[]中。定时中断服务程序主要完成显示数组中各元素的扫描显示。(1)流程图2、编写软件程序主程序定时中断服务程序(2)程序代码//数据定义#include <reg51.h> #include <math.h> #include <intrins.h> #define DCOUNT 3 #define portled1 P1 #define portled2 P2 #define uchar unsigned char sbit dq=P3^7; //8单总线定义uchar idata disdat[3]; //9显示数组uchar data wcnt; //10扫描位置计数器wcntuchar code led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40}; //11段显码uchar code ledctrl[]={0x0fe,0x0fd,0x0fb}; //12位显码//函数说明void display(void); //13display函数说明bit init_ow(void); //14init_ow函数说明void wrbyte(uchar); //15wrbyte函数说明uchar rdbyte(void); //16rdbyte函数说明void delay(uchar); //17delay函数说明void delay750ms(void); //18delay750ms函数说明(2)程序代码//主程序void main(void){uchar templ,temph; bit flag;SP=0x5f;
wcnt=0;
TMOD=0x10;
TL1=(65536-5528)%256;
TH1=(65536-5528)/256;
ET1=1;
EA=1;
TR1=1;
while(1)
{ if(init_ow()) continue; wrbyte(0x0cc); wrbyte(0x44); delay750ms();
(2)程序代码 if(init_ow()) continue; wrbyte(0x0cc); wrbyte(0x0be);
templ=rdbyte(); temph=rdbyte(); flag=init_ow();
templ=(temph<<4)|(templ>>4); disdat[2]=10; if(templ&0x80)
{
templ=cabs(templ);
disdat[2]=11; } disdat[0]=templ%10; disdat[1]=templ/10;
}}(2)程序代码//定时中断T1服务程序void tim1() interrupt 3 using 1{ TL1=(65536-5528)%256; TH1=(65536-5528)/256; display();}(2)程序代码//DS18B20访问程序
从相关知识中复制下列函数bit init_ow(void)
//56初始化单总线函数void wrbyte(ucharm) //66写字节函数uchar rdbyte(void)
//79字节读函数(2)程序代码//延时子程序void delay(ucharn) //92延时函数,形参为n{ uchar i; //93for(i=n;i!=0;i--); //94} //95(2)程序代码//延时750ms程序void delay750ms(void) //96延时函数{uchar i,j,k; //97for(i=0;i<4;i++) //98for(j=0;j<250;j++) //99 for(k=0;k<250;k++) ; //100} //101//显示子程序void display(void) //102显示函数{ portled1=0; //103 portled2=ledctrl[wcnt]; //104 portled1=led[disdat[wcnt]]; //105 wcnt++; //106 wcnt=wcnt%DCOUNT; //107} //108(2)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医学心理学与临床路径整合应用优化
- 就业指导中心服务指南
- 医学影像云在骨科远程诊断中应用
- 媒体深度融合发展实施方案
- 教学材料《程序设计》-第6章
- 医学影像AI的稳定性验证方法
- 中位数和众数第1课时课件 -2025-2026学年人教版数学八年级下册
- 办公场所安全风险防控
- 2026年二手车市场全域营销整合策划方案
- 变速器厂动火作业办法
- 卡迪滚筒洗衣机 GO4 DF86说明书
- 变电缺陷管理课件
- 32位MIPS-CPU-设计-实验报告详解
- 2024年金华义乌市卫生健康系统事业单位招聘笔试真题
- T/CSBME 065-2023医用敷料材料聚氨酯泡沫卷材
- 第一单元1 多彩的亚洲美术 课件 -2024-2025学年浙人美版(2024)初中美术七年级下册
- GB/T 45166-2024无损检测红外热成像检测总则
- 《山东省技工院校学生职业技能等级认定工作指引(试行)》
- 酒精滴针眼的护理
- 安全生产风险分级管控和隐患排查治理
- 律所合伙人转让协议书模板
评论
0/150
提交评论