?? analog.lst
字號:
C51 COMPILER V7.06 ANALOG 07/29/2006 13:15:56 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE ANALOG
OBJECT MODULE PLACED IN Analog.OBJ
COMPILER INVOKED BY: c:\KEIL\C51\BIN\C51.exe Analog.c DB OE
stmt level source
1 //-----------------------------------------------------------------------------
2 // Copyright (c) 2002 Jim Brady
3 // Do not use commercially without author's permission
4 // Last revised August 2002
5 // Net ANALOG.C
6 //
7 // This module handles the analog inputs which are external temperature
8 // sensor, the on-chip temperature sensor, and operating voltage.
9 //-----------------------------------------------------------------------------
10 #include <string.h>
11 #include <stdlib.h>
12 #include "C8051f.h"
13 #include "net.h"
14 #include "serial.h"
15 #include "analog.h"
16
17 extern char xdata text[];
18 UINT idata cpu_temperature, air_temperature, cpu_voltage;
19 UCHAR idata mux_select;
20
21 sfr16 ADC0 = 0xbe; // ADC0 data
22
23 //--------------------------------------------------------------------------
24 // Initialize the A/D converter
25 //
26 //--------------------------------------------------------------------------
27 void init_adc(void)
28 {
29 1 ADC0CN = 0x81; // ADC0 enabled; normal tracking
30 1 // mode; ADC0 conversions are initiated
31 1 // on write to AD0BUSY; ADC0 data is
32 1 // left-justified
33 1 REF0CN = 0x07; // enable temp sensor, on-chip VREF,
34 1 // and VREF output buffer
35 1 mux_select = MUX_CPU_TEMP; // CPU on-chip temp sensor
36 1 AMX0SL = MUX_CPU_TEMP;
37 1
38 1 ADC0CF = (SYSCLK/2500000) << 3; // ADC conversion clock = 2.5MHz
39 1 // ADC0CF |= 0x01; // PGA gain = 2
40 1 EIE2 &= ~0x02; // disable ADC0 EOC interrupt
41 1 EIE1 &= ~0x04; // disable ADC0 window compare interrupt
42 1 }
43
44
45
46 //--------------------------------------------------------------------------
47 // This function is a little state machine which reads one analog
48 // inputs at a time, out of the 3 possible inputs
49 // 1. On-chip temperature
50 // 2. External air temperature
51 // 3. CPU operating voltage
52 //--------------------------------------------------------------------------
53 void read_analog_inputs(void)
54 {
55 1 ULONG idata temp_long;
C51 COMPILER V7.06 ANALOG 07/29/2006 13:15:56 PAGE 2
56 1
57 1 AD0INT = 0; // clear conversion complete indicator
58 1 AD0BUSY = 1; // initiate conversion
59 1 while (AD0INT == 0); // wait for conversion complete
60 1 switch (mux_select)
61 1 {
62 2 case MUX_CPU_TEMP:
63 2 temp_long = ADC0 - 42380/2;
64 2 temp_long= (temp_long * 200L) / 156;
65 2 cpu_temperature=temp_long;
66 2 AMX0SL = 0x00; // Select AIN1 for next read
67 2 mux_select = MUX_CPU_VOLTS;
68 2 break;
69 2
70 2 case MUX_CPU_VOLTS:
71 2 temp_long = ADC0;
72 2 temp_long = 24*temp_long/6552;
73 2 cpu_voltage = temp_long;
74 2 AMX0SL = 0x01; // Select on-chip temp sensor
75 2 mux_select = MUX_AIR_TEMP;
76 2 break;
77 2
78 2 case MUX_AIR_TEMP:
79 2 temp_long = ADC0;
80 2 temp_long = 33*temp_long/6552;
81 2 air_temperature = temp_long;
82 2 AMX0SL = MUX_CPU_TEMP;
83 2 mux_select = MUX_CPU_TEMP;
84 2 break;
85 2
86 2 default:
87 2 AMX0SL = MUX_CPU_TEMP;
88 2 mux_select = MUX_CPU_TEMP;
89 2 break;
90 2 }
91 1 }
92
93
94
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 250 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = 7 4
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -