新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > I-wire總線(單總線)讀寫51程序

        I-wire總線(單總線)讀寫51程序

        作者: 時間:2016-11-26 來源:網絡 收藏
        //-----------------------函數聲明,變量定義--------------------------------------------------------

        #include
        sbit DQ=P1^0;// 將p1.0口模擬時鐘輸出

        本文引用地址:http://www.104case.com/article/201611/321915.htm

        //--------------------------------------------------------------------------------------------------
        // 函數名稱: delay
        // 入口參數: N
        // 函數功能:延時子程序,實現(16*N+24)us的延時
        // 系統采用11.0592MHz的時鐘時,延時滿足要求,其它情況需要改動
        //--------------------------------------------------------------------------------------------------
        void delay(unsignedint N)
        {
        int i;
        for(i=0;i
        }
        //--------------------------------------------------------------------------------------------------
        // 函數名稱: Reset
        // 入口參數: 無
        // 返回deceive_ready
        // 函數功能:復位
        //--------------------------------------------------------------------------------------------------
        unsigned char Reset(void)
        {
        unsignedchar deceive_ready;
        DQ=0;//拉低DQ線
        delay(29);//延時至少480us~960us
        DQ=1;//將DQ線設置位邏輯高
        delay(3);//延時等待deceive_ready響應
        deceive_ready=DQ;//采樣deceive_ready信號
        delay(25);//等待時序結束
        return(deceive_ready);//有deceive_ready信號時返回0,否則返回1
        }
        //--------------------------------------------------------------------------------------------------
        // 函數名稱:read_bit
        // 入口參數: 無
        // 返回接收的數據
        // 函數功能:讀一個bit子程序
        //--------------------------------------------------------------------------------------------------
        unsigned char read_bit(void)
        {
        unsigned char i;
        DQ=0;//拉低DQ線開始時序
        DQ=1;//升高DQ線//延時至時序開始15us
        for(i=0;i<3;i++);//延時15us
        return(DQ);//返回DQ值
        }
        //--------------------------------------------------------------------------------------------------
        // 函數名稱: write_bit
        // 入口參數: bitval
        // 函數功能:寫一個bit子程序
        //--------------------------------------------------------------------------------------------------
        void write_bit(unsigned char bitval)
        {
        DQ=0;//拉低DQ線開始時序
        if(bitval==1)
        DQ=1;//如果寫邏輯為高
        delay(5);//延時
        DQ=1;//升高DQ線
        }
        //--------------------------------------------------------------------------------------------------
        // 函數名稱: write_byte
        // 入口參數: val
        // 函數功能:寫一個byte子程序
        //--------------------------------------------------------------------------------------------------
        void write_byte(unsigned char val)
        {
        unsigned char i,temp;
        for(i=0;i<8;i++)
        {
        temp=val>>i;//將val位右移i位賦值給比temp
        temp=temp&0x01;//取temp最低位
        write_bit(temp);
        delay(5);//延時至時序結束
        }
        }
        //--------------------------------------------------------------------------------------------------
        // 函數名稱: read_byte
        // 返回接收的數據 value
        // 函數功能:讀一個byte子程序
        //--------------------------------------------------------------------------------------------------
        unsigned char read_byte(void)
        {unsigned char i,m,receive_data;
        m=1;receive_data=0;//初始化
        for(i=0;i<8;i++)
        {
        if(read_bit())
        {
        receive_data=receive_data+(m<}//每讀一位數據據,左移一位
        delay(6);//延時至時序結束
        }
        return(receive_data);//返回value
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 克什克腾旗| 改则县| 秦皇岛市| 麻江县| 东兰县| 通化县| 淮滨县| 墨江| 额济纳旗| 武义县| 永修县| 桦甸市| 曲阳县| 克拉玛依市| 抚松县| 襄汾县| 固原市| 黄龙县| 马尔康县| 鹿邑县| 昆山市| 宣威市| 洮南市| 紫阳县| 嘉鱼县| 依安县| 习水县| 双辽市| 永州市| 大荔县| 宜阳县| 铁岭县| 东安县| 报价| 浠水县| 北海市| 乃东县| 宜川县| 祥云县| 聂拉木县| 新和县|