📄 demo.lst
字号:
185 1 TxBufputch(&ch);
186 1 TxStart();
187 1 }
188 /*
189 *************************************************************************************************
190 */
191 void PrintDec(INT16U dec) reentrant//十进制格式显示数据(16-bit)
192 {
193 1 INT8U a,b,c,d,e;
194 1 a=dec%10;
195 1 b=dec%100/10;
196 1 c=dec%1000/100;
197 1 d=dec%10000/1000;
198 1 e=dec/10000;
199 1 if(e!=0) PrintChar(e+'0');
200 1 if(d!=0) PrintChar(d+'0');
201 1 if(c!=0) PrintChar(c+'0');
202 1 if(b!=0) PrintChar(b+'0');
203 1 PrintChar(a+'0');
204 1 }
205 /*
206 *************************************************************************************************
207 */
208 void PrintHex(INT8U hex) reentrant//十六进制格式显示数据(8-bit)
209 {
210 1 INT8U temp;
211 1 temp=hex>>4;
212 1 if(temp>=0&&temp<=9) temp=temp+'0';
213 1 else temp=temp+'A'-10;
214 1 PrintChar(temp);
215 1 temp=hex&0x0F;
216 1 if(temp>=0&&temp<=9) temp=temp+'0';
217 1 else temp=temp+'A'-10;
218 1 PrintChar(temp);
219 1 }
220 /*
221 *************************************************************************************************
222 */
223 void PrintStr(INT8U *str) reentrant//显示字符串
224 {
225 1 INT8U temp;
226 1 do {temp=SerialStatWord&0x0C;}//Delay till Tx-Buffer empty(very important)
227 1 while(temp!=0x08);
228 1 while(*str!='\0')
229 1 {
230 2 TxBufputch(str);
231 2 str++;
232 2 }
233 1 TxStart();
234 1 }
235 /*
236 *************************************************************************************************
237 */
238 void ClrScr() reentrant//清屏
239 {
240 1 PrintStr("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
241 1 }
C51 COMPILER V7.50 DEMO 12/14/2007 08:25:27 PAGE 5
242 /*
243 *************************************************************************************************
244 */
245 #define TASK_STK_SIZE MaxStkSize//Maximum to 65535
246
247 OS_STK MyTaskStk[TASK_STK_SIZE];
248
249 void MyTask(void *ppdata) reentrant
250 {
251 1 ppdata=ppdata;
252 1 while(1)
253 1 {
254 2 ClrScr();
255 2 PrintStr("\t\t***********************************************************\n");
256 2 PrintStr("\t\t* (c) 2003 DRAGON JUBILATION ELECTRONICS Co., Ltd. *\n");
257 2 PrintStr("\t\t* All Rights Reserved *\n");
258 2 PrintStr("\t\t* THE DEMO OF 8051MCU SERIAL COMMUNICATIONS *\n");
259 2 PrintStr("\t\t* Ver 1.0(beta) *\n");
260 2 PrintStr("\t\t* *\n");
261 2 PrintStr("\t\t* ### ### ########### ######## *\n");
262 2 PrintStr("\t\t* ## ######### ### ## ### ## *\n");
263 2 PrintStr("\t\t* ########## ### ### ## ### ## *\n");
264 2 PrintStr("\t\t* ## # ####### ### ##### ### ## *\n");
265 2 PrintStr("\t\t* # # ## ### ## ## ######### *\n");
266 2 PrintStr("\t\t* ############ ######### ### ## ## ### *\n");
267 2 PrintStr("\t\t* ######## ### ### ##### ### *\n");
268 2 PrintStr("\t\t* ## ## ######## ### ## ### *\n");
269 2 PrintStr("\t\t* ######### ### ### ## ### ## *\n");
270 2 PrintStr("\t\t* ## ## ######## ########## ######## *\n");
271 2 PrintStr("\t\t* ######### ### *\n");
272 2 PrintStr("\t\t* ## ## ######## ## ## ## ## *\n");
273 2 PrintStr("\t\t* ## ## ### ## ### ### ### ### *\n");
274 2 PrintStr("\t\t* ## ## ######## ### ### ### #### *\n");
275 2 PrintStr("\t\t* *\n");
276 2 PrintStr("\t\t***********************************************************\n");
277 2 PrintStr("\t\tSerialStatWord=");PrintHex(SerialStatWord);PrintChar('\n');
278 2 OSTimeDly(0);
279 2 }
280 1 }
281
282 OS_EVENT *idata SerialSem;
283
284 OS_STK MyTaskStk_A[TASK_STK_SIZE];
285 void MyTask_A(void *ppdata) reentrant
286 {
287 1 INT8U err = 0xff;
288 1 OS_SEM_DATA SemData;
289 1 ppdata=ppdata;
290 1 while (1)
291 1 {
292 2 OSSemQuery(SerialSem, &SemData);
293 2 printf("\n\rHello, world");
294 2 OSSemPend(SerialSem, 2*OS_TICKS_PER_SEC, &err);
295 2 if (err == OS_ERR_NONE)
296 2 {
297 3 PrintStr("\n\tOS_ERR_NONE I am MyTask_A");
298 3 }
299 2 else if (err == OS_ERR_TIMEOUT)
300 2 {
301 3 PrintStr("\n\OS_ERR_TIMEOUT I am MyTask_A");
302 3
303 3 }
C51 COMPILER V7.50 DEMO 12/14/2007 08:25:27 PAGE 6
304 2 else
305 2 {
306 3 PrintStr("\n\I am MyTask_A");
307 3 }
308 2 //OSTimeDly(1*OS_TICKS_PER_SEC);
309 2
310 2 }
311 1 }
312
313 OS_STK MyTaskStk_B[TASK_STK_SIZE];
314 void MyTask_B(void *ppdata) reentrant
315 {
316 1 ppdata=ppdata;
317 1 while (1)
318 1 {
319 2 OSTimeDly(8*OS_TICKS_PER_SEC);
320 2 PrintStr("\n\t I am MyTask_B");
321 2 OSSemPost(SerialSem);
322 2
323 2 }
324 1 }
325
326 OS_STK MyTaskStk_C[TASK_STK_SIZE];
327 void MyTask_C(void *ppdata) reentrant
328 {
329 1 INT8U err;
330 1 ppdata=ppdata;
331 1 while (1)
332 1 {
333 2 OSSemPend(SerialSem, 0, &err);
334 2 //OSSemAccept(SerialSem);
335 2 PrintStr("\n\t I am MyTask_C");
336 2 OSTimeDly(2*OS_TICKS_PER_SEC);
337 2 }
338 1 }
339 /*
340 *************************************************************************************************
341 */
342 void InitTimer0(void) reentrant; // simon add
343
344
345 main()
346 {
347 1 OSInit();
348 1
349 1 InitTimer0(); //simon add
350 1
351 1 SerialSem = OSSemCreate(0);
352 1 SerialBufCreate();
353 1 SerialInit(SERIAL_MODE0,SERIAL_BAUDRATE3);
354 1 //OSTaskCreate(MyTask, (void *)0, &MyTaskStk[0],0);
355 1
356 1 OSTaskCreate(MyTask_A, (void *)0, &MyTaskStk_A[0],4);
357 1 OSTaskCreate(MyTask_B, (void *)0, &MyTaskStk_B[0],5);
358 1 OSTaskCreate(MyTask_C, (void *)0, &MyTaskStk_C[0],6);
359 1
360 1 OSStart();
361 1 }
362
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V7.50 DEMO 12/14/2007 08:25:27 PAGE 7
CODE SIZE = 2115 ----
CONSTANT SIZE = 1426 ----
XDATA SIZE = 1008 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = 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 + -