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

📄 sw_int.ls1

📁 基本STC4052写的一个小的OS, 完成了任务调度功能,及堆栈空间切换, 及中断处理
💻 LS1
📖 第 1 页 / 共 5 页
字号:
                     456     ; }
                     457                             ; SOURCE LINE # 116
00F6                 458     ?C0002:
00F6 0500     F      459             INC     ?C_IBP
00F8 0500     F      460             INC     ?C_IBP
00FA 0500     F      461             INC     ?C_IBP
00FC 22              462             RET     
                     463     ; END OF _?OsTaskSwitch
                     464     
                     465     ; 
                     466     ; void OsIntExit (void) REENTRANT
                     467     
----                 468             RSEG  ?PR?_?OsIntExit?SW_INT
0000                 469     _?OsIntExit:
                     470             USING   0
                     471                             ; SOURCE LINE # 118
                     472     ; {
                     473     ;       EnterCritical();
                     474                             ; SOURCE LINE # 120
0000 C2AF            475             CLR     EA
                     476     ;       if (gOs.taskNum>1)
                     477                             ; SOURCE LINE # 121
0002 E500     F      478             MOV     A,gOs+01EH
0004 D3              479             SETB    C
0005 9401            480             SUBB    A,#01H
0007 4010            481             JC      ?C0011
                     482     ;       {       
                     483                             ; SOURCE LINE # 122
                     484     ;               if (0==gOsMsgIntShed)
                     485                             ; SOURCE LINE # 123
0009 200003   F      486             JB      gOsMsgIntShed,?C0012
                     487     ;               {       ExitCritical(); 
                     488                             ; SOURCE LINE # 124
000C D2AF            489             SETB    EA
000E 22              490             RET     
                     491     ;                       return;
                     492     ;               }
                     493                             ; SOURCE LINE # 126
000F                 494     ?C0012:
                     495     ;               gOsMsgIntShed = 0;
                     496                             ; SOURCE LINE # 127
000F C200     F      497             CLR     gOsMsgIntShed
                     498     ;               if (1==gOsIntLevel)
                     499                             ; SOURCE LINE # 128
0011 E500     F      500             MOV     A,gOsIntLevel
0013 B40103          501             CJNE    A,#01H,?C0011
                     502     ;               {
                     503                             ; SOURCE LINE # 129
                     504     ;                       OsTaskSwitch();
                     505                             ; SOURCE LINE # 130
0016 120000   F      506             LCALL   _?OsTaskSwitch
                     507     ;               }
                     508                             ; SOURCE LINE # 131
                     509     ;       }
                     510                             ; SOURCE LINE # 132
0019                 511     ?C0011:
                     512     ;       ExitCritical();
                     513                             ; SOURCE LINE # 133
0019 D2AF            514             SETB    EA
                     515     ; }
                     516                             ; SOURCE LINE # 134
001B                 517     ?C0013:
001B 22              518             RET     
A51 MACRO ASSEMBLER  SW_INT                                                               11/24/2006 11:35:22 PAGE     9

                     519     ; END OF _?OsIntExit
                     520     
                     521     ; 
                     522     ; void IR_CaptureInt6() //interrupt 6
                     523     
----                 524             RSEG  ?PR?IR_CaptureInt6?SW_INT
0000                 525     IR_CaptureInt6:
                     526             USING   0
                     527                             ; SOURCE LINE # 136
                     528     ; {
                     529                             ; SOURCE LINE # 137
                     530     ;       U16 tmp;
                     531     ; #pragma asm
                     532     ;       PUSHALL
                     533               PUSHALL
                     550     ; #pragma endasm
                     551     ;       gOsIntLevel++;
                     552                             ; SOURCE LINE # 142
001D 0500     F      553             INC     gOsIntLevel
                     554     ;     if (CCF1)// PCA module 1 : IR 
                     555                             ; SOURCE LINE # 143
001F 30D905          556             JNB     CCF1,?C0015
                     557     ;     {
                     558                             ; SOURCE LINE # 144
                     559     ;         CCF1 = 0;
                     560                             ; SOURCE LINE # 145
0022 C2D9            561             CLR     CCF1
                     562     ;         IR_Decode();
                     563                             ; SOURCE LINE # 146
0024 120000   F      564             LCALL   _?IR_Decode
                     565     ;     }
                     566                             ; SOURCE LINE # 147
0027                 567     ?C0015:
                     568     ; #if 1
                     569     ;     if (CCF0)// PCA module 0 : 
                     570                             ; SOURCE LINE # 149
0027 30D81F          571             JNB     CCF0,?C0016
                     572     ;     {
                     573                             ; SOURCE LINE # 150
                     574     ;               CCF0 = 0;
                     575                             ; SOURCE LINE # 151
002A C2D8            576             CLR     CCF0
                     577     ;               tmp = CCAP0H;
                     578                             ; SOURCE LINE # 152
002C AFFA            579             MOV     R7,CCAP0H
                     580     ;---- Variable 'tmp?240' assigned to Register 'R6/R7' ----
                     581     ;       tmp = (tmp << 8) + CCAP0L; 
                     582                             ; SOURCE LINE # 153
002E EF              583             MOV     A,R7
002F FE              584             MOV     R6,A
0030 ADEA            585             MOV     R5,CCAP0L
0032 7C00            586             MOV     R4,#00H
0034 E4              587             CLR     A
0035 2D              588             ADD     A,R5
0036 FF              589             MOV     R7,A
0037 EC              590             MOV     A,R4
0038 3E              591             ADDC    A,R6
0039 FE              592             MOV     R6,A
                     593     ;               tmp += SYS_TIME_TICK;
                     594                             ; SOURCE LINE # 154
003A 7428            595             MOV     A,#028H
003C 2F              596             ADD     A,R7
003D FF              597             MOV     R7,A
003E 7402            598             MOV     A,#02H
0040 3E              599             ADDC    A,R6
0041 FE              600             MOV     R6,A
A51 MACRO ASSEMBLER  SW_INT                                                               11/24/2006 11:35:22 PAGE    10

                     601     ;               CCAP0L = tmp & 0xff;
                     602                             ; SOURCE LINE # 155
0042 AD07            603             MOV     R5,AR7
0044 EF              604             MOV     A,R7
0045 F5EA            605             MOV     CCAP0L,A
                     606     ;       CCAP0H = tmp >> 8;
                     607                             ; SOURCE LINE # 156
0047 8EFA            608             MOV     CCAP0H,R6
                     609     ;     }
                     610                             ; SOURCE LINE # 157
0049                 611     ?C0016:
                     612     ; #endif
                     613     ; //  if (CF)  // PCA timer overflow
                     614     ; //  {
                     615     ; //      CF = 0;        
                     616     ; //  }
                     617     ; 
                     618     ;       OsIntExit();
                     619                             ; SOURCE LINE # 164
0049 120000   F      620             LCALL   _?OsIntExit
                     621     ;       if (gOsIntLevel)
                     622                             ; SOURCE LINE # 165
004C E500     F      623             MOV     A,gOsIntLevel
004E 6002            624             JZ      ?C0017
                     625     ;               gOsIntLevel--;  
                     626                             ; SOURCE LINE # 166
0050 1500     F      627             DEC     gOsIntLevel
0052                 628     ?C0017:
                     629     ; #pragma asm
                     630     ;       POPALL
                     631               POPALL
                     647     ;       RETI        
006C 32              648               RETI      
                     649     ; #pragma endasm
                     650     ; }
                     651                             ; SOURCE LINE # 171
006D 22              652             RET     
                     653     ; END OF IR_CaptureInt6
                     654     
                     655     ; 
                     656     ; 
                     657     ; 
                     658     ; void SysTimer0 (void)// interrupt 1  //FC66 1ms
                     659     
----                 660             RSEG  ?PR?SysTimer0?SW_INT
0000                 661     SysTimer0:
                     662             USING   0
                     663                             ; SOURCE LINE # 175
                     664     ; { 
                     665                             ; SOURCE LINE # 176
                     666     ; #pragma asm
                     667     ;       PUSHALL
                     668               PUSHALL
                     685     ; #pragma endasm
                     686     ;       gOsIntLevel++; 
                     687                             ; SOURCE LINE # 180
001D 0500     F      688             INC     gOsIntLevel
                     689     ; 
                     690     ;       TH0     =0xFC;
                     691                             ; SOURCE LINE # 182
001F 758CFC          692             MOV     TH0,#0FCH
                     693     ;       TL0=0x67;
                     694                             ; SOURCE LINE # 183
0022 758A67          695             MOV     TL0,#067H
                     696     ;       TR0=1;
                     697                             ; SOURCE LINE # 184
A51 MACRO ASSEMBLER  SW_INT                                                               11/24/2006 11:35:22 PAGE    11

0025 D28C            698             SETB    TR0
                     699     ;       sysTimeTick++ ;
                     700                             ; SOURCE LINE # 185
0027 0500     F      701             INC     sysTimeTick+01H
0029 E500     F      702             MOV     A,sysTimeTick+01H
002B 7002            703             JNZ     ?C0030
002D 0500     F      704             INC     sysTimeTick
002F                 705     ?C0030:
                     706     ; 
                     707     ; #ifdef OS_DELAY
                     708     ;       OsDealDelay();
                     709                             ; SOURCE LINE # 188
002F 120000   F      710             LCALL   _?OsDealDelay
                     711     ; #endif
                     712     ; 
                     713     ;       sys10ms++;
                     714                             ; SOURCE LINE # 191
0032 0500     F      715             INC     sys10ms
                     716     ;       if (10==sys10ms)
                     717                             ; SOURCE LINE # 192
0034 E500     F      718             MOV     A,sys10ms
0036 B40A0B          719             CJNE    A,#0AH,?C0019
                     720     ;       {       sys10ms = 0;
                     721                             ; SOURCE LINE # 193
0039 E4              722             CLR     A
003A F500     F      723             MOV     sys10ms,A
                     724     ; #ifdef SET_TIMER
                     725     ;               Timer10msProc();
                     726                             ; SOURCE LINE # 195
003C 120000   F      727             LCALL   Timer10msProc
                     728     ; #endif        
                     729     ; //            isNeedTaskSW = 1;
                     730     ;               gOsMsgIntShed = 1;
                     731                             ; SOURCE LINE # 198
003F D200     F      732             SETB    gOsMsgIntShed
                     733     ;               OsIntExit();                    
                     734                             ; SOURCE LINE # 199
0041 120000   F      735             LCALL   _?OsIntExit
                     736     ;       }

⌨️ 快捷键说明

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