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

📄 sch51a.lst

📁 时间触发嵌入式系统设计模式:使用8051系列微控制器开发可靠应用
💻 LST
📖 第 1 页 / 共 5 页
字号:
 221   1         }
C51 COMPILER V6.10  SCH51A                                                                 04/09/2001 15:00:14 PAGE 14  

 222          
 223          
 224          /*------------------------------------------------------------------*-
 225          
 226            SCH_Report_Status()
 227          
 228            Simple function to display error codes.
 229          
 230            This version displays code on a port with attached LEDs:
 231            adapt, if required, to report errors over serial link, etc.
 232          
 233            Errors are only displayed for a limited period 
 234            (60000 ticks = 1 minute at 1ms tick interval).
 235            After this the the error code is reset to 0. 
 236          
 237            This code may be easily adapted to display the last
 238            error 'for ever': this may be appropriate in your
 239            application.
 240          
 241            See Chapter 10 for further information.
 242          
 243          -*------------------------------------------------------------------*/
 244          void SCH_Report_Status(void)
 245             {
 246   1      #ifdef SCH_REPORT_ERRORS
 247   1         // ONLY APPLIES IF WE ARE REPORTING ERRORS
 248   1         // Check for a new error code
 249   1         if (Error_code_G != Last_error_code_G)
 250   1            {
 251   2            // Negative logic on LEDs assumed
 252   2            Error_port = 255 - Error_code_G;
 253   2            
 254   2            Last_error_code_G = Error_code_G;
 255   2      
 256   2            if (Error_code_G != 0)
 257   2               {
 258   3               Error_tick_count_G = 60000;
 259   3               }
 260   2            else
 261   2               {
 262   3               Error_tick_count_G = 0;
 263   3               }
 264   2            }
 265   1         else
 266   1            {
 267   2            if (Error_tick_count_G != 0)
 268   2               {
 269   3               if (--Error_tick_count_G == 0)
 270   3                  {
 271   4                  Error_code_G = 0; // Reset error code
 272   4                  }
 273   3               }
 274   2            }
 275   1      #endif
 276   1         }
 277          
 278          
 279          /*------------------------------------------------------------------*-
 280          
 281            SCH_Go_To_Sleep()
 282          
 283            This scheduler enters 'idle mode' between clock ticks
C51 COMPILER V6.10  SCH51A                                                                 04/09/2001 15:00:14 PAGE 15  

 284            to save power.  The next clock tick will return the processor
 285            to the normal operating state.
 286          
 287            Note: a slight performance improvement is possible if this
 288            function is implemented as a macro, or if the code here is simply 
 289            pasted into the 'dispatch' function.  
 290          
 291            However, by making this a function call, it becomes easier 
 292            - during development - to assess the performance of the 
 293            scheduler, using the 'performance analyser' in the Keil 
 294            hardware simulator. See Chapter 14 for examples for this. 
 295          
 296            *** May wish to disable this if using a watchdog ***
 297          
 298            *** ADAPT AS REQUIRED FOR YOUR HARDWARE ***
 299          
 300          -*------------------------------------------------------------------*/
 301          void SCH_Go_To_Sleep()
 302             {
 303   1         PCON |= 0x01;    // Enter idle mode (generic 8051 version)
 304   1      
 305   1         // Entering idle mode requires TWO consecutive instructions 
 306   1         // on 80c515 / 80c505 - to avoid accidental triggering
 307   1         //PCON |= 0x01;    // Enter idle mode (#1)
 308   1         //PCON |= 0x20;    // Enter idle mode (#2)
 309   1         }
 310          
 311          
 312          /*------------------------------------------------------------------*-
 313            ---- END OF FILE -------------------------------------------------
 314          -*------------------------------------------------------------------*/
C51 COMPILER V6.10  SCH51A                                                                 04/09/2001 15:00:14 PAGE 16  

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION SCH_Dispatch_Tasks (BEGIN)
                                           ; SOURCE LINE # 73
                                           ; SOURCE LINE # 74
                                           ; SOURCE LINE # 78
0000 E4                CLR     A
0001 F500        R     MOV     Index,A
0003         ?C0001:
                                           ; SOURCE LINE # 79
                                           ; SOURCE LINE # 80
0003 E500        R     MOV     A,Index
0005 75F005            MOV     B,#05H
0008 A4                MUL     AB
0009 2400        R     ADD     A,#LOW SCH_tasks_G+04H
000B F8                MOV     R0,A
000C E6                MOV     A,@R0
000D D3                SETB    C
000E 9400              SUBB    A,#00H
0010 402E              JC      ?C0003
                                           ; SOURCE LINE # 81
                                           ; SOURCE LINE # 82
0012 E500        R     MOV     A,Index
0014 75F005            MOV     B,#05H
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 # 84
0025 E500        R     MOV     A,Index
0027 75F005            MOV     B,#05H
002A A4                MUL     AB
002B 2400        R     ADD     A,#LOW SCH_tasks_G+04H
002D F8                MOV     R0,A
002E 16                DEC     @R0
                                           ; SOURCE LINE # 88
002F E500        R     MOV     A,Index
0031 75F005            MOV     B,#05H
0034 A4                MUL     AB
0035 2400        R     ADD     A,#LOW SCH_tasks_G+03H
0037 F8                MOV     R0,A
0038 E6                MOV     A,@R0
0039 7005              JNZ     ?C0003
                                           ; SOURCE LINE # 89
                                           ; SOURCE LINE # 90
003B AF00        R     MOV     R7,Index
003D 120000      R     LCALL   _SCH_Delete_Task
                                           ; SOURCE LINE # 91
                                           ; SOURCE LINE # 92
                                           ; SOURCE LINE # 93
0040         ?C0003:
0040 0500        R     INC     Index
0042 E500        R     MOV     A,Index
0044 C3                CLR     C
0045 9403              SUBB    A,#03H
C51 COMPILER V6.10  SCH51A                                                                 04/09/2001 15:00:14 PAGE 17  

0047 40BA              JC      ?C0001
0049         ?C0002:
                                           ; SOURCE LINE # 96
0049 120000      R     LCALL   SCH_Report_Status
                                           ; SOURCE LINE # 99
004C 120000      R     LCALL   SCH_Go_To_Sleep
                                           ; SOURCE LINE # 100
004F 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
;---- Variable 'DELAY' assigned to Register 'R7' ----
0004 AF05              MOV     R7,AR5
;---- Variable 'PERIOD' assigned to Register 'R3' ----
                                           ; SOURCE LINE # 147
                                           ; SOURCE LINE # 150
                                           ; SOURCE LINE # 151
;---- Variable 'Index' assigned to Register 'R6' ----
0006 E4                CLR     A
0007 FE                MOV     R6,A
0008         ?C0007:
                                           ; SOURCE LINE # 154
0008 EE                MOV     A,R6
0009 75F005            MOV     B,#05H
000C A4                MUL     AB
000D 2400        R     ADD     A,#LOW SCH_tasks_G
000F F8                MOV     R0,A
0010 E6                MOV     A,@R0
0011 FC                MOV     R4,A
0012 08                INC     R0
0013 E6                MOV     A,@R0
0014 4C                ORL     A,R4
0015 6009              JZ      ?C0008
0017 EE                MOV     A,R6
0018 C3                CLR     C
0019 9403              SUBB    A,#03H
001B 5003              JNC     ?C0008
                                           ; SOURCE LINE # 155
                                           ; SOURCE LINE # 156
001D 0E                INC     R6
                                           ; SOURCE LINE # 157
001E 80E8              SJMP    ?C0007
0020         ?C0008:
                                           ; SOURCE LINE # 160
0020 BE0306            CJNE    R6,#03H,?C0009
                                           ; SOURCE LINE # 161
                                           ; SOURCE LINE # 165
0023 750001      R     MOV     Error_code_G,#01H
                                           ; SOURCE LINE # 168
0026 7F03              MOV     R7,#03H
0028 22                RET     
                                           ; SOURCE LINE # 169
0029         ?C0009:
                                           ; SOURCE LINE # 172
0029 EE                MOV     A,R6
002A 75F005            MOV     B,#05H
002D A4                MUL     AB
002E 2400        R     ADD     A,#LOW SCH_tasks_G
0030 F8                MOV     R0,A
0031 A600        R     MOV     @R0,pFunction
C51 COMPILER V6.10  SCH51A                                                                 04/09/2001 15:00:14 PAGE 18  

0033 08                INC     R0
0034 A600        R     MOV     @R0,pFunction+01H
                                           ; SOURCE LINE # 174
0036 EE                MOV     A,R6
0037 75F005            MOV     B,#05H
003A A4                MUL     AB
003B 2400        R     ADD     A,#LOW SCH_tasks_G+02H
003D F8                MOV     R0,A
003E A607              MOV     @R0,AR7
                                           ; SOURCE LINE # 175
0040 EE                MOV     A,R6
0041 75F005            MOV     B,#05H
0044 A4                MUL     AB
0045 2400        R     ADD     A,#LOW SCH_tasks_G+03H
0047 F8                MOV     R0,A
0048 A603              MOV     @R0,AR3
                                           ; SOURCE LINE # 177
004A EE                MOV     A,R6
004B 75F005            MOV     B,#05H
004E A4                MUL     AB
004F 2400        R     ADD     A,#LOW SCH_tasks_G+04H
0051 F8                MOV     R0,A
0052 E4                CLR     A
0053 F6                MOV     @R0,A
                                           ; SOURCE LINE # 179
0054 AF06              MOV     R7,AR6
                                           ; SOURCE LINE # 180
0056         ?C0010:
0056 22                RET     
             ; FUNCTION _SCH_Add_Task (END)

             ; FUNCTION _SCH_Delete_Task (BEGIN)
;---- Variable 'TASK_INDEX' assigned to Register 'R7' ----
                                           ; SOURCE LINE # 195
                                           ; SOURCE LINE # 196
                                           ; SOURCE LINE # 199
0000 EF                MOV     A,R7
0001 75F005            MOV     B,#05H
0004 A4                MUL     AB
0005 2400        R     ADD     A,#LOW SCH_tasks_G
0007 F8                MOV     R0,A
0008 E6                MOV     A,@R0
0009 FC                MOV     R4,A
000A 08                INC     R0
000B E6                MOV     A,@R0
000C 4C                ORL     A,R4
000D 7007              JNZ     ?C0011
                                           ; SOURCE LINE # 200
                                           ; SOURCE LINE # 204

⌨️ 快捷键说明

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