📄 ad.lst
字号:
C51 COMPILER V7.06 AD 03/23/2005 22:21:02 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE AD
OBJECT MODULE PLACED IN ad.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe ad.c DB OE
stmt level source
1 #include <main.H>
2 #include <intrins.h>
3
4
5 //#include <C8051F020.H>
6 //*******************************************************************//
7 // NOTE:The max value of frequency is *//
8 // gain:1,2,4,8,16,0.5; *//
9 //*******************************************************************//
10 void SampFunc(long SYSCLK, int totalChannel , long sampleRate , float gain , volatile unsigned int *sam
-ples , long numSample)
11 {
12 1 //unsigned int *samples2;
13 1 static int channel=0;
14 1 volatile int i=0 ;
15 1 for(i=0;i<numSample;i++)
16 1 samples[i]=0;
17 1 // int j;
18 1 SFRPAGE=0x0;
19 1 AD0INT = 0; // 清除ADC0转换结束标志
20 1 EIE2 &= ~0x02; // 禁止ADC0中断
21 1 Timer3_Init(SYSCLK/sampleRate); //初始化定时器3以ADC0采样速率溢出
22 1 ADC0_Init(gain); //初始化ADC
23 1 SFRPAGE=0x0;
24 1 AD0EN=1; //允许ADC
25 1 //EA=1; //允许全局中断
26 1
27 1 SFRPAGE=0x01;
28 1 TMR3CN |= 0x04; // 启动定时器3
29 1 //for(i=0 ; i<numSample ; i++)
30 1 //{
31 1 //SFRPAGE=0x01;
32 1 //TMR3CN |= 0x04; // 启动定时器3
33 1
34 1 //SFRPAGE=0x00;
35 1 //while (AD0INT == 0); //ADC完成了一次数据转换
36 1
37 1 //AD0INT = 0; // 清除ADC0转换结束标志
38 1
39 1 //samples[i] = ADC0H;
40 1 //samples[i]=(samples[i]<<8)|ADC0L; // 读和存储ADC0值
41 1 // channel++;
42 1 // if(channel==totalChannel)
43 1 // {
44 1 // channel=0;
45 1 // }
46 1 // AMX0SL = channel;
47 1 //}
48 1 // EIE2 &= ~0x02; // 禁止ADC0中断
49 1 // ADC0_DONE = 1; // 设置DONE标志
50 1
51 1
52 1 // 上传采样值到UART0//////?????????
53 1 // LED = 0; // 上传其间关LED 灭///////?????????
54 1 //AD0EN = 0; // AD采集完NUM_SAMPLES个数据后,关闭ADC0
C51 COMPILER V7.06 AD 03/23/2005 22:21:02 PAGE 2
55 1 //EA=0;
56 1 //////如何停止定时器3的工作????????
57 1 i=0;
58 1 SFRPAGE=0x0;
59 1 while(1)
60 1 {
61 2
62 2 //AD0INT = 0; // 清除ADC0转换结束标志
63 2 while (AD0INT == 0);
64 2 AD0INT == 0;
*** WARNING C275 IN LINE 64 OF AD.C: expression with possibly no effect
65 2 samples[i] = ADC0; // 读和存储ADC0值
66 2 i++;
67 2 if(i ==numSample)
68 2 break;
69 2 }
70 1 SFRPAGE=0x0;
71 1 EIE2 &= ~0x02; // 禁止ADC0中断
72 1 AD0EN=0;
73 1 // ADC0_DONE = 1; // 设置DONE标志
74 1 SFRPAGE=0x01;
75 1 TMR3CN &= ~0x04; // 停止定时器3
76 1 EA=0;
77 1 }
*** WARNING C280 IN LINE 10 OF AD.C: 'totalChannel': unreferenced local variable
*** WARNING C280 IN LINE 13 OF AD.C: 'channel': unreferenced local variable
78
79
80 //-----------------------------------------------------------------------------
81 // 定时器3初始化
82 //-----------------------------------------------------------------------------
83 //
84
85 // 配置定时器3 自动重装间隔由 <counts> 决定(不产生中断) 使用系统时钟为时基
86 //
87 void Timer3_Init (int counts)
88 {
89 1 SFRPAGE=0x01;
90 1 //TMR3CN = 0x02; // 停止定时器3; 清除TF3;
91 1 // 使用系统时钟作为时基
92 1 TMR3CF =0x08;
93 1 TMR3CN =0x00;
94 1 //TMR3RL = -counts; // 初始化重装值
95 1
96 1 TMR3L = 0xFF; // 立即开始重装
97 1 TMR3H = 0xFF;
98 1 RCAP3 = -counts; // 初始化重装值
99 1 //RCAP3 = 0x0;
100 1 EIE2 &= ~0x01; // 禁止定时器3中断
101 1 //EIE2 &= ~0x02;
102 1 //TMR3CN |= 0x04; // 启动定时器3
103 1 }
104
105
106 //-----------------------------------------------------------------------------
107 // ADC0初始化
108 //-----------------------------------------------------------------------------
109 //
110 // 配置ADC0 使用定时器3溢出作为转换开始信号,转换结束产生一个中断,
111 // 使用左对齐输出模式
112 // 使能ADC转换结束中断中断使能ADC0 但禁止ADC0转换结束中断
113 //
C51 COMPILER V7.06 AD 03/23/2005 22:21:02 PAGE 3
114 void ADC0_Init (float gain)
115 {
116 1
117 1 // ADC0CN = 0x45; // 禁止ADC0;低功耗跟踪方式;
118 1 //当定时器3溢出启动ADC0转换;
119 1 //ADC0数据左对齐
120 1 SFRPAGE=0x0;
121 1 ADC0CN = 0x04; // 禁止ADC0;低功耗跟踪方式;
122 1 //当定时器3溢出启动ADC0转换;
123 1 //ADC0数据右对齐
124 1 REF0CN = 0x07; // 使能温度传感器, 片内 VREF,和 VREF 输出缓冲器
125 1 //REF0CN = 0x03; // 不使能温度传感器,////???????????
126 1
127 1 AMX0CF = 0x00; //AIN0.0和AIN0.1为单端输入
128 1 //AMX0SL = 0x00; // 选择AIN0.0作为ADC多路转换输入!
129 1 AMX0SL = 0x01; // 选择AIN0.1作为ADC多路转换输入!
130 1
131 1 ADC0CF = (SYSCLK_AD/2500000/2-1) << 3; // ADC转换时钟2.5MHz
132 1
133 1 if(gain==1) //gain在哪定义的????????????????????????
134 1 {
135 2 ADC0CF&=~0x07; // PGA增益 = 1
136 2 }else if(gain==2)
137 1 {
138 2 ADC0CF&=~0x07; // PGA增益 = 2
139 2 ADC0CF|=0x01;
140 2 }else if(gain==4)
141 1 {
142 2 ADC0CF&=~0x07; // PGA增益 = 4
143 2 ADC0CF|=0x02;
144 2 }else if(gain==8)
145 1 {
146 2 ADC0CF&=~0x07; // PGA增益 = 8
147 2 ADC0CF|=0x03;
148 2 }else if(gain==16)
149 1 {
150 2 ADC0CF&=~0x07; // PGA增益 = 16
151 2 ADC0CF|=0x04;
152 2 }else if(gain==0.5)
153 1 {
154 2 ADC0CF&=~0x07; // PGA增益 = 0.5
155 2 ADC0CF|=0x06;
156 2 }
157 1
158 1 EIE2 |= 0x02; // 允许ADC0中断
159 1 }
160
161
162
163
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 428 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 27
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 3 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -