?? www.ourhc.cn.c
字號:
/********************************************************************
匯誠科技
實現功能:STC12C5A60S2單片機之DS18B20溫度傳感器1T
使用芯片:STC12C5A60S2
晶振:11.0592MHZ
波特率:115200
編譯環境:Keil
作者:zhangxinchun
網站:www.ourhc.cn
淘寶店:
匯誠科技 http://ourhc.taobao.com
鄭興電子直銷部 http://shop68451856.taobao.com
【聲明】此程序僅用于學習與參考,引用請注明版權和作者信息!
*********************************************************************/
#include "REG52.H"
#include "INTRINS.H"
typedef unsigned char BYTE;
sbit DQ = P3^3; //DS18B20的數據口位P3.3
BYTE TPH; //存放溫度值的高字節
BYTE TPL; //存放溫度值的低字節
void DelayXus(BYTE n);
void DS18B20_Reset();
void DS18B20_WriteByte(BYTE dat);
BYTE DS18B20_ReadByte();
void main()
{
DS18B20_Reset(); //設備復位
DS18B20_WriteByte(0xCC); //跳過ROM命令
DS18B20_WriteByte(0x44); //開始轉換命令
while (!DQ); //等待轉換完成
DS18B20_Reset(); //設備復位
DS18B20_WriteByte(0xCC); //跳過ROM命令
DS18B20_WriteByte(0xBE); //讀暫存存儲器命令
TPL = DS18B20_ReadByte(); //讀溫度低字節
TPH = DS18B20_ReadByte(); //讀溫度高字節
while (1);
}
/**************************************
延時X微秒(STC12C5A60S2@12M)
不同的工作環境,需要調整此函數
此延時函數是使用1T的指令周期進行計算,與傳統的12T的MCU不同
**************************************/
void DelayXus(BYTE n)
{
while (n--)
{
_nop_();
_nop_();
}
}
/**************************************
復位DS18B20,并檢測設備是否存在
**************************************/
void DS18B20_Reset()
{
CY = 1;
while (CY)
{
DQ = 0; //送出低電平復位信號
DelayXus(240); //延時至少480us
DelayXus(240);
DQ = 1; //釋放數據線
DelayXus(60); //等待60us
CY = DQ; //檢測存在脈沖
DelayXus(240); //等待設備釋放數據線
DelayXus(180);
}
}
/**************************************
從DS18B20讀1字節數據
**************************************/
BYTE DS18B20_ReadByte()
{
BYTE i;
BYTE dat = 0;
for (i=0; i<8; i++) //8位計數器
{
dat >>= 1;
DQ = 0; //開始時間片
DelayXus(1); //延時等待
DQ = 1; //準備接收
DelayXus(1); //接收延時
if (DQ) dat |= 0x80; //讀取數據
DelayXus(60); //等待時間片結束
}
return dat;
}
/**************************************
向DS18B20寫1字節數據
**************************************/
void DS18B20_WriteByte(BYTE dat)
{
char i;
for (i=0; i<8; i++) //8位計數器
{
DQ = 0; //開始時間片
DelayXus(1); //延時等待
dat >>= 1; //送出數據
DQ = CY;
DelayXus(60); //等待時間片結束
DQ = 1; //恢復數據線
DelayXus(1); //恢復延時
}
}
/********************************************************************
結束
*********************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -