📄 analog.lst
字号:
C51 COMPILER V7.50 ANALOG 12/14/2006 13:34:42 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE ANALOG
OBJECT MODULE PLACED IN ANALOG.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ANALOG.C LARGE OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND
line level source
1 //-----------------------------------------------------------------------------
2 // 这部分程序是利用040内部温度传感器采集出温度值及电压的值,然后通过
3 //以太网将这些值发送出去的.
4 //-----------------------------------------------------------------------------
5 #include <string.h>
6
7 #include "C8051f040.h"
8 #include "net.h"
9 #include "analog.h"
10
11 extern char xdata text[];
12 UINT idata cpu_temperature, air_temperature, cpu_voltage;
13 UCHAR idata mux_select;
14
15 sfr16 ADC0 = 0xbe;
16
17 //--------------------------------------------------------------------------
18 // 初始化ADC
19 //--------------------------------------------------------------------------
20 void init_adc(void)
21 {
22 1 char SFRPAGE_SAVE=SFRPAGE;
23 1 SFRPAGE = ADC0_PAGE;
24 1 ADC0CN = 0x81;
25 1 REF0CN = 0x07;
26 1
27 1 mux_select = MUX_CPU_TEMP;
28 1 AMX0SL = MUX_CPU_TEMP;
29 1 ADC0CF = (SYSCLK/2500000) << 3;
30 1 EIE2 &= ~0x02;
31 1 EIE1 &= ~0x04;
32 1 SFRPAGE = SFRPAGE_SAVE;
33 1 }
34
35
36
37 //--------------------------------------------------------------------------
38 // This function is a little state machine which reads one analog
39 // inputs at a time, out of the 3 possible inputs
40 // 1. On-chip temperature 片内温度
41 // 2. External air temperature
42 // 3. CPU operating voltage CPu的工作电压
43 //--------------------------------------------------------------------------
44 void read_analog_inputs(void)
45 {
46 1 ULONG idata temp_long;
47 1 char SFRPAGE_SAVE = SFRPAGE;
48 1 SFRPAGE = ADC0_PAGE;
49 1 AD0INT = 0;
50 1 AD0BUSY = 1;
51 1 while (AD0INT == 0);
52 1 switch (mux_select)
53 1 {
54 2 case MUX_CPU_TEMP:
55 2 temp_long = ADC0*2 - 42380;
C51 COMPILER V7.50 ANALOG 12/14/2006 13:34:42 PAGE 2
56 2 temp_long= (temp_long * 100L) / 156;
57 2 cpu_temperature=temp_long;
58 2 AMX0SL = MUX_CPU_VOLTS;
59 2 mux_select = MUX_CPU_VOLTS;
60 2 break;
61 2
62 2 case MUX_CPU_VOLTS:
63 2 temp_long = ADC0;
64 2 temp_long = 24*temp_long/655;
65 2 cpu_voltage = temp_long;
66 2 AMX0SL = MUX_AIR_TEMP;
67 2 mux_select = MUX_AIR_TEMP;
68 2 break;
69 2
70 2 case MUX_AIR_TEMP:
71 2 temp_long = ADC0;
72 2 temp_long = 24*temp_long/655;
73 2 air_temperature = temp_long;
74 2 AMX0SL = MUX_CPU_TEMP;
75 2 mux_select = MUX_CPU_TEMP;
76 2 break;
77 2
78 2 default:
79 2 AMX0SL = MUX_CPU_TEMP;
80 2 mux_select = MUX_CPU_TEMP;
81 2 break;
82 2 }
83 1 SFRPAGE = SFRPAGE_SAVE;
84 1 }
85
86
87
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 216 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 1
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 + -