📄 adc_main.lst
字号:
C51 COMPILER V7.02b ADC_MAIN 01/09/2008 18:16:13 PAGE 1
C51 COMPILER V7.02b, COMPILATION OF MODULE ADC_MAIN
OBJECT MODULE PLACED IN ADC_Main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ADC_Main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<reg51.h>
2 sfr ADC_CONTR =0XC5;//A/D转换控制寄存器?
3 sfr AD_DATAH =0XC6;//A/D转换结果高八位寄存器
4 sfr AD_DATAL =0XBE;//A/D转换结果低二位寄存器
5 sfr P1M0 =0X91;//P1口模式寄存器0
6 sfr P1M1 =0X92;//P1口模式寄存器1
7
8 unsigned char code MCU_ID = 0x01;//从机模式(现地)机器号,(0x01~0xFF)
9 unsigned char c[4]; //数组C用来存放主机发来的主机真
10 unsigned char d[11];//数组D用来存放从机真==
11
12 unsigned int ADC_DATA;
13 unsigned char b[8];//
14 //unsigned char k;
15 //unsigned char MydataL;
16 //unsigned char MydataH;
17
18 unsigned long ad2;
19 unsigned long ad1;
20
21 float adcc;
22 //float sum1=0;
23
24 void Delay_10ms(void); //延时函数,延时10ms
25 void Set_ADC_P1_7(void); //将P1.7设置为适宜A/D转化的模式,高阻输入
26 void Init_UART(void); //串口初始化
27 void ADC(void); //A/D采样函数。
28 void Send_Byte(void); //向主机发送采样结果
29 void Send_Char(unsigned char ch);//发送一个字符
30 void Format_ADC_Data(void); //模拟电压值转化成从机砧
31 unsigned char Receive_Char(void);//接受一个字符
32
33 void operation();//将采样得来的数字值按要求处理成实际模拟值
34 unsigned char code error[4] = {0x10,0x11,0x00,0x21};
35
36 // 函数名称: void main()主函数
37 void main()
38 {
39 1 unsigned char i=0;
40 1 unsigned int sdlh = 0;//前二个字节的和
41 1 unsigned char csl = 0; //累加和的低字节
42 1 unsigned char csh = 0; //累加和的高字节
43 1
44 1 // MydataL = 0;
45 1 // MydataH = 0;
46 1
47 1 Init_UART( ); //串口初始化函数
48 1 Set_ADC_P1_7( ); //设置P1.0为高阻输入
49 1 EA=1; //开放总允许中断
50 1
51 1 while(1)
52 1 {
53 2 for(i = 0;i<4;i++)
54 2 c[i] = Receive_Char(); //接受主机命令字
55 2 sdlh = c[0] + c[1];
C51 COMPILER V7.02b ADC_MAIN 01/09/2008 18:16:13 PAGE 2
56 2 csl = sdlh & 0x00ff;
57 2 csh = (sdlh & 0xff00)>>4;
58 2 if(csh == c[2] && csl == c[3] && c[0] == 0x10 && c[1]==MCU_ID)//正确接受命令
59 2 {
60 3 ADC();
61 3 // MydataL = ADC_DATA;
62 3 // MydataH = ADC_DATA>>8;
63 3 // Send_Char(MydataH);//单测试AD转换数据的高8位
64 3 // Send_Char(MydataL);//单测试AD转换数据的低2位
65 3 operation();
66 3 Format_ADC_Data();
67 3 Send_Byte();
68 3 }
69 2 else
70 2 {
71 3 for(i = 0;i<4;i++)
72 3 Send_Char(error[i]);// 向主机发送从新发送命令字
73 3 }
74 2 }
75 1 }
76
77 //---------------------------------------------------------------
78 // 函数名称: delay10ms(void)
79 // 函数功能: 延时ms函数
80 //---------------------------------------------------------------
81 void Delay_10ms(void)
82 {
83 1 unsigned char k;
84 1 for(k=10;k>0;k--);
85 1 }
86 //---------------------------------------------------------------
87 // 函数名称: set_P1_channel()
88 // 函数功能: 将P1.0设置为适宜A/D转化的模式,高阻输入
89 //---------------------------------------------------------------
90 void Set_ADC_P1_7(void)
91 {
92 1 P1 = 0xff;//
93 1 ADC_CONTR = ADC_CONTR|0x80;
94 1 Delay_10ms();
95 1 P1M0 = 0x80;
96 1 P1M1 = 0x80;
97 1 ADC_CONTR = ADC_CONTR|0xC7;
98 1 Delay_10ms();
99 1 }
100
101 //---------------------------------------------------------------
102 // 函数名称: initiate_rs()
103 // 函数功能: 串口初始化,设置定时器1为波特率发生器,且无奇偶校验,
104 // 系统外部晶振为11.0592,波特率为9600
105 //---------------------------------------------------------------
106 void Init_UART(void)
107 {
108 1 SCON = 0x50;
109 1 TMOD = 0x20;
110 1 TH1 = 0xfd;
111 1 TL1 = 0xfd;
112 1 TR1 = 1;
113 1 TI = 1;
114 1 RI = 0;
115 1 }
116
117 //---------------------------------------------------------------
C51 COMPILER V7.02b ADC_MAIN 01/09/2008 18:16:13 PAGE 3
118 // 函数名称: putch(unsigned char ch)
119 // 函数功能: 发送一个字符函数
120 //---------------------------------------------------------------
121 void Send_Char(unsigned char ch)
122 {
123 1 SBUF = ch;
124 1 TI = 0;
125 1 while(!TI);
126 1 }
127
128 //---------------------------------------------------------------
129 // 函数名称: ad() A/D采样函数
130 // 函数功能: 从P1.0口采样模拟电压值,连续采样20次在求其平均值,
131 // 最后为采样结果
132 //---------------------------------------------------------------
133 void ADC(void) // A/D采样函数
134 {
135 1 unsigned count;
136 1 unsigned int sum = 0;
137 1 unsigned int sum_Temp = 0;
138 1
139 1 unsigned char test;
140 1
141 1 for(count=0;count<20;count++)
142 1 {
143 2 AD_DATAH=0x00;
144 2 AD_DATAL=0X00;
145 2 test=0x00;
146 2
147 2 ADC_CONTR=ADC_CONTR|0x08;//启动AD转换
148 2 Delay_10ms();
149 2 do
150 2 {
151 3 test=ADC_CONTR&0x10;
152 3 }while( test == 0);//等待AD转换结束,否则继续等待
153 2
154 2 ADC_CONTR=ADC_CONTR&0xE7;//清AD标志、启动位,停止AS转换
155 2
156 2 sum_Temp = AD_DATAH;
157 2 sum_Temp = (sum_Temp<<2)+AD_DATAL;
158 2
159 2 sum = sum+sum_Temp;
160 2 }
161 1 ADC_DATA = sum/20;
162 1 }
163
164 //---------------------------------------------------------------
165 // 函数名称: operation()
166 // 函数功能: 将采样得来的10位数字值按要求处理成模拟电压值
167 //---------------------------------------------------------------
168 void operation(void)
169 {
170 1 int kk = 0;
171 1 unsigned char i;
172 1 adcc = ADC_DATA * 0.0048828125;
173 1 for(i = 0;i < 6;i++)
174 1 b[i] = 0;
175 1 adcc = adcc * 1000000;
176 1 if(adcc == 0)
177 1 return;
178 1 ad2 =(long)adcc;
179 1 while(ad2 != 0)
C51 COMPILER V7.02b ADC_MAIN 01/09/2008 18:16:13 PAGE 4
180 1 {
181 2 b[kk++] = ad2%10;
182 2 ad2 = ad2 / 10;
183 2 }
184 1 }
185 //---------------------------------------------------------------
186 // 函数名称: unsigned char getch(void)
187 // 函数功能: 从机接受一个字符。
188 //---------------------------------------------------------------
189 unsigned char Receive_Char(void)// 接受一个字符
190 {
191 1 while(!RI);
192 1 RI = 0;
193 1 return(SBUF);
194 1 }
195
196 //---------------------------------------------------------------
197 // 函数名称: send_uart()
198 // 函数功能: 将采样得来的模拟电压值转化成从机格式
199 //---------------------------------------------------------------
200 void Format_ADC_Data(void)
201 {
202 1 unsigned int cshcsl;
203 1 d[0] = 0x10;
204 1 d[1] = 0x01;
205 1 d[2] = 0x00;
206 1 d[3] = 0x00;
207 1 d[4] = b[6];
208 1 d[5] = b[5] * 10 + b[4];
209 1 d[6] = b[3] * 10 + b[2];
210 1 d[7] = b[1] * 10 + b[0];
211 1 cshcsl = 0x10 + 0x01 + 0x00 + 0x00 + b[6] + (b[5] * 10 + b[4]) + (b[3] * 10 + b[2]) + (b[1] * 10 + b[0]);
212 1 d[8] = (cshcsl & 0xff00) >> 4;
213 1 d[9] = cshcsl & 0x00ff;
214 1 }
215
216 //---------------------------------------------------------------
217 // 函数名称: send_byte()
218 // 函数功能: 将从机机桢发送给主机
219 //---------------------------------------------------------------
220 void Send_Byte(void)
221 {
222 1 unsigned char i;
223 1 for(i = 0;i < 10;i++)
224 1 Send_Char(d[i]);
225 1 }
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
C51 COMPILER V7.02b ADC_MAIN 01/09/2008 18:16:13 PAGE 5
242
243
244
245
246
247
248
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 598 ----
CONSTANT SIZE = 5 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 37 7
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 + -