毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 计算机安全 >> 正文

基于单片机的温度实时监控系统设计 第8页

更新时间:2014-6-29:  来源:毕业论文

基于单片机的温度实时监控系统设计 第8页

(3)读时间隙
见图4.11,主机总线t0时刻从高拉至低电平时总线只须保持低电平l5us之后在t1时刻将总线拉高产生读时间隙读时间隙。在t1时刻后t2时刻前有效,t2距to为15us,也就是说t2时刻前主机必须完成读位, 并在t0后的60us一120us内释放总线.

图4.11  读时序

根据数字温度传感器的工作时序及原理进行软件的设计,DS18B20的C51程序代码如下:
sbit DQ =P1^0;  //DS18B20端口

typedef unsigned char byte;
typedef unsigned int  word;

void delay(word useconds)              //延时子函数
    {
      for(;useconds>0;useconds--);
     }

byte ow_reset(void)                  //复位DS18B20    
   {
     byte presence;
     DQ = 0;         //送出低电平
     delay(29);       // 延时 480us
     DQ = 1;         // 送出高电平
     delay(3);         // 等到DS18B20存在脉冲 
 presence = DQ;   // 读存在脉冲(低电平有效)
 delay(25);        //延时
  return(presence);
}    

byte read_byte(void)    //从 1-wire 总线上读取一个字节
  {
    byte i;
    byte value = 0;
    for (i=8;i>0;i--)
      {
        value>>=1;
        DQ = 0;  // 输出一脉冲
        DQ = 1; 
        delay(1);  
        if(DQ)
value|=0x80;
        delay(6);
      }
    return(value);
  }

void write_byte(char val)         //向 1-WIRE 总线上写一个字节

{
  byte i;
  for (i=8; i>0; i--)   // 写一个字节,每次写一位
  {
    DQ = 0;       
    DQ = val&0x01;
    delay(5);
 DQ = 1;
        val=val/2;      //用除法实现移位
      }
   delay(5);
  }

                 
char Read_Temperature(void)        //读取温度 
{
     byte temp[2];
    float x;

    ow_reset();             //复位DS18B20
    write_byte(0xCC);        //跳过 ROM
    write_byte(0xBE);        //写入读存储器指令
 temp[1]=read_byte();     //读入数据
    temp[0]=read_byte();
 x= temp[1]*0x112 + temp[0];
 x= x*0.0625;           //将数值转换为摄氏温度

  return x;          
4.2.4 系统的程序源代码
系统的C52 源程序如下:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DS=P3^3;           //定义DS18B20接口
int temp;            
uchar flag1;           

void display(unsigned char *lp,unsigned char lc);//数字的显示函数;lp为指向数组的地址,lc为显示的个数

void delay();//延时子函数,5个空指令
code unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x08,0x00};
   //共阴数码管 0-9 - _ 空 表

unsigned char l_tmpdate[8]={0,0,10,0,0,0,0,0};//定义数组变量,并赋值1,2,3,4,5,6,7,8,就是本程序显示的八个数
int tmp(void);
void tmpchange(void);
void tmpwritebyte(uchar dat);
uchar tmpread(void);
bit tmpreadbit(void);
void dsreset(void);
void delayb(uint count);

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ... 下一页  >> 

基于单片机的温度实时监控系统设计 第8页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©751com.cn 辣文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。