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

📄 task_switch.ls1

📁 网上收集的嵌入式操作系统后在51上写的一个简单的操作系统
💻 LS1
📖 第 1 页 / 共 3 页
字号:
A51 MACRO ASSEMBLER  TASK_SWITCH                                                          05/10/2008 17:14:26 PAGE     1


MACRO ASSEMBLER A51 V8.00
OBJECT MODULE PLACED IN task_switch.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE task_switch.src PR(.\task_switch.ls1) EP DEBUG

LOC  OBJ            LINE     SOURCE

                       1     ; .\task_switch.SRC generated from: task_switch.C
                       2     ; COMPILER INVOKED BY:
                       3     ;        C:\Keil\C51\BIN\C51.EXE task_switch.C BROWSE DEBUG OBJECTEXTEND SRC(.\task_switch.
                             SRC)
                       4     
                       5     $nomod51 
                       6     
                       7     NAME    TASK_SWITCH
                       8     
  0080                 9     P0      DATA    080H
  0090                10     P1      DATA    090H
  00A0                11     P2      DATA    0A0H
  00B0                12     P3      DATA    0B0H
  00D6                13     AC      BIT     0D0H.6
  00B4                14     T0      BIT     0B0H.4
  00B5                15     T1      BIT     0B0H.5
  00AF                16     EA      BIT     0A8H.7
  0090                17     T2      BIT     090H.0
  00A8                18     IE      DATA    0A8H
  0080                19     P0_0    BIT     080H.0
  0090                20     P1_0    BIT     090H.0
  0081                21     P0_1    BIT     080H.1
  00D1                22     FL      BIT     0D0H.1
  00A0                23     P2_0    BIT     0A0H.0
  0091                24     P1_1    BIT     090H.1
  0082                25     P0_2    BIT     080H.2
  00B0                26     P3_0    BIT     0B0H.0
  00A1                27     P2_1    BIT     0A0H.1
  0092                28     P1_2    BIT     090H.2
  0083                29     P0_3    BIT     080H.3
  00B1                30     P3_1    BIT     0B0H.1
  00A2                31     P2_2    BIT     0A0H.2
  0093                32     P1_3    BIT     090H.3
  0084                33     P0_4    BIT     080H.4
  00B2                34     P3_2    BIT     0B0H.2
  00A3                35     P2_3    BIT     0A0H.3
  0094                36     P1_4    BIT     090H.4
  0085                37     P0_5    BIT     080H.5
  00CE                38     EXF2    BIT     0C8H.6
  00B7                39     RD      BIT     0B0H.7
  00B3                40     P3_3    BIT     0B0H.3
  00A4                41     P2_4    BIT     0A0H.4
  0095                42     P1_5    BIT     090H.5
  0086                43     P0_6    BIT     080H.6
  00B4                44     P3_4    BIT     0B0H.4
  00A5                45     P2_5    BIT     0A0H.5
  0096                46     P1_6    BIT     090H.6
  0087                47     P0_7    BIT     080H.7
  00B5                48     P3_5    BIT     0B0H.5
  00AC                49     ES      BIT     0A8H.4
  00A6                50     P2_6    BIT     0A0H.6
  0097                51     P1_7    BIT     090H.7
  00B6                52     P3_6    BIT     0B0H.6
  00A7                53     P2_7    BIT     0A0H.7
  00B8                54     IP      DATA    0B8H
  00B7                55     P3_7    BIT     0B0H.7
  0098                56     RI      BIT     098H.0
  00D7                57     CY      BIT     0D0H.7
A51 MACRO ASSEMBLER  TASK_SWITCH                                                          05/10/2008 17:14:26 PAGE     2

  00B2                58     INT0    BIT     0B0H.2
  00B3                59     INT1    BIT     0B0H.3
  0099                60     TI      BIT     098H.1
  00CB                61     RCAP2H  DATA    0CBH
  00BC                62     PS      BIT     0B8H.4
  0081                63     SP      DATA    081H
  0091                64     T2EX    BIT     090H.1
  00D2                65     OV      BIT     0D0H.2
  00CA                66     RCAP2L  DATA    0CAH
  00C9                67     C_T2    BIT     0C8H.1
  00B6                68     WR      BIT     0B0H.6
  00CD                69     RCLK    BIT     0C8H.5
  00CC                70     TCLK    BIT     0C8H.4
  0099                71     SBUF    DATA    099H
  0087                72     PCON    DATA    087H
  0098                73     SCON    DATA    098H
  0089                74     TMOD    DATA    089H
  0088                75     TCON    DATA    088H
  0089                76     IE0     BIT     088H.1
  008B                77     IE1     BIT     088H.3
  00F0                78     B       DATA    0F0H
  00C8                79     CP_RL2  BIT     0C8H.0
  00E0                80     ACC     DATA    0E0H
  00A9                81     ET0     BIT     0A8H.1
  00AB                82     ET1     BIT     0A8H.3
  008D                83     TF0     BIT     088H.5
  00AD                84     ET2     BIT     0A8H.5
  008F                85     TF1     BIT     088H.7
  00CF                86     TF2     BIT     0C8H.7
  009A                87     RB8     BIT     098H.2
  008C                88     TH0     DATA    08CH
  00A8                89     EX0     BIT     0A8H.0
  0088                90     IT0     BIT     088H.0
  008D                91     TH1     DATA    08DH
  00AA                92     EX1     BIT     0A8H.2
  009B                93     TB8     BIT     098H.3
  008A                94     IT1     BIT     088H.2
  00CD                95     TH2     DATA    0CDH
  00D0                96     P       BIT     0D0H.0
  009F                97     SM0     BIT     098H.7
  008A                98     TL0     DATA    08AH
  009E                99     SM1     BIT     098H.6
  008B               100     TL1     DATA    08BH
  009D               101     SM2     BIT     098H.5
  00CC               102     TL2     DATA    0CCH
  00B9               103     PT0     BIT     0B8H.1
  00D3               104     RS0     BIT     0D0H.3
  00BB               105     PT1     BIT     0B8H.3
  00D4               106     RS1     BIT     0D0H.4
  00BD               107     PT2     BIT     0B8H.5
  008C               108     TR0     BIT     088H.4
  008E               109     TR1     BIT     088H.6
  00CA               110     TR2     BIT     0C8H.2
  00B8               111     PX0     BIT     0B8H.0
  00BA               112     PX1     BIT     0B8H.2
  0083               113     DPH     DATA    083H
  0082               114     DPL     DATA    082H
  00CB               115     EXEN2   BIT     0C8H.3
  009C               116     REN     BIT     098H.4
  00C9               117     T2MOD   DATA    0C9H
  00C8               118     T2CON   DATA    0C8H
  00B0               119     RXD     BIT     0B0H.0
  00B1               120     TXD     BIT     0B0H.1
  00D5               121     F0      BIT     0D0H.5
  00D0               122     PSW     DATA    0D0H
                     123     ?PR?OS_Task_Switch?TASK_SWITCH           SEGMENT CODE 
A51 MACRO ASSEMBLER  TASK_SWITCH                                                          05/10/2008 17:14:26 PAGE     3

                     124     ?DT?TASK_SWITCH      SEGMENT DATA 
                     125     ?PR?Timer2ISR?TASK_SWITCH                SEGMENT CODE 
                     126             EXTRN   DATA (OS_Task_List)
                     127             EXTRN   DATA (OS_Run_Time)
                     128             EXTRN   IDATA (OS_pcb)
                     129             EXTRN   DATA (OS_Current_ID)
                     130             EXTRN   DATA (OS_Running)
                     131             PUBLIC  Timer2ISR
                     132             PUBLIC  OS_Task_Switch
                     133     
----                 134             RSEG  ?DT?TASK_SWITCH
0000                 135               i?040:   DS   1
                     136     
----                 137             RSEG  ?DT?TASK_SWITCH
0001                 138            temp?041:   DS   1
                     139     ; /*******************************************************
                     140     ; *************基于51内核的圈圈操作系统*****************
                     141     ; 本程序只供学习使用,未经作者许可,不得用于其它任何用途
                     142     ; 
                     143     ; Task_Switch.c file
                     144     ; 
                     145     ; Created by Computer-lov
                     146     ; Date: 2005.10.27
                     147     ; 
                     148     ; Edit date:2006.2.24
                     149     ; 
                     150     ; Version V1.1
                     151     ; Copyright(C) Computer-lov 2005-2015
                     152     ; All rigths reserved
                     153     ; 
                     154     ; ******************************************************/
                     155     ; 
                     156     ; #include "AT89X52.h"
                     157     ; #include "task_switch.h"
                     158     ; #include "MAIN.H"
                     159     ; #include "OS_core.h"
                     160     ; 
                     161     ; ///////////////////////////////////////////任务切换函数/////////////////////////////////
                     162     ; void OS_Task_Switch(void)
                     163     
----                 164             RSEG  ?PR?OS_Task_Switch?TASK_SWITCH
0000                 165     OS_Task_Switch:
                     166             USING   0
                     167                             ; SOURCE LINE # 24
                     168     ; {
                     169                             ; SOURCE LINE # 25
                     170     ;  static unsigned char i;    //使用static申明局部变量,避免临时变量使用相同地址
                     171     ;  static unsigned char temp;
                     172     ; 
                     173     ;  EA=0;                //关中断
                     174                             ; SOURCE LINE # 29
0000 C2AF            175             CLR     EA
                     176     ;  __asm PUSH ACC       //保护当前任务寄存器
0002 C0E0            177              PUSH ACC        
                     178     ;  __asm PUSH B
0004 C0F0            179              PUSH B
                     180     ;  __asm PUSH PSW
0006 C0D0            181              PUSH PSW
                     182     ;  __asm PUSH DPL
0008 C082            183              PUSH DPL
                     184     ;  __asm PUSH DPH
000A C083            185              PUSH DPH
                     186     ;  __asm PUSH 0         //0-7为工作寄存器
000C C000            187              PUSH 0          
                     188     ;  __asm PUSH 1
000E C001            189              PUSH 1
A51 MACRO ASSEMBLER  TASK_SWITCH                                                          05/10/2008 17:14:26 PAGE     4

                     190     ;  __asm PUSH 2
0010 C002            191              PUSH 2
                     192     ;  __asm PUSH 3
0012 C003            193              PUSH 3
                     194     ;  __asm PUSH 4
0014 C004            195              PUSH 4
                     196     ;  __asm PUSH 5
0016 C005            197              PUSH 5
                     198     ;  __asm PUSH 6
0018 C006            199              PUSH 6
                     200     ;  __asm PUSH 7
001A C007            201              PUSH 7
                     202     ; 
                     203     ;  OS_pcb[OS_Current_ID].Task_SP=SP;   //保存当前堆栈指针
                     204                             ; SOURCE LINE # 44
001C AF00     F      205             MOV     R7,OS_Current_ID
001E EF              206             MOV     A,R7
001F 75F005          207             MOV     B,#05H
0022 A4              208             MUL     AB
0023 2400     F      209             ADD     A,#LOW (OS_pcb)
0025 F8              210             MOV     R0,A
0026 A681            211             MOV     @R0,SP
                     212     ; 
                     213     ;  OS_Current_ID=0;     //设置为空闲任务的ID号,优先级最低
                     214                             ; SOURCE LINE # 46
0028 E4              215             CLR     A
0029 F500     F      216             MOV     OS_Current_ID,A
                     217     ;  
                     218     ;  temp=0x01;
                     219                             ; SOURCE LINE # 48
002B 750001   F      220             MOV     temp?041,#01H
                     221     ;  for(i=0;i<MAX_TASK;i++)
                     222                             ; SOURCE LINE # 49
002E F500     F      223             MOV     i?040,A
0030                 224     ?C0001:
                     225     ;   {
                     226                             ; SOURCE LINE # 50
                     227     ;    if(OS_Task_List&temp)   //判断是否有该任务
                     228                             ; SOURCE LINE # 51
0030 E500     F      229             MOV     A,OS_Task_List
0032 5500     F      230             ANL     A,temp?041
0034 6027            231             JZ      ?C0004
                     232     ;     {
                     233                             ; SOURCE LINE # 52
                     234     ;      if(OS_pcb[i].Suspend==0)   //查找未挂起任务
                     235                             ; SOURCE LINE # 53
0036 E500     F      236             MOV     A,i?040
0038 75F005          237             MOV     B,#05H
003B A4              238             MUL     AB
003C 2400     F      239             ADD     A,#LOW (OS_pcb+02H)
003E F8              240             MOV     R0,A
003F E6              241             MOV     A,@R0
0040 701B            242             JNZ     ?C0004
                     243     ;       {
                     244                             ; SOURCE LINE # 54
                     245     ;        if(OS_pcb[i].Priority<OS_pcb[OS_Current_ID].Priority)   //如果优先级高,则切换之
                     246                             ; SOURCE LINE # 55
0042 AF00     F      247             MOV     R7,OS_Current_ID
0044 EF              248             MOV     A,R7
0045 75F005          249             MOV     B,#05H

⌨️ 快捷键说明

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