📄 ds1820.lst
字号:
C51 COMPILER V7.06 DS1820 10/27/2008 22:55:09 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DS1820
OBJECT MODULE PLACED IN DS1820.OBJ
COMPILER INVOKED BY: D:\Cs1.6中文版\C51\BIN\C51.EXE DS1820.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /**********************************************************
2 *DS1820驱动程序
3 *版本:V1.0
4 **********************************************************/
5 #include <reg52.h>
6 //引脚定义
7 sbit DS1820_DQ= P1^4; //单总线引脚
8 //函数声明
9 bit DS1820_Reset();
10 void DS1820_WriteData(unsigned char wData);
11 unsigned char DS1820_ReadData();
12 //存放温度数据
13 unsigned char data temperature[2]; //将温度存储在低128RAM单元
14 /**********************************************************
15 *读温度数据函数
16 **********************************************************/
17 void read_temp()
18 {
19 1 unsigned char i;
20 1 DS1820_Reset(); //复位
21 1 DS1820_WriteData(0xcc); //跳过ROM命令
22 1 DS1820_WriteData(0x44); //温度转换命令
23 1 DS1820_Reset(); //复位
24 1 DS1820_WriteData(0xcc); //跳过ROM命令
25 1 DS1820_WriteData(0xbe); //读DS1820温度暂存器命令
26 1 for (i=0;i<2;i++)
27 1 {
28 2 temperature[i]=DS1820_ReadData();
29 2 }
30 1 DS1820_Reset(); //复位,结束读数据
31 1 }
32
33 /**********************************************************
34 *DS1820复位及存在检测(通过存在脉冲可以判断DS1820是否损坏)
35 *函数名称:DS1820_Reset()
36 *说明:函数返回一个位标量(0或1)flag=0存在,反之flag=1不存在
37 **********************************************************/
38 bit DS1820_Reset()
39 {
40 1 unsigned char i;
41 1 bit flag; //DS1820存在标志位
42 1 DS1820_DQ = 0; //拉低总线
43 1 for (i=240;i>0;i--);//延时480微秒,产生复位脉冲
44 1 DS1820_DQ = 1; //释放总线
45 1 for (i=40;i>0;i--); //延时80微秒对总线采样
46 1 flag = DS1820_DQ;
47 1 for (i=200;i>0;i--); //延时400微秒等待总线恢复
48 1 return (flag); //根据flag的值可以知道DS1820是否存在或损坏
49 1 } //可以加声音告警提示DS1820故障
50 /**********************************************************
51 *写数据到DS1820
52 *函数名称:DS1820_WriteData()
53 **********************************************************/
54 void DS1820_WriteData(unsigned char wData)
55 {
C51 COMPILER V7.06 DS1820 10/27/2008 22:55:09 PAGE 2
56 1 unsigned char i,j;
57 1 for (i=8;i>0;i--)
58 1 {
59 2 DS1820_DQ = 0; //拉低总线,产生写信号
60 2 for (j=2;j>0;j--); //延时4us
61 2 DS1820_DQ = wData&0x01; //发送1位
62 2 for (j=30;j>0;j--); //延时60us,写时序至少要60us
63 2 DS1820_DQ = 1; //释放总线,等待总线恢复
64 2 wData>>=1; //准备下一位数据的传送
65 2 }
66 1 }
67 /**********************************************************
68 *从DS1820中读出数据
69 *函数名称:DS1820_ReadData()
70 **********************************************************/
71 unsigned char DS1820_ReadData()
72 {
73 1 unsigned char i,j,TmepData;
74 1 for (i=8;i>0;i--)
75 1 {
76 2 TmepData>>=1;
77 2 DS1820_DQ = 0; //拉低总线,产生读信号
78 2 for (j=2;j>0;j--); //延时4us
79 2 DS1820_DQ = 1; //释放总线,准备读数据
80 2 for (j=4;j>0;j--); //延时8微秒读数据
81 2 if (DS1820_DQ == 1)
82 2 TmepData |= 0x80;
83 2 for (j=30;j>0;j--); //延时60us
84 2 DS1820_DQ = 1; //拉高总线,准备下一位数据的读取.
85 2 }
86 1 return (TmepData);//返回读到的数据
87 1 }
88
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 132 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 1
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -