📄 mainprog.lst
字号:
198 1 if (ADC3_open==1){ //adc3打开控制
199 2 ADC_CONTR=0xe8+3; //启动AD转换,用最低转换速率
200 2 while ((ADC_CONTR & 0x10)==0) {}
201 2 ADC_CONTR=0xe0+3; //停止AD转换
202 2 ADC3_accumulate_intr += ADC_HIGH*4;
203 2 ADC3_accumulate_intr +=ADC_LOW & 0x03; //adc结果
204 2 if (++ADC3_counter_intr>=1) {
205 3 ADC3_counter_intr=0;
206 3 ADC_result_intr3=ADC3_accumulate_intr/1; //adc计数
207 3 ADC3_accumulate_intr=0;
208 3 }
209 2 }
210 1 flag_1ms_adc=1;
211 1 resistance_measure_1ms ++;
212 1 //timer0中断计数
213 1 if (++timer0_interrupt_counter<10) return;
214 1 timer0_interrupt_counter=0;
215 1 Mesure_counter_10ms++; //侧量计数
216 1 flag_10ms_1=1;
217 1 if (++timer0_10ms==10) {
218 2 timer0_10ms=0;
219 2 flag_0d1s=1;
220 2 RefreshDisplay_0d1s=1;
221 2 if (++ timer0_0d1s==10) {
222 3 timer0_0d1s=0;
223 3 flag_1s_1=1;
224 3 RefreshDisplay_1s++;
225 3 if (timer0_1s!=0xff) timer0_1s++;
226 3 //disp_char_decimal(second);
227 3 if(++second>=60){
228 4 second=0;
229 4 if(++minute>=60){
230 5 minute=0;
231 5 if(++hour>=60){
232 6 hour=0;
233 6 }
234 5 }
235 4 }
236 3 }
237 2 }
238 1 }
239
240
241
C51 COMPILER V8.06 MAINPROG 02/13/2009 09:29:07 PAGE 5
242 //复位硬件看门狗
243 void CearHardWatchDog(void)
244 {
245 1 WDTC = 0x3f; //d4:CLR_WDT=1清看门狗,硬件自动清零该位
246 1 }
247 /*
248 //以十进制方式显示char形数
249 void disp_char_decimal(unsigned char char_data)
250 {
251 unsigned bai,shi,ge;
252 ge = char_data%10;
253 char_data = char_data/10;
254 shi = char_data%10;
255 bai = char_data/10;
256 printh(bai + 0x30);
257 printh(shi + 0x30);
258 printh(ge + 0x30);
259 printh(0x20);
260 }*/
261
262 /*
263 //浮点数打印到串口(最大99999)
264 void pinint_float_decimal(float float_data)
265 {
266 unsigned long long_data;
267 unsigned char wan,qian,bai,shi,ge;
268
269 long_data=(unsigned int)float_data;
270 ge = long_data%10;
271 long_data = long_data/10;
272 shi = long_data%10;
273 long_data = long_data/10;
274 bai = long_data%10;
275 long_data = long_data/10;
276 qian = long_data%10;
277 long_data = long_data/10;
278 wan = long_data%10;
279
280 printh(wan + 0x30);
281 printh(qian + 0x30);
282 printh(bai + 0x30);
283 printh(shi + 0x30);
284 // printh(ge + 0x30);
285 printh(0x20);
286 } */
287
288 /*
289 //以十进制方式显示电压,单位V.
290 void disp_float_votage(float float_data,unsigned char decimal_digits)
291 {
292 unsigned long long_data;
293 unsigned char shiyi,yi,qianwan,baiwan,shiwan,wan,qian,bai,shi,ge;
294
295 long_data=(unsigned long)float_data;
296 ge = long_data%10;
297 long_data = long_data/10;
298 shi = long_data%10;
299 long_data = long_data/10;
300 bai = long_data%10;
301 long_data = long_data/10;
302 qian = long_data%10;
303 long_data = long_data/10;
C51 COMPILER V8.06 MAINPROG 02/13/2009 09:29:07 PAGE 6
304 wan = long_data%10;
305 long_data = long_data/10;
306 shiwan = long_data%10;
307 long_data = long_data/10;
308 baiwan = long_data%10;
309 long_data = long_data/10;
310 qianwan = long_data%10;
311 long_data = long_data/10;
312 yi = long_data%10;
313 long_data = long_data/10;
314 shiyi = long_data%10;
315
316 if (shiyi!=0) {
317 printh(shiyi + 0x30);
318 printh(yi + 0x30);
319 printh(qianwan + 0x30);
320 printh(baiwan + 0x30);
321 printh(shiwan + 0x30);
322 printh(wan + 0x30);
323 }
324 else if (yi!=0) {
325 printh(yi + 0x30);
326 printh(qianwan + 0x30);
327 printh(baiwan + 0x30);
328 printh(shiwan + 0x30);
329 printh(wan + 0x30);
330 }
331 else if (qianwan!=0) {
332 printh(qianwan + 0x30);
333 printh(baiwan + 0x30);
334 printh(shiwan + 0x30);
335 printh(wan + 0x30);
336 }
337 else if (baiwan!=0) {
338 printh(baiwan + 0x30);
339 printh(shiwan + 0x30);
340 printh(wan + 0x30);
341 }
342 else if (shiwan!=0) {
343 printh(shiwan + 0x30);
344 printh(wan + 0x30);
345 }
346 else if (shiwan!=0) {
347 printh(shiwan + 0x30);
348 printh(wan + 0x30);
349 }
350 else if (wan!=0) printh(wan + 0x30);
351 printh(qian + 0x30);
352 printh('.');
353 //printh(ge + 0x30);
354 //显示小数
355 if(decimal_digits==3){ //3位
356 printh(bai + 0x30);
357 printh(shi + 0x30);
358 printh(ge + 0x30);
359 }
360 else if(decimal_digits==1){ //1位
361 printh(bai + 0x30);
362 }
363 else{ //默认2位
364 printh(bai + 0x30);
365 printh(shi + 0x30);
C51 COMPILER V8.06 MAINPROG 02/13/2009 09:29:07 PAGE 7
366 //printh(ge + 0x30);
367 }
368
369 printh(0x20);
370 }
371
372 */
373
374 //AD转换
375 /*
376 A/D 转换控制寄存器:ADC_CONTR d7 d6 d5 d4 d3 d2 d1 d0
377 ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0
378 d2-d0=0通道0,p1.0(12脚)作为ADC0;d2-d0=7通道7,p1.7(19脚)作为ADC7;
379 SPEED1,SPEED0:模数转换器转换速度控制位
380 SPEED1/SPEED0为A/D转换所需时间
381 1 1: 2 1 0 个时钟周期转换一次,CPU工作频率14.7456MHz时,A/D转换速度约70.217KHz,实测约30K
382 1 0: 4 2 0 个时钟周期转换一次
383 0 1: 6 3 0 个时钟周期转换一次
384 0 0: 8 4 0 个时钟周期转换一次
385 ADC_POWER: ADC 电源控制位。0:关闭ADC 电源;1:打开A/D 转换器电源
386 ADC_START: 模数转换器(ADC)转换启动控制位,设置为“1”时,开始转换, 转换结束后为0 。
387 ADC_FLAG: 模数转换器转换结束标志位,当A/D 转换完成后,ADC_FLAG = 1,要由软件清0。
388
389 启动AD 转换前一定要确认AD 电源已打开,AD 转换结束后关闭AD 电源可降低功耗,也可不关闭。
390
391 初次打开内部A/D 转换模拟电源,需适当延时,等内部模拟电源稳定后,再启动A/D 转换
392
393 建议启动A/D 转换后,在A/D 转换结束之前,不改变任何I/O 口的状态,有利于高精度A/D 转换
394
395 不管是A/D 转换完成后由该位申请产生中断,还是由软件查询该标志位A/D 转换是否结束,
396 当A/D 转换完成后,ADC_FLAG = 1,一定要软件清0。
397
398 ADC_HIGH / ADC_LOW 特殊功能寄存器: A/D 转换结果特殊功能寄存器
399 模拟/ 数字转换结果计算公式如下:结果 ( ADC_HIGH[7:0],ADC_LOW[1:0] ) = 1024 x Vin / Vcc
400
401 */
402
403
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -