-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAD.LST
More file actions
121 lines (112 loc) · 4.63 KB
/
AD.LST
File metadata and controls
121 lines (112 loc) · 4.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
C51 COMPILER V9.01 AD 08/10/2013 20:54:57 PAGE 1
C51 COMPILER V9.01, COMPILATION OF MODULE AD
OBJECT MODULE PLACED IN AD.OBJ
COMPILER INVOKED BY: e:\Keil\C51\BIN\C51.EXE AD.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include"stc12c5a60s2.h"
2
3 #define ADC_POWER 0x80
4 #define ADC_FLAG 0x10
5 #define ADC_START 0x08
6 #define ADC_SPEEDLL 0x00
7 #define ADC_SPEEDL 0x20
8 #define ADC_SPEEDH 0x40
9 #define ADC_SPEEDHH 0x60
10
11 #define ADC_F 10 //一阶低通滤波器滤波系数(取0~100),这里的系数为上一次采样结果的权。
12
13 uint8 ADC_times = 0; //取均值次数
14 uint8 ADC_counts = 0; //计算器
15 uint16 ADC_Result = 0; //ADC累加和
16 uint8 ADC_ch_choose = 0; //ADC通道选择
17 uint8 ADC_speed_choose = 0; //ADC速度选择
18 uint16 ADC_DATA = 0; //ADC低通滤波结果
19 uint16 NEW_DATA = 0; //ADC均值
20
21 /*软件一阶低通滤波器*/
22 void Filter(void)
23 {
24 1 uint32 count_temp = 0;
25 1 if(NEW_DATA<ADC_DATA)
26 1 {
27 2 count_temp = ADC_DATA - NEW_DATA;
28 2 count_temp = count_temp*ADC_F;
29 2 count_temp = count_temp+50;
30 2 count_temp = count_temp/100;
31 2 ADC_DATA = ADC_DATA-count_temp;
32 2 }
33 1 else if(ADC_DATA<NEW_DATA)
34 1 {
35 2 count_temp = NEW_DATA - ADC_DATA;
36 2 count_temp = count_temp*ADC_F;
37 2 count_temp = count_temp+50;
38 2 count_temp = count_temp/100;
39 2 ADC_DATA = ADC_DATA+count_temp;
40 2 }
41 1 }
42
43
44 /*****************************内部AD初始化*****************/
45 void Get_ADC(uint8 ch,uint8 ADC_SPEED,uint8 times)
46 {
47 1 ADC_counts = times;
48 1 ADC_Result = 0;
49 1 ADC_DATA = 0;
50 1 ADC_ch_choose = ch;
51 1 ADC_speed_choose = ADC_SPEED;
52 1 ADC_CONTR = 0x00;
53 1 AUXR1 |= 0x04;
54 1 P1ASF = 0xff;
55 1 P1M1 = 0xff;
C51 COMPILER V9.01 AD 08/10/2013 20:54:57 PAGE 2
56 1 P1M0 = 0x00;
57 1 ADC_RES = 0;
58 1 ADC_RESL = 0;
59 1 ADC_CONTR = ADC_POWER|ADC_speed_choose|ADC_START|ADC_ch_choose;
60 1 _nop_();
61 1 _nop_();
62 1 _nop_();
63 1 EA = 1;
64 1 EADC = 1;
65 1 }
66
67 void ADC_stop(void)
68 {
69 1 ADC_CONTR = 0x00;
70 1 EADC = 0;
71 1 }
72
73
74 void main(void)
75 {
76 1 Get_ADC(0,ADC_SPEEDLL,30);
77 1 }
78
79
80 void ADC_interrupt(void) interrupt 5
81 {
82 1 ADC_CONTR &= !ADC_FLAG; //清除中断标志
83 1 ADC_Result = ADC_Result + ADC_RES*256+ADC_RESL;
84 1 ADC_counts++;
85 1 if(ADC_counts == ADC_times)
86 1 {
87 2 NEW_DATA = ADC_Result/ADC_times;
88 2 ADC_counts = 0;
89 2 ADC_Result = 0;
90 2 Filter();
91 2 }
92 1 ADC_CONTR = ADC_POWER|ADC_speed_choose|ADC_START|ADC_ch_choose;
93 1 _nop_();
94 1 _nop_();
95 1 _nop_();
96 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 415 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 4
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)