機電之家資源網(wǎng)
單片機首頁|單片機基礎|單片機應用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓信息
贊助商
18B20通訊程序-PIC
18B20通訊程序-PIC
 更新時間:2008-7-26 16:30:39  點擊數(shù):3
【字體: 字體顏色
 

這是我在16F877,18F1320,18F1220上通過的18B20程序,18B20主要是延時問題,這個解決了,什么都可以通過。

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

 

 

 

 

 

 

# 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_OUTPUTvoid 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);//返回應答信號 }//***************  讀一位函數(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中讀一個字節(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中 寫一個字節(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()) ;//復位等待從機應答         write_byte(0XCC);//忽略ROM匹配         write_byte(0X44);//發(fā)送溫度轉(zhuǎn)化命令                         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單片機子程序-單字節(jié) 雙字節(jié)的加法
  • 下一篇: 適合學PIC入門的編程+試驗電路
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網(wǎng)友評論:(只顯示最新5條。)
    關于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

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

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

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