欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    单片机课程设计-基于PIC单片机的室内温度检测.doc

    • 资源ID:3262617       资源大小:327.52KB        全文页数:16页
    • 资源格式: DOC        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    单片机课程设计-基于PIC单片机的室内温度检测.doc

    引言在工业控制中,PIC单片机应用广泛,它最大的特点是不搞单纯的功能堆积,而是从实际出发,重视产品的性能与价格比,靠发展多种型号来满足不同层次的应用要求。就实际而言,不同的应用对单片机功能和资源的需求也是不同的。比如,一个摩托车的点火器需要一个I/O较少、RAM及程序存储空间不大、可靠性较高的小型单片机,若采用40脚且功能强大的单片机,投资大不说,使用起来也不方便。 室温检测在实际生活中有相当重要的意义。比如说:通过温度来控制供暖阀门的开关,控制空调的降温和升温等等。在本课程设计我们采用基于PIC单片机型号16F628A,通过温度传感器18b20来检测温度,并通过MAX485芯片进行传输,在读取温度方面可以用过一个RS485和RS232电平转换器,传输到PC机上来查看。1.问题分析及解决方案1.1 题目要求本课程设计为一个实际应用系统的温度检测控制部分,在温度检测系统中,对功能的要求如下:1.需要通过温度传感器18b20把实时的温度采集出来。2.当PIC单片机程序跑飞,或受到干扰是有软件自动复位的功能。3.给PIC单片机一个地址,通过上位机来寻找此地址来查询温度,且可以修改地址。4.当PIC单片机断电和复位后,修改后的地址保持不变。5.需要通过458总线进行传输。1.2 解决方案针对题目所提供的要求,逐步提出以下解决方案:1.温度传感器18b20的温度采集主要的采集原理中的问题就是时序的问题,它之中的读,写,复位时序弄清楚,再对相应的寄存器进行设置。18b20就可以开始采集温度。2.对第二个要求,在PIC16F628A单片机刚好存在有看门狗功能,即当看门狗使能时,一段时间没有喂狗,单片机就会自动复位,刚好解决了第二个问题。3.在第三个和第四个要求中,可以利用PIC16F628A中的EEPROM来解决,EEPROM的主要功能就是的那个单片机断电后里面存在的数据不会丢失,在改变此检测系统的地址时,只需要把地址写到单片机的EEPROM中即可。4.要通过485传输,我们选择了集成芯片MAX485,它满足了485传输协议,利用差分传输,抗干扰能力强,通过对MAX485芯片的控制就达到了485传输的功能。2. 单片机选型及硬件配置2.1 单片机及扩展模块选择在此室内温度检测上,我们在单片机的选择上进行了综合的考虑,最终选择了工业级单片机PIC16F628A。它的主要特点:性价比高,体积小。它内部的结构完全可以满足室内温度检测所需要的要求,例如它内部有看门狗功能,有128字节的EEPROM,还有内部晶振,低功耗功能,16个IO口,欠压复位功能。基于此,我们选择它作为此系统的核心控制单元。在扩展模块中,我们需要温度传感和485传输。现在市场上用于温度检测主要就是18b20,它的优点也是性价比高,单线传输数据,可以节约单片机的IO口,所以我们也选择了18b20.MAX485是基于485协议的485传输接口芯片,采用半双工传输方式。性价比高,优质,也是我们采用它的主要原因。2.2 I/O地址分配在此系统中我们用到的IO口不多,引脚主要有指示灯一个,温度传感器一个,控制MAX485一个和外接晶振两个引脚,串行发送和接受两个引脚。具体引脚图如图1所示,IO地址分配如表1所示:图1 PIC16F628A引脚图表1 IO地址分配表IO地址功能RA3指示灯RB418B20温度传输线RB1数据接收RB2数据发送RB5MAX485控制线2.3 系统硬件原理图利用PROTEL绘制的系统控制电路原理图如图2所示。图2 电路原理图3.软件实现3.1 控制流程图 为了清楚地表明动作的顺序和条件,绘制室PIC单片机检测温度主程序流程图如图3所示。 图3 主程序流程图 温度传感器18B20的工作流程图如图4所示。图4 温度传感器18b20工作流程图中断服务工作和EEPROM读写流程图如图5所示。图5 中断服务程序及EEPROM写流程图3.2 软件代码利用C语言在MPLAB编译器里编写的程序如下所示:/PIC单片机配置位0xde45#include<pic.h>#include<string.h>#define uchar unsigned char#define uint unsigned int#define DQ RB4#define DQ_HIGH() TRISB4=1;DQ=1 /为输入#define DQ_LOW() TRISB4=0;DQ=0 uint temper;uchar a1,a2,a3,a4,addr,flag=0,flag1=0;void delay(uint x);void delayus(uint x);void init();void reset(); void write_byte(uchar date);uchar read_byte();void get_tem();void delay1();char RsBuf50; /定义串口接收数据缓冲区char RsPoint=0;char *mystrstr(char *s, char *t);/比较是否为OKunsigned char eeprom_rd(unsigned char addr) ;void eeprom_wr(unsigned char addr, unsigned char value) ; void Config18b20()/初始化传感器,有些精度是0.5就不可以啦 reset(); write_byte(0xcc); /skip rom write_byte(0x4e); /write scratchpad write_byte(0x55); /上限 TH 85度write_byte(0x00); /下限 TLwrite_byte(0x7f); /设置精度为 () ,特别说明:PDF说明文档说默认精度是0.0625,实际上不手动设置使用的是精度0.5reset(); write_byte(0xcc); /skip rom write_byte(0x48); /保存设定值 reset(); write_byte(0xcc); /skip rom write_byte(0xb8); /回调设定值 void clc()/清空函数char i;for(i=0;i<50;i+)RsBuf0='0' /清除串口接收数据缓冲区 RsPoint=0; void send_byte1( ) TXREG=eeprom_rd(0X00); while(!TRMT); void send_byte(uchar data ) TXREG= data; while(!TRMT); void Send_String(char * str) int k = 0; do send_byte(*(str + k); k+; while(k <strlen(str);void reset()/复位信号 uchar st=1;TRISB4=0;RB4=1; NOP();NOP();while(st)/循环读DS18b20有没有响应DQ_LOW(); delayus(26);/480us TRISB4=0;RB4=1;TRISB4=1; delayus(2);/70usif(DQ=1)st=1;elsest=0; delayus(22);/480usvoid write_byte(uchar date)uchar i,temp;for(i=8;i>0;i-)DQ_LOW();NOP();NOP();NOP(); NOP();NOP();NOP();NOP();NOP();NOP(); DQ=date&0x01;/01010101 delayus(1);/45us TRISB4=0;RB4=0;NOP();NOP();date>=0;/00101010 右移 NOP();NOP();uchar read_byte()uchar i,date=0; for(i=8;i>0;i-) DQ_LOW(); date=date>>1;/保证最低位存在NOP();NOP(); NOP();NOP();/5usTRISB4=0;RB4=1; TRISB4=1; if(DQ)date=date|0x80;/1000 0000 右移高位自动填0 delayus(1);/40us TRISB4=1RB4=1;NOP();NOP();/1us return (date);void get_tem()uchar tem1,tem2,num;float aaa;reset(); /复位write_byte(0xCC);/跳过ROM 因为只有一个ds18b20 不用读write_byte(0x44);/温度转换 delay(800);/延时 _此处本来需要750ms reset();write_byte(0xCC);write_byte(0XbE); /读暂存器tem1=read_byte();tem2=read_byte();aaa=(tem2*256+tem1)*6.25;/相当于 25.25转换为2525temper=(int)aaa;a1=temper/1000%10;a2=temper%1000/100;a3=temper%100/10;a4=temper%10;void delayus(uint x )uint i; for(i=x;i>0;i-)NOP(); void delay(uint x)/x msuint a,b;for(a=x;a>0;a-)for(b=110;b>0;b-);void init()TRISB1=1; TRISB2=1;TRISB3=0; TRISB5=0; TRISA3=0; RB5=0;/2MAX485RA3=1; /指示灯灭 OPTION=0x12;/看门的狗, 你要听话哟 Config18b20();/配置18b20TXSTA=0X24;/高速RCSTA=0X90;SPBRG=25;/波特率设置9600/发送不中断 接受中断GIE=1;/总中断使能PEIE=1;/定义外设中断使能RCIE=1;/接受中断使能void eeprom_wr(unsigned char addr, unsigned char value) if(WR=0) GIE=0; EEADRL=(addr); EEDATA=(value); WREN=1; /写使能WR=1; NOP(); NOP(); /两次空操作,等待eeprom写完成GIE=1; WREN=0; /写使能 unsigned char eeprom_rd(unsigned char addr) EEADRL=addr; RD=1; return EEDATA; void main()delay(200);init();RA3=0; /指示灯亮delay(200);RA3=1; /指示灯灭addr=eeprom_rd(0X00); while(1) if(flag1=1)/VIP查询地址flag1=0;RCIE=0;/关接受中断使能RB5=1;/2MAX485/发送send_byte1( );RB5=0;/2MAX485 准备接受 RCIE=1;/开 接受中断使能 if(flag=1)/用户查询数据 RCIE=0;/关接受中断使能 flag=0;RA3=0; /指示灯亮RB3=1;/ 蜂鸣器响 RB5=1;/2MAX485/发送 get_tem();/获得温度send_byte(a1+48); /通过串口发送 send_byte(a2+48); /通过串口发送 send_byte(a3+48); /通过串口发送send_byte(a4+48); /通过串口发送Send_String("C. "); RA3=1;/指示灯灭RCIE=1;/开 接受中断使能CLRWDT();/喂狗void interrupt com() char *p;if(RCIF)/判断接受标志 RsBufRsPoint+=RCREG; if(RCREG='1')/VIP查询地址 flag1=1;clc(); if(RsBuf0=addr&&RsPoint>=4) if(RsBuf2=0x72)/改 地址eeprom_wr(0x00,RsBuf3); if(RsBuf2=0x73)/输出温度 flag=1; if(RsPoint>=4) clc(); 3.3 设计结果通过反复的调试,功能已经全部实现,具体调试结果如下:硬件结构如截图6所示.上位机显示如截图7所示。图6 硬件结构图图7 上位机显示温度值图3.5 结果分析我们在设计过程中对硬件的电路设计和焊接,以及软件的调试,最后运行的结果已经达到预想的期望。在此检测系统中证明了PIC单片机在这一系统中的优势,充分的利用了它的资源,若采用40脚且功能强大的单片机比如STC89c52,投资大不说,体积也大,且造成众多资源的浪费。 在设计此系统中,由于我们考虑有软件自动复位的功能,所以我们没有加入手动复位功能,这可能对现场操作人员操作造成不变。4.结论与体会 在本次课程设计中,我主要做的工作是对PIC单片机控制程序的编写。在编写过程中经历了枯燥乏味的调试。记得有一次在调EEPROM的时候,在上电的情况下,进行读和写都能够成功,但是一断电数据就丢失,这令我十分懊恼,就继续去查资料,一遍一遍的看PIC16F628A技术手册,甚至和怀疑EEPROM到底能不能在断电后保存数据。然而在一次查技术手册时,看到配置位有一位是用于代码保护的功能,我马上令该位置位,结果就调通了,当然有有少许成就感。在此课程设计中,使我通过对单片机应用系统各主要环节的设计、调试方法,初步掌握并具备应用单片机进行设备技术改造和产品开发的能力,培养我们的创新意识,提高了动手能力和分析问题、解决问题的能力。参考文献1曾宪之,林永等. PIC单片机应用项目教程.北京:机械工业出版社.2010.2李华,王思明.单片机原理及应用.兰州:兰州大学出版社.2001.3封志宏.模拟电子技术.兰州:兰州大学出版社. 2003. - 17 -

    注意事项

    本文(单片机课程设计-基于PIC单片机的室内温度检测.doc)为本站会员(李主任)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开