📄 main.lst
字号:
C51 COMPILER V8.08 MAIN 01/15/2008 19:31:23 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\out-file\main.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c OPTIMIZE(9,SIZE) BROWSE DEFINE(MAKE_WITH_FREE_LIB,SYSI,USE_INTERRUPT
-S) DEBUG OBJECTEXTEND PRINT(.\list-file\main.lst) TABS(2) OBJECT(.\out-file\main.obj)
line level source
1 /************************************************************
2 Copyright (C) 1995-2002 Pumpkin, Inc. and its
3 Licensor(s). Freely distributable.
4
5 $Source: C:\\RCS\\d\\salvo\\tut\\tu6\\main.c,v $
6 $Author: aek $
7 $Revision: 3.10 $
8 $Date: 2003-07-08 23:15:13-07 $
9
10 Source for tutorial programs.
11
12 ************************************************************/
13
14 #include "main.h"
15 #include "salvo.h"
16
17 #define TASK_COUNT_P OSTCBP(1) /* task #1 */
18 #define TASK_SHOW_P OSTCBP(2) /* "" #2 */
19 #define TASK_BLINK_P OSTCBP(3) /* "" #3 */
20
21
22 #define PRIO_COUNT 12 /* task priorities*/
23 #define PRIO_SHOW 10 /* "" */
24 #define PRIO_BLINK 2 /* "" */
25 #define MSG_UPDATE_PORT_P OSECBP(1) /* semaphore #1 */
26 #define BINSEM_UPDATE_RES OSECBP(2)
27
28 unsigned int counter;
29
30 char CODE_B = 'B';
31 char CODE_C = 'C';
32
33 _OSLabel(TaskCount1)
34 _OSLabel(TaskShow1)
35 _OSLabel(TaskBlink1)
36
37
38 void TaskCount( void )
39 {
40 1 counter = 0;
41 1
42 1 for (;;)
43 1 {
44 2 OS_WaitBinSem(BINSEM_UPDATE_RES, OSNO_TIMEOUT, TaskCount1);
45 2
46 2 counter++;
47 2
48 2 OSSignalBinSem(BINSEM_UPDATE_RES);
49 2
50 2 if(counter%60==0)
51 2 //if ( !(counter & 0x01FF) )
52 2 OSSignalMsg(MSG_UPDATE_PORT_P, (OStypeMsgP) &CODE_C);
53 2
54 2 //OS_Yield(TaskCount1);
C51 COMPILER V8.08 MAIN 01/15/2008 19:31:23 PAGE 2
55 2 OS_Delay(50, TaskCount1);
56 2
57 2 }
58 1 }
59
60 void TaskShow( void )
61 {
62 1 OStypeMsgP msgP;
63 1
64 1
65 1 InitPORT();
66 1
67 1 for (;;)
68 1 {
69 2 OS_WaitMsg(MSG_UPDATE_PORT_P, &msgP, OSNO_TIMEOUT, TaskShow1);
70 2
71 2 if ( *(char *)msgP == CODE_C )
72 2 {
73 3 PORT = (PORT & ~0xFE) | ((counter >> 8) & 0xFE);
74 3 }
75 2 else
76 2 PORT ^= 0x01;
77 2
78 2 //printf ("Task show runing\n");
79 2 }
80 1 }
81
82
83 void TaskBlink( void )
84 {
85 1 OStypeErr err;
86 1
87 1 //unsigned char i;
88 1
89 1 for (;;)
90 1 {
91 2 OS_WaitBinSem(BINSEM_UPDATE_RES, OSNO_TIMEOUT, TaskBlink1);
92 2
93 2 if(counter>0)
94 2 counter--;
95 2
96 2 OSSignalBinSem(BINSEM_UPDATE_RES);
97 2
98 2
99 2 err = OSSignalMsg(MSG_UPDATE_PORT_P, (OStypeMsgP) &CODE_B);
100 2
101 2 if ( err == OSERR_EVENT_FULL )
102 2 {
103 3 OS_SetPrio(PRIO_SHOW+1, TaskBlink2);
104 3 OSSignalMsg(MSG_UPDATE_PORT_P, (OStypeMsgP) &CODE_B);
105 3 OSSetPrio(PRIO_BLINK);
106 3 }
107 2
108 2
109 2 //printf ("Task Blink runing\n");
110 2
111 2 OS_Delay(20, TaskBlink1);
112 2
113 2 //OS_Yield(TaskBlink1);
114 2
115 2
116 2 }
C51 COMPILER V8.08 MAIN 01/15/2008 19:31:23 PAGE 3
117 1 }
118
119
120
121
122 void Init_UART(void)
123 {
124 1 //SCON0 = 0x10; /* SCON: mode 1, 8-bit UART, enable rcvr */
125 1 //TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
126 1 //TH1 = 0x96; /* TH1: reload value for 19200 baud @ 49MHz */
127 1
128 1 //TR1 = 1; /* TR1: timer 1 run */
129 1 //TI0 = 1; /* TI: set TI to send first char of UART */
130 1 }
131
132
133
134
135 void Oscillator_Init()
136 {
137 1 unsigned char i;
138 1
139 1 OSCICN = 0x83;
140 1 FLSCL = 0x10;
141 1 CLKMUL = 0x80;
142 1 for (i = 0; i < 20; i++); // Wait 5us for initialization
143 1 CLKMUL |= 0xC0;
144 1 //while ((CLKMUL & 0x20) == 0);
145 1 CLKSEL = 0x02;
146 1 }
147
148
149
150 void main( void )
151 {
152 1
153 1 Oscillator_Init();
154 1
155 1 Init();
156 1
157 1 Init_UART();
158 1
159 1 OSInit();
160 1
161 1 OSCreateTask(TaskCount, TASK_COUNT_P, PRIO_COUNT);
162 1 OSCreateTask(TaskShow, TASK_SHOW_P, PRIO_SHOW);
163 1 OSCreateTask(TaskBlink, TASK_BLINK_P, PRIO_BLINK);
164 1
165 1 OSCreateMsg(MSG_UPDATE_PORT_P, (OStypeMsgP) 0);
166 1 OSCreateBinSem(BINSEM_UPDATE_RES, 1);
167 1
168 1 OSEi(); // EA = 1
169 1
170 1 for (;;)
171 1 OSSched();
172 1
173 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 298 ----
CONSTANT SIZE = ---- ----
C51 COMPILER V8.08 MAIN 01/15/2008 19:31:23 PAGE 4
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 1
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 + -