📄 main3.lst
字号:
C51 COMPILER V8.05a MAIN3 03/20/2008 09:46:54 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE MAIN3
OBJECT MODULE PLACED IN main3.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main3.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<STC12C5410AD.h>
2 #include <intrins.h>
3
4 /************************************************************
5 *DS18B20驱动程序,DQ为数据口,接于P3.4
6 *11.0592M晶振,上拉4.7k电阻
7 *************************************************************/
8 #define uchar unsigned char
9 #define uint unsigned int
10
11 //定时器0
12 #define TIMER0_10ms_H 0xDC //延时10ms 参数,CCLK = 11.0592 MHz
13 #define TIMER0_10ms_L 0x00
14
15 sbit P3_7 = P3^7;
16 sbit WDT = P3^5;
17 sbit DQ = P3^4;
18 bit Flag;
19 uint Temperature; //温度值
20 uchar temp_buff[9]; //存储读取的字节,read scratchpad为9字节,read rom ID为8字节
21 uchar ID_buff[8]; //DS18B20 ID
22 uchar *p;
23 uchar comData;
24
25 uchar code CrcTable [256]={ 0, 94,188,226, 97, 63,221,131,194,156,126, 32,163,253, 31, 65,
26 157,195, 33,127,252,162, 64, 30, 95, 1,227,189, 62, 96,130,220,
27 35,125,159,193, 66, 28,254,160,225,191, 93, 3,128,222, 60, 98,
28 190,224, 2, 92,223,129, 99, 61,124, 34,192,158, 29, 67,161,255,
29 70, 24,250,164, 39,121,155,197,132,218, 56,102,229,187, 89, 7,
30 219,133,103, 57,186,228, 6, 88, 25, 71,165,251,120, 38,196,154,
31 101, 59,217,135, 4, 90,184,230,167,249, 27, 69,198,152,122, 36,
32 248,166, 68, 26,153,199, 37,123, 58,100,134,216, 91, 5,231,185,
33 140,210, 48,110,237,179, 81, 15, 78, 16,242,172, 47,113,147,205,
34 17, 79,173,243,112, 46,204,146,211,141,111, 49,178,236, 14, 80,
35 175,241, 19, 77,206,144,114, 44,109, 51,209,143, 12, 82,176,238,
36 50,108,142,208, 83, 13,239,177,240,174, 76, 18,145,207, 45,115,
37 202,148,118, 40,171,245, 23, 73, 8, 86,180,234,105, 55,213,139,
38 87, 9,235,181, 54,104,138,212,149,203, 41,119,244,170, 72, 22,
39 233,183, 85, 11,136,214, 52,106, 43,117,151,201, 74, 20,246,168,
40 116, 42,200,150, 21, 75,169,247,182,232, 10, 84,215,137,107, 53 };
41
42 //函数声明
43 void TempDelay (uchar);
44 void TempDelay100ms(uchar);
45 void UART_init(void);
46 void send(uchar);
47 void Init18B20 (void);
48 void WriteByte (uchar);
49 uchar ReadByte (void);
50 void read_18B20 (uchar);
51 uchar CRC (uchar);
52 void GemTemp (void);
53 void Config18b20 (void);
54 void ReadID (void);
55 void TemperatuerResult(void);
C51 COMPILER V8.05a MAIN3 03/20/2008 09:46:54 PAGE 2
56
57
58 //主函数
59 main()
60 { uchar TMP[10];
61 1 uchar temp[9];
62 1 uchar i,j;
63 1
64 1 UART_init();
65 1 Flag = 0;
66 1 EA = 1; //禁止所有的中断
67 1 /*
68 1 TemperatuerResult();
69 1 temp = (Temperature>>8) & 0x00FF;
70 1 send(temp);
71 1 temp = Temperature & 0x00FF;
72 1 send(temp);
73 1 */
74 1 while(1)
75 1 { WDT = !WDT;
76 2 if(comData == 0xA0)
77 2 { EA = 0;
78 3
79 3 comData = 0x00;
80 3 /*
81 3 Init18B20();
82 3 WriteByte(0x33); //read ID
83 3 p = ID_buff;
84 3 read_18B20(8);
85 3 send(0xAA);
86 3 for(i=0;i<8;i++)
87 3 send(ID_buff[i]);
88 3 */
89 3 //for(j=0;j<10;j=j+2)
90 3 Init18B20 (); //复位
91 3 WriteByte(0xCC); //skip rom
92 3 WriteByte(0x44); //开始温度转换
93 3 DQ = 1; //延时1S 等待温度转换完成
94 3 TempDelay100ms (5);
95 3 //TempDelay100ms (5);
96 3
97 3 Init18B20 (); //复位
98 3 WriteByte(0xCC); //skip rom
99 3 WriteByte(0xBE); //读取暂存器和CRC 字节
100 3 /*
101 3 for(k = 0;k<9;k++)
102 3 temp[k] = ReadByte();
103 3 Init18B20 ();
104 3
105 3 TMP[j] = ReadByte();
106 3 TMP[j+1] = ReadByte();
107 3
108 3 Init18B20 (); //放弃读取
109 3 }
110 3
111 3 send(0xAA);
112 3 for(i=0;i<10;i++)
113 3 send(TMP[i]);
114 3
115 3 for(i = 0;i<9;i++)
116 3 TMP[i] = ReadByte();
117 3 Init18B20 ();
C51 COMPILER V8.05a MAIN3 03/20/2008 09:46:54 PAGE 3
118 3 send(0xEE);
119 3 for(i=0;i<9;i++)
120 3 send(TMP[i]);
121 3 */
122 3 for(i = 0;i<9;i++)
123 3 TMP[i] = ReadByte();
124 3 send(0xAA);
125 3 send(TMP[1]);
126 3 send(TMP[0]);
127 3
128 3 EA = 1;
129 3 }
130 2 //TempDelay100ms (5);
131 2 }
132 1 }
*** WARNING C280 IN LINE 61 OF MAIN3.C: 'temp': unreferenced local variable
*** WARNING C280 IN LINE 62 OF MAIN3.C: 'j': unreferenced local variable
133
134
135 /************************************************************
136 *Function:延时1us处理
137
138 *************************************************************/
139 void TempDelay (uchar us)
140 {
141 1 while(us--);
142 1 }
143
144
145 /************************************************************
146 *Function:延时100ms处理
147
148 *************************************************************/
149 void TempDelay100ms (uchar us)
150 { uchar i,j;
151 1
152 1 for(j=0;j<us;j++)
153 1 for(i=0;i<100;i++)
154 1 { TempDelay(250);
155 2 TempDelay(250);
156 2 TempDelay(250);
157 2 TempDelay(250);
158 2 }
159 1 }
160
161
162
163 //串行口初始化
164 void UART_init(void)
165 { P1M0 = 0x01; //设置P32,P33,P34,P35,P37为推挽输出状态
166 1 P1M1 = 0x01;
167 1 P3M0 = 0x10;
168 1 P3M1 = 0x10;
169 1
170 1 //初始化串行口和波特率发生器
171 1 SCON = 0x50; //选择串口工作方式1,打开接收允许
172 1 TMOD = 0x20; //定时器1工作在方式2,定时器0工作在方式1
173 1
174 1 TH1 = 0xFD; //当SMOD=0时,其初值计算如下:初值 = 256 -(F/B/32/X)(其中X为分频数) X = 6
175 1 TL1 = 0XFD; //实现波特率9600(系统时钟 11.0592 MHZ)
176 1
177 1 TH0 = TIMER0_10ms_H;
C51 COMPILER V8.05a MAIN3 03/20/2008 09:46:54 PAGE 4
178 1 TL0 = TIMER0_10ms_L ;
179 1
180 1 TR1 = 1; //启动定时器T1
181 1 ET1 = 0; //禁止T1中断
182 1 AUXR = 0xBF; //此句改为AUXR = 0x40 ,波特率可以加倍12倍
183 1 ES = 1; //允许串行口中断
184 1 //PS = 1; //设置串行口中断优先级
185 1 EA = 0; //禁止所有中断
186 1 P3_7 = 0;
187 1 }
188
189
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -