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

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

?? os_cpu_a.asm

?? 一共40M 不能貼在論壇中。絕對好東西。要得話留下email
?? 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)     ;仿真堆棧指針用于重入局部變量保存,為V2.51能被C使用定義在本模塊中

        EXTRN IDATA (OSTCBCur)
        EXTRN IDATA (OSTCBHighRdy)
        EXTRN IDATA (OSRunning)
        EXTRN IDATA (OSPrioCur)
        EXTRN IDATA (OSPrioHighRdy)
    
        EXTRN CODE  (_?OSTaskSwHook)
        EXTRN CODE  (_?OSIntEnter)
        EXTRN CODE  (_?OSIntExit)
        EXTRN CODE  (_?OSTimeTick)        
;        EXTRN CODE  (_?serial)
            
;對外聲明4個不可重入函數
        PUBLIC OSStartHighRdy
        PUBLIC OSCtxSw
        PUBLIC OSIntCtxSw

;        PUBLIC OSTickISR
;        PUBLIC SerialISR        


;分配堆??臻g。只關心大小,堆棧起點由keil決定,通過標號可以獲得keil分配的SP起點。
?STACK SEGMENT IDATA
        RSEG ?STACK
OSStack:
        DS 40H
OSStkStart IDATA OSStack-1

;定義壓棧出棧宏
PUSHALL    MACRO
        PUSH ACC
        PUSH B
        PUSH DPH
        PUSH DPL
        PUSH PSW
        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  PSW
        POP  DPL
        POP  DPH
        POP  B
        POP  ACC
        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


