📄 pid.lst
字号:
C51 COMPILER V7.06 PID 09/08/2005 15:02:37 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE PID
OBJECT MODULE PLACED IN E:\NEWMAC~1\050808\DC\PID.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE E:\NEWMAC~1\050808\DC\PID.C DB SB OE
stmt level source
1 #include <dc.h>
2
3 #define r_Kp 1
4 #define r_Ki 1
5 #define r_Kd 1
6 sbit stop=P3^5;
7 sbit wire_dir=P4^7;
8 sbit wire_enable=P4^6;
9 sbit rot_dir=P4^4;
10 sbit rot_enable=P4^5;
11 sbit send_enable=P3^4;
12 sbit limit=P4^3;
13 sbit wire_over_i=P1^2;
14 xdata unsigned char rbuffer[55],sbuffer[6];
15 xdata unsigned char COMM,SLA,FF,GET,POINTER0,SSUM,POINTER1,RSUM,c_t1,s_byte_nums,r_byte_nums,pulse_num,
16 err,WIRE,S_ANSW,nonce_sec,work,p_sec,K21,K3,K31,tooth_num,
17 temp_pulse_num,pulse_num1,temp_pulse_num1,delt_state,rot_slope_delt,wire_slope_delt,
18 r_sample_num,wire_sample_num,temp_rot_num[6];
19 xdata int rot_difference,rot_last_difference,rot_last_last_difference,rot_actual_difference,
20 rot_P,rot_I,rot_D;
21 unsigned int *point,rot_vp,temp_rot_vp,rot_vb,temp_rot_vb,wire_vp,temp_wire_vp,wire_vb,
22 temp_wire_vb,n_cm0,c_cm0,n_cm1,c_cm1,FINISH,temp_FINISH,delt_rot,delt_wire,motor_v;
23 unsigned int r,rot_num,new_rot_num,wire_pid_num,average_r_num,academic_num;
24 unsigned long const1;
25 float temp_data0,const0,temp_data00;
26 bit send,overtime,start,decrease,urgent_stop,rot_front,rot_reverse,wire_add,
27 wire_dec,rot_ok,wire_ok,in_sector,receive_p_out,receive_p_in,demand,need_para,
28 rot_stop,rot_stop_ok,called,p_b,new_sector,start_rot,start_wire,stop_wire,r_slope_ok,
29 w_slope_ok,retract,return_ok,retract_ok,motor_stop,auto_return,resend,ans,
30 to_begin,noans_ok,ask_return_ok,k_r_p_add,k_r_b_add,k_r_p_dec,k_r_b_dec,k22,k33,k44;
31 bit kk,rw_err,err_ok,rot_pid_ok,wire_pid_ok;
32
33 void start_t2()
34 {
35 1 TM2CON=0x85; //16位溢出,分频系数2,f/12
36 1 EA=1;
37 1 TM2IR=0;
38 1 }
39
40 void ini_sbuf(unsigned char a,b,c,d,e,f)
41 {
42 1 sbuffer[0]=a;
43 1 sbuffer[1]=b;
44 1 sbuffer[2]=c;
45 1 sbuffer[3]=d;
46 1 sbuffer[4]=e;
47 1 sbuffer[5]=f;
48 1 }
49
50 unsigned char get_byte_nums(unsigned char type)
51 {
52 1 unsigned char numbers;
53 1 switch(type)
54 1 {
55 2 case infor_sec:
C51 COMPILER V7.06 PID 09/08/2005 15:02:37 PAGE 2
56 2 case command:
57 2 case program:
58 2 case answer: numbers=4;
59 2 break;
60 2 case err_infor:
61 2 case parameter1: numbers=5;
62 2 break;
63 2 case parameter:
64 2 case infor: numbers=6;
65 2 break;
66 2 case parameter2: numbers=7;
67 2 break;
68 2 case call_result: numbers=8;
69 2 break;
70 2 case p_out_sec: numbers=55;
71 2 break;
72 2 case p_in_sec: numbers=24;
73 2 break;
74 2 case edit_sec: numbers=64;
75 2 break;
76 2 default: break;
77 2 }
78 1 return numbers;
79 1 }
80
81 void TR_noans()
82 {
83 1 noans_ok=0;
84 1 POINTER0=0;
85 1 SSUM=0;
86 1 send=1;
87 1 c_t1=0;
88 1 send_enable=1; //开发送使能
89 1 TR1=1;
90 1 while(POINTER0<s_byte_nums);
91 1 TR1=0;
92 1 send_enable=0; //关发送使能
93 1 noans_ok=1;
94 1 }
95
96 void delay(unsigned char num)
97 {
98 1 unsigned char i,ii;
99 1 for(i=0;i<num;i++)
100 1 {
101 2 for(ii=0;ii<255;ii++);
102 2 }
103 1 }
104
105 void TR_ans()
106 {
107 1 ans=1;
108 1 REN=0;
109 1 POINTER1=0;
110 1 RSUM=0;
111 1 TB8=1;
112 1 POINTER0=0;
113 1 SSUM=0;
114 1 send=1;
115 1 c_t1=0;
116 1 send_enable=1; //开发送使能
117 1 TR1=1;
C51 COMPILER V7.06 PID 09/08/2005 15:02:37 PAGE 3
118 1 while(POINTER0<s_byte_nums);
119 1 TR1=0;
120 1 send_enable=0; //关发送使能
121 1
122 1 REN=1;
123 1 send=0;
124 1 c_t1=0;
125 1 // TR1=1;
126 1 while(POINTER1<r_byte_nums&&overtime==0);
127 1 TR1=0;
128 1 if(overtime==1)
129 1 {
130 2 err=2; //通信出错
131 2 overtime=0;
132 2 }
133 1 ans=0;
134 1 }
135
136 void com_type()
137 {
138 1 switch(rbuffer[2])
139 1 {
140 2 case com_calling: called=1;break;
141 2 case com_demand: {
142 3 if(demand==0)
143 3 demand=1;
144 3 }break;
145 2 case com_need_para: need_para=1;break;
146 2 case com_start: start=1;break;
147 2 case com_rot_front: { //正转
148 3 if(rot_front==0)
149 3 rot_front=1;
150 3 }break;
151 2 case com_rot_reverse: { //反转
152 3 if(rot_reverse==0)
153 3 rot_reverse=1;
154 3 }break;
155 2 case com_wire_add: { //送丝
156 3 if(work==0)
157 3 wire_add=1;
158 3 else if(work==3)
159 3 {
160 4 if(wire_add==0&&WIRE==ON&&pp.k3==ON)
161 4 wire_add=1;
162 4 }
163 3 }break;
164 2 case com_wire_dec: { //抽丝
165 3 if(work==0)
166 3 wire_dec=1;
167 3 else if(work==3)
168 3 {
169 4 if(wire_dec==0&&WIRE==ON&&pp.k3==ON)
170 4 wire_dec=1;
171 4 }
172 3 }break;
173 2 case com_motor_stop: { //停止点动
174 3 if(motor_stop==0)
175 3 motor_stop=1;
176 3 }break;
177 2 case com_pre_melt_ok: start_rot=1;break;
178 2 case com_decrease: decrease=1;break;
179 2 case com_decrease_ok: rot_stop=1;break;
C51 COMPILER V7.06 PID 09/08/2005 15:02:37 PAGE 4
180 2 case com_wire: start_wire=1;break;
181 2 case com_stopW: stop_wire=1;break;
182 2 case com_return: auto_return=1;break;
183 2 case com_return_ok: return_ok=1;break;
184 2 case com_goto_begin: to_begin=1;break;
185 2 case com_err_ok: err_ok=1;break;
186 2 default: break;
187 2 }
188 1 }
189
190 void data_type() //对接收到的数据分辨类型
191 {
192 1 switch(rbuffer[1])
193 1 {
194 2 case command: com_type();break;
195 2 case infor: {
196 3 switch(rbuffer[2])
197 3 {
198 4 case com_sector: {
199 5 nonce_sec=rbuffer[3];
200 5 in_sector=1;
201 5 new_sector=1;
202 5 }break;
203 4 case com_wire_on_off: WIRE=rbuffer[3];break;//送丝开关
204 4 case com_delt_switch: delt_state=rbuffer[3];break;
205 4 default: break;
206 4 }
207 3 }break;
208 2 case p_out_sec: receive_p_out=1;break;
209 2 case p_in_sec: {
210 3 nonce_sec=rbuffer[2];
211 3 receive_p_in=1;
212 3 }break;
213 2 case parameter1:FINISH=rbuffer[2]*256+rbuffer[3];break;
214 2 default: break;
215 2 }
216 1 }
217
218 void get_v_r()
219 {
220 1 switch(pp.rn/256)
221 1 {
222 2 case 1: {
223 3 motor_v=6600;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -