📄 2_01_12g.lst
字号:
49 void SCH_Init_T2(void)
50 {
51 1 tByte i;
52 1
53 1 for (i = 0; i < SCH_MAX_TASKS; i++)
54 1 {
55 2 SCH_Delete_Task(i);
56 2 }
57 1
58 1 // Reset the global error variable
59 1 // - SCH_Delete_Task() will generate an error code,
60 1 // (because the task array is empty)
61 1 Error_code_G = 0;
62 1
63 1 // Now set up Timer 2
64 1 // 16-bit timer function with automatic reload
65 1
66 1 // Crystal is assumed to be 12 MHz
67 1 // The Timer 2 resolution is 0.000001 seconds (1 祍)
68 1 // The required Timer 2 overflow is 0.001 seconds (1 ms)
69 1 // - this takes 1000 timer ticks
70 1 // Reload value is 65536 - 1000 = 64536 (dec) = 0xFC18
71 1
72 1 T2CON = 0x04; // load Timer 2 control register
73 1 T2MOD = 0x00; // load Timer 2 mode register
74 1
75 1 TH2 = 0xFC; // load timer 2 high byte
76 1 RCAP2H = 0xFC; // load timer 2 reload capture reg, high byte
77 1 TL2 = 0x18; // load timer 2 low byte
78 1 RCAP2L = 0x18; // load timer 2 reload capture reg, low byte
79 1
80 1 ET2 = 1; // Timer 2 interrupt is enabled
81 1
82 1 TR2 = 1; // Start Timer 2
83 1 }
84
85
86 /*------------------------------------------------------------------*-
87
88 SCH_Start()
89
90 Starts the scheduler, by enabling interrupts.
91
92 NOTE: Usually called after all regular tasks are added,
93 to keep the tasks synchronised.
94
95 NOTE: ONLY THE SCHEDULER INTERRUPT SHOULD BE ENABLED!!!
96
97 -*------------------------------------------------------------------*/
98 void SCH_Start(void)
99 {
100 1 EA = 1;
101 1 }
102
103 /*------------------------------------------------------------------*-
104
105 SCH_Update()
106
107 This is the scheduler ISR. It is called at a rate
108 determined by the timer settings in the 'init' function.
109
110 This version is triggered by Timer 2 interrupts:
C51 COMPILER V8.05a 2_01_12G 06/07/2007 19:40:26 PAGE 12
111 timer is automatically reloaded.
112
113 -*------------------------------------------------------------------*/
114 void SCH_Update(void) interrupt INTERRUPT_Timer_2_Overflow
115 {
116 1 tByte Index;
117 1
118 1 TF2 = 0; // Have to manually clear this.
119 1
120 1 // NOTE: calculations are in *TICKS* (not milliseconds)
121 1 for (Index = 0; Index < SCH_MAX_TASKS; Index++)
122 1 {
123 2 // Check if there is a task at this location
124 2 if (SCH_tasks_G[Index].pTask)
125 2 {
126 3 if (SCH_tasks_G[Index].Delay == 0)
127 3 {
128 4 // The task is due to run
129 4 SCH_tasks_G[Index].RunMe += 1; // Inc. the 'RunMe' flag
130 4
131 4 if (SCH_tasks_G[Index].Period)
132 4 {
133 5 // Schedule regular tasks to run again
134 5 SCH_tasks_G[Index].Delay = SCH_tasks_G[Index].Period;
135 5 }
136 4 }
137 3 else
138 3 {
139 4 // Not yet ready to run: just decrement the delay
140 4 SCH_tasks_G[Index].Delay -= 1;
141 4 }
142 3 }
143 2 }
144 1 }
145
146
147 /*------------------------------------------------------------------*-
148 ---- END OF FILE -------------------------------------------------
149 -*------------------------------------------------------------------*/
150
C51 COMPILER V8.05a 2_01_12G 06/07/2007 19:40:26 PAGE 13
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION SCH_Init_T2 (BEGIN)
; SOURCE LINE # 49
; SOURCE LINE # 50
; SOURCE LINE # 53
0000 E4 CLR A
0001 F500 R MOV i,A
0003 ?C0001:
; SOURCE LINE # 54
; SOURCE LINE # 55
0003 AF00 R MOV R7,i
0005 120000 E LCALL _SCH_Delete_Task
; SOURCE LINE # 56
0008 0500 R INC i
000A E500 R MOV A,i
000C C3 CLR C
000D 9403 SUBB A,#03H
000F 40F2 JC ?C0001
0011 ?C0002:
; SOURCE LINE # 61
0011 E4 CLR A
0012 F500 E MOV Error_code_G,A
; SOURCE LINE # 72
0014 75C804 MOV T2CON,#04H
; SOURCE LINE # 73
0017 F5C9 MOV T2MOD,A
; SOURCE LINE # 75
0019 75CDFC MOV TH2,#0FCH
; SOURCE LINE # 76
001C 75CBFC MOV RCAP2H,#0FCH
; SOURCE LINE # 77
001F 75CC18 MOV TL2,#018H
; SOURCE LINE # 78
0022 75CA18 MOV RCAP2L,#018H
; SOURCE LINE # 80
0025 D2AD SETB ET2
; SOURCE LINE # 82
0027 D2CA SETB TR2
; SOURCE LINE # 83
0029 22 RET
; FUNCTION SCH_Init_T2 (END)
; FUNCTION SCH_Start (BEGIN)
; SOURCE LINE # 98
; SOURCE LINE # 99
; SOURCE LINE # 100
0000 D2AF SETB EA
; SOURCE LINE # 101
0002 22 RET
; FUNCTION SCH_Start (END)
; FUNCTION SCH_Update (BEGIN)
0000 C0E0 PUSH ACC
0002 C0F0 PUSH B
0004 C0D0 PUSH PSW
0006 75D000 MOV PSW,#00H
0009 C000 PUSH AR0
000B C004 PUSH AR4
000D C005 PUSH AR5
000F C007 PUSH AR7
C51 COMPILER V8.05a 2_01_12G 06/07/2007 19:40:26 PAGE 14
; SOURCE LINE # 114
; SOURCE LINE # 118
0011 C2CF CLR TF2
; SOURCE LINE # 121
;---- Variable 'Index' assigned to Register 'R7' ----
0013 E4 CLR A
0014 FF MOV R7,A
0015 ?C0006:
; SOURCE LINE # 122
; SOURCE LINE # 124
0015 EF MOV A,R7
0016 75F007 MOV B,#07H
0019 A4 MUL AB
001A 2400 E ADD A,#LOW SCH_tasks_G
001C F8 MOV R0,A
001D E6 MOV A,@R0
001E FC MOV R4,A
001F 08 INC R0
0020 E6 MOV A,@R0
0021 4C ORL A,R4
0022 6046 JZ ?C0008
; SOURCE LINE # 125
; SOURCE LINE # 126
0024 EF MOV A,R7
0025 75F007 MOV B,#07H
0028 A4 MUL AB
0029 2400 E ADD A,#LOW SCH_tasks_G+02H
002B F8 MOV R0,A
002C E6 MOV A,@R0
002D FC MOV R4,A
002E 08 INC R0
002F E6 MOV A,@R0
0030 4C ORL A,R4
0031 7028 JNZ ?C0010
; SOURCE LINE # 127
; SOURCE LINE # 129
0033 EF MOV A,R7
0034 75F007 MOV B,#07H
0037 A4 MUL AB
0038 2400 E ADD A,#LOW SCH_tasks_G+06H
003A F8 MOV R0,A
003B 06 INC @R0
; SOURCE LINE # 131
003C EF MOV A,R7
003D 75F007 MOV B,#07H
0040 A4 MUL AB
0041 2400 E ADD A,#LOW SCH_tasks_G+04H
0043 F8 MOV R0,A
0044 E6 MOV A,@R0
0045 FC MOV R4,A
0046 08 INC R0
0047 E6 MOV A,@R0
0048 FD MOV R5,A
0049 4C ORL A,R4
004A 601E JZ ?C0008
; SOURCE LINE # 132
; SOURCE LINE # 134
004C EF MOV A,R7
004D 75F007 MOV B,#07H
0050 A4 MUL AB
0051 2400 E ADD A,#LOW SCH_tasks_G+02H
0053 F8 MOV R0,A
C51 COMPILER V8.05a 2_01_12G 06/07/2007 19:40:26 PAGE 15
0054 A604 MOV @R0,AR4
0056 08 INC R0
0057 A605 MOV @R0,AR5
; SOURCE LINE # 135
; SOURCE LINE # 136
0059 800F SJMP ?C0008
005B ?C0010:
; SOURCE LINE # 138
; SOURCE LINE # 140
005B EF MOV A,R7
005C 75F007 MOV B,#07H
005F A4 MUL AB
0060 2400 E ADD A,#LOW SCH_tasks_G+02H
0062 F8 MOV R0,A
0063 08 INC R0
0064 E6 MOV A,@R0
0065 16 DEC @R0
0066 18 DEC R0
0067 7001 JNZ ?C0014
0069 16 DEC @R0
006A ?C0014:
; SOURCE LINE # 141
; SOURCE LINE # 142
; SOURCE LINE # 143
006A ?C0008:
006A 0F INC R7
006B BF03A7 CJNE R7,#03H,?C0006
; SOURCE LINE # 144
006E ?C0013:
006E D007 POP AR7
0070 D005 POP AR5
0072 D004 POP AR4
0074 D000 POP AR0
0076 D0D0 POP PSW
0078 D0F0 POP B
007A D0E0 POP ACC
007C 32 RETI
; FUNCTION SCH_Update (END)
C51 COMPILER V8.05a 2_01_12G 06/07/2007 19:40:26 PAGE 16
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
EA . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00AFH 1
tLong. . . . . . . . . . . . . . . . . TYPEDEF ----- U_LONG ----- 4
sTask. . . . . . . . . . . . . . . . . TYPEDEF DATA STRUCT ----- 7
pTask. . . . . . . . . . . . . . . . MEMBER ----- PTR 0000H 2
Delay. . . . . . . . . . . . . . . . MEMBER ----- U_INT 0002H 2
Period . . . . . . . . . . . . . . . MEMBER ----- U_INT 0004H 2
RunMe. . . . . . . . . . . . . . . . MEMBER ----- U_CHAR 0006H 1
tByte. . . . . . . . . . . . . . . . . TYPEDEF ----- U_CHAR ----- 1
_SCH_Delete_Task . . . . . . . . . . . EXTERN CODE PROC ----- -----
SCH_tasks_G. . . . . . . . . . . . . . EXTERN DATA ARRAY ----- 21
tWord. . . . . . . . . . . . . . . . . TYPEDEF ----- U_INT ----- 2
RCAP2H . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00CBH 1
SCH_Update . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
Index. . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
RCAP2L . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00CAH 1
Error_code_G . . . . . . . . . . . . . EXTERN DATA U_CHAR ----- 1
SCH_Init_T2. . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
ET2. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00ADH 1
TF2. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00CFH 1
TH2. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00CDH 1
SCH_Start. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
TL2. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00CCH 1
TR2. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00CAH 1
T2MOD. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00C9H 1
T2CON. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00C8H 1
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 170 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 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 + -