📄 main.lst
字号:
ARM COMPILER V2.53, main 22/09/07 23:08:04 PAGE 1
ARM COMPILER V2.53, COMPILATION OF MODULE main
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Keil\ARM\BIN\CA.exe main.c ARM BROWSE DEBUG TABS(4)
stmt level source
1 /**********************************************************************************************
2 main.c file
3 作者:lig
4 建立日期:2006-4-25
5 修改日期:2006-4-25
6 版本:V1.0
7 **********************************************************************************************/
8
9
10 #include <ADuC7020.H>
11 #include "my_type.h"
12 #include "LED.H"
13 #include "interrupt.h"
14 #include "Timer.h"
15 #include "UART.H"
16 #include "ADC.h"
17 #include "others.h"
18 #include "math.h"
19 #include "slave.h"
20
21
22
23 /*********************************************************************************************/
24 ////////////////////////////////////////////////
25 extern uint8 pdata;
26 extern uint8 pmax;
27 extern uint8 pmin;
28 extern uint16 datas[6];
29 ////////////////////////////
30 uint16 AD_value[3]; //最近的3次AD采样值
31
32 uint16 A_value[2];
33 uint16 A_S_value[2][32];
34
35 sint32 Z_w_value;
36 double Z_w_result; //固定坐标系下角度
37 uint8 temp1;
38 uint16 count1=0;//test
39
40 unsigned char Z_Hbit,Z_Lbit,Z_Sbit;//Z 的高位 低位 符号位
41 int ZERO_V=4523; //若度数向下飘,增大ZERO_V
42 unsigned char zus=0;
43 unsigned int x,z_time=0;
44 sint32 z_temp,z_temp1;
45 ////////////////////////////////////////////////
46 void demarcate(unsigned char flag_demarcate)
47 {
48 1 unsigned char z_i = 4,z_j = 5;
49 1 // sint32 z_max_error[11],z_w_value_min,z_w_value_max;
50 1
51 1 if(!flag_demarcate)
52 1 {
53 2 x = 0;
54 2 }
55 1 else
56 1 {
57 2 x = 51;
58 2 }
59 1 z_temp = 0;
ARM COMPILER V2.53, main 22/09/07 23:08:04 PAGE 2
60 1 zus=0;
61 1 z_time=0;
62 1 count1=0;
63 1 temp1=0;
64 1 do
65 1 {
66 2 do
67 2 {
68 3 if(zus)
69 3 {
70 4 z_temp=z_temp+Z_w_value ;
71 4 z_time++;
72 4 zus = 0;
73 4 }
74 3
75 3
76 3
77 3 }while(z_time<z_i);
78 2
79 2 z_temp=z_temp/z_i;
80 2 if(x<50)
81 2 {
82 3 ZERO_V=ZERO_V-(int)((z_temp1-z_temp)/z_j);
83 3 }
84 2 else
85 2 {
86 3 if((z_temp-30)>z_temp1)
87 3 {
88 4 ZERO_V++;
89 4 }
90 3 if((z_temp+30)<z_temp1)
91 3 {
92 4 ZERO_V--;
93 4 }
94 3 }
95 2 z_temp1 = z_temp;
96 2 z_temp = 0;
97 2 z_time = 0;
98 2 x++;
99 2 // print_Z_w();
100 2 if(x>30)
101 2 {
102 3 z_i=7;
103 3 z_j=30;
104 3 }
105 2 if(x>50)
106 2 {
107 3 z_i=150;
108 3 }
109 2
110 2 }
111 1 while(x<(57+6*flag_demarcate)) ;
112 1
113 1
114 1
115 1 }
116
117 void SysClkInit(void)
118 {
119 1 PLLKEY1=0xAA;
120 1 PLLCON=0x01; //PLL配置
121 1 PLLKEY2=0x55;
122 1 POWKEY1=0x01;
123 1 POWCON=0x00; //CPU时钟配置为41.78MHz
124 1 POWKEY2=0xF4;
125 1 // while(!(PLLSTA & 0x01));
ARM COMPILER V2.53, main 22/09/07 23:08:04 PAGE 3
126 1 }
127
128 ///////////////////////////////////////////////////////////////////////////////////////////////
129
130
131 /*********************************************************************************************/
132 void FIQ_Handler(void) __fiq //FIQ中断服务程序
133 {
134 1 int i=0;
135 1 WatchDog();
136 1
137 1 if(FIQSTA & TIMER0) //读取FIQ中断状态,判断FIQ中断源
138 1 { //Timer0中断 1/128秒
139 2 T0CLRI=0; //清Timer0中断
140 2 AD_value[0]=AD_value[1];
141 2 AD_value[1]=AD_value[2];
142 2
143 2 AD_value[2]=read_ADC(2); //根据通道号读ADC的值
144 2 AD_value[2]=szlb(AD_value[2]); //滤波
145 2 WatchDog();
146 2 ///////////////////////////////////////积分//////////////////////////////////////////////////////
147 2
148 2 if(count1==3)
149 2 {
150 3 Z_w_value=Z_w_value+(AD_value[2]+AD_value[0]-ZERO_V);//3310 //注意RS150 零点不一定是2.5V
151 3 // Z_w_result=(Z_w_value>>8)*0.122; //变换为度 2.5V*1000/(5mV*4096) RS300 clockwise 为正
152 3 // Z_w_result=Z_w_value*0.00095/2.0; //0.122/128 // RS300
153 3 Z_w_result=-Z_w_value*0.00152; //19-38 ->128Hz // 152->32Hz 2.5*1000/(128*2*12.5mv*4096) RS150
- du
154 3 count1=0;
155 3 zus++;
156 3 }
157 2 else
158 2 {count1++;}
159 2
160 2 return;
161 2 }
162 1 if(FIQSTA & UART)
163 1 {
164 2 /* temp1=COMRX;
165 2 if(temp1=='o')
166 2 {
167 2 send_a_byte('o');
168 2 }
169 2 else{send_a_byte('a');}
170 2 */
171 2 ON_LED42();
172 2 UART_R_ISR();
173 2 return;
174 2 }
175 1 if(FIQSTA & TIMER3) //读取IRQ中断状态,判断IRQ中断源
176 1 { //Timer3中断
177 2 double temp;
178 2 temp=Z_w_result; // Watchdog interrupt allows saving...
179 2 //... data before reset if necessary
180 2 T3CLRI=0;
181 2 T3LD = 0x1000; // 0x1000/32768 = 125ms
182 2
183 2 RSTSTA = 0x4; // Software reset
184 2 Z_w_result=temp;
185 2 return;
186 2 }
187 1
188 1 }
189 ///////////////////////////////////////////////////////////////////////////////////////////////
190
ARM COMPILER V2.53, main 22/09/07 23:08:04 PAGE 4
191
192 union
193 {
194 uint32 TimeData;
195 time_type Time;
196 }RealTime;
197
198
199 void main(void)
200 {
201 1
202 1 uint8 i,j;
203 1 ///////////////数据初始化/////////////////////////
204 1 uint16 temp;
205 1 Z_COMMUNI_INIT();
206 1 // Z_COMMUNI_INIT
207 1
208 1 pdata=0;
209 1 pmax=0;
210 1 pmin=0;
211 1 for(i=0;i<6;i++)
212 1 {datas[i]=1927;}
213 1 for(i=0;i<3;i++)
214 1 { AD_value[i]=1927; }
215 1
216 1 Z_w_value=-90/0.00152;
217 1 Z_w_result=0; //固定坐标系下位移
218 1 temp1=0;
219 1 z_temp= Z_w_value;
220 1 ////////////////////
221 1 A_value[0]=A_value[1]= 2096;
222 1 for(i=0;i<2;i++)
223 1 for(j=0;j<30;j++)
224 1 {A_S_value[i][j]= 2096;}
225 1 ////////////////////
226 1 ////////////////////////////////////////////////////
227 1 SysClkInit();
228 1 EN_TXD();
229 1 EN_LED42();
230 1 OFF_TXD();
231 1 OFF_LED42();
232 1 cls();
233 1 ADC_init();
234 1
235 1 WatchDog();
236 1
237 1 Timer0Init();
238 1 Timer3Init();
239 1 UART_init();
240 1
241 1 // init();
242 1 WatchDog();
243 1 print_Z_w();
244 1 // send_a_byte('b');
245 1 // send_a_byte('c');
246 1 // send_a_byte('d');
247 1 ON_LED42();
248 1 zus=0;
249 1
250 1 //ON_TXD();
251 1 //while(1)
252 1 //{
253 1 //Z_TXD(0xdd);
254 1 //}
255 1 //自动标定
256 1 demarcate(0);
ARM COMPILER V2.53, main 22/09/07 23:08:04 PAGE 5
257 1
258 1 //Delay_X_ms(1000);
259 1
260 1 z_time = 0;
261 1
262 1
263 1
264 1 Z_w_value=-90/0.00152;
265 1 ON_LED42();
266 1 //自动标定完后闪烁
267 1 zus=0;
268 1 do{
269 2 ON_LED42();
270 2 for(z_time=0;z_time<65000;z_time++)
271 2 {
272 3 ;
273 3 }
274 2 OFF_LED42();
275 2 for(z_time=0;z_time<65000;z_time++)
276 2 {
277 3 ;
278 3 }
279 2 zus++;
280 2 }while(zus<30);
281 1 // ON_TXD();
282 1 // print_Z_w();
283 1 //***********************************
284 1 // Z_COMMUNI_INIT();
285 1 // while(1);
286 1 while(1)
287 1 {
288 2
289 2 // ON_TXD();
290 2
291 2 /* if (z_temp>Z_w_value)
292 2 {
293 2 ZERO_V--;
294 2 }
295 2 else
296 2 {
297 2 ZERO_V++;
298 2 }
299 2 z_temp=Z_w_value ;
300 2
301 2 */
302 2 z_flag_newins = Z_GETYOU();
303 2 if(z_flag_newins) // //接收中断,处理
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -