📄 adc0809.lst
字号:
C51 COMPILER V8.02 ADC0809 01/17/2007 05:33:06 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE ADC0809
OBJECT MODULE PLACED IN adc0809.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE adc0809.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "system.h"
2 #include <INTRINS.H> //为调用nop空指令需要
3
4 /****************宏定义********************/
5 #define DS_NOP() _nop_();_nop_();_nop_();_nop_()
6
7 #define REF_Voltage1 5.03 //ADC0809基准电压
8 #define REF_Voltage2 -5.02 //ADC0809基准电压
9
10 #define PLUS_CH0 1 //各个通道增益
11 #define PLUS_CH1 1
12 #define PLUS_CH2 1
13 #define PLUS_CH3 1
14 #define PLUS_CH4 1
15 #define PLUS_CH5 1
16 #define PLUS_CH6 1
17 #define PLUS_CH7 5
18
19
20
21 /**************ADC0809引脚定义**********/
22 sbit ST = P2^5;
23 sbit OE = P2^4;
24 sbit EOC = P2^3;
25 sbit ADC0809_C = P2^2;
26 sbit ADC0809_B = P2^1;
27 sbit ADC0809_A = P2^0;
28
29
30
31
32
33 /*****************************************************
34 ADC0809转换函数
35 输入: 通道号(0-7)
36 返回: 测量到的模拟电压所对应的数字量
37 *****************************************************/
38 unsigned char ADC0809test(unsigned char ch0)
39 {
40 1 unsigned char ADCdata; //AD转换后得到的数字量
41 1
42 1 ST = 0;
43 1 EOC = 1;
44 1 OE = 0;
45 1
46 1 switch(ch0)
47 1 {
48 2 case 0:
49 2 {
50 3 ADC0809_A = 0;
51 3 ADC0809_B = 0;
52 3 ADC0809_C = 0;
53 3 break;
54 3 }
55 2 case 1:
C51 COMPILER V8.02 ADC0809 01/17/2007 05:33:06 PAGE 2
56 2 {
57 3 ADC0809_A = 1;
58 3 ADC0809_B = 0;
59 3 ADC0809_C = 0;
60 3 break;
61 3 }
62 2 case 2:
63 2 {
64 3 ADC0809_A = 0;
65 3 ADC0809_B = 1;
66 3 ADC0809_C = 0;
67 3 break;
68 3 }
69 2 case 3:
70 2 {
71 3 ADC0809_A = 1;
72 3 ADC0809_B = 1;
73 3 ADC0809_C = 0;
74 3 break;
75 3 }
76 2 case 4:
77 2 {
78 3 ADC0809_A = 0;
79 3 ADC0809_B = 0;
80 3 ADC0809_C = 1;
81 3 break;
82 3 }
83 2 case 5:
84 2 {
85 3 ADC0809_A = 1;
86 3 ADC0809_B = 0;
87 3 ADC0809_C = 1;
88 3 break;
89 3 }
90 2 case 6:
91 2 {
92 3 ADC0809_A = 0;
93 3 ADC0809_B = 1;
94 3 ADC0809_C = 1;
95 3 break;
96 3 }
97 2 case 7:
98 2 {
99 3 ADC0809_A = 1;
100 3 ADC0809_B = 1;
101 3 ADC0809_C = 1;
102 3 break;
103 3 }
104 2 default:break;
105 2 }
106 1 ST = 1;
107 1 ST = 0;
108 1 DS_NOP();
109 1
110 1 while(EOC == 0)
111 1 {
112 2 ;
113 2 }
114 1 if(EOC == 1)
115 1 {
116 2 OE = 1;
117 2 ADCdata = P0;
C51 COMPILER V8.02 ADC0809 01/17/2007 05:33:06 PAGE 3
118 2 return (ADCdata);
119 2 }
120 1 }
121
122 /*******************************************************
123 电压测量并装换成实际的电压值
124 入口参数: AD_ChannelNumber 输入通道号:在0-7之间选择
125 出口参数: 转换后的电压值,实际的值
126 ********************************************************/
127 float VoltageSurvey(unsigned char AD_ChannelNumber)
128 {
129 1 float SurveyVoltage; //测量到的电压值
130 1 float plus_ch; //通道增益
131 1
132 1 switch(AD_ChannelNumber)
133 1 {
134 2 case 0: plus_ch = PLUS_CH0;break;
135 2 case 1: plus_ch = PLUS_CH1;break;
136 2 case 2: plus_ch = PLUS_CH2;break;
137 2 case 3: plus_ch = PLUS_CH3;break;
138 2 case 4: plus_ch = PLUS_CH4;break;
139 2 case 5: plus_ch = PLUS_CH5;break;
140 2 case 6: plus_ch = PLUS_CH6;break;
141 2 case 7: plus_ch = PLUS_CH7;break;
142 2 default:break;
143 2 }
144 1 SurveyVoltage = ADC0809test(AD_ChannelNumber);
145 1 SurveyVoltage = (SurveyVoltage / 256) * REF_Voltage1 * plus_ch;
146 1 return(SurveyVoltage);
147 1 }
148
149
150
151
152 /*******************************************************
153 负5V电压测量并装换成实际的电压值
154 入口参数: AD_ChannelNumber 输入通道号:在3
155 出口参数: 转换后的电压值,实际的值
156 ********************************************************
157
158 unsigned char fuvoltage(void)
159 {
160 float fudianya;
161 float fudianya1;
162 fudianya = VoltageSurvey(5);
163 fudianya1 = (fudianya + 5) - 2*fudianya;
164 return(fudianya1);
165 }*/
166
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 217 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 4
IDATA SIZE = ---- ----
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 + -