;以下的中斷處理函數移到C程序中,并按2.51格式改動
;-------------------------------------------------------------------------
;        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一区二区三区免费野_久草精品视频
成人国产视频在线观看| 成人亚洲一区二区一| 日韩一区欧美二区| 琪琪一区二区三区| 韩国精品主播一区二区在线观看| 国产一级精品在线| 色偷偷成人一区二区三区91| 欧美视频日韩视频| 精品欧美久久久| 亚洲欧美日韩国产另类专区 | 亚洲欧美另类久久久精品2019| 亚洲愉拍自拍另类高清精品| 亚洲bt欧美bt精品777| 国产激情精品久久久第一区二区| 国产91丝袜在线18| 欧美一区二区三区播放老司机| 久久久亚洲精华液精华液精华液 | 成人午夜免费电影| 欧美精选一区二区| 亚洲色图在线视频| 粉嫩高潮美女一区二区三区| 欧美一级片在线| 午夜视频在线观看一区二区| 本田岬高潮一区二区三区| 日韩欧美在线网站| 日本不卡不码高清免费观看| 欧美图区在线视频| 伊人夜夜躁av伊人久久| 成人一道本在线| 国产精品无码永久免费888| 五月综合激情日本mⅴ| 成人性生交大片免费看在线播放| 亚洲综合激情网| 日本韩国一区二区| 国产精品久久久久桃色tv| 国产美女一区二区| 国产亚洲综合色| www.在线欧美| 一区二区三区毛片| 精品视频免费看| 久久av老司机精品网站导航| 精品久久久网站| 成人中文字幕在线| 亚洲成年人影院| 欧美精品一区二区三区很污很色的| 日韩主播视频在线| 精品99一区二区| 91在线视频观看| 美女高潮久久久| 国产精品麻豆久久久| 欧洲精品在线观看| 国产精品一区二区久久精品爱涩| 1024成人网| 色综合婷婷久久| 日韩欧美另类在线| 欧美做爰猛烈大尺度电影无法无天| 国产福利电影一区二区三区| 国产精品一区久久久久| 久久久99精品免费观看| 国产精品亚洲视频| 亚洲自拍偷拍网站| 久久久久久免费毛片精品| 99久久国产综合精品色伊| 日韩一区二区三区免费观看| 日本不卡中文字幕| 成人黄页毛片网站| 首页国产丝袜综合| 久久精品人人做人人爽人人| 91国产丝袜在线播放| 韩国精品一区二区| 亚洲综合一区二区精品导航| 久久综合av免费| 精品国产乱码久久久久久蜜臀| 欧美欧美欧美欧美首页| 色噜噜狠狠成人中文综合| 99vv1com这只有精品| 99久久精品免费看| 色哟哟国产精品| 欧美日韩在线电影| 欧美视频日韩视频在线观看| 欧美日韩亚洲综合| 在线观看91精品国产入口| 欧美自拍偷拍午夜视频| 欧美久久久久久久久久 | 久久蜜桃一区二区| 欧美日韩国产中文| 成人a免费在线看| 欧美一级夜夜爽| 亚洲欧洲av在线| 精品一区二区综合| 欧日韩精品视频| 国产精品久久午夜| 日韩av网站免费在线| 韩国理伦片一区二区三区在线播放| 国产综合久久久久久久久久久久| 成人激情小说网站| 欧美体内she精高潮| 精品999久久久| 亚洲综合久久久久| 国产成人自拍高清视频在线免费播放| av一区二区三区| 日韩欧美激情一区| 亚洲精品国产a久久久久久| 蜜臀av性久久久久av蜜臀妖精| 99re免费视频精品全部| 欧美变态tickle挠乳网站| 亚洲综合久久久久| 成人动漫视频在线| 久久只精品国产| 六月婷婷色综合| 日韩一区二区麻豆国产| 一区二区三区中文在线| av中文字幕一区| 国产精品不卡在线| av影院午夜一区| 日韩一区在线免费观看| 岛国一区二区在线观看| 久久在线观看免费| 国产在线视频一区二区| 欧美α欧美αv大片| 久久福利视频一区二区| 欧美电视剧在线看免费| 日本中文字幕一区二区有限公司| 欧美日韩中文精品| 首页综合国产亚洲丝袜| 欧美一区二区三区免费大片| 首页国产丝袜综合| 2020国产精品自拍| 国产精品99久久久久| 中文字幕一区av| 91成人看片片| 蜜桃久久久久久久| 久久免费国产精品| 99国产麻豆精品| 天天影视色香欲综合网老头| 日韩欧美一二三四区| 国产成人av一区| 一区二区三区中文在线观看| 欧美精品乱码久久久久久 | 色婷婷综合久久| 日韩av午夜在线观看| www国产成人| 欧美视频精品在线| 国产剧情一区二区三区| 亚洲国产精品一区二区久久| 欧美一区二区成人| 暴力调教一区二区三区| 美女一区二区久久| 亚洲欧美日韩国产成人精品影院| 在线播放亚洲一区| av在线综合网| 粉嫩高潮美女一区二区三区 | 欧美日韩一二区| av一本久道久久综合久久鬼色| 婷婷成人综合网| 一区二区三区在线观看视频| 久久中文娱乐网| 欧美mv日韩mv亚洲| 3atv一区二区三区| 欧美日韩国产另类一区| 91色在线porny| 91在线porny国产在线看| 韩国一区二区视频| 国产自产视频一区二区三区| 日韩福利视频网| 三级在线观看一区二区| 亚洲h精品动漫在线观看| 亚洲日本一区二区三区| 综合自拍亚洲综合图不卡区| 国产区在线观看成人精品| 国产亚洲一区字幕| 久久精品亚洲乱码伦伦中文| xfplay精品久久| 欧美国产一区在线| 国产精品久久久久久福利一牛影视 | 欧美精品一区视频| 亚洲乱码国产乱码精品精可以看| 国内精品伊人久久久久影院对白| 在线免费观看日本一区| 91精品国产日韩91久久久久久| 久久青草欧美一区二区三区| 亚洲免费观看高清完整版在线观看 | 国产一区二区精品久久91| 成人亚洲精品久久久久软件| 欧美日韩二区三区| 亚洲免费高清视频在线| 国产九色sp调教91| 91在线国内视频| 日韩免费一区二区三区在线播放| 亚洲视频免费在线| 国产黄色精品视频| wwwwxxxxx欧美| 五月婷婷色综合| 一本大道av伊人久久综合| 精品国产电影一区二区| 亚洲国产综合色| 色婷婷av一区二区三区gif | 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 日韩av一二三| 欧美群妇大交群中文字幕|