📄 mainfun.lst
字号:
C51 COMPILER V7.10 MAINFUN 12/14/2006 21:31:11 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE MAINFUN
OBJECT MODULE PLACED IN mainfun.OBJ
COMPILER INVOKED BY: d:\Program Files\Keil\C51\BIN\C51.EXE mainfun.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*********************************************************************************************************
2 **
3 ** (c) Copyright 2004-2006
4 ** All Rights Reserved
5 **
6 **
7 ** 版权所有:朗顿科技
8 ** http://www.ldmcu.com
9 **
10 ********************************************************************************************************/
11
12 #include<reg51.h>
13 #include<intrins.h>
14 #include<stdio.h>
15
16 #define uchar unsigned char
17 #define uint unsigned int
18
19 sbit dq = P2^0;
20 bit flag;
21 uint Temperature;
22 uchar temp_buff[9]; //存储读取的字节,read scratchpad为9字节,read rom ID为8字节
23 uchar id_buff[8];
24 uchar *p;
25 uchar crc_data;
26 uchar code CrcTable [256]={
27 0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,
28 157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,
29 35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,
30 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,
31 70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,
32 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,
33 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,
34 248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,
35 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,
36 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,
37 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,
38 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,
39 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,
40 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,
41 233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,
42 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53};
43 //
44 /************************************************************
45 *Function:延时处理
46 *parameter:
47 *Return:
48 *Modify:
49 *************************************************************/
50 void TempDelay (uchar us)
51 {
52 1 while(us--);
53 1 }
54 /************************************************************
55 *Function:18B20初始化
C51 COMPILER V7.10 MAINFUN 12/14/2006 21:31:11 PAGE 2
56 *parameter:
57 *Return:
58 *Modify:
59 *************************************************************/
60 void Init18b20 (void)
61 {
62 1 dq=1;
63 1 _nop_();
64 1 dq=0;
65 1 TempDelay(86); //delay 530 uS//80
66 1 _nop_();
67 1 dq=1;
68 1 TempDelay(14); //delay 100 uS//14
69 1 _nop_();
70 1 _nop_();
71 1 _nop_();
72 1
73 1 if(dq==0)
74 1 flag = 1; //detect 1820 success!
75 1 else
76 1 flag = 0; //detect 1820 fail!
77 1 TempDelay(20); //20
78 1 _nop_();
79 1 _nop_();
80 1 dq = 1;
81 1 }
82 /************************************************************
83 *Function:向18B20写入一个字节
84 *parameter:
85 *Return:
86 *Modify:
87 *************************************************************/
88 void WriteByte (uchar wr) //单字节写入
89 {
90 1 uchar i;
91 1 for (i=0;i<8;i++)
92 1 {
93 2 dq = 0;
94 2 _nop_();
95 2 dq=wr&0x01;
96 2 TempDelay(5); //delay 45 uS //5
97 2 _nop_();
98 2 _nop_();
99 2 dq=1;
100 2 wr >>= 1;
101 2 }
102 1 }
103 /************************************************************
104 *Function:读18B20的一个字节
105 *parameter:
106 *Return:
107 *Modify:
108 *************************************************************/
109 uchar ReadByte (void) //读取单字节
110 {
111 1 uchar i,u=0;
112 1 for(i=0;i<8;i++)
113 1 {
114 2 dq = 0;
115 2 u >>= 1;
116 2 dq = 1;
117 2 if(dq==1)
C51 COMPILER V7.10 MAINFUN 12/14/2006 21:31:11 PAGE 3
118 2 u |= 0x80;
119 2 TempDelay (4);
120 2 _nop_();
121 2 }
122 1 return(u);
123 1 }
124 /************************************************************
125 *Function:读18B20
126 *parameter:
127 *Return:
128 *Modify:
129 *************************************************************/
130 void read_bytes (uchar j)
131 {
132 1 uchar i;
133 1 for(i=0;i<j;i++)
134 1 {
135 2 *p = ReadByte();
136 2 p++;
137 2 }
138 1 }
139 /************************************************************
140 *Function:CRC校验
141 *parameter:
142 *Return:
143 *Modify:
144 *************************************************************/
145 uchar CRC (uchar j)
146 {
147 1 uchar i,crc_data=0;
148 1 for(i=0;i<j;i++) //查表校验
149 1 crc_data = CrcTable[crc_data^temp_buff[i]];
150 1 return (crc_data);
151 1 }
152 /************************************************************
153 *Function:读取温度
154 *parameter:
155 *Return:
156 *Modify:
157 *************************************************************/
158 void GemTemp (void)
159 {
160 1 read_bytes (9);
161 1 if (CRC(9)==0) //校验正确
162 1 {
163 2 Temperature = temp_buff[1]*0x100 + temp_buff[0];
164 2 // Temperature *= 0.625;
165 2 Temperature /= 16;
166 2 TempDelay(1);
167 2 }
168 1 }
169 /************************************************************
170 *Function:内部配置
171 *parameter:
172 *Return:
173 *Modify:
174 *************************************************************/
175 void Config18b20 (void) //重新配置报警限定值和分辨率
176 {
177 1 Init18b20();
178 1 WriteByte(0xcc); //skip rom
179 1 WriteByte(0x4e); //write scratchpad
C51 COMPILER V7.10 MAINFUN 12/14/2006 21:31:11 PAGE 4
180 1 WriteByte(0x19); //上限
181 1 WriteByte(0x1a); //下限
182 1 WriteByte(0x7f); //set 11 bit (0.125)
183 1 Init18b20();
184 1 WriteByte(0xcc); //skip rom
185 1 WriteByte(0x48); //保存设定值
186 1 Init18b20();
187 1 WriteByte(0xcc); //skip rom
188 1 WriteByte(0xb8); //回调设定值
189 1 }
190 /************************************************************
191 *Function:读18B20ID
192 *parameter:
193 *Return:
194 *Modify:
195 *************************************************************/
196 void ReadID (void)//读取器件 id
197 {
198 1 Init18b20();
199 1 WriteByte(0x33); //read rom
200 1 read_bytes(8);
201 1 }
202 /************************************************************
203 *Function:18B20ID全处理
204 *parameter:
205 *Return:
206 *Modify:
207 *************************************************************/
208 void TemperatuerResult(void)
209 {
210 1 p = id_buff;
211 1 ReadID();
212 1 Config18b20();
213 1 Init18b20 ();
214 1 WriteByte(0xcc); //skip rom
215 1 WriteByte(0x44); //Temperature convert
216 1 Init18b20 ();
217 1 WriteByte(0xcc); //skip rom
218 1 WriteByte(0xbe); //read Temperature
219 1 p = temp_buff;
220 1 GemTemp();
221 1 }
222
223 void sercon(void)
224 {
225 1 SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */
226 1 TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
227 1 TH1 = 0xFD; /* TH1: reload value for 9600 baud @ 11.0592MHz */
228 1 TR1 = 1; /* TR1: timer 1 run */
229 1 TI = 1; /* TI: set TI to send first char of UART */
230 1 }
231
232 void main(void)
233 {
234 1 uint cnt = 0;
235 1
236 1 sercon();
237 1
238 1 printf("Starting---\r\n");
239 1
240 1 do
241 1 {
C51 COMPILER V7.10 MAINFUN 12/14/2006 21:31:11 PAGE 5
242 2 TemperatuerResult();
243 2
244 2 printf("TemperatuerResult: %d\r\n",Temperature);
245 2 cnt = 10000;
246 2 for(;cnt > 0;cnt--)
247 2 {};
248 2 }while(1);
249 1 }
250
251
252
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 386 ----
CONSTANT SIZE = 294 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 23 4
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 + -