原创 ds18b20 c51源代码 作者[qlpic](包含命令)

2007-8-21 19:02 2981 2 3 分类: 通信

ds18b20 c51源代码 作者[qlpic]


--- 摘自《C51BBS单片机C语言论坛》---
#include "reg51.h"
#include "INTRINS.H"
#include "LCD.h"


#define CLR_RI  (RI=0)
#define CLR_TI  (TI=0)
                               
unsigned char code ID[2][8]={ 0x28,0x1D,0x25,0x1D,0x00,0x00,0x00,0x80,
                              0x28,0x0e,0x9e,0x1c,0x00,0x00,0x00,0x32};
unsigned char currSensorNo="0";


sbit  TMDAT   =  P1^7;
sbit  RUN_LED =  P1^6;


/*------------------------------------------------
*
*------------------------------------------------*/
void serial_initial()
{
     TMOD="0X20";
     SCON="0X50";
     PCON="0X00";
     TL1=TH1=0XE8;
     TR1=1;
}


/*------------------------------------------------
*
*------------------------------------------------*/
void  send(unsigned char count,unsigned char SEND_Buf[])

unsigned char  i;
 for(i=0;i<count;i++)
 {
  SBUF=SEND_Buf;
  while(!TI);
  CLR_TI;
 }
}


/*----------------------------------------------------
*   delay N ms
*----------------------------------------------------*/
void Delay_ms (unsigned int Nms )
{
unsigned char i;
 while(Nms--)
 for(i=0; i<125; i++) ;
}


/*----------------------------------------------------
*   delay N count
*----------------------------------------------------*/
void Delay_Count (unsigned char Count )
{
    while(Count>0) Count--;
}


/*----------------------------------------------------
*   start Reset Pulse
----------------------------------------------------*/
void tmreset(void)
{
    TMDAT="0";
    Delay_Count(103);


    TMDAT="1";
     Delay_Count(4);
}


/*----------------------------------------------------
*        ACK
*----------------------------------------------------*/
void tmpre(void)
{
    while(TMDAT);
    while(~TMDAT);
    Delay_Count(4);
}


/*----------------------------------------------------
*   Read a bit from 1820
*----------------------------------------------------*/
bit tmrbit(void)
{
    int i="0";
    bit dat;
    TMDAT="0";i++;
        TMDAT="1";i++;i++;
    dat = TMDAT;
        Delay_Count(8);
    return dat;
}


/*----------------------------------------------------
*   Read a byte from 1820
*----------------------------------------------------*/
unsigned char tmrbyte(void)
{
unsigned char i,j,dat=0;


    for(i=1;i<=8;i++)
    {
        j="tmrbit"();
        dat=(j<<7)|(dat>>1);
    }
    return dat;
}


/*----------------------------------------------------
*   Read a byte from 1820
*----------------------------------------------------*/
void tmwbyte(unsigned char dat)
{
    signed char   i="0";
    unsigned char j;
    bit testb;


    for(j=1;j<=8;j++)
    {
        testb="dat" & 0x01;
        dat = dat>>1;
        if(testb)
        {
            TMDAT="0";
            i++;i++;
            TMDAT="1";
             Delay_Count(8);
        }
        else
        {
            TMDAT="0";
             Delay_Count(8);
            TMDAT="1";
            i++;i++;
        }
    }
}


/*----------------------------------------------------
*   send convert command to  1820
*----------------------------------------------------*/
void tmstart(void)
{
unsigned char i;
 tmreset();
    tmpre();
    Delay_ms(1);
/*  tmwbyte(0xcc);*/
    tmwbyte(0x55);
    for(i=0;i<8;i++)
     tmwbyte(ID[currSensorNo]);
    tmwbyte(0x44);
}



/*----------------------------------------------------
*   Read tempreature from  1820
*----------------------------------------------------*/
unsigned int tmrtemp_all(void)
{
unsigned char a,b;
unsigned int y3;
unsigned char i;


 tmreset();
    tmpre();
    Delay_ms(1);
    /*tmwbyte(0xcc);*/
    tmwbyte(0x55);
    for(i=0;i<8;i++)
     tmwbyte(ID[currSensorNo]);
         
    tmwbyte(0xbe);
    a = tmrbyte();
    b = tmrbyte();
    y3 = ((unsigned int)b) << 8;
  


    return ((y3+a) & 0x7ff) ;
}


/*----------------------------------------------------
*   Start Test tempreature, All
*
*----------------------------------------------------*/
void Display_AllTemp(void )
{
unsigned int last;
unsigned char i,Dot;


 RUN_LED=0;
 Part=0;
 LED_DISPLAY();
 Delay_ms(1);


 tmstart();


 Delay_ms(800);
 last=tmrtemp_all();
 RUN_LED=1;


 Dot= (last & 0x0f)*6.25 ;
 Digit[0]= Dot%10;
 Digit[1]=Dot/10;


 last=(last>>4) & 0x7f ;
 if( (last == 0x7f) )   // erro
 {
     for(i=0;i<5;i++)  Digit=16;
 }
    else
 {
  for(i=2;i<5;i++)
  {
   Digit = last %10;
   last = last/10;
  }
  if(Digit[4]==0)Digit[4]=17;
  Part=1;
 }
 Digit[5]=currSensorNo;


        
 LED_DISPLAY();


}


/*----------------------------------------------------
*
*----------------------------------------------------*/
/*  void  Read_Id()
  {
   unsigned char i,id[8];
    tmreset();
    tmpre();
    Delay_ms(1);
    tmwbyte(0x33);


   for(i=0;i<8;i++)
    id=tmrbyte();
      send(8,id);
}*/


/*----------------------------------------------------
*
*    Main
*----------------------------------------------------*/
void main(void)
{
unsigned char id[8]={1,2,3,4,5,6,7,8};


 serial_initial();
 send(8,id);
    for(;;)
    {
  RUN_LED=!RUN_LED;
/*     Read_Id();*/
  TX_C =!TX_C ;
  currSensorNo=(currSensorNo==1)?0:1;
  Display_AllTemp();
      /*Change();*/
  send(6,Digit);
  Delay_ms(1000);
         _nop_();
   }
}

文章评论1条评论)

登录后参与讨论

用户39830 2008-1-15 10:54

你好

有原理图吗?急用,多谢多谢  sjzjjxymomo@163.com

相关推荐阅读
用户816416 2008-03-30 22:14
程序员的修养
程序员的修养 Statesman 发表于 2007-12-2 19:05:00什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?我觉得都不是。对于一些技术细节来说和底层的技...
用户816416 2008-03-30 22:14
程序员的修养
程序员的修养 Statesman 发表于 2007-12-2 19:05:00什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?我觉得都不是。对于一些技术细节来说和底层的技...
用户816416 2008-01-07 20:11
蓝莲花
歌手:许巍 专辑:时光-漫步 没有什么能够阻挡 你对自由的向往 天马行空的生涯 你的心了无牵挂 穿过幽暗的岁月 也曾感到彷徨 当你低头地瞬间 才发觉脚下的路 心中那自由地世界 如此的清澈高远 盛开着永...
用户816416 2007-11-18 15:57
纪念路遥逝世十五周年
  我为什么觉得路遥才是最伟大的作家          文学大师的著作,拜读过许多。如陈忠实的《白鹿原》,阿来的《尘埃落定》,余华的《活着》,《许三观卖血记》,《兄弟》,还有霍达的《穆斯林的葬礼》,甚...
用户816416 2007-09-09 20:34
技术随想
     日子过的真快,我已经本科毕业4年,研究生毕业1年了。在这段不短的时间里,我从一个懵懵懂懂,对技术一无所知的毕业生,成长为一个对工程研发有一定认识,但是水平很低下的匠人。这段时间的生活就像一张...
用户816416 2007-09-09 20:28
转帖 windowsNT驱动程序层次结构
NT驱动程序的分层结构 驱动程序是指管理某个外围设备的一段程序代码。NT采用更灵活的分层驱动方法,允许杂应用程序和硬件之间 存在几个驱动程序层次。分层机制允许NT更加广泛地定义驱动程序,包括文件系统、...
我要评论
1
2
关闭 站长推荐上一条 /2 下一条