機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
18B20通訊程序
18B20通訊程序
 更新時(shí)間:2008-7-26 17:10:27  點(diǎn)擊數(shù):4
【字體: 字體顏色
這是我在16F877,18F1320,18F1220上通過的18B20程序,18B20主要是延時(shí)問題,這個(gè)解決了,什么都可以通過。

[原作者沒有提供所使用的編譯器,由于是C程序,所以大同小異,建議使用時(shí),確認(rèn)是否與你的編譯器兼容]

# 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)答信號    
        DQ_LOW();
        delay(70);//置總線為低電平并保持至少480us
       
        DQ_HIGH();//等電阻拉高總線并保持15-60us
       
        delay(5);
        presence=DQ;//接受應(yīng)答信號
        delay(20);//延時(shí)60-240us
       
        return(presence);//返回應(yīng)答信號
}

//***************  讀一位函數(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();//讀出溫度高8位
       
        DQ_HIGH();//釋放總線
}

  • 上一篇: 自制PIC編程器
  • 下一篇: DS1302與PIC16F877接口程序
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1