📄 f350_adc_buffered_2.lst
字号:
C51 COMPILER V7.00 F350_ADC_BUFFERED_2 02/08/2009 08:08:02 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE F350_ADC_BUFFERED_2
OBJECT MODULE PLACED IN F350_ADC_Buffered_2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe F350_ADC_Buffered_2.c DB OE BR
stmt level source
1 //插上短路环J4,J7,J8的2,3脚,J9的2,3脚,J15,连上232串口线。
2 //AIN1与AGND连接,在AIN0输入0-2.5V之间的电压。
3 // Includes
4 //-----------------------------------------------------------------------------
5 #include <c8051f350.h> // SFR declarations
6 #include <stdio.h> // Standard I/O Library
7 #include <math.h>
8 //-----------------------------------------------------------------------------
9 // 16-bit SFR Definitions for 'F35x
10 //-----------------------------------------------------------------------------
11 sfr16 DP = 0x82; // data pointer
12 sfr16 TMR3RL = 0x92; // Timer3 reload value
13 sfr16 TMR3 = 0x94; // Timer3 counter
14 sfr16 ADC0DEC = 0x9a;
15 sfr16 TMR2RL = 0xca; // Timer2 reload value
16 sfr16 TMR2 = 0xcc; // Timer2 counter
17 sfr16 PCA0CP0 = 0xe9; // PCA0 Module 1 Capture/Compare
18 sfr16 PCA0CP1 = 0xeb; // PCA0 Module 2 Capture/Compare
19 sfr16 PCA0CP2 = 0xed; // PCA0 Module 2 Capture/Compare
20 sfr16 PCA0 = 0xf9; // PCA0 counter
21
22 //-----------------------------------------------------------------------------
23 // Global CONSTANTS
24 //-----------------------------------------------------------------------------
25
26 #define SYSCLK 49000000 // SYSCLK frequency (Hz)
27 #define BAUDRATE 115200 // UART0 Baudrate (bps)
28
29 #define MDCLK 2457600 // Modulator Clock (Hz)
30 #define OWR 10 // desired Output Word Rate in Hz
31
32 #define VREF 2530 // External VREF (x 10^-2 V)
33 //------------------------------------------------------------------------------
34 //------------------------------------------------------------------------------
35 long xdata sample_array[128];
36 long ADC_OutputVal=0; // Concatenated ADC output value
37 int cyz;
38 //-----------------------------------------------------------------------------
39 // Function PROTOTYPES
40 //-----------------------------------------------------------------------------
41 void SYSCLK_Init (void);
42 void PORT7_Init (void);
43 void ADC0_Init (void);
44 void IDA0_Init (void);
45 void UART0_Init (void);
46 void YJ_Init(void);
47 void Write_CHAR(unsigned char yjchar);
48
49 //-----------------------------------------------------------------------------
50 // MAIN Routine
51 //-----------------------------------------------------------------------------
52 void main (void) {
53 1
54 1
55 1
C51 COMPILER V7.00 F350_ADC_BUFFERED_2 02/08/2009 08:08:02 PAGE 2
56 1 unsigned int i,g;
57 1 float average;
58 1 unsigned char e11,e22,e33,e44;
59 1 unsigned int e1,e2,e3,e4;
60 1
61 1
62 1 PCA0MD &= ~0x40; // disable watchdog timer
63 1
64 1 SYSCLK_Init(); // Initialize system clock to 49 MHz
65 1
66 1 PORT7_Init(); // Initialize crossbar and GPIO
67 1
68 1
69 1 for(i=0;i<128;i++)
70 1 {
71 2 sample_array[i]=0;
72 2
73 2 }
74 1
75 1 ADC0_Init(); // 初始化ADC0
76 1
77 1 UART0_Init(); // 初始化UART0
78 1
79 1 EA = 1; // 使能总中断
80 1
81 1 printf("\nMeasurements using the 24-bit ADC in C8051F350\n");
82 1 printf("\nCalibrating ...\n");
83 1
84 1 EIE1 &= ~0x08; // 不使能 ADC0 中断
85 1
86 1 ADC0MD |= 0x01; // 完全内部校准
87 1
88 1 while (!AD0CALC); // 等待转换完成
89 1
90 1 ADC0MD &= ~0x07; // ADC0 为理想模式
91 1
92 1
93 1 printf("Calibration complete\n\n");
94 1
95 1 AD0INT = 0; // clear pending sample indication
96 1 ADC0MD |= 0x83; // 启动连续转换
97 1
98 1 while(1) //处理采样值
99 1 {
100 2
101 2 // 捕捉128次采样
102 2 printf ("Collecting 128 samples...\n");
103 2
104 2 for (i = 0; i < 128; i++)
105 2 {
106 3 while(!AD0INT); //等待转换完成
107 3 AD0INT = 0; //清 AD0 中断标志
108 3
109 3 // concatenate ADC0 data bytes to form the 24-bit value
110 3
111 3 ADC_OutputVal = ADC0H;
112 3 ADC_OutputVal =ADC_OutputVal<< 16;
113 3 ADC_OutputVal += (long)ADC0L + ((long)ADC0M << 8);
114 3 sample_array[i] = ADC_OutputVal;
115 3
116 3 }
117 2
C51 COMPILER V7.00 F350_ADC_BUFFERED_2 02/08/2009 08:08:02 PAGE 3
118 2 for(i=0;i<128;i++)
119 2 {
120 3 average=average+(float)sample_array[i];
121 3
122 3 }
123 2 average=average/128;
124 2 average=average/256/256/256;
125 2 average=average*VREF;
126 2 average=average*2;
127 2 average=average;
128 2
129 2 printf("ADC Vin = %6d mV",(int)average);
130 2
131 2 cyz=(int)average;
132 2 e1=cyz/1000;
133 2 e2=(cyz-1000*e1)/100;
134 2 e3=(cyz-1000*e1-100*e2)/10;
135 2 e4=cyz-1000*e1-100*e2-10*e3;
136 2 g=0;
137 2 do
138 2 {
139 3
140 3 if(g==e1)e11=0x30+g;
141 3
142 3 if(g==e2)e22=0x30+g;
143 3
144 3 if(g==e3)e33=0x30+g;
145 3
146 3 if(g==e4)e44=0x30+g;
147 3
148 3 g++;
149 3 }while(g<10);
150 2
151 2 YJ_Init(); //液晶显示采样值
152 2 for(i=0;i<4000;i++);
153 2 for(i=0;i<4000;i++);
154 2 for(i=0;i<4000;i++);
155 2 Write_CHAR(e11);
156 2 Write_CHAR(0x2e);
157 2 Write_CHAR(e22);
158 2 Write_CHAR(e33);
159 2 Write_CHAR(e44);
160 2 Write_CHAR(0x56);
161 2 for(i=0;i<4000;i++);
162 2 for(i=0;i<4000;i++);
163 2 for(i=0;i<4000;i++);
164 2 }
165 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -