亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? os_cpu_a.asm

?? uC/OS-II在51上移植的完整源代碼V1.0
?? ASM
字號:
;/*
;*********************************************************************************************************
;*                                               uC/OS-II
;*                                               實時內核
;*
;*                        (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
;*                                               版權所有
;*
;*                                            MCU-51 專用代碼
;*                                           KEIL C51大模式編譯
;*
;* 文件名 : OS_CPU_A.ASM
;* 作者   : Jean J. Labrosse
;* 改編   : 楊屹 gdtyy@ri.gdt.com.cn 巨龍公司系統集成開發部 2002.09.27
;*********************************************************************************************************
;*/

;偽指令詳細用法請查A51.PDF文件
;程序結構詳見《uC/OS-II》193-198頁

;不用此語句!!! $CASE    ;標號和變量名區分大小寫

$NOMOD51
EA	BIT	0A8H.7
SP	DATA	081H
B	DATA	0F0H
ACC	DATA	0E0H
DPH	DATA	083H
DPL	DATA	082H
PSW	DATA	0D0H
TR0	BIT	088H.4
TH0	DATA	08CH
TL0	DATA	08AH

        NAME OS_CPU_A    ;模塊名
        
;定義重定位段
?PR?OSStartHighRdy?OS_CPU_A    SEGMENT CODE
?PR?OSCtxSw?OS_CPU_A           SEGMENT CODE
?PR?OSIntCtxSw?OS_CPU_A        SEGMENT CODE
?PR?OSTickISR?OS_CPU_A         SEGMENT CODE

?PR?_?serial?OS_CPU_A          SEGMENT CODE
        
;聲明引用全局變量和外部子程序
        EXTRN DATA  (?C_XBP)     ;仿真堆棧指針用于重入局部變量保存

        EXTRN IDATA (OSTCBCur)
        EXTRN IDATA (OSTCBHighRdy)
        EXTRN IDATA (OSRunning)
        EXTRN IDATA (OSPrioCur)
        EXTRN IDATA (OSPrioHighRdy)
    
        EXTRN CODE  (_?OSTaskSwHook)
        EXTRN CODE  (_?serial)
        EXTRN CODE  (_?OSIntEnter)
        EXTRN CODE  (_?OSIntExit)
        EXTRN CODE  (_?OSTimeTick)        
            
;對外聲明4個不可重入函數
        PUBLIC OSStartHighRdy
        PUBLIC OSCtxSw
        PUBLIC OSIntCtxSw
        PUBLIC OSTickISR
        
        ;PUBLIC SerialISR        
    
;分配堆棧空間。只關心大小,堆棧起點由keil決定,通過標號可以獲得keil分配的SP起點。
?STACK SEGMENT IDATA
        RSEG ?STACK
OSStack:
        DS 40H
OSStkStart IDATA OSStack-1

;定義壓棧出棧宏
PUSHALL    MACRO
        PUSH PSW
        PUSH ACC
        PUSH B
        PUSH DPL
        PUSH DPH
        MOV  A,R0   ;R0-R7入棧
        PUSH ACC
        MOV  A,R1
        PUSH ACC
        MOV  A,R2
        PUSH ACC
        MOV  A,R3
        PUSH ACC
        MOV  A,R4
        PUSH ACC
        MOV  A,R5
        PUSH ACC
        MOV  A,R6
        PUSH ACC
        MOV  A,R7
        PUSH ACC
        ;PUSH SP    ;不必保存SP,任務切換時由相應程序調整
        ENDM
    
POPALL    MACRO
        ;POP  ACC   ;不必保存SP,任務切換時由相應程序調整
        POP  ACC    ;R0-R7出棧
        MOV  R7,A
        POP  ACC
        MOV  R6,A
        POP  ACC
        MOV  R5,A
        POP  ACC
        MOV  R4,A
        POP  ACC
        MOV  R3,A
        POP  ACC
        MOV  R2,A
        POP  ACC
        MOV  R1,A
        POP  ACC
        MOV  R0,A
        POP  DPH
        POP  DPL
        POP  B
        POP  ACC
        POP  PSW
        ENDM
    
;子程序
;-------------------------------------------------------------------------
        RSEG ?PR?OSStartHighRdy?OS_CPU_A
OSStartHighRdy:
        USING 0    ;上電后51自動關中斷,此處不必用CLR EA指令,因為到此處還未開中斷,本程序退出后,開中斷。
        LCALL _?OSTaskSwHook

OSCtxSw_in:
    
        ;OSTCBCur ===> DPTR  獲得當前TCB指針,詳見C51.PDF第178頁
        MOV  R0,#LOW (OSTCBCur) ;獲得OSTCBCur指針低地址,指針占3字節。+0類型+1高8位數據+2低8位數據
        INC  R0
        MOV  DPH,@R0    ;全局變量OSTCBCur在IDATA中
        INC  R0
        MOV  DPL,@R0
    
        ;OSTCBCur->OSTCBStkPtr ===> DPTR  獲得用戶堆棧指針
        INC  DPTR        ;指針占3字節。+0類型+1高8位數據+2低8位數據
        MOVX A,@DPTR     ;.OSTCBStkPtr是void指針
        MOV  R0,A
        INC  DPTR
        MOVX A,@DPTR
        MOV  R1,A
        MOV  DPH,R0
        MOV  DPL,R1
    
        ;*UserStkPtr ===> R5  用戶堆棧起始地址內容(即用戶堆棧長度放在此處)  詳見文檔說明  指針用法詳見C51.PDF第178頁    
        MOVX A,@DPTR     ;用戶堆棧中是unsigned char類型數據
        MOV  R5,A        ;R5=用戶堆棧長度
    
        ;恢復現場堆棧內容
        MOV  R0,#OSStkStart
        
restore_stack:
    
        INC  DPTR
        INC  R0
        MOVX A,@DPTR
        MOV  @R0,A
        DJNZ R5,restore_stack
    
        ;恢復堆棧指針SP
        MOV  SP,R0
    
        ;恢復仿真堆棧指針?C_XBP        
        INC  DPTR
        MOVX A,@DPTR
        MOV  ?C_XBP,A    ;?C_XBP 仿真堆棧指針高8位
        INC  DPTR
        MOVX A,@DPTR
        MOV  ?C_XBP+1,A  ;?C_XBP 仿真堆棧指針低8位
    
        ;OSRunning=TRUE
        MOV  R0,#LOW (OSRunning)
        MOV  @R0,#01
    
        POPALL
        SETB EA    ;開中斷
        RETI
;-------------------------------------------------------------------------
        RSEG ?PR?OSCtxSw?OS_CPU_A
OSCtxSw:    
        PUSHALL
    
OSIntCtxSw_in:
    
        ;獲得堆棧長度和起址
        MOV  A,SP
        CLR  C
        SUBB A,#OSStkStart
        MOV  R5,A     ;獲得堆棧長度        
    
        ;OSTCBCur ===> DPTR  獲得當前TCB指針,詳見C51.PDF第178頁
        MOV  R0,#LOW (OSTCBCur) ;獲得OSTCBCur指針低地址,指針占3字節。+0類型+1高8位數據+2低8位數據
        INC  R0
        MOV  DPH,@R0    ;全局變量OSTCBCur在IDATA中
        INC  R0
        MOV  DPL,@R0
    
        ;OSTCBCur->OSTCBStkPtr ===> DPTR  獲得用戶堆棧指針
        INC  DPTR        ;指針占3字節。+0類型+1高8位數據+2低8位數據
        MOVX A,@DPTR     ;.OSTCBStkPtr是void指針
        MOV  R0,A
        INC  DPTR
        MOVX A,@DPTR
        MOV  R1,A
        MOV  DPH,R0
        MOV  DPL,R1
        
        ;保存堆棧長度
        MOV  A,R5
        MOVX @DPTR,A
    
        MOV  R0,#OSStkStart  ;獲得堆棧起址
save_stack:
    
        INC  DPTR
        INC  R0
        MOV  A,@R0
        MOVX @DPTR,A
        DJNZ R5,save_stack
        
        ;保存仿真堆棧指針?C_XBP
        INC  DPTR
        MOV  A,?C_XBP    ;?C_XBP 仿真堆棧指針高8位
        MOVX @DPTR,A
        INC  DPTR
        MOV  A,?C_XBP+1  ;?C_XBP 仿真堆棧指針低8位
        MOVX @DPTR,A        
    
        ;調用用戶程序
        LCALL _?OSTaskSwHook
        
        ;OSTCBCur = OSTCBHighRdy
        MOV  R0,#OSTCBCur
	MOV  R1,#OSTCBHighRdy
	MOV  A,@R1
        MOV  @R0,A
        INC  R0
	INC  R1
	MOV  A,@R1
        MOV  @R0,A
        INC  R0
	INC  R1
	MOV  A,@R1
        MOV  @R0,A
                
        ;OSPrioCur = OSPrioHighRdy  使用這兩個變量主要目的是為了使指針比較變為字節比較,以便節省時間。
        MOV  R0,#OSPrioCur
	MOV  R1,#OSPrioHighRdy
	MOV  A,@R1
        MOV  @R0,A
        
        LJMP OSCtxSw_in
;-------------------------------------------------------------------------
        RSEG ?PR?OSIntCtxSw?OS_CPU_A
        
OSIntCtxSw:

        ;調整SP指針去掉在調用OSIntExit(),OSIntCtxSw()過程中壓入堆棧的多余內容
        ;SP=SP-4

        MOV  A,SP
        CLR  C
        SUBB A,#4
        MOV  SP,A
        
        LJMP OSIntCtxSw_in
;-------------------------------------------------------------------------
        CSEG AT 000BH    ;OSTickISR
        LJMP OSTickISR   ;使用定時器0
        RSEG ?PR?OSTickISR?OS_CPU_A

OSTickISR:        
        
        USING 0
        CLR  EA    ;先關中斷,以防中斷嵌套。
        PUSHALL
        LCALL _?OSIntEnter    ;監視中斷嵌套
        
        CLR  TR0
        MOV  TH0,#70H    ;定義Tick=50次/秒(即0.02秒/次)
        MOV  TL0,#00H    ;OS_CPU_C.C  和  OS_TICKS_PER_SEC
        SETB TR0        
        
        LCALL _?OSTimeTick
        LCALL _?OSIntExit
        POPALL        
        RETI
;-------------------------------------------------------------------------
        CSEG AT 0023H    ;串口中斷
        LJMP SerialISR   ;工作于系統態,無任務切換。
        RSEG ?PR?_?serial?OS_CPU_A
        
SerialISR:
        
        USING 0
        CLR  EA    ;先關中斷,以防中斷嵌套。
        PUSHALL
        LCALL _?serial        
        SETB EA
        POPALL        
        RETI
;-------------------------------------------------------------------------
        END
;-------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月天久久比比资源色| 日本不卡123| 日本一区二区免费在线| 26uuu亚洲| 久久免费电影网| 久久午夜羞羞影院免费观看| 久久久久国产成人精品亚洲午夜| www成人在线观看| 国产亚洲综合在线| 欧美国产一区二区在线观看| 国产精品九色蝌蚪自拍| 亚洲精品欧美综合四区| 日韩极品在线观看| 奇米综合一区二区三区精品视频| 久久激情五月婷婷| 高清国产一区二区| 99这里只有久久精品视频| 色婷婷亚洲综合| 欧美一区二区三区婷婷月色| 久久无码av三级| 国产精品欧美综合在线| 一区二区三区**美女毛片| 日韩av中文在线观看| 成人丝袜视频网| 欧美色综合天天久久综合精品| 91精品婷婷国产综合久久性色 | 国产中文字幕精品| 北条麻妃一区二区三区| 欧美日本视频在线| 国产亚洲欧美日韩在线一区| 夜夜嗨av一区二区三区四季av| 日韩在线一区二区| 成人综合在线视频| 欧美一区二区三区四区在线观看| 国产蜜臀97一区二区三区| 午夜精品123| eeuss鲁片一区二区三区在线观看| 欧美日韩日日摸| 国产精品伦理在线| 久久国产精品一区二区| 欧美在线观看视频一区二区三区| 精品播放一区二区| 亚洲一区二区三区爽爽爽爽爽| 国模冰冰炮一区二区| 欧美日韩一级大片网址| 国产精品日韩精品欧美在线| 另类小说综合欧美亚洲| 欧美网站一区二区| 亚洲青青青在线视频| 国产精品99久久久| 精品三级av在线| 天天亚洲美女在线视频| 色爱区综合激月婷婷| 国产日韩成人精品| 国产麻豆精品久久一二三| 欧美高清激情brazzers| 亚洲一区二区四区蜜桃| 99re这里只有精品首页| 国产精品久久久久影视| 韩国女主播一区二区三区| 欧美精品精品一区| 亚洲国产精品人人做人人爽| 91影院在线免费观看| 欧美国产日本韩| 国产成人免费高清| 国产精品色哟哟网站| 国产成人亚洲综合色影视| 久久婷婷综合激情| 国产原创一区二区三区| 欧美成人国产一区二区| 免费观看一级特黄欧美大片| 91麻豆精品国产91久久久久 | 国产精品久久久久久久久图文区| 国产成人av电影在线观看| 精品成人免费观看| 国产成人亚洲综合a∨婷婷| 久久综合九色综合97婷婷女人 | 午夜精品久久久久久久久久 | 在线日韩av片| 亚洲综合久久久| 精品视频免费看| 五月激情综合色| 欧美成人一区二区三区片免费| 日韩**一区毛片| 亚洲精品一区二区三区精华液| 久久se这里有精品| 国产亚洲欧美日韩日本| 成人97人人超碰人人99| 亚洲蜜臀av乱码久久精品| 欧美午夜寂寞影院| 另类综合日韩欧美亚洲| 欧美极品xxx| 在线观看免费一区| 看电视剧不卡顿的网站| 国产欧美日韩综合| 色琪琪一区二区三区亚洲区| 丝袜a∨在线一区二区三区不卡| 精品福利av导航| 99国产一区二区三精品乱码| 亚洲小说春色综合另类电影| 日韩欧美国产高清| 成人黄色一级视频| 日韩在线一区二区三区| 日本一区二区视频在线| 欧美色网一区二区| 国产一区二区导航在线播放| 一区二区三区精品在线观看| 欧美一级一区二区| av成人老司机| 麻豆91免费观看| 一区二区三区四区国产精品| 日韩欧美国产一区在线观看| 99精品热视频| 极品美女销魂一区二区三区免费| 国产精品国产馆在线真实露脸| 91.xcao| 成人国产视频在线观看| 免费成人性网站| 又紧又大又爽精品一区二区| 久久精品人人做| 91精品国产综合久久久久久漫画| 成人免费精品视频| 热久久免费视频| 亚洲v日本v欧美v久久精品| 欧美国产一区二区在线观看| 日韩精品综合一本久道在线视频| 91麻豆精品秘密| 国产福利一区二区三区| 久久超级碰视频| 性做久久久久久免费观看欧美| 国产精品的网站| 久久精品夜色噜噜亚洲aⅴ| 日韩一级欧美一级| 欧美日韩另类国产亚洲欧美一级| 91丨porny丨国产| 成人午夜精品在线| 国产精品18久久久久久vr| 视频一区视频二区中文| 亚洲精品ww久久久久久p站| 国产女同性恋一区二区| 国产欧美中文在线| 久久久久国产免费免费| 欧美精品一区二区蜜臀亚洲| 欧美一区二区在线播放| 4438x亚洲最大成人网| 欧美久久久久久久久久| 在线播放国产精品二区一二区四区| 91天堂素人约啪| 91麻豆免费看片| 91成人看片片| 欧美日韩国产色站一区二区三区| 色悠悠久久综合| 91官网在线观看| 欧美色视频在线| 欧美久久婷婷综合色| 69久久99精品久久久久婷婷| 在线不卡中文字幕播放| 欧美一区二区三区思思人| 日韩美女在线视频| 久久综合九色综合97婷婷女人| 国产日韩欧美麻豆| 亚洲欧美影音先锋| 一区二区三区精品在线观看| 日韩精品福利网| 国产一本一道久久香蕉| 97久久超碰精品国产| 在线观看91视频| 日韩一二三区不卡| 久久综合色综合88| 18成人在线观看| 日韩二区三区四区| 国产精品亚洲第一区在线暖暖韩国| 成人精品在线视频观看| 在线免费观看日韩欧美| 日韩免费观看高清完整版| 亚洲国产成人午夜在线一区 | 欧美一级高清大全免费观看| 精品少妇一区二区三区在线视频| 国产精品色眯眯| 亚洲成人动漫av| 国产999精品久久久久久| 色一情一伦一子一伦一区| 日韩欧美色综合| 亚洲精品视频在线看| 另类小说欧美激情| 99re热视频这里只精品| 欧美一区二区女人| 国产精品初高中害羞小美女文| 丝袜国产日韩另类美女| 成a人片国产精品| 欧美一区二区视频在线观看2020| 国产精品素人一区二区| 日韩电影在线一区二区三区| 成人app网站| ww久久中文字幕| 天天免费综合色| 91亚洲精品乱码久久久久久蜜桃| 日韩女优毛片在线| 午夜免费欧美电影| 91天堂素人约啪|