新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STC12C5A60S2單片機的DS18B20的C程序

        STC12C5A60S2單片機的DS18B20的C程序

        作者: 時間:2016-11-24 來源:網絡 收藏

        最近在搞18B20,發現其對CPU的不兼容性很高,由于其對時間信號的敏感引起的

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

        由于STC單片機的速度比8051速度快,屬于1個時鐘/機器周期高速單片機。速度快當然是它的優點,但對于要移植傳統的8051程序而言,需要修改時序來實現某功能.

        以下程序是ds18b20簡單的驅動程序,其實是在網上Down的,經本人稍作修改之后,在STC12C5A60S2中調試通過的,最后讀溫度返回一個unsigned int,低12位就是溫度數據。在主程序里進行運算即可得到實際溫度值。呵呵~~

        void delay_18B20(unsigned int i)
        {
        while(i--);
        }

        void Init_DS18B20(void)
        {
        unsigned char x=0;
        DQ = 1; //DQ復位
        delay_18B20(80); //稍做延時
        DQ = 0; //單片機將DQ拉低
        delay_18B20(800); //精確延時 大于 480us
        DQ = 1; //拉高總線
        delay_18B20(140);
        x=DQ; delay_18B20(200);
        }

        unsigned char ReadOneChar(void)
        {
        uchar i=0;
        uchar dat = 0;
        for (i=8;i>0;i--)
        {
        DQ = 0; // 給脈沖信號
        dat>>=1;
        DQ = 1; // 給脈沖信號
        if(DQ)
        dat|=0x80;
        delay_18B20(40); //40
        }
        return(dat);
        }

        void WriteOneChar(uchar dat)
        {
        unsigned char i=0;
        for (i=8; i>0; i--)
        {
        DQ = 0;
        DQ = dat&0x01;
        delay_18B20(50); //50
        DQ = 1;
        dat>>=1;
        }
        }

        unsigned int ReadTemp(void)
        {
        unsigned char a=0;
        unsigned char b=0;
        unsigned int temp_value=0;

        Init_DS18B20();
        WriteOneChar(0xCC);

        WriteOneChar(0x44);

        delay_18B20(1000);

        Init_DS18B20();
        WriteOneChar(0xCC);
        WriteOneChar(0xBE);

        delay_18B20(1000);

        a=ReadOneChar(); //讀取溫度值低位
        b=ReadOneChar(); //讀取溫度值高位

        temp_value = b<<8;
        temp_value |= a;
        return temp_value;

        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 昂仁县| 井冈山市| 祁门县| 渝中区| 秀山| 寻甸| 中方县| 吉林省| 徐闻县| 关岭| 松潘县| 太保市| 徐汇区| 东平县| 江油市| 临夏市| 嘉荫县| 新沂市| 河曲县| 永康市| 观塘区| 阳朔县| 三明市| 佛冈县| 阳高县| 玛多县| 会同县| 新乐市| 罗定市| 淮南市| 恩平市| 阿坝| 崇仁县| 甘德县| 南京市| 奈曼旗| 天门市| 镇康县| 长子县| 法库县| 泰和县|