📄 os_etos.lst
字号:
80 C CLEAR_ALL_RAM
81 C ioc 0
82 C mov a,@0x01
83 C contw
84 C mov a,@0x00
85 C iow 0x05
86 C mov a,@0x01 ; p60 for detect input
87 C iow 0x06
88 C mov a,@0x00
89 C iow 0x07
90 C mov a,@0x31 ; wdtc
91 C iow ioce
92 C mov a,@0x01 ; TCC enable
93 C iow iocf
94 C clra
95 C mov p5,a
96 C mov p6,a
97 C mov p7,a
98 C
99 C ;-----------------------------------------------------------------
100 C reg_init:
101 C mov a,@0xa0
102 C mov disp_fun2,a
103 C bs Mode,RUN
104 C
105 C ret
106 C
107 C ENDIF
64 include "OS_TASK.dt"
1 C /*
2 C *********************************************************************************************************
3 C * 任务调度操作
4 C *
5 C * 功能 : 根据任务队列(TaskQueue)对相应的任务,根据优先级切换到相应的任务。
6 C *
7 C * 入口参数 : none 每个大循环执行一次任务调度
8 C *
9 C * 出口参数 : none
10 C *********************************************************************************************************
11 C */
12 0004E C OSTaskSchedule:
13 0004E 18F8 C mov a,@0xf8 ; 清除任务的ID号
14 0004F 02DE C and OSFlag,a
15 00050 C Sch0:
16 00050 0E1F C jbs TaskQueue,0
17 00051 1458 C jmp Sch1
18 00052 1800 C mov a,@0 ; OSFlag中记录当前执行的任务ID
19 00053 025E C or OSFlag,a
20 00054 00E1 C clr ShieldQueue
21 00055 0A21 C bs ShieldQueue,0 ; 蒙板操作
22 00056 14CF C jmp Task0 ; 调用第一个任务
23 00057 C Sch0_end:
24 00057 1492 C jmp OSTaskSch_end
25 00058 C Sch1:
26 00058 0E5F C jbs TaskQueue,1
27 00059 1460 C jmp Sch2
28 0005A 1801 C mov a,@1
29 0005B 025E C or OSFlag,a
30 0005C 00E1 C clr ShieldQueue
31 0005D 0A61 C bs ShieldQueue,1
32 0005E 14DB C jmp Task1
33 0005F C Sch1_end:
34 0005F 1492 C jmp OSTaskSch_end
35 00060 C Sch2:
36 00060 0E9F C jbs TaskQueue,2
37 00061 1468 C jmp Sch3
38 00062 1802 C mov a,@2
39 00063 025E C or OSFlag,a
40 00064 00E1 C clr ShieldQueue
41 00065 0AA1 C bs ShieldQueue,2
42 00066 14E7 C jmp Task2
43 00067 C Sch2_end:
44 00067 1492 C jmp OSTaskSch_end
45 00068 C Sch3:
46 00068 0EDF C jbs TaskQueue,3
47 00069 1470 C jmp Sch4
48 0006A 1803 C mov a,@3
49 0006B 025E C or OSFlag,a
50 0006C 00E1 C clr ShieldQueue
51 0006D 0AE1 C bs ShieldQueue,3
52 0006E 14F3 C jmp Task3
53 0006F C Sch3_end:
54 0006F 1492 C jmp OSTaskSch_end
55 00070 C Sch4:
56 00070 0F1F C jbs TaskQueue,4
57 00071 1478 C jmp Sch5
58 00072 1804 C mov a,@4
59 00073 025E C or OSFlag,a
60 00074 00E1 C clr ShieldQueue
61 00075 0B21 C bs ShieldQueue,4
62 00076 14F5 C jmp Task4
63 00077 C Sch4_end:
64 00077 1492 C jmp OSTaskSch_end
65 00078 C Sch5:
66 00078 0F5F C jbs TaskQueue,5
67 00079 1480 C jmp Sch6
68 0007A 1805 C mov a,@5
69 0007B 025E C or OSFlag,a
70 0007C 00E1 C clr ShieldQueue
71 0007D 0B61 C bs ShieldQueue,5
72 0007E 14F7 C jmp Task5
73 0007F C Sch5_end:
74 0007F 1492 C jmp OSTaskSch_end
75 00080 C Sch6:
76 00080 0F9F C jbs TaskQueue,6
77 00081 1488 C jmp Sch7
78 00082 1806 C mov a,@6
79 00083 025E C or OSFlag,a
80 00084 00E1 C clr ShieldQueue
81 00085 0BA1 C bs ShieldQueue,6
82 00086 14F9 C jmp Task6
83 00087 C Sch6_end:
84 00087 1492 C jmp OSTaskSch_end
85 00088 C Sch7:
86 00088 0FDF C jbs TaskQueue,7
87 00089 1490 C jmp Sch_Idle
88 0008A 1807 C mov a,@7
89 0008B 025E C or OSFlag,a
90 0008C 00E1 C clr ShieldQueue
91 0008D 0BE1 C bs ShieldQueue,7
92 0008E 14FB C jmp Task7
93 0008F C Sch7_end:
94 0008F 1492 C jmp OSTaskSch_end
95 00090 C Sch_Idle: ; 如果任务队列为空则进入空闲任务
96 00090 14FD C jmp OSTaskIdle
97 00091 C Sch_Idle_end:
98 00091 0000 C nop
99 00092 C OSTaskSch_end:
100 00092 1509 C jmp schedule_end
101 C
102 C
103 C /*
104 C *********************************************************************************************************
105 C * 生成任务操作
106 C *
107 C * 功能 : 将任务队列(TaskQueue)相应的位置1实现生成任务,将任务加入调度。
108 C *
109 C * 入口参数 : a
110 C *
111 C * 出口参数 : none
112 C *********************************************************************************************************
113 C */
114 00093 C OSTaskCreat:
115 00093 18FF C mov a,@0xff
116 00094 005F C mov TaskQueue,a
117 00095 0012 C ret
118 C
119 C
120 C /*
121 C *********************************************************************************************************
122 C * 自我删除任务
123 C *
124 C * 功能 : 将任务队列(TaskQueue)中任务相应的位置0,将等待队列(WaitQueue)中相应的位置0
125 C *
126 C * 入口参数 : none
127 C *
128 C * 出口参数 : none
129 C *********************************************************************************************************
130 C */
131 00096 C OSTaskDel:
132 00096 04A1 C coma ShieldQueue ; 蒙板中记录的是当前任务的位置
133 00097 02DF C and TaskQueue,a ; 将本任务从任务队列中削去
134 00098 02E0 C and WaitQueue,a ; 将本任务从等待队列中削去
135 00099 0012 C ret
136 C
137 C /*
138 C *********************************************************************************************************
139 C * 任务切换操作
140 C *
141 C * 功能 : 用于手动的,不参与OSTimeDly调度的任务切换。
142 C *
143 C * 入口参数 : a
144 C *
145 C * 出口参数 : none
146 C *********************************************************************************************************
147 C */
148 0009A C OSTaskChange:
149 C /*
150 C mov OSTemp0,a
151 C mov a,TaskQueue
152 C or a,Operand0 ; Enable
153 C and a,OSTemp0 ; Disable
154 C mov TaskQueue,a
155 C */
156 0009A 0012 C ret
65 include "OS_TIME.dt"
1 C /*
2 C *********************************************************************************************************
3 C * 时间延时操作 (n 从 0 到 255)
4 C *
5 C * 功能 : 系统定时程序,如果延时为0,则不进行操作
6 C *
7 C * 入口参数 : a a存放需要定时的OSTick个数,每个OSTick为 4ms
8 C * 4ms*a = delay time
9 C * 例如:
10 C * mov a,@5
11 C *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -