?? 18b20.lst
字號:
C51 COMPILER V7.01 18B20 11/17/2006 21:13:55 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE 18B20
OBJECT MODULE PLACED IN 18b20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 18b20.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*
2 總線主機檢測到DSl820的存在便可以發出ROM操作命令之一這些命令如:
3 指令 代碼
4 Read ROM(讀ROM) [33H]
5 Match ROM(匹配ROM) [55H]
6 Skip ROM(跳過ROM] [CCH]
7 Search ROM(搜索ROM) [F0H]
8 Alarm search(告警搜索) [ECH]
9
10 存儲器操作命令:
11 指令 代碼
12 Write Scratchpad(寫暫存存儲器) [4EH]
13 Read Scratchpad(讀暫存存儲器) [BEH]
14 Copy Scratchpad(復制暫存存儲器) [48H]
15 Convert Temperature(溫度變換) [44H]
16 Recall EPROM(重新調出) [B8H]
17 Read Power supply(讀電源) [B4H]
18
19 經過單總線訪問18B20的協議如下:
20 。初始化
21 。ROM操作指令
22 。存儲器操作指令
23 。處理/數據
24 *******************************************************************/
25 #include<reg51.h>
26 #include<intrins.h>
27 #define uchar unsigned char
28 #define uint unsigned int
29 const uchar LEDCode[10] = {0x40|0x80,0x79|0x80,0x24|0x80,0x30|0x80,0x19|0x80,0x12|0x80,0x02|0x80,0x78|0x80
-,0x00|0x80,0x10|0x80};
30 extern crlr();
31 sbit DQ = P3^3; //定義通信端口
32 sbit P3_7 = P3^7;
33 sbit P3_6 = P3^6;
34 sbit P3_5 = P3^5;
35 sbit P3_4 = P3^4;
36 void Delay(uchar i)
37 {
38 1 while(i--); //延遲6個機器周期
39 1 }
40 void Init_18B20()
41 {
42 1 uchar i = 0;
43 1 DQ = 1;
44 1 Delay(5);
45 1 DQ = 0;
46 1 Delay(90);
47 1 DQ = 1;
48 1 Delay(8);
49 1 i = DQ;
50 1 while(i);
51 1 Delay(80);
52 1 DQ = 1;
53 1 _nop_();
54 1 }
C51 COMPILER V7.01 18B20 11/17/2006 21:13:55 PAGE 2
55
56 void Write0()
57 {
58 1 DQ = 1;
59 1 _nop_();
60 1 DQ = 0;
61 1 Delay(10);
62 1 DQ = 1;
63 1 _nop_();
64 1 }
65
66 void Write1()
67 {
68 1 DQ = 1;
69 1 _nop_();
70 1 DQ = 0;
71 1 Delay(2);
72 1 DQ = 1;
73 1 _nop_();
74 1 Delay(7);
75 1 _nop_();
76 1 _nop_();
77 1 DQ = 1;
78 1 _nop_();
79 1 }
80
81 bit ReadDQ()
82 {
83 1 bit i;
84 1 DQ = 1;
85 1 DQ = 0;
86 1 _nop_();
87 1 Delay(2);
88 1 i = DQ;
89 1 Delay(10);
90 1 _nop_();
91 1 DQ = 1;
92 1 _nop_();
93 1 return i;
94 1 }
95
96
97 void WriteAByte(uchar Byte)
98 {
99 1 uchar i;
100 1 for(i=8;i>0;i--)
101 1 {
102 2 if(Byte&0x01)
103 2 Write1();
104 2 else
105 2 Write0();
106 2 Byte = Byte>>1;
107 2 }
108 1 }
109
110 uchar ReadAByte(void)
111 {
112 1 /* uchar i = 8, j = 0;
113 1 bit b;
114 1 do{
115 1 b = ReadDQ();
116 1 if(b)
C51 COMPILER V7.01 18B20 11/17/2006 21:13:55 PAGE 3
117 1 j += 1;
118 1 // #pragma asm
119 1 // mov a,r7
120 1 // rr a
121 1 // mov r7,a
122 1 // #pragma endasm
123 1 j = j>> 1;
124 1 i--;
125 1 if(i)
126 1 i = i>>1;
127 1 }while(i);
128 1 return j;*/
129 1 unsigned char i=0;
130 1 unsigned char dat = 0;
131 1 for (i=8;i>0;i--)
132 1 {
133 2 DQ = 0; // 給脈沖信號
134 2 dat>>=1;
135 2 DQ = 1; // 給脈沖信號
136 2 if(DQ)
137 2 dat|=0x80;
138 2 Delay(4);
139 2 }
140 1 return(dat);
141 1
142 1 }
143
144 void GetTemp(uchar Temp[2])
145 {
146 1 uchar TempH,TempL,LSL4,LSH4,MSL3,MSH5;
147 1 bit byte = 0;
148 1 Init_18B20();
149 1 WriteAByte(0xcc);
150 1 WriteAByte(0x44);
151 1 /* for(i=0;i<16;i++)
152 1 {
153 1 for(j=0;j<125;j++)
154 1 {
155 1 for(k=0;k<50;k++)
156 1 {;}
157 1 }
158 1 }*/
159 1 Init_18B20();
160 1 WriteAByte(0xcc);
161 1 WriteAByte(0xbe);
162 1 TempL = ReadAByte();
163 1 TempH = ReadAByte();
164 1 LSL4 = TempL&0x0f;
165 1 LSH4 = TempL&0xf0;
166 1 LSH4 >>= 4;
167 1 MSL3 = TempH&0x07;
168 1 // MSL3 <<=3;
169 1 // MSH5 = TempH&0xf8;
170 1 Temp[0] = (((LSL4&0x08)>>3)*0.5+((LSL4&0x04)>>2)*0.25+((LSL4&0x02)>>1)*0.125+(LSL4&0x01)*0.0625)*100;
171 1 // Temp[0] = LSL4;
172 1 Temp[1] = LSH4 + MSL3*16;
173 1 if(MSH5)
174 1 {
175 2 Temp[0] = ~Temp[0] + 1;
176 2 Temp[1] = ~Temp[1] + 1;
177 2 }
178 1
C51 COMPILER V7.01 18B20 11/17/2006 21:13:55 PAGE 4
179 1
180 1 }
181
182 void main()
183 {
184 1 uchar Temp[2],iL,jL,jH,iH;
185 1 P3 = 0x00;
186 1 while(1)
187 1 {
188 2 GetTemp(Temp);
189 2 iH = Temp[1]/10;
190 2 iL = Temp[1]%10;
191 2 jH = Temp[0]/10;
192 2 jL = Temp[0]%10;
193 2
194 2 P3 = (P3&0x0f)|0x10;
195 2 P2 = LEDCode[iH];
196 2 Delay(2000);
197 2
198 2 P3 = (P3&0x0f)|0x20;
199 2 P2 = LEDCode[iL]&0x7f;
200 2 Delay(2000);
201 2
202 2 P3 = (P3&0x0f)|0x40;
203 2 P2 = LEDCode[jH];
204 2 Delay(2000);
205 2
206 2 P3 = (P3&0x0f)|0x80;
207 2 P2 = LEDCode[jL];
208 2
209 2 }
210 1
211 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 559 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 9
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -