📄 18b20.lst
字号:
C51 COMPILER V7.06 18B20 05/18/2008 14:29:17 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE 18B20
OBJECT MODULE PLACED IN 18b20.OBJ
COMPILER INVOKED BY: E:\My Electronic\Tools\Design tools\keil7.06\C51\BIN\C51.EXE 18b20.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <REG52.H>
2 #include <intrins.h>
3
4 #define uint unsigned int
5 #define uchar unsigned char
6
7 sbit DQ=P2^4;
8
9 //extern uchar Ir_Ok;
10 //extern uchar read_flagg;
11 extern uchar TT_Ok;
12 uchar TT_Ok;
13 extern uchar inbuf1[];
14
15 void delay(unsigned char useconds)
16 {
17 1 for(;useconds>0;useconds--);
18 1 }
19
20 unsigned char _18b20_init(void)
21 {
22 1 unsigned char presence;
23 1 EA=0;
24 1 DQ = 0; //拉低总线
25 1 delay(29); // 保持 480us
26 1 DQ = 1; // 释放总线
27 1 delay(3); // 等待回复
28 1 presence = DQ; // 读取信号
29 1 delay(25); // 等待结束信号
30 1 return(presence); // 返回 0:正常 1:不存在
31 1 }
32
33 //从 1-wire 总线上读取一个字节
34 unsigned char _18b20_read(void)
35 {
36 1 unsigned char i;
37 1 unsigned char value = 0;
38 1 for (i=8;i>0;i--)
39 1 {
40 2 value>>=1;
41 2 DQ = 0;
42 2 _nop_();
43 2 _nop_();
44 2 _nop_();
45 2 DQ = 1;
46 2 delay(1);
47 2 if(DQ)value|=0x80;
48 2 delay(6);
49 2 }
50 1 return(value);
51 1 }
52
53 //向 1-WIRE 总线上写一个字节
54 void _18b20_write(char val)
55 {
C51 COMPILER V7.06 18B20 05/18/2008 14:29:17 PAGE 2
56 1 unsigned char i;
57 1 EA=0;
58 1 for (i=8; i>0; i--) // 一次写一位
59 1 {
60 2 DQ = 0; //
61 2 _nop_();
62 2 _nop_();
63 2 _nop_();
64 2 DQ = val&0x01;
65 2 delay(5); //
66 2 DQ = 1;
67 2 val=val/2;
68 2 }
69 1 //EA=1;
70 1 delay(5);
71 1 }
72
73 //读取和显示温度
74 void Read_Temperature(unsigned char *p)
75 {
76 1 unsigned char i;
77 1 unsigned char x;
78 1 unsigned char th,tl;
79 1 TT_Ok=0; //温度读取开始
80 1 for(i=0;i<10;i++)
81 1 ;
82 1 _18b20_init();
83 1 for(i=0;i<10;i++)
84 1 ;
85 1 _18b20_write(0xCC); // Skip ROM
86 1 _18b20_write(0x44); // 转换温度
87 1 for(i=0;i<254;i++)
88 1 ;
89 1 _18b20_init();
90 1 for(i=0;i<10;i++)
91 1 ;
92 1 _18b20_write(0xCC); //Skip ROM
93 1 _18b20_write(0xbe); // 读取寄存器
94 1 tl=_18b20_read();//读出温度低8位
95 1 th=_18b20_read();//读出温度高8位
96 1 tl &= 0xf0;
97 1 tl >>= 4;
98 1 *(p+3)=tl/2+'0';
99 1 *(p+2)='.';
100 1 x=((th&0x07)<<4)+tl;
101 1 *p=x/10+'0';//显示温度十位数
102 1 *(p+1)=x%10+'0';//显示温度个位数
103 1 TT_Ok=1; //温度读取完毕
104 1 EA=1;
105 1 }
106
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 233 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILER V7.06 18B20 05/18/2008 14:29:17 PAGE 3
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -