📄 ctl.lst
字号:
C51 COMPILER V7.50 CTL 11/10/2008 15:53:31 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE CTL
OBJECT MODULE PLACED IN CTL.OBJ
COMPILER INVOKED BY: E:\II\Software\Keil\C51\BIN\C51.EXE CTL.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 /*
3 ****************************************************
4
5
6 ****************************************************
7 */
8
9
10 #include <reg52.H>
11 #include <rtx51tny.h>
12
13 #include "Typedef.H"
14 #include "UserDef.H"
15
16 #include "disp.h"
17 #include "LTC1860.h"
18 #include <math.h>
19
20 /* */
21 #define T_SELECT 100 // 采样周期
22 #define T_DRV 100 // 控制驱动输出周期
23
24 #define ADSET 1500
25
26 /* 私有全局变量 */
27 static INT8U sig_targ; // 显示任务的任务号
28
29 static xdata float Kp=1; // PID 系数
30 static xdata float Ki=0.1; // PID 系数 Kp*Ts/Ti
31 static xdata float Kd=1; // PID 系数 Kp*Td/Ts
32
33 static xdata float Yn=0; // PID Yn
34 static xdata float SumE=0;
35
36 /* 端口 */
37 sbit P_Drv = P3^0; // 输出端口
38
39
40 void PID(INT32U ADCur,INT32U ADSet);
41
42 /***************************************************
43
44
45
46 ****************************************************/
47 static void TaskCTL(void) _task_ TASK_CTL
48 {
49 1 INT32S ni;
50 1 INT16U ADn;
51 1
52 1 /* 显示界面固定文字显示 */
53 1 DISP_REQ;
54 1 dm.x = 0;
55 1 dm.y = 0;
C51 COMPILER V7.50 CTL 11/10/2008 15:53:31 PAGE 2
56 1 dm.font = 1;
57 1 dm.DData = "Set="; //
58 1 dm.type = DTYPE_STR;
59 1 os_send_signal(sig_targ);
60 1
61 1 DISP_REQ;
62 1 dm.x = 2;
63 1 dm.y = 0;
64 1 dm.font = 1;
65 1 dm.DData = "Cur="; //
66 1 dm.type = DTYPE_STR;
67 1 os_send_signal(sig_targ);
68 1
69 1 while (1)
70 1 {
71 2 os_wait(K_TMO,T_SELECT,0); //采样周期
72 2
73 2 /* 采样 */
74 2 ADn = LTC1860();
75 2
76 2 DISP_REQ;
77 2 dm.x = 0;
78 2 dm.y = 50;
79 2 dm.font = 1;
80 2 ni = ADSET;
81 2 dm.DData = ∋
82 2 dm.len = 4;
83 2 dm.type = DTYPE_INT32S;
84 2 os_send_signal(sig_targ);
85 2
86 2 DISP_REQ;
87 2 dm.x = 2;
88 2 dm.y = 50;
89 2 dm.font = 1;
90 2 ni = ADn;
91 2 dm.DData = ∋
92 2 dm.len = 4;
93 2 dm.type = DTYPE_INT32S;
94 2 os_send_signal(sig_targ);
95 2
96 2 PID(ADn,ADSET);
97 2
98 2 DISP_REQ;
99 2 dm.x = 4;
100 2 dm.y = 50;
101 2 dm.font = 1;
102 2 dm.DData = &Yn;
103 2 dm.len = 4;
104 2 dm.type = DTYPE_FLOAT;
105 2 os_send_signal(sig_targ);
106 2
107 2 }
108 1 }
109
110 /***************************************************
111
112
113
114 ****************************************************/
115 static void TaskDRV(void) _task_ TASK_DRV
116 {
117 1 INT8U tOut;
C51 COMPILER V7.50 CTL 11/10/2008 15:53:31 PAGE 3
118 1
119 1 P_Drv = 1;
120 1
121 1 while (1)
122 1 {
123 2 P_Drv = 0;
124 2 tOut = (INT8U)(Yn * T_DRV);
125 2 os_wait(K_TMO,tOut,0); //
126 2
127 2 P_Drv = 1;
128 2 os_wait(K_TMO,T_DRV - tOut,0); //
129 2 }
130 1 }
131
132
133 /***************************************************
134
135 任务创建函数
136
137 signal_target_task 接收键盘信号的任务编号
138
139 ****************************************************/
140 void TaskCreate_CTL(INT8U signal_target_task)
141 {
142 1 sig_targ = signal_target_task;
143 1 os_create_task(TASK_CTL);
144 1 os_create_task(TASK_DRV);
145 1 }
146
147
148
149
150 /***************************************************
151
152
153
154
155
156 ****************************************************/
157 void PID(INT32U ADCur,INT32U ADSet)
158 {
159 1 xdata float Uk;
160 1 xdata float Ek;
161 1 xdata INT32S dlt;
162 1 static xdata float Ek_1;
163 1
164 1 dlt = (INT32S)ADSet - (INT32S)ADCur;
165 1 Ek = (float)dlt;
166 1
167 1 //PID运算
168 1 SumE += Ek;
169 1
170 1 // 抗积分饱和(积分分离)
171 1 if (abs(dlt) > 200)
172 1 {
173 2 SumE = 0; //积分遗忘
174 2 }
175 1
176 1 Uk = Kp*Ek + Ki*SumE + Kd*(Ek-Ek_1);
177 1
178 1 //饱和限幅
179 1 if (Uk > 100)
C51 COMPILER V7.50 CTL 11/10/2008 15:53:31 PAGE 4
180 1 Uk = 100;
181 1 else if (Uk < 0)
182 1 Uk = 0;
183 1
184 1 Ek_1 = Ek;
185 1 Yn = Uk/100.0;
186 1 }
187
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 759 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = 24 12
PDATA SIZE = ---- ----
DATA SIZE = 1 15
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 + -