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

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

# include <pic18f1220.h>
# define uch unsigned char
# define unint unsigned int
# define DQ        RB3//定義18B20數據端口    
# 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;//定義一個應答信號    
        DQ_LOW();
        delay(70);//置總線為低電平并保持至少480us
       
        DQ_HIGH();//等電阻拉高總線并保持15-60us
       
        delay(5);
        presence=DQ;//接受應答信號
        delay(20);//延時60-240us
       
        return(presence);//返回應答信號
}

//***************  讀一位函數******************//

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);
}

//*********************寫一位函數****************//

void write_bit(uch bitval)
{
        DQ_LOW();
        delay(1);
       
        if (bitval==1)
        {
                DQ_HIGH();
               
        }
       
        delay(3);
        DQ_HIGH();
}

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

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

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

void write_byte(uch val)
{
        uch i;
        uch temp;
       
        for (i=0;i<8;i++)
        {
                temp=val>>i;
                temp&=0x01;
                write_bit(temp);//調寫位函數
               
        }
        asm("nop");
        asm("nop");
        asm("nop");
}
main()
{
        uch teml,temh;
       
        GIE=0;
        OSCCON=0X6E;//這是18F1320的頻率選擇寄存器
        ADCON1=0X7F;
       
        do{
                ;
        }while (reset()) ;//復位等待從機應答
        write_byte(0XCC);//忽略ROM匹配
        write_byte(0X44);//發(fā)送溫度轉化命令
       
       
        delay(25000);//延時100-300us
        do
        {
                ;
        }while( reset());//再次復位,等待從機應答
       
        write_byte(0XCC);//忽略ROM匹配
        write_byte(0XBE);//發(fā)送讀溫度命令
        teml =read_byte();//讀出溫度低8       
       
        temh=read_byte();//讀出溫度高8位
       
        DQ_HIGH();//釋放總線
}

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

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

    主辦:杭州市高新區(qū)(濱江)機電一體化學會
    中國行業(yè)電子商務100強網站

    網站經營許可證:浙B2-20080178-1