⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hsch51.lst

📁 时间触发嵌入式系统设计模式:使用8051系列微控制器开发可靠应用
💻 LST
📖 第 1 页 / 共 5 页
字号:
 216   1            {
 217   2            Return_code = RETURN_NORMAL;
 218   2            }      
 219   1         
 220   1         hSCH_tasks_G[Task_index].pTask   = 0;
 221   1         hSCH_tasks_G[Task_index].Delay   = 0;
 222   1         hSCH_tasks_G[Task_index].Period  = 0;
 223   1      
 224   1         hSCH_tasks_G[Task_index].RunMe   = 0;
 225   1      
 226   1         return Return_code;       // return status
 227   1         }
 228          
 229          
 230          /*------------------------------------------------------------------*-
 231          
 232            hSCH_Report_Status()
 233          
 234            Simple function to display error codes.
 235          
 236            This version displays code on a port with attached LEDs:
 237            adapt, if required, to report errors over serial link, etc.
 238          
 239            Errors are only displayed for a limited period 
 240            (60000 ticks = 1 minute at 1ms tick interval).
 241            After this the the error code is reset to 0. 
 242          
 243            This code may be easily adapted to display the last
 244            error 'for ever': this may be appropriate in your
 245            application.
 246          
 247            See Chapter 14 for further information.
 248           
 249          -*------------------------------------------------------------------*/
 250          void hSCH_Report_Status(void)
 251             {
 252   1      #ifdef SCH_REPORT_ERRORS
 253   1         // ONLY APPLIES IF WE ARE REPORTING ERRORS
 254   1         // Check for a new error code
 255   1         if (Error_code_G != Last_error_code_G)
 256   1            {
 257   2            // Negative logic on LEDs assumed
 258   2            Error_port = 255 - Error_code_G;
 259   2            
 260   2            Last_error_code_G = Error_code_G;
 261   2      
 262   2            if (Error_code_G != 0)
 263   2               {
 264   3               Error_tick_count_G = 60000;
 265   3               }
 266   2            else
 267   2               {
 268   3               Error_tick_count_G = 0;
 269   3               }
 270   2            }
 271   1         else
 272   1            {
 273   2            if (Error_tick_count_G != 0)
 274   2               {
C51 COMPILER V6.10  HSCH51                                                                 04/19/2001 12:07:05 PAGE 15  

 275   3               if (--Error_tick_count_G == 0)
 276   3                  {
 277   4                  Error_code_G = 0; // Reset error code
 278   4                  }
 279   3               }
 280   2            }
 281   1      #endif
 282   1         }
 283          
 284          
 285          /*------------------------------------------------------------------*-
 286          
 287            hSCH_Go_To_Sleep()
 288          
 289            This scheduler enters 'idle mode' between clock ticks
 290            to save power.  The next clock tick will return the processor
 291            to the normal operating state.
 292          
 293            Note: a slight performance improvement is possible if this
 294            function is implemented as a macro, or if the code here is simply 
 295            pasted into the 'dispatch' function.  
 296          
 297            However, by making this a function call, it becomes easier 
 298            - during development - to assess the performance of the 
 299            scheduler, using the 'performance analyser' in the Keil 
 300            hardware simulator. See Chapter 14 for examples for this. 
 301          
 302            *** May wish to disable this if using a watchdog ***
 303          
 304            *** ADAPT AS REQUIRED FOR YOUR HARDWARE ***
 305          
 306          -*------------------------------------------------------------------*/
 307          void hSCH_Go_To_Sleep()
 308             {
 309   1         PCON |= 0x01;    // Enter idle mode (generic 8051 version)
 310   1      
 311   1         // Entering idle mode requires TWO consecutive instructions 
 312   1         // on 80c515 / 80c505 - to avoid accidental triggering
 313   1         //PCON |= 0x01;    // Enter idle mode (#1)
 314   1         //PCON |= 0x20;    // Enter idle mode (#2)
 315   1         }
 316          
 317          
 318          /*------------------------------------------------------------------*-
 319            ---- END OF FILE -------------------------------------------------
 320          -*------------------------------------------------------------------*/
 321          
 322          
C51 COMPILER V6.10  HSCH51                                                                 04/19/2001 12:07:05 PAGE 16  

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION hSCH_Dispatch_Tasks (BEGIN)
                                           ; SOURCE LINE # 71
                                           ; SOURCE LINE # 72
                                           ; SOURCE LINE # 76
0000 E4                CLR     A
0001 F500        R     MOV     Index,A
0003         ?C0001:
                                           ; SOURCE LINE # 77
                                           ; SOURCE LINE # 79
0003 E500        R     MOV     A,Index
0005 75F008            MOV     B,#08H
0008 A4                MUL     AB
0009 2400        R     ADD     A,#LOW hSCH_tasks_G+07H
000B F8                MOV     R0,A
000C E6                MOV     A,@R0
000D 6049              JZ      ?C0003
000F E500        R     MOV     A,Index
0011 75F008            MOV     B,#08H
0014 A4                MUL     AB
0015 2400        R     ADD     A,#LOW hSCH_tasks_G+06H
0017 F8                MOV     R0,A
0018 E6                MOV     A,@R0
0019 D3                SETB    C
001A 9400              SUBB    A,#00H
001C 403A              JC      ?C0003
                                           ; SOURCE LINE # 80
                                           ; SOURCE LINE # 81
001E E500        R     MOV     A,Index
0020 75F008            MOV     B,#08H
0023 A4                MUL     AB
0024 2400        R     ADD     A,#LOW hSCH_tasks_G
0026 F8                MOV     R0,A
0027 E6                MOV     A,@R0
0028 FE                MOV     R6,A
0029 08                INC     R0
002A E6                MOV     A,@R0
002B AA06              MOV     R2,AR6
002D F9                MOV     R1,A
002E 120000      E     LCALL   ?C?ICALL
                                           ; SOURCE LINE # 83
0031 E500        R     MOV     A,Index
0033 75F008            MOV     B,#08H
0036 A4                MUL     AB
0037 2400        R     ADD     A,#LOW hSCH_tasks_G+06H
0039 F8                MOV     R0,A
003A 16                DEC     @R0
                                           ; SOURCE LINE # 87
003B E500        R     MOV     A,Index
003D 75F008            MOV     B,#08H
0040 A4                MUL     AB
0041 2400        R     ADD     A,#LOW hSCH_tasks_G+04H
0043 F8                MOV     R0,A
0044 E6                MOV     A,@R0
0045 FE                MOV     R6,A
0046 08                INC     R0
0047 E6                MOV     A,@R0
0048 4E                ORL     A,R6
0049 700D              JNZ     ?C0003
                                           ; SOURCE LINE # 88
C51 COMPILER V6.10  HSCH51                                                                 04/19/2001 12:07:05 PAGE 17  

                                           ; SOURCE LINE # 90
004B E500        R     MOV     A,Index
004D 75F008            MOV     B,#08H
0050 A4                MUL     AB
0051 2400        R     ADD     A,#LOW hSCH_tasks_G
0053 F8                MOV     R0,A
0054 E4                CLR     A
0055 F6                MOV     @R0,A
0056 08                INC     R0
0057 F6                MOV     @R0,A
                                           ; SOURCE LINE # 91
                                           ; SOURCE LINE # 92
                                           ; SOURCE LINE # 93
0058         ?C0003:
0058 0500        R     INC     Index
005A E500        R     MOV     A,Index
005C C3                CLR     C
005D 9402              SUBB    A,#02H
005F 40A2              JC      ?C0001
0061         ?C0002:
                                           ; SOURCE LINE # 96
0061 120000      R     LCALL   hSCH_Report_Status
                                           ; SOURCE LINE # 99
0064 120000      R     LCALL   hSCH_Go_To_Sleep
                                           ; SOURCE LINE # 100
0067 22                RET     
             ; FUNCTION hSCH_Dispatch_Tasks (END)

             ; FUNCTION _hSCH_Add_Task (BEGIN)
0000 8E00        R     MOV     Fn_p,R6
0002 8F00        R     MOV     Fn_p+01H,R7
0004 8C00        R     MOV     Del,R4
0006 8D00        R     MOV     Del+01H,R5
;---- Variable 'Per' assigned to Register 'R2/R3' ----
                                           ; SOURCE LINE # 150
                                           ; SOURCE LINE # 154
                                           ; SOURCE LINE # 155
;---- Variable 'Index' assigned to Register 'R6' ----
0008 E4                CLR     A
0009 FE                MOV     R6,A
000A         ?C0007:
                                           ; SOURCE LINE # 158
000A EE                MOV     A,R6
000B 75F008            MOV     B,#08H
000E A4                MUL     AB
000F 2400        R     ADD     A,#LOW hSCH_tasks_G
0011 F8                MOV     R0,A
0012 E6                MOV     A,@R0
0013 FC                MOV     R4,A
0014 08                INC     R0
0015 E6                MOV     A,@R0
0016 4C                ORL     A,R4
0017 6009              JZ      ?C0008
0019 EE                MOV     A,R6
001A C3                CLR     C
001B 9402              SUBB    A,#02H
001D 5003              JNC     ?C0008
                                           ; SOURCE LINE # 159
                                           ; SOURCE LINE # 160
001F 0E                INC     R6
                                           ; SOURCE LINE # 161
0020 80E8              SJMP    ?C0007
C51 COMPILER V6.10  HSCH51                                                                 04/19/2001 12:07:05 PAGE 18  

0022         ?C0008:
                                           ; SOURCE LINE # 164
0022 BE0206            CJNE    R6,#02H,?C0009
                                           ; SOURCE LINE # 165
                                           ; SOURCE LINE # 169
0025 750001      R     MOV     Error_code_G,#01H
                                           ; SOURCE LINE # 172
0028 7F02              MOV     R7,#02H
002A 22                RET     
                                           ; SOURCE LINE # 173
002B         ?C0009:
                                           ; SOURCE LINE # 176
002B EE                MOV     A,R6
002C 75F008            MOV     B,#08H
002F A4                MUL     AB
0030 2400        R     ADD     A,#LOW hSCH_tasks_G
0032 F8                MOV     R0,A
0033 A600        R     MOV     @R0,Fn_p
0035 08                INC     R0
0036 A600        R     MOV     @R0,Fn_p+01H
                                           ; SOURCE LINE # 178
0038 EE                MOV     A,R6
0039 75F008            MOV     B,#08H
003C A4                MUL     AB
003D 2400        R     ADD     A,#LOW hSCH_tasks_G+02H
003F F8                MOV     R0,A
0040 A600        R     MOV     @R0,Del
0042 08                INC     R0
0043 A600        R     MOV     @R0,Del+01H
                                           ; SOURCE LINE # 179
0045 EE                MOV     A,R6
0046 75F008            MOV     B,#08H
0049 A4                MUL     AB
004A 2400        R     ADD     A,#LOW hSCH_tasks_G+04H
004C F8                MOV     R0,A
004D A602              MOV     @R0,AR2
004F 08                INC     R0
0050 A603              MOV     @R0,AR3
                                           ; SOURCE LINE # 181
0052 A200        R     MOV     C,Co_op

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -