📄 ext1.lst
字号:
C51 COMPILER V7.06 EXT1 05/25/2004 14:50:46 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE EXT1
OBJECT MODULE PLACED IN .\output\ext1.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ext1.c OPTIMIZE(6,SPEED) BROWSE ORDER DEBUG OBJECTEXTEND PRINT(.\output\ext
-1.lst) OBJECT(.\output\ext1.obj)
stmt level source
1 /*********************************************************************************************************
2 ** Small RTOS(51)
3 ** The Real-Time Kernel(For Keil c51)
4 **
5 ** (c) Copyright 2002-2003, chenmingji
6 ** All Rights Reserved
7 **
8 ** V1.12.0
9 **
10 **
11 **--------------文件信息--------------------------------------------------------------------------------
12 **文 件 名: ext1.c
13 **创 建 人: 陈明计
14 **最后修改日期: 2002年12月30日
15 **描 述: ext1源代码。
16 **
17 **--------------历史版本信息----------------------------------------------------------------------------
18 ** 创建人: 陈明计
19 ** 版 本: V0.50
20 ** 日 期: 2002年2月22日
21 ** 描 述: 原始版本
22 **
23 **------------------------------------------------------------------------------------------------------
24 ** 修改人: 陈明计
25 ** 版 本: V1.11.0
26 ** 日 期: 2003年12月2日
27 ** 描 述: 删除TaskD代码
28 **
29 **------------------------------------------------------------------------------------------------------
30 ** 修改人: 陈明计
31 ** 版 本: V1.12.0
32 ** 日 期: 2003年12月2日
33 ** 描 述: 无变化
34 **
35 **--------------当前版本修订------------------------------------------------------------------------------
36 ** 修改人:
37 ** 日 期:
38 ** 描 述:
39 **
40 **------------------------------------------------------------------------------------------------------
41 ********************************************************************************************************/
42
43 #include "config.h"
44 void config();
45 /*********************************************************************************************************
46 ** 函数名称: ConfigMe
47 ** 功能描述: 系统配置如果是第一次使用将所有参数初始化,DA置为0
48 ** 输 入: 无
49 ** 输 出: 无
50 ** 全局变量:
51 ** 调用模块: OSSemPend OSSemPost
52 **
53 ** 作 者: 刘宝贵
54 ** 日 期: 2004年5月23日
C51 COMPILER V7.06 EXT1 05/25/2004 14:50:46 PAGE 2
55 **-------------------------------------------------------------------------------------------------------
56 ** 修改人:
57 ** 日 期:
58 **-------------------------------------------------------------------------------------------------------
59 *********************************************************************************************************/
60 void ConfigMe()//manual config
61 {
62 1 uint8 code buftemp[]={"Coslight~LiuBG"};
63 1 uint8 data i;
64 1 bit first_use = 0;
65 1 for(i=0;i<14;i++)
66 1 {
67 2 if(OSSemPend(IICSem,50)==OS_SEM_OK)
68 2 {
69 3 if(buftemp[i] != EepromReadByte(CoslightIICBase+i) )
70 3 {
71 4 first_use=1;
72 4 EepromWriteByte(CoslightIICBase+i,buftemp[i]);
73 4 }
74 3 OSSemPost(IICSem);
75 3 }
76 2
77 2 }
78 1 if(first_use)
79 1 {
80 2
81 2 if(OSSemPend(IICSem,50)==OS_SEM_OK)
82 2 {
83 3 for(i=0;i<24*8;i++)
84 3 {
85 4 EepromWriteWord(CellParaIICBase+i*2,5000);
86 4 }
87 3 OSSemPost(IICSem);
88 3 }
89 2 }
90 1 ClearDA();
91 1 SumWorkStep = EepromReadByte(SumWorkStepIICBase);
92 1 CurrentWorkStep = EepromReadByte(CurrentWorkStepIICBase);
93 1 EepromWriteByte(SumWorkStepIICBase,SumWorkStep);
94 1 for(i=1;i<=SumWorkStep;i++)
95 1 {
96 2 WorkStep[i].type = EepromReadByte(WorkStepIICBase + i*7 + 0);
97 2 WorkStep[i].i = EepromReadWord(WorkStepIICBase + i*7 + 1);
98 2 WorkStep[i].limit = EepromReadWord(WorkStepIICBase + i*7 + 3);
99 2 WorkStep[i].t = EepromReadWord(WorkStepIICBase + i*7 + 5);
100 2 }
101 1 WorkStepCheck();
102 1 for(i=0;i<24;i++)
103 1 {
104 2 Cell[i].c = EepromReadWord(Cell_CIICBase+i*4+0);
105 2 Cell[i].c = Cell[i].c<<16;
106 2 Cell[i].c |=EepromReadWord(Cell_CIICBase+i*4+2);
107 2
108 2 Cell[i].t = EepromReadWord(Cell_TIICBase + i*2);
109 2
110 2 Cell[i].s = EepromReadWord(Cell_SIICBase + i);
111 2 }
112 1 }
113 /*********************************************************************************************************
114 ** 函数名称: 给所有DA通道赋值
115 ** 功能描述: 系统配置如果是第一次使用将所有参数初始化,DA置为0
116 ** 输 入: 无
C51 COMPILER V7.06 EXT1 05/25/2004 14:50:46 PAGE 3
117 ** 输 出: 无
118 ** 全局变量: DAIBuf[] DAUBuf[] WorkStep[] CurrentWorkStep
119 ** 调用模块: OSSemPend OSSemPost EepromReadWord
120 **
121 ** 作 者: 刘宝贵
122 ** 日 期: 2004年5月23日
123 **-------------------------------------------------------------------------------------------------------
124 ** 修改人:
125 ** 日 期:
126 **-------------------------------------------------------------------------------------------------------
127 *********************************************************************************************************/
128 void SetupDA(void)
129 {
130 1 uint8 data i;
131 1 uint32 xdata temp32;
132 1 for(i=0;i<24;i++)
133 1 {
134 2 temp32 = WorkStep[CurrentWorkStep].i;
135 2 temp32 *= 4096;
136 2 temp32 /= 2500;
137 2
138 2 OSSemPend(IICSem,0);
139 2 temp32 *= EepromReadWord(CellParaIICBase+i*2+6);
140 2 OSSemPost(IICSem);
141 2
142 2 temp32 /= 5000;
143 2 DAIBuf[i] = (uint16)temp32;
144 2
145 2 temp32 = 4096 * 2100 / 2500;
146 2
147 2 OSSemPend(IICSem,0);
148 2 temp32*=EepromReadWord(CellParaIICBase+i*2+4);
149 2 OSSemPost(IICSem);
150 2
151 2 temp32/=5000;
152 2 DAUBuf[i] = (uint16)temp32;
153 2 }
154 1 }
155 /*********************************************************************************************************
156 ** 函数名称: main
157 ** 功能描述: 主函数
158 ** 输 入: 无
159 ** 输 出: 无
160 ** 全局变量:
161 ** 调用模块: OSStart() config()
162 **
163 ** 作 者: 刘宝贵
164 ** 日 期: 2004年5月23日
165 **-------------------------------------------------------------------------------------------------------
166 ** 修改人:
167 ** 日 期:
168 **-------------------------------------------------------------------------------------------------------
169 *********************************************************************************************************/
170 void main(void)
171 {
172 1 config();//auto config
173 1 ConfigMe();
174 1 TR0 = 1;
175 1 Address=1;
176 1 OSStart();
177 1 }
178 /*********************************************************************************************************
C51 COMPILER V7.06 EXT1 05/25/2004 14:50:46 PAGE 4
179 ** 函数名称: TaskADDA
180 ** 功能描述: AD DA
181 ** 输 入: 无
182 ** 输 出: 无
183 ** 全局变量: AdBuf Cell
184 ** 调用模块: midst OSWait
185 **
186 ** 作 者: 刘宝贵
187 ** 日 期: 2004年4月28日
188 **-------------------------------------------------------------------------------------------------------
189 ** 修改人:
190 ** 日 期:
191 **-------------------------------------------------------------------------------------------------------
192 *********************************************************************************************************/
193 void TaskAD(void)
194 {
195 1 uint8 data i;
196 1 uint16 xdata u_ad_para[24];
197 1 uint16 xdata i_ad_para[24];
198 1 for(i=0;i<240;i++)
199 1 {
200 2 ADBuf[i]=0;
201 2 }
202 1 if(OSSemPend(IICSem,0)==OS_SEM_OK)
203 1 {
204 2 for(i=0;i<24;i++)
205 2 {
206 3 u_ad_para[i] = EepromReadWord(CellParaIICBase+i*2+0);
207 3 i_ad_para[i] = EepromReadWord(CellParaIICBase+i*2+2);
208 3 }
209 2 OSSemPost(IICSem);
210 2 }
211 1 OSWait(K_SIG,0);//每采一圈由中断发信号,处理一次。
212 1 while (1)
213 1 {
214 2 for(i=0;i<24;i++)
215 2 {
216 3 uint32 xdata temp32;
217 3 OS_ENTER_CRITICAL();
218 3 temp32 = (midst(&ADBuf[i*5],5)*u_ad_para[i])/5000;
219 3 Cell[i].u = 4100+i;//(uint16)(temp32>>16);
220 3 temp32 = (midst(&ADBuf[i*5],5)*i_ad_para[i])/5000;
221 3 Cell[i].i = 1000;//(uint16)(temp32>>16);
222 3 OS_EXIT_CRITICAL();
223 3 }
224 2 OSWait(K_SIG,0);//每采一圈由中断发信号,处理一次。
225 2 }
226 1 }
227 /*********************************************************************************************************
228 ** 函数名称: TaskWorkStep
229 ** 功能描述: 工步处理
230 ** 输 入: 无
231 ** 输 出: 无
232 ** 全局变量:
233 ** 调用模块: ClearDA
234 **
235 ** 作 者: 刘宝贵
236 ** 日 期: 2004年4月28日
237 **-------------------------------------------------------------------------------------------------------
238 ** 修改人:
239 ** 日 期:
240 **-------------------------------------------------------------------------------------------------------
C51 COMPILER V7.06 EXT1 05/25/2004 14:50:46 PAGE 5
241 *********************************************************************************************************/
242 void TaskWorkStep(void)
243 {
244 1 uint8 i;
245 1 OSSemCreate(IICSem,1); //实现IIC总线的互斥
246 1 OSSemCreate(StartWorkStepSem,1);//工步报文下发与工步执行同步
247 1 while (1)
248 1 {
249 2 TaskWorkStepBegin:
250 2 OSSemPend(StartWorkStepSem,0);
251 2 for(;CurrentWorkStep <= SumWorkStep; CurrentWorkStep++)
252 2 {
253 3 switch(WorkStep[CurrentWorkStep].type)
254 3 {
255 4 case 0://停止
256 4 {
257 5 ClearDA();
258 5 WorkStepInit(STOP);
259 5 goto TaskWorkStepBegin;
260 5 }break;
261 4 case 1://静置
262 4 {
263 5 ClearDA();
264 5 WorkStepInit(HALT);
265 5 while(WorkStep[CurrentWorkStep].t > Second)
266 5 OSWait(K_TMO,(50*OS_TICKS_PER_SEC)/1000);
267 5 }break;
268 4 case 2://充电
269 4 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -