<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 18B20通訊程序--源代碼介紹

          18B20通訊程序--源代碼介紹

          作者: 時(shí)間:2011-12-05 來源:網(wǎng)絡(luò) 收藏

          這是我在16F877,18F1320,18F1220上通過的,主要是延時(shí)問題,這個(gè)解決了,什么都可以通過。

          本文引用地址:http://www.ex-cimer.com/article/172379.htm

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

          #include pic18f1220.h>

          #define uch unsigned char

          #define unint unsigned int

          #define DQ RB3 //定義數(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;i8;i++)

          {

          j=read_bit(); //調(diào)讀位函數(shù)

          if (j) //如果是 1 置1

          {

          value|=(0x01i); //先讀低位,再讀高位

          asm(nop);

          asm(nop);

          asm(nop);

          }

          } //否則置 0

          return(value);

          }

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

          void write_byte(uch val)

          {

          uch i;

          uch temp;

          for (i=0;i8;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(); //釋放總線

          }



          關(guān)鍵詞: 介紹 源代碼 程序 通訊 18B20

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();