📄 f350_adc_buffered_2.lst
字号:
C51 COMPILER V7.50 F350_ADC_BUFFERED_2 08/12/2007 15:58:07 PAGE 1
C51 COMPILER V7.50, 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 BROWSE DEBUG OBJECTEXTEND
line 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 MDCLK 1105920 // Modulator Clock (Hz)
31 #define OWR 10 // desired Output Word Rate in Hz
32
33 #define VREF 2530 // External VREF (x 10^-2 V)
34 //------------------------------------------------------------------------------
35 //------------------------------------------------------------------------------
36 long xdata sample_array[128];
37 long ADC_OutputVal=0; // Concatenated ADC output value
38 int cyz;
39 //-----------------------------------------------------------------------------
40 // Function PROTOTYPES
41 //-----------------------------------------------------------------------------
42 void SYSCLK_Init (void);
43 void PORT7_Init (void);
44 void ADC0_Init (void);
45 void IDA0_Init (void);
46 void UART0_Init (void);
47 void YJ_Init(void);
48 void Write_CHAR(unsigned char yjchar);
49
50 //-----------------------------------------------------------------------------
51 // MAIN Routine
52 //-----------------------------------------------------------------------------
53 void main (void) {
54 1
55 1
C51 COMPILER V7.50 F350_ADC_BUFFERED_2 08/12/2007 15:58:07 PAGE 2
56 1
57 1 unsigned int i,g;
58 1 float average;
59 1 unsigned char e11,e22,e33,e44;
60 1 unsigned int e1,e2,e3,e4;
61 1 char Recestring[20];
62 1
63 1 PCA0MD &= ~0x40; // disable watchdog timer
64 1
65 1 SYSCLK_Init(); // Initialize system clock to 49 MHz
66 1
67 1 PORT7_Init(); // Initialize crossbar and GPIO
68 1
69 1
70 1 for(i=0;i<10;i++)
71 1 {
72 2 sample_array[i]=0;
73 2
74 2 }
75 1
76 1 ADC0_Init(); // 初始化ADC0
77 1
78 1 UART0_Init(); // 初始化UART0
79 1
80 1 EA = 1; // 使能总中断
81 1
82 1 EIE1 &= ~0x08; // 不使能 ADC0 中断
83 1
84 1 ADC0MD |= 0x01; // 完全内部校准
85 1
86 1 while (!AD0CALC); // 等待转换完成
87 1
88 1 ADC0MD &= ~0x07; // ADC0 为理想模式
89 1
90 1
91 1 printf("Calibration complete\n\n");
92 1
93 1 AD0INT = 0; // clear pending sample indication
94 1 ADC0MD |= 0x83; // 启动连续转换
95 1
96 1 while(1) //处理采样值
97 1 {
98 2
99 2 // 捕捉128次采样
100 2 printf ("Collecting 128 samples...\n");
101 2
102 2 for (i = 0; i < 10; i++)
103 2 {
104 3 while(!AD0INT); //等待转换完成
105 3 AD0INT = 0; //清 AD0 中断标志
106 3
107 3 // concatenate ADC0 data bytes to form the 24-bit value
108 3
109 3 ADC_OutputVal = ADC0H;
110 3 ADC_OutputVal =ADC_OutputVal<< 16;
111 3 ADC_OutputVal += (long)ADC0L + ((long)ADC0M << 8);
112 3 sample_array[i] = ADC_OutputVal;
113 3
114 3 }
115 2
116 2 for(i=0;i<10;i++)
117 2 {
C51 COMPILER V7.50 F350_ADC_BUFFERED_2 08/12/2007 15:58:07 PAGE 3
118 3 average=average+(float)sample_array[i];
119 3
120 3 }
121 2 average=average/10;
122 2 average=average/256/256/256;
123 2 average=average*VREF;
124 2 average=average*2;
125 2 average=average;
126 2
127 2 printf("ADC0 Vin = %6d mV\n",(int)average);
128 2 e11 = 0;
129 2 e11 = ungetchar();
*** WARNING C209 IN LINE 129 OF F350_ADC_BUFFERED_2.C: '_ungetchar': too few actual parameters
130 2 gets (Recestring, 10);
131 2 printf("the receive string is %s \n",Recestring);
132 2
133 2 /* cyz=(int)average;
134 2 e1=cyz/1000;
135 2 e2=(cyz-1000*e1)/100;
136 2 e3=(cyz-1000*e1-100*e2)/10;
137 2 e4=cyz-1000*e1-100*e2-10*e3;
138 2 g=0;
139 2 do
140 2 {
141 2
142 2 if(g==e1)e11=0x30+g;
143 2
144 2 if(g==e2)e22=0x30+g;
145 2
146 2 if(g==e3)e33=0x30+g;
147 2
148 2 if(g==e4)e44=0x30+g;
149 2
150 2 g++;
151 2 }while(g<10);
152 2
153 2 YJ_Init(); //液晶显示采样值
154 2 for(i=0;i<4000;i++);
155 2 for(i=0;i<4000;i++);
156 2 for(i=0;i<4000;i++);
157 2 Write_CHAR(e11);
158 2 Write_CHAR(0x2e);
159 2 Write_CHAR(e22);
160 2 Write_CHAR(e33);
161 2 Write_CHAR(e44);
162 2 Write_CHAR(0x56);
163 2 for(i=0;i<4000;i++);
164 2 for(i=0;i<4000;i++);
165 2 for(i=0;i<4000;i++);*/
166 2 }
167 1
168 1 }
*** WARNING C280 IN LINE 57 OF F350_ADC_BUFFERED_2.C: 'g': unreferenced local variable
*** WARNING C280 IN LINE 59 OF F350_ADC_BUFFERED_2.C: 'e22': unreferenced local variable
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -