📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 07/07/2005 22:40:45 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN Main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Main.c LARGE OPTIMIZE(SIZE) REGFILE(.\OS_AT89C5x.ORC) BROWSE NOINTPROMOTE D
-EBUG OBJECTEXTEND
stmt level source
1 /*
2 *********************************************************************************************************
3 * uC/OS-II
4 * The Real-Time Kernel
5 *
6 * (c) Copyright 1992-2002, Jean J. Labrosse, Weston, FL
7 * All Rights Reserved
8 *
9 * AT89C/S5x Specific Code
10 * LARGE MEMORY MODEL
11 *
12 * Keil C/C++ V7.09
13 *
14 * 文件名 : Main.C
15 * 作者 : 华歆 Huaxin@wxzte.com 中兴光电子 研发一部 2005-07-07 22:40
16 ; 功能 : uC/OS-II在MCS51微控制器上的移植试验
17 *********************************************************************************************************
18 */
19
20 #ifndef OS_MASTER_FILE
21 #include "includes.h"
22 #endif
23
24 void TestTask1(void *os_pdata) reentrant;
25 void TestTask2(void *os_pdata) reentrant;
26 void TestTask3(void *os_pdata) reentrant;
27 void TestTask4(void *os_pdata) reentrant;
28
29 OS_STK TestTask1Stk[MaxStkSize];
30 OS_STK TestTask2Stk[MaxStkSize];
31 OS_STK TestTask3Stk[MaxStkSize];
32 OS_STK TestTask4Stk[MaxStkSize];
33
34 void InitS0 ( INT16U baud_rate ) reentrant
35 {
36 1 ES = 0;
37 1 SCON = 0x50;
38 1 TMOD |= 0x20;
39 1 TR1 = 1;
40 1 PCON = PCON&0x7f;
41 1 switch( baud_rate ){
42 2 case 1200:
43 2 TL1 = 0xe8; TH1 = 0xe8; break;
44 2 case 2400:
45 2 TL1 = 0xf4; TH1 = 0xf4; break;
46 2 case 4800:
47 2 TL1 = 0xfa; TH1 = 0xfa; break;
48 2 case 9600:
49 2 TL1 = 0xfd; TH1 = 0xfd; break;
50 2 case 19200:
51 2 PCON = PCON|0x80; TL1 = 0xfd; TH1 = 0xfd; break;
52 2 case 38400:
53 2 PCON = PCON|0x80; TL1 = 0xfe; TH1 = 0xfe; break;
54 2 default:
C51 COMPILER V7.06 MAIN 07/07/2005 22:40:45 PAGE 2
55 2 TL1 = 0xfd; TH1 = 0xfd; break;
56 2 }
57 1 }
58 //********************************************************************************************************
59 //
60 // 设置时钟节拍中断函数_?OSTickISR的tick率
61 // NOTE: 1: 一般tick率为10-100次/秒;
62 // 2: 特别注意不要在这里启动时钟节拍!!!
63 // 3: 最好在第一个任务(优先级最高的任务)里启动tick时钟节拍
64 // 4: 尽量不要更改中断优先级寄存器IP的低2位,当INT0与T0同级时就会影响到正常tick
65 //
66 //********************************************************************************************************
67 void InitTick ( void ) reentrant
68 {
69 1 TMOD |= 0x01;
70 1 TH0 = 0xb8;
71 1 TL0 = 0x00;
72 1 TI = 1;
73 1 IP = 0x02;
74 1 ET0 = 1;
75 1 EA = 1;
76 1 TR0 = 1;
77 1 }
78
79 void main (void)
80 {
81 1 OSInit();
82 1 Comm_Port=0;
83 1 P12887a=0x20;
84 1 Lcd1602Init();
85 1
86 1 OSTaskCreate (TestTask1,(void *)0, &TestTask1Stk[0], 1);
87 1 OSTaskCreate (TestTask2,(void *)0, &TestTask2Stk[0], 2);
88 1 OSTaskCreate (TestTask3,(void *)0, &TestTask3Stk[0], 3);
89 1 OSTaskCreate (TestTask4,(void *)0, &TestTask4Stk[0], 4);
90 1
91 1 OSStart();
92 1 }
93
94 void TestTask1 (void *os_pdata) reentrant
95 {
96 1 os_pdata = os_pdata;
97 1
98 1 InitS0(9600);
99 1 InitTick();
100 1
101 1 while (1)
102 1 {
103 2 printf ("TASK-1\n");
104 2 OSTimeDly(OS_TICKS_PER_SEC);
105 2 }
106 1
107 1 }
108
109 INT8S idata LogoStr[]=" This is a Test Program Designed by Huaxin.";
110
111 void TestTask2(void *os_pdata) reentrant
112 {
113 1 INT8U *cp;
114 1 cp=LogoStr;
115 1 os_pdata = os_pdata;
116 1
C51 COMPILER V7.06 MAIN 07/07/2005 22:40:45 PAGE 3
117 1 while(1)
118 1 {
119 2 Lcd1602Clr(2);
120 2 Lcd1602DispStr(1,2,cp);
121 2 printf ("TASK-2\n");
122 2 OSTimeDly(OS_TICKS_PER_SEC/2);
123 2 cp++;
124 2 if(*cp=='\0')
125 2 {
126 3 cp=LogoStr;
127 3 }
128 2 }
129 1 }
130
131 void TestTask3(void *os_pdata) reentrant
132 {
133 1 os_pdata = os_pdata;
134 1
135 1 while(1)
136 1 {
137 2 Lcd1602Clr(1);
138 2 OSTimeDly(OS_TICKS_PER_SEC/5);
139 2 Lcd1602DispStr(2,1,"uC/OS-II");
140 2 Lcd1602DispCha(10, 1, ' ');
141 2 Lcd1602DispStr(11,1,"V2.52");
142 2 printf ("TASK-3\n");
143 2 OSTimeDly(OS_TICKS_PER_SEC/5);
144 2 }
145 1 }
146
147 void TestTask4(void *os_pdata) reentrant
148 {
149 1 os_pdata = os_pdata;
150 1
151 1 while(1)
152 1 {
153 2 LED=0;
154 2 OSTimeDly(OS_TICKS_PER_SEC/2);
155 2 LED=1;
156 2 printf ("TASK-4\n");
157 2 OSTimeDly(OS_TICKS_PER_SEC/2);
158 2 }
159 1 }
160
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 680 ----
CONSTANT SIZE = 47 ----
XDATA SIZE = 2048 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = 59 ----
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 + -