音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

共享我的18B20通訊程序

作者:sarszhang 欄目:單片機(jī)
共享我的18B20通訊程序
這是我在16F877,18F1320,18F1220上通過(guò)的18B20程序,18B20主要是延時(shí)問(wèn)題,這個(gè)解決了,什么都可以通過(guò)。
# include <pic18f1220.h>
# define uch unsigned CHAR
# define unint unsigned int
# define DQ        RB3   //定義18B20數(shù)據(jù)端口    
# define DQ_DIR        TRISB3 //定義18B20D口方向寄存器
# define W1_INPUT    1      
# define W1_OUTPUT    0      
# define FALSE        0
# define TRUE        !FALSE
# define DQ_HIGH()     DQ_DIR = W1_INPUT         
# define DQ_LOW()      DQ = 0; DQ_DIR = W1_OUTPUT
void delay(unint x)  
{
unint d;
  d=x;
while(--d)
{;}
}
bit reset(void)                //初始化18B20
{
    static bit presence;      //定義一個(gè)應(yīng)答信號(hào)    
    DQ_LOW();
     delay(70);                 //置總線為低電平并保持至少480us
    
        
    DQ_HIGH();                //等電阻拉高總線并保持15-60us

   delay(5);    
    presence=DQ;              //接受應(yīng)答信號(hào)
   delay(20);                           //延時(shí)60-240us
   
    return(presence);         //返回應(yīng)答信號(hào)
}

//***************  讀一位函數(shù)******************//

bit read_bit(void)        
{
    static bit i;

    DQ_LOW();
    DQ_LOW();
    DQ_HIGH();
   asm("nop");
   asm("nop");
   asm("nop");
    i=DQ;

   delay(3);
    return(i);
}

//*********************寫一位函數(shù)****************//

void write_bit(uch bitval)  
{    
    DQ_LOW();
   delay(1);

    if (bitval==1)  
    {
        DQ_HIGH();

    }

     delay(3);
    DQ_HIGH();
}

//**************  從18B20中讀一個(gè)字節(jié)**************//

uch read_byte(void)       
{
    uch i;
    uch j;
    uch VALUE=0;
  
    
    for (i=0;i<8;i++)
    {
        j=read_bit();     //調(diào)讀位函數(shù)
      
        if (j)               //如果是 1 置1
        {
            VALUE|=(0x01<<i);  //先讀低位,再讀高位
           asm("nop");
           asm("nop");
           asm("nop");
        }
    }                         //否則置 0
    return(VALUE);          
}

//*********************向18B20中 寫一個(gè)字節(jié)**************//

void write_byte(uch val)    
{
    uch i;
    uch TEMP;
  
   
    for (i=0;i<8;i++)
    {
        TEMP=val>>i;
        TEMP&=0x01;
        write_bit(TEMP);   //調(diào)寫位函數(shù)
        
    }
    asm("nop");
           asm("nop");
           asm("nop");     
}  
main()
{
   uch teml,temh;


    GIE=0;
    OSCCON=0X6E;     //這是18F1320的頻率選擇寄存器
    ADCON1=0X7F;
   



     do{
             ;
           }while (reset()) ;           //復(fù)位等待從機(jī)應(yīng)答
         write_byte(0XCC);         //忽略ROM匹配
         write_byte(0X44);         //發(fā)送溫度轉(zhuǎn)化命令
        
       
           delay(25000);    //延時(shí)100-300us
         do
           {
             ;
           }while( reset());          //再次復(fù)位,等待從機(jī)應(yīng)答
                         
         write_byte(0XCC);          //忽略ROM匹配
         write_byte(0XBE);          //發(fā)送讀溫度命令
         teml =read_byte();          //讀出溫度低8       
        
         temh=read_byte();        
2樓: >>參與討論
冷若寒
RE
18B20 是什么東東?

3樓: >>參與討論
YK829
RE
    18B20也是三個(gè)引腳么?他有寄生電源模式么?如果有請(qǐng)不吝賜教它的寄生電路圖。我現(xiàn)在用1820,可是我不能確定我的電路圖對(duì)不對(duì)。謝謝!

4樓: >>參與討論
fish_sman
18B20數(shù)字式溫度傳感器
google上一搜就都知道了。
我們學(xué)校參加電子大賽的好像用到了。

5樓: >>參與討論
dzdiy
是否試過(guò)負(fù)溫度?
sarszhang兄:我用你的程序測(cè)量0~+125攝氏度正常,負(fù)溫度0~-55攝氏度讀出值都為零,請(qǐng)問(wèn)你是否試過(guò)負(fù)溫度?

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
PIC18F458的CAN可以和SJA1000通訊嗎?
16位的PIC單片機(jī)(PIC24,DSP)是否好買,什么地方有?
請(qǐng)高手賜教!
弱弱地問(wèn)?PIC的I/O端口的高或低的持續(xù)時(shí)間?
請(qǐng)問(wèn)4-20mA的信號(hào)怎么采集
免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)