📄 water.lst
字号:
C51 COMPILER V7.06 WATER 12/03/2005 14:07:41 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE WATER
OBJECT MODULE PLACED IN water.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE water.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<reg52.h>
2 #include "adc.h"
3 #include<INTRINS.H>
4 #include <stdio.h>
5 #define uchar unsigned char
6 #define uint unsigned int
7 #define ushort unsigned short
8
9 sbit EOC = P1^3;
10 sbit CLK = P1^4;
11 sbit DIN = P1^5;
12 sbit DOUT = P1^6;
13 sbit CS = P1^7;
14 sbit TURN_CLK=P1^0;
15 sbit TURN_UCLK=P1^1;
16
17 sbit adjust_20=P2^0;
18 sbit adjust_30=P2^1;
19 sbit adjust_40=P2^2;
20
21
22 unsigned long idata sys_timer=0;
23 float idata voltage_con;
24 float idata voltage_moto;
25
26 uint idata voltage_con1;
27 uint idata voltage_moto1;
28 uchar idata voltage_adjust;
29
30
31 void adc_init(void);
32 float adc_voltage(int channel);
33 float adc_value(int channel);
34 float voltage_avrg(int channel);
35 void delay(void);
36 void adjust_init(void);
37
38
39 void adjust_init(void)
40 {
41 1 if(adjust_20==0)
42 1 voltage_adjust=20;
43 1 else
44 1 if (adjust_30==0)
45 1 voltage_adjust=30;
46 1 else
47 1 voltage_adjust=40;
48 1 }
49
50
51
52
53
54 void adc_init(void)
55 {
C51 COMPILER V7.06 WATER 12/03/2005 14:07:41 PAGE 2
56 1 CS = 1;
57 1 CLK = 0;
58 1 }
59
60 float adc_voltage(int channel)
61 {
62 1 float r;
63 1 switch(channel)
64 1 {
65 2 case 1:r = adc_value(channel); r= r;return r;// 测量的值放大10 倍
66 2 case 0:r = adc_value(channel); r= r;return r;
67 2 default:return 0;
68 2 }
69 1 }
70
71 float adc_value(int channel)
72 {
73 1 int i;
74 1 uchar d;
75 1 ushort r;
76 1
77 1 d = (((unsigned char)channel)<<4)+0x02;
78 1 CS = 0;
79 1 for(i=0;i<12;i++)
80 1 {
81 2 if(i<8)
82 2 {
83 3 if( d&(1<<(7-i))) DIN = 1;else DIN=0;
84 3 }
85 2 else
86 2 DIN = 0;
87 2 CLK = 1;
88 2 CLK = 0;
89 2 }
90 1 DIN = 0;
91 1 while(EOC==0);
92 1
93 1 r = 0;
94 1 for(i=0;i<12;i++)
95 1 {
96 2 CLK = 1;
97 2 if(DOUT)r|=(1<<i);
98 2 CLK = 0;
99 2 }
100 1 CS = 1;
101 1 return (float)r*5/4095.0;
102 1 }
103
104 float voltage_avrg(int channel)
105 {
106 1
107 1 static float idata r_temp;
108 1 char idata i;
109 1 r_temp=0;
110 1 for(i=0;i<10;i++)
111 1 r_temp=r_temp+adc_voltage(channel);
112 1 r_temp=r_temp/10;
113 1 return r_temp;
114 1
115 1 }
116
117 void delay(void)
C51 COMPILER V7.06 WATER 12/03/2005 14:07:41 PAGE 3
118 { int idata i;
119 1 for(i=0;i<1000;i++);
120 1 }
121
122
123 void main(void)
124 {
125 1 /*TURN_CLK=0; //u_clock
126 1 TURN_CLK=1;
127 1
128 1 TURN_UCLK=0; // clock
129 1 TURN_UCLK=1;
130 1
131 1 TURN_CLK=0;
132 1 TURN_CLK=1;
133 1
134 1 TURN_UCLK=0;
135 1 TURN_UCLK=1; */
136 1
137 1 TURN_UCLK=1;
138 1 TURN_CLK=1;
139 1 adjust_init();
140 1 adc_init();
141 1 while(1)
142 1 {
143 2 //delay();
144 2
145 2 voltage_con= voltage_avrg(0); // control voltage
146 2 voltage_moto= voltage_avrg(1); // moto voltage
147 2 voltage_con1=(uint) (voltage_con*100);
148 2 voltage_moto1=(uint) (voltage_moto*100);
149 2 //delay();
150 2 if(voltage_con1>(voltage_moto1+voltage_adjust)) //30 1ma voltage_adjust
151 2 {
152 3 TURN_UCLK=1;
153 3 delay();
154 3 TURN_CLK=0;
155 3 delay();
156 3 }
157 2 else
158 2 if(voltage_con1<(voltage_moto1-voltage_adjust))
159 2 {
160 3 TURN_CLK=1;
161 3 delay();
162 3 TURN_UCLK=0;
163 3 delay();
164 3 }
165 2 else
166 2 {
167 3 TURN_UCLK=1;
168 3 delay();
169 3 TURN_CLK=1;
170 3 delay();
171 3 }
172 2
173 2
174 2
175 2 }
176 1
177 1 }
178
179
C51 COMPILER V7.06 WATER 12/03/2005 14:07:41 PAGE 4
180
181
182
183
184
185
186
187
188
189
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 498 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 8
IDATA SIZE = 21 3
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 + -