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

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

?? os_cpu_a.asm

?? ucos2shell yy code
?? 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        
        PUSHALL
        
        CLR  TR0
        MOV  TH0,#70H    ;定義Tick=50次/秒(即0.02秒/次)
        MOV  TL0,#00H    ;OS_CPU_C.C  和  OS_TICKS_PER_SEC
        SETB TR0
        
        LCALL _?OSIntEnter
        LCALL _?OSTimeTick
        LCALL _?OSIntExit
        POPALL        
        RETI
;-------------------------------------------------------------------------
        CSEG AT 0023H    ;串口中斷
        LJMP SerialISR   ;工作于系統態,無任務切換。
        RSEG ?PR?_?serial?OS_CPU_A
        
SerialISR:
        
        USING 0        
        PUSHALL
        CLR  EA
        LCALL _?serial        
        SETB EA
        POPALL        
        RETI
;-------------------------------------------------------------------------
        END
;-------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人免费观看| 免费成人美女在线观看| 欧美精选在线播放| 99re视频这里只有精品| 蜜桃av一区二区| 奇米在线7777在线精品| 成人高清视频在线| 成人午夜电影小说| av在线一区二区三区| av电影天堂一区二区在线观看| 欧美亚洲国产一卡| 精品视频一区三区九区| 欧美一级理论性理论a| 91麻豆精品国产91久久久久| 欧美一区二区三区免费大片| 91精品国产福利| 一二三四区精品视频| 亚洲午夜久久久久久久久电影院| 婷婷亚洲久悠悠色悠在线播放| 日韩电影在线一区| 精品在线亚洲视频| 国产精品一区二区x88av| 国产高清无密码一区二区三区| 成人午夜激情影院| 久久先锋影音av| 中文字幕一区二区三区四区| 综合久久综合久久| 六月丁香婷婷久久| 不卡av免费在线观看| 午夜私人影院久久久久| 亚洲免费观看高清完整版在线| 国产剧情一区在线| 欧美日韩成人一区| 久久久久亚洲蜜桃| 精品夜夜嗨av一区二区三区| 欧美日韩精品电影| 亚洲综合在线电影| 日日摸夜夜添夜夜添国产精品| 蜜臂av日日欢夜夜爽一区| 91久久国产综合久久| 欧美一区二区三区播放老司机| 亚洲成人一二三| 正在播放一区二区| 捆绑变态av一区二区三区| 日韩欧美一级在线播放| 精品一区二区三区免费播放| 欧美一区二区三区视频在线 | 日韩欧美在线123| 日韩av在线发布| 2023国产精品自拍| 东方aⅴ免费观看久久av| 欧美性极品少妇| 免费精品视频在线| 中文字幕免费不卡| 日精品一区二区三区| 91麻豆精品久久久久蜜臀| 国产自产高清不卡| 91精品在线观看入口| 精品一区二区三区欧美| 欧美激情自拍偷拍| 在线看国产一区| 亚洲欧美偷拍三级| 777奇米四色成人影色区| 国产精品资源在线| 一区二区三区四区蜜桃| 日韩一级黄色片| 不卡电影免费在线播放一区| 午夜精品久久久久| 中文字幕不卡的av| 欧美丰满一区二区免费视频| 成人一级黄色片| 午夜国产精品影院在线观看| 国产无遮挡一区二区三区毛片日本| 日韩国产在线一| 国产日韩欧美精品在线| 高清视频一区二区| 午夜电影网一区| 欧美国产精品一区二区三区| 91.成人天堂一区| 97久久精品人人澡人人爽| 日韩一区欧美二区| 亚洲精品国产第一综合99久久| 91视频一区二区| 国产精品久久久一本精品| 国产大片一区二区| 亚洲国产另类av| 国产精品午夜春色av| 成人精品视频一区二区三区尤物| 天天综合天天综合色| 自拍偷拍欧美精品| 久久综合九色综合欧美亚洲| 欧美日韩一区在线| 91麻豆精品秘密| 成人一区二区三区| 国产一区二区三区在线观看精品| 久久亚洲春色中文字幕久久久| 欧美中文字幕一区| 色偷偷一区二区三区| 午夜视频久久久久久| 亚洲视频一区二区免费在线观看| 2020日本不卡一区二区视频| 在线播放中文一区| 欧美图区在线视频| 99久久综合精品| 成人性生交大片免费看中文| 成人短视频下载| 国产精品18久久久久久久久 | 国产精品一区三区| 麻豆传媒一区二区三区| 午夜精品爽啪视频| 亚洲福利一区二区| 性久久久久久久| 亚洲一级不卡视频| 五月天一区二区三区| 亚洲电影第三页| 亚洲国产成人av| 五月激情综合网| 三级久久三级久久久| 日韩av一区二区在线影视| 天天色 色综合| 免费观看在线综合色| 另类小说图片综合网| 国模一区二区三区白浆| 国产.欧美.日韩| av一区二区三区四区| 色婷婷亚洲精品| 欧美日韩在线免费视频| 欧美日韩精品是欧美日韩精品| 欧美日韩成人综合在线一区二区 | 色悠久久久久综合欧美99| 色国产精品一区在线观看| 欧美三级蜜桃2在线观看| 91精品国产欧美日韩| 欧美sm美女调教| 色中色一区二区| 欧美人伦禁忌dvd放荡欲情| 日韩丝袜情趣美女图片| 亚洲精品一区二区三区福利| 欧美日韩一区二区三区在线 | 色综合久久中文综合久久97| 91久久精品国产91性色tv| 欧美一区二区三区精品| 国产视频视频一区| 亚洲精品成人精品456| 视频一区欧美精品| 国产成人av电影在线| 欧美在线影院一区二区| 国产精品久久看| 奇米一区二区三区av| 国产精品77777| 欧美在线三级电影| 欧美不卡123| 亚洲精品伦理在线| 久久国产精品一区二区| 99久久er热在这里只有精品15 | 欧美午夜在线一二页| 精品免费日韩av| 亚洲乱码中文字幕| 久久97超碰色| 欧美日韩激情在线| 中文av字幕一区| 日本不卡不码高清免费观看| 99热这里都是精品| 精品国产污网站| 亚洲高清久久久| 成人性生交大片免费看视频在线| 欧美精品一卡二卡| |精品福利一区二区三区| 国产一区二区三区四| 欧美日韩精品专区| 亚洲男人的天堂在线观看| 国产激情一区二区三区| 欧美二区三区的天堂| 亚洲欧美日韩国产综合| 国产成人啪午夜精品网站男同| 日韩午夜在线观看| 一区二区三区鲁丝不卡| 成人免费视频一区二区| 久久一日本道色综合| 男男gaygay亚洲| 在线播放日韩导航| 一区二区高清免费观看影视大全 | 国产亚洲欧美日韩在线一区| 午夜视频一区二区三区| 91久久精品网| 一区二区三区在线影院| 97精品国产露脸对白| 国产精品区一区二区三区| 国产又粗又猛又爽又黄91精品| 欧美精品在线观看播放| 亚洲sss视频在线视频| 91蝌蚪国产九色| 亚洲激情校园春色| 99国产欧美久久久精品| 国产精品国模大尺度视频| 成人中文字幕合集| 国产精品乱码一区二三区小蝌蚪| 国产91精品免费| 国产精品久久毛片a| 99国产精品99久久久久久|