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

📄 sch51.lst

📁 PATTERNS FOR TIME-TRIGGERED EMBEDDED SYSTEMS by Michael J. Pont This code is copyright (c) 200
💻 LST
📖 第 1 页 / 共 5 页
字号:
 203   2            Return_code = RETURN_ERROR;
 204   2            }
 205   1         else
 206   1            {
 207   2            Return_code = RETURN_NORMAL;
 208   2            }      
 209   1         
 210   1         SCH_tasks_G[TASK_INDEX].pTask   = 0x0000;
 211   1         SCH_tasks_G[TASK_INDEX].Delay   = 0;
 212   1         SCH_tasks_G[TASK_INDEX].Period  = 0;
 213   1      
 214   1         SCH_tasks_G[TASK_INDEX].RunMe   = 0;
 215   1      
 216   1         return Return_code;       // return status
 217   1         }
 218          
 219          
 220          /*------------------------------------------------------------------*-
 221          
 222            SCH_Report_Status()
 223          
 224            Simple function to display error codes.
 225          
 226            This version displays code on a port with attached LEDs:
 227            adapt, if required, to report errors over serial link, etc.
 228          
 229            Errors are only displayed for a limited period 
 230            (60000 ticks = 1 minute at 1ms tick interval).
 231            After this the the error code is reset to 0. 
 232          
 233            This code may be easily adapted to display the last
 234            error 'for ever': this may be appropriate in your
 235            application.
 236          
 237            See Chapter 10 for further information.
 238          
 239          -*------------------------------------------------------------------*/
 240          void SCH_Report_Status(void)
 241             {
 242   1      #ifdef SCH_REPORT_ERRORS
 243   1         // ONLY APPLIES IF WE ARE REPORTING ERRORS
 244   1         // Check for a new error code
 245   1         if (Error_code_G != Last_error_code_G)
 246   1            {
 247   2            // Negative logic on LEDs assumed
 248   2            Error_port = 255 - Error_code_G;
 249   2            
 250   2            Last_error_code_G = Error_code_G;
 251   2      
 252   2            if (Error_code_G != 0)
 253   2               {
 254   3               Error_tick_count_G = 60000;
 255   3               }
 256   2            else
 257   2               {
 258   3               Error_tick_count_G = 0;
 259   3               }
 260   2            }
 261   1         else
 262   1            {
 263   2            if (Error_tick_count_G != 0)
 264   2               {
C51 COMPILER V6.10  SCH51                                                                  04/18/2001 16:48:04 PAGE 15  

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

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION SCH_Dispatch_Tasks (BEGIN)
                                           ; SOURCE LINE # 69
                                           ; SOURCE LINE # 70
                                           ; SOURCE LINE # 74
0000 E4                CLR     A
0001 F500        R     MOV     Index,A
0003         ?C0001:
                                           ; SOURCE LINE # 75
                                           ; SOURCE LINE # 76
0003 E500        R     MOV     A,Index
0005 75F007            MOV     B,#07H
0008 A4                MUL     AB
0009 2400        R     ADD     A,#LOW SCH_tasks_G+06H
000B F8                MOV     R0,A
000C E6                MOV     A,@R0
000D D3                SETB    C
000E 9400              SUBB    A,#00H
0010 4032              JC      ?C0003
                                           ; SOURCE LINE # 77
                                           ; SOURCE LINE # 78
0012 E500        R     MOV     A,Index
0014 75F007            MOV     B,#07H
0017 A4                MUL     AB
0018 2400        R     ADD     A,#LOW SCH_tasks_G
001A F8                MOV     R0,A
001B E6                MOV     A,@R0
001C FE                MOV     R6,A
001D 08                INC     R0
001E E6                MOV     A,@R0
001F AA06              MOV     R2,AR6
0021 F9                MOV     R1,A
0022 120000      E     LCALL   ?C?ICALL
                                           ; SOURCE LINE # 80
0025 E500        R     MOV     A,Index
0027 75F007            MOV     B,#07H
002A A4                MUL     AB
002B 2400        R     ADD     A,#LOW SCH_tasks_G+06H
002D F8                MOV     R0,A
002E 16                DEC     @R0
                                           ; SOURCE LINE # 84
002F E500        R     MOV     A,Index
0031 75F007            MOV     B,#07H
0034 A4                MUL     AB
0035 2400        R     ADD     A,#LOW SCH_tasks_G+04H
0037 F8                MOV     R0,A
0038 E6                MOV     A,@R0
0039 FE                MOV     R6,A
003A 08                INC     R0
003B E6                MOV     A,@R0
003C 4E                ORL     A,R6
003D 7005              JNZ     ?C0003
                                           ; SOURCE LINE # 85
                                           ; SOURCE LINE # 86
003F AF00        R     MOV     R7,Index
0041 120000      R     LCALL   _SCH_Delete_Task
                                           ; SOURCE LINE # 87
                                           ; SOURCE LINE # 88
                                           ; SOURCE LINE # 89
0044         ?C0003:
C51 COMPILER V6.10  SCH51                                                                  04/18/2001 16:48:04 PAGE 17  

0044 0500        R     INC     Index
0046 E500        R     MOV     A,Index
0048 C3                CLR     C
0049 9402              SUBB    A,#02H
004B 40B6              JC      ?C0001
004D         ?C0002:
                                           ; SOURCE LINE # 92
004D 120000      R     LCALL   SCH_Report_Status
                                           ; SOURCE LINE # 95
0050 120000      R     LCALL   SCH_Go_To_Sleep
                                           ; SOURCE LINE # 96
0053 22                RET     
             ; FUNCTION SCH_Dispatch_Tasks (END)

             ; FUNCTION _SCH_Add_Task (BEGIN)
0000 8E00        R     MOV     pFunction,R6
0002 8F00        R     MOV     pFunction+01H,R7
0004 8C00        R     MOV     DELAY,R4
0006 8D00        R     MOV     DELAY+01H,R5
;---- Variable 'PERIOD' assigned to Register 'R2/R3' ----
                                           ; SOURCE LINE # 143
                                           ; SOURCE LINE # 146
                                           ; SOURCE LINE # 147
;---- Variable 'Index' assigned to Register 'R6' ----
0008 E4                CLR     A
0009 FE                MOV     R6,A
000A         ?C0007:
                                           ; SOURCE LINE # 150
000A EE                MOV     A,R6
000B 75F007            MOV     B,#07H
000E A4                MUL     AB
000F 2400        R     ADD     A,#LOW SCH_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 # 151
                                           ; SOURCE LINE # 152
001F 0E                INC     R6
                                           ; SOURCE LINE # 153
0020 80E8              SJMP    ?C0007
0022         ?C0008:
                                           ; SOURCE LINE # 156
0022 BE0206            CJNE    R6,#02H,?C0009
                                           ; SOURCE LINE # 157
                                           ; SOURCE LINE # 161
0025 750001      R     MOV     Error_code_G,#01H
                                           ; SOURCE LINE # 164
0028 7F02              MOV     R7,#02H
002A 22                RET     
                                           ; SOURCE LINE # 165
002B         ?C0009:
                                           ; SOURCE LINE # 168
002B EE                MOV     A,R6
002C 75F007            MOV     B,#07H
C51 COMPILER V6.10  SCH51                                                                  04/18/2001 16:48:04 PAGE 18  

002F A4                MUL     AB
0030 2400        R     ADD     A,#LOW SCH_tasks_G
0032 F8                MOV     R0,A
0033 A600        R     MOV     @R0,pFunction
0035 08                INC     R0
0036 A600        R     MOV     @R0,pFunction+01H
                                           ; SOURCE LINE # 170
0038 EE                MOV     A,R6
0039 75F007            MOV     B,#07H
003C A4                MUL     AB
003D 2400        R     ADD     A,#LOW SCH_tasks_G+02H
003F F8                MOV     R0,A
0040 A600        R     MOV     @R0,DELAY
0042 08                INC     R0
0043 A600        R     MOV     @R0,DELAY+01H
                                           ; SOURCE LINE # 171
0045 EE                MOV     A,R6
0046 75F007            MOV     B,#07H
0049 A4                MUL     AB
004A 2400        R     ADD     A,#LOW SCH_tasks_G+04H
004C F8                MOV     R0,A
004D A602              MOV     @R0,AR2
004F 08                INC     R0
0050 A603              MOV     @R0,AR3
                                           ; SOURCE LINE # 173
0052 EE                MOV     A,R6
0053 75F007            MOV     B,#07H
0056 A4                MUL     AB
0057 2400        R     ADD     A,#LOW SCH_tasks_G+06H
0059 F8                MOV     R0,A
005A E4                CLR     A
005B F6                MOV     @R0,A
                                           ; SOURCE LINE # 175
005C AF06              MOV     R7,AR6
                                           ; SOURCE LINE # 176
005E         ?C0010:
005E 22                RET     
             ; FUNCTION _SCH_Add_Task (END)

⌨️ 快捷键说明

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