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

📄 os_18c801_a.lst

📁 本人编写的无线电话程序,给予PIC18C801设计,包括了uCOS的移植以及菜单,自己设计的拼音注入法,完整地一级汉字库,希望对大家有所帮助
💻 LST
📖 第 1 页 / 共 5 页
字号:
                      00121 ;           a) //Call OSTaskSwHook() then,
                      00122 ;           b) Set OSRunning to TRUE,
                      00123 ;           c) Switch to the highest priority task.
                      00124 ;*******************************************************************************************************
                            **
                      00125 
                      00126 
                      00127 ASMCODE CODE
                      00128 ;*************************************************************************************************
000000                00129 OSStartHighRdy
000000 C??? FFF6      00130         movff   OSTCBHighRdy,TBLPTRL
000004 C??? FFF7      00131         movff   OSTCBHighRdy+1,TBLPTRH
000008 C??? FFF8      00132         movff   OSTCBHighRdy+2,TBLPTRU
                      00133         
                      00134         ;read the stack's address on ext-RAM
00000C 0009           00135         tblrd*+
00000E CFF5 FFF3      00136         movff   TABLAT,PRODL    
000012 0009           00137         tblrd*+
000014 CFF5 FFF4      00138         movff   TABLAT,PRODH
000018 0008           00139         tblrd*                                                  ;the UPPER byte is in TABLAT
                      00140 
                      00141         ;make TBLPTR point to the external stack
00001A CFF5 FFF8      00142         movff   TABLAT,TBLPTRU
00001E CFF4 FFF7      00143         movff   PRODH,TBLPTRH
000022 CFF3 FFF6      00144         movff   PRODL,TBLPTRL
                      00145 
                      00146         ;Set OSRunning as TRUE
000026 0E01           00147         movlw   0x01
000028 CFE8 F???      00148         movff   WREG,OSRunning                  ;OSRunning=TRUE
                      00149 
                      00150         ;put the task's address to TOS of hard-stack
00002C 2AFC           00151         incf    STKPTR,0x01,0                   ;STKPTR++
00002E 0009           00152         tblrd*+
000030 50F5           00153         movf    TABLAT,0x00,0
000032 6EFD           00154         movwf   TOSL,0
000034 0009           00155         tblrd*+
000036 50F5           00156         movf    TABLAT,0x00,0
000038 6EFE           00157         movwf   TOSH,0
00003A 0008           00158         tblrd*
00003C 50F5           00159         movf    TABLAT,0x00,0
00003E 6EFF           00160         movwf   TOSU,0                                  ;There must be only ONE address--startup address
                             of a task
                      00161 
000040 CFE1 F???      00162         movff   FSR1L,OSSysStkBase              ;Save the base address,which is used to get software-sta
MPASM 03.50 Released                          OS_18C801_A.ASM   7-16-2003  20:27:32         PAGE  6


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                            ck depth
000044 0010           00163         retfie  0
                      00164 ;**************************************************************************************************
                      00165 
                      00166 
                      00167 
                      00168 
                      00169 ;*******************************************************************************************************
                            **
                      00170 ;                                PERFORM A CONTEXT SWITCH (From task level)
                      00171 ;                                           void OSCtxSw(void)
                      00172 ;
                      00173 ; Note(s): 1) Upon entry, 
                      00174 ;             OSTCBCur     points to the OS_TCB of the task to suspend
                      00175 ;             OSTCBHighRdy points to the OS_TCB of the task to resume
                      00176 ;
                      00177 ;          2) The stack frame of the task to suspend looks as follows:
                      00178 ;
                      00179 ;                 SP -> OFFSET  of task to suspend    (Low memory)
                      00180 ;                       SEGMENT of task to suspend      
                      00181 ;                       PSW     of task to suspend    (High memory)  
                      00182 ;
                      00183 ;          3) The stack frame of the task to resume looks as follows:
                      00184 ; 
                      00185 ;Software stack in ONCHIP RAM:
                      00186 ;Shift_Addr:    0x00--------0x19
                      00187 ;Content:               SFRs,AARGBx,software_stack_depth and hardware_stack_depth
                      00188 ;Shift_Addr:    0x1A--------0x1F
                      00189 ;Content:               Reserved
                      00190 ;Hardware stack in External RAM
                      00191 ;Shift_Addr:    0x00--------0xBF
                      00192 ;Content:               GPRs
                      00193 ;Shift_Addr:    0xC0--------0xFF
                      00194 ;Content:               hardware_stack
                      00195 ;Following is the details:
                      00196 ;-----------------------------------------------------------------------------
                      00197 ;Shift_Addr:    00              01              02              03              04              05      
                                    06              07
                      00198 ;Register:              STATUS  BSR             WREG    FSR2H   FSR2L   FSR1H   FSR1L   FSR0H
                      00199 ;-----------------------------------------------------------------------------
                      00200 ;Shift_Addr:    08              09              0A              0B              0C              0D      
                                    0E              0F
                      00201 ;Register:              FSR0L   STKPTR  PRODH   PRODL   TBLPTRU TBLPTRH TBLPTRL TABLAT
                      00202 ;-----------------------------------------------------------------------------
                      00203 ;Shift_Addr:    10              11              12              13              14              15      
                                    16              17
                      00204 ;Register:              AARGB0  AARGB1  AARGB2  AARGB3  AARGB4  AARGB5  AARGB6  AARGB7
                      00205 ;-----------------------------------------------------------------------------
                      00206 ;Shift_Addr:    18              19              1A              1B              1C              1D      
                                    1E              1F
                      00207 ;Register:              DepthSf DepthHd (REST_ONCHIP_STACK_SFR bytes reserved......)
                      00208 ;-----------------------------------------------------------------------------
                      00209 ;Shift_Addr:    20              21              22              23              24              25      
MPASM 03.50 Released                          OS_18C801_A.ASM   7-16-2003  20:27:32         PAGE  7


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                                    26              27
                      00210 ;Register:              BOS_1L  BOS_1H  BOS_1U  BOS_2L  BOS_2H  BOS_2U  BOS_3L  BOS_3H
                      00211 ;-----------------------------------------------------------------------------
                      00212 ;Shift_Addr:    28              29              2A              2B              2C              2D      
                                    2E              2F
                      00213 ;Register:              BOS_3U  (MAX_ONCHIP_STACK_ADDR address at total......)
                      00214 ;-----------------------------------------------------------------------------
                      00215 ;Shift_Addr:    30              31              32              33              34              35      
                                    36              37
                      00216 ;Register:              
                      00217 ;-----------------------------------------------------------------------------
                      00218 ;Shift_Addr:    38              39              3A              3B              3C              3D      
                                    3E              3F
                      00219 ;Register:
                      00220 ;*******************************************************************************************************
                            **
                      00221 
000046                00222 OSCtxSw
                      00223         ;save some necessary registers to system soft-stack
                      00224         lpush_all
000046 CFD8 FFE4          M         movff   STATUS,PREINC1          ;STATUS
00004A CFE0 FFE4          M         movff   BSR,PREINC1                     ;BSR
00004E 6EE4               M         movwf   PREINC1,0                       ;WREG
000050 CFDA FFE4          M         movff   FSR2H,PREINC1           ;FSR2H
000054 CFD9 FFE4          M         movff   FSR2L,PREINC1           ;FSR2L
000058 CFEA FFE4          M         movff   FSR0H,PREINC1           ;FSR0H
00005C CFE9 FFE4          M         movff   FSR0L,PREINC1           ;FSR0L
000060 CFF4 FFE4          M         movff   PRODH,PREINC1           ;PRODH
000064 CFF3 FFE4          M         movff   PRODL,PREINC1           ;PRODL
000068 CFF8 FFE4          M         movff   TBLPTRU,PREINC1         ;TBLPTRU
00006C CFF7 FFE4          M         movff   TBLPTRH,PREINC1         ;TBLPTRH
000070 CFF6 FFE4          M         movff   TBLPTRL,PREINC1         ;TBLPTRL
000074 CFF5 FFE4          M         movff   TABLAT,PREINC1          ;TABLAT
000078 CFFA FFE4          M         movff   PCLATH,PREINC1          ;PCLATH
00007C CFFB FFE4          M         movff   PCLATU,PREINC1          ;PCLATU
000080 52E6               M         movf    POSTINC1,0x01,0         ;FSR1L++
                          M         ;
                          M         ;Save 0x2B Registers in BANK-0 from 0x000-0x02A
000082 6AEA               M         clrf    FSR0H,0
000084 6AE9               M         clrf    FSR0L,0
000086 0E38               M         movlw   SAVE_BANK0_PUSH_NUM
000088                    M IntPushRegsInBank0:
000088 CFEE FFE6          M         movff   POSTINC0,POSTINC1
00008C 04E8               M         decf    WREG,0
00008E E1??               M         bnz             IntPushRegsInBank0
                      00225 
000090                00226 GetExtStackAddr:
000090 C??? FFF6      00227         movff   OSTCBCur,TBLPTRL
000094 C??? FFF7      00228         movff   OSTCBCur+1,TBLPTRH
000098 C??? FFF8      00229         movff   OSTCBCur+2,TBLPTRU
00009C 0009           00230         tblrd*+
00009E CFF5 FFF3      00231         movff   TABLAT,PRODL    
0000A2 0009           00232         tblrd*+
MPASM 03.50 Released                          OS_18C801_A.ASM   7-16-2003  20:27:32         PAGE  8


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

0000A4 CFF5 FFF4      00233         movff   TABLAT,PRODH
0000A8 0008           00234         tblrd*
0000AA CFF5 FFF8      00235         movff   TABLAT,TBLPTRU
0000AE CFF5 FFE7      00236         movff   TABLAT,INDF1                    ;TBLPTRU --> [FSR1] for later use
0000B2 CFF4 FFF7      00237         movff   PRODH,TBLPTRH
0000B6 CFF3 FFF6      00238         movff   PRODL,TBLPTRL
                      00239 
0000BA                00240 SaveHdStack:
0000BA 0E??           00241         movlw   high StackDepth
0000BC 6EEA           00242         movwf   FSR0H,0
0000BE 0E??           00243         movlw   low     StackDepth
0000C0 2500           00244         addwf   OSPrioCur,0x00,1
0000C2 2500           00245         addwf   OSPrioCur,0x00,1
0000C4 6EE9           00246         movwf   FSR0L,0                                 ;FSR0--> Hardware_Stack_Depth
                      00247         
0000C6 9EF2           00248         bcf             INTCON,GIEH,0
0000C8 0E03           00249         movlw   TASK_HD_STK_PTR                 ;3-> main()'s caller;  OSStart()'s;  OSStartHighRdy()'s
0000CA 5CFC           00250         subwf   STKPTR,0x00,0                   ;pointer numbers is in WREG( multiplied by 3bytes each o
                            ne)
0000CC 6EEF           00251         movwf   INDF0,0                                 ;save hard-stack's depth
0000CE 0E03           00252         movlw   TASK_HD_STK_PTR
0000D0 6EFC           00253         movwf   STKPTR                                  ;Adjust STKPTR,ready to save
0000D2 50EE           00254         movf    POSTINC0,0x00,0                 ;FSR0--> Software_Stack_Depth
0000D4                00255 HdStk2ExtRAM:
0000D4 2AFC           00256         incf    STKPTR,0x01,0                   ;STKPTR++
0000D6 CFFD FFF5      00257         movff   TOSL,TABLAT
0000DA 000D           00258         tblwt*+
0000DC CFFE FFF5      00259         movff   TOSH,TABLAT
0000E0 000D           00260         tblwt*+
0000E2 CFFF FFF5      00261         movff   TOSU,TABLAT
0000E6 000D           00262         tblwt*+
0000E8 04E8           00263         decf    WREG,0x00,0
0000EA E1??           00264         bnz             HdStk2ExtRAM
0000EC 8EF2           00265         bsf             INTCON,GIEH,0
                      00266 
                      00267         
0000EE                00268 SaveSoftStack:
0000EE CFE7 FFF8      00269         movff   INDF1,TBLPTRU           ;FSR1 is 1-byte higher than originally value after this line
0000F2 CFF4 FFF7      00270         movff   PRODH,TBLPTRH
0000F6 CFF3 FFF6      00271         movff   PRODL,TBLPTRL
0000FA 0E60           00272         movlw   EXT_SOFT_STK_SHIFT
0000FC 26F6           00273         addwf   TBLPTRL,0x01,0
0000FE 0E00           00274         movlw   0x00
000100 22F7           00275         addwfc  TBLPTRH,0x01,0
000102 22F8           00276         addwfc  TBLPTRU,0x01,0
                      00277         
000104 C??? FFE8      00278         movff   OSSysStkBase,WREG               ;OSSysStkBase-->WREG
000108 6ED9           00279         movwf   FSR2L,0                                 ;Start location
00010A 5CE1           00280         subwf   FSR1L,0,0
00010C 6EEF           00281         movwf   INDF0,0                                 ;software stack depth
00010E CFE2 FFDA      00282         movff   FSR1H,FSR2H
000112                00283 SfStk2ExtRAM:
000112 CFDE FFF5      00284         movff   POSTINC2,TABLAT
MPASM 03.50 Released                          OS_18C801_A.ASM   7-16-2003  20:27:32         PAGE  9


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

000116 000D           00285         tblwt*+
000118 04E8           00286         decf    WREG,0x00,0
00011A E1??           00287         bnz             SfStk2ExtRAM
                      00288 
                      00289         ;load new task's TCB    
00011C                00290 ChangeCurrentTask:
00011C 0E03           00291         movlw   TASK_HD_STK_PTR
00011E 6EFC           00292         movwf   STKPTR                                  ;Adjust STKPTR,ready to save
000120 C??? F???      00293         movff   OSTCBHighRdy,OSTCBCur
000124 C??? FFF6      00294         movff   OSTCBHighRdy,TBLPTRL
000128 C??? F???      00295         movff   OSTCBHighRdy+1,OSTCBCur+1
00012C C??? FFF7      00296         movff   OSTCBHighRdy+1,TBLPTRH
000130 C??? F???      00297         movff   OSTCBHighRdy+2,OSTCBCur+2
000134 C??? FFF8      00298         movff   OSTCBHighRdy+2,TBLPTRU
000138 0009           00299         tblrd*+
00013A CFF5 FFF3      00300         movff   TABLAT,PRODL    
00013E 0009           00301         tblrd*+
000140 CFF5 FFF4      00302         movff   TABLAT,PRODH
000144 0008           00303         tblrd*                                                  ;the UPPER byte is in TABLAT,MUST be 0x0
                            0
000146 CFF5 FFF8      00304         movff   TABLAT,TBLPTRU
00014A CFF5 FFE7      00305         movff   TABLAT,INDF1
00014E CFF4 FFF7      00306         movff   PRODH,TBLPTRH
000152 CFF3 FFF6      00307         movff   PRODL,TBLPTRL

⌨️ 快捷键说明

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