📄 ds18b20c2.lst
字号:
C51 COMPILER V8.02 DS18B20C2 08/10/2007 21:47:40 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE DS18B20C2
OBJECT MODULE PLACED IN DS18B20C2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS18B20C2.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /****************************************************************
2 /* 这是直接用C51高级语言编写的DS18B20转换程序-没有调用汇编语言,*/
3 /* 文件名DS18B20C2.C */
4 /* 功能:本程序主要是读出单个DS18B20芯片转换后的温度值,范围 */
5 /* (-55℃~125℃)。单片机的P1.0接DS18B20 的BQ。 */
6 /* flag为温度值的正负号标志单元, flag 为"1"时表示温度值为负值*/
7 /* ,为"0"时表示温度值为正值。 变量cc中保存读出的温度值。 */
8 /* 本程序仅适合单个DS18B20 和51单片机的连接,晶振为12MHZ左右。*/
9 /****************************************************************/
10 #include <REG52.H>
11
12 #define uchar unsigned char
13 #define uint unsigned int
14
15 sbit DQ =P1^0; //定义端口
16 union{
17 uchar c[2];
18 uint x;
19 }temp;
20 uchar flag;
21 uint cc;
22
23 void delay(uint useconds) //延时程序
24 {
25 1 for(;useconds>0;useconds--);
26 1 }
27
28 uchar ow_reset(void) //复位
29 {
30 1 uchar presence;
31 1 DQ = 0; // DQ 低电平
32 1 delay(29); // 480us
33 1 DQ = 1; // DQ 高电平
34 1 delay(3); // 等待
35 1 presence = DQ; // presence 信号
36 1 delay(25);
37 1 return(presence); // 0允许, 1 = 禁止
38 1 }
39
40
41 uchar read_byte(void) //从1-wire 总线上读取一个字节
42 {
43 1 uchar i;
44 1 uchar value = 0;
45 1 for (i=8;i>0;i--)
46 1 {
47 2 value>>=1;
48 2 DQ = 0;
49 2 DQ = 1;
50 2 delay(1);
51 2 if(DQ)value|=0x80;
52 2 delay(6);
53 2 }
54 1 return(value);
55 1 }
C51 COMPILER V8.02 DS18B20C2 08/10/2007 21:47:40 PAGE 2
56
57 void write_byte(uchar val) //向 1-wire 总线上写一个字节
58 {
59 1 uchar i;
60 1 for (i=8; i>0; i--) // 一次写一字节
61 1 {
62 2 DQ = 0;
63 2 DQ = val&0x01;
64 2 delay(5);
65 2 DQ = 1;
66 2 val=val/2;
67 2 }
68 1 delay(5);
69 1 }
70
71 uchar Read_Temperature(void) //读取温度
72 {
73 1 ow_reset();
74 1 write_byte(0xCC); // 跳过 ROM
75 1 write_byte(0xBE); // 读
76 1 temp.c[1]=read_byte();
77 1 temp.c[0]=read_byte();
78 1 ow_reset();
79 1 write_byte(0xCC);
80 1 write_byte(0x44); // 开始
81 1 return temp.x/2;
82 1 }
83 void main() //主程序
84 {
85 1 delay(10);
86 1 EA=0;
87 1 flag=0;
88 1 Read_Temperature(); //读取双字节温度
89 1 cc=temp.c[0]*256.0+temp.c[1];
90 1 if (temp.c[0]>0xf8) {flag=1;cc=~cc+1;}
91 1 cc=cc*0.0625; //计算出温度值
92 1 while(1);
93 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 281 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -