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

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

?? os_cpu_a.asm

?? ucos系統
?? 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 DATA  (TH0_Value)
	EXTRN DATA  (TL0_Value)
    
        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  A,	 TH0_Value;
	MOV  TH0,A;	#70H    ;定義Tick=50次/秒(即0.02秒/次)
        MOV  A,	 TL0_Value;
	MOV  TL0,A	;#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一区二区三区免费野_久草精品视频
亚洲国产精品久久艾草纯爱| 色先锋资源久久综合| 成人午夜视频福利| 欧美电影影音先锋| 国产精品久久久久久久蜜臀| 美女视频黄a大片欧美| 99久久精品免费| 久久香蕉国产线看观看99| 亚洲国产裸拍裸体视频在线观看乱了| 国产在线不卡一区| 欧美日韩专区在线| 日韩一区在线免费观看| 黑人巨大精品欧美一区| 欧美日韩成人综合在线一区二区| 中文字幕一区在线观看视频| 国产一区二区三区日韩| 欧美一级日韩不卡播放免费| 亚洲乱码中文字幕综合| 成人手机电影网| 久久久久久影视| 久久国产精品72免费观看| 9191久久久久久久久久久| 一区二区三区欧美视频| 色综合天天做天天爱| 欧美国产精品v| 国产精品系列在线观看| 欧美xxxx在线观看| 激情综合网av| 欧美成人激情免费网| 日韩激情视频在线观看| 91精品国产综合久久精品性色| 一区二区三区四区在线播放| 色综合久久久网| 亚洲精品视频免费观看| 色婷婷一区二区| 亚洲激情图片qvod| 欧美日韩国产综合一区二区| 亚洲成人激情自拍| 91精品国产综合久久小美女| 麻豆精品一区二区av白丝在线| 91麻豆精品国产| 久久精品国内一区二区三区| 精品区一区二区| 懂色av一区二区三区免费看| 欧美激情一区在线观看| caoporn国产精品| 亚洲精品视频在线| 91精品中文字幕一区二区三区| 青草国产精品久久久久久| 精品99999| 97久久超碰国产精品| 一区二区三区加勒比av| 欧美精品tushy高清| 韩国av一区二区三区四区| 国产精品欧美一区喷水| 91麻豆蜜桃一区二区三区| 亚洲国产精品影院| 2020国产精品自拍| 99vv1com这只有精品| 亚洲综合丝袜美腿| 精品黑人一区二区三区久久| 风间由美性色一区二区三区| 亚洲午夜私人影院| 久久九九国产精品| 91国偷自产一区二区使用方法| 三级欧美在线一区| 国产精品美女一区二区三区| 欧美日韩精品高清| 成人免费毛片高清视频| 亚洲午夜视频在线| 欧美精彩视频一区二区三区| 欧美日韩一本到| 国产一区二区三区在线观看免费视频| 国产精品久久久久久久裸模| 欧美老肥妇做.爰bbww| 国产剧情一区二区三区| 亚洲一区二区三区免费视频| 国产午夜三级一区二区三| 在线免费不卡电影| 丁香婷婷深情五月亚洲| 日韩中文欧美在线| 成人欧美一区二区三区黑人麻豆 | 精品人在线二区三区| 99久久精品费精品国产一区二区| 男女男精品视频| 一区二区三区精品视频在线| 国产亚洲欧洲997久久综合| 欧美三电影在线| 99视频一区二区三区| 国产一区二区三区久久悠悠色av| 亚洲成人在线网站| 亚洲日本青草视频在线怡红院 | 国产精品一区久久久久| 一二三四区精品视频| 国产精品天天摸av网| 精品福利二区三区| 在线综合亚洲欧美在线视频| 色网综合在线观看| 成年人国产精品| 国产传媒一区在线| 激情偷乱视频一区二区三区| 亚洲成人激情社区| 亚洲国产精品久久人人爱| 中文字幕一区二区三区色视频| 亚洲精品一区在线观看| 日韩色在线观看| 91精品免费在线| 欧美一区二视频| 欧美高清一级片在线| 欧美自拍丝袜亚洲| 欧美亚洲动漫制服丝袜| 色视频一区二区| 日本精品裸体写真集在线观看| 成人一区在线观看| 成人av在线播放网址| 成人v精品蜜桃久久一区| 成人黄色综合网站| 成人av免费观看| 99视频一区二区三区| 91久色porny | 日韩高清一区二区| 日韩av电影免费观看高清完整版| 天天爽夜夜爽夜夜爽精品视频| 亚洲午夜成aⅴ人片| 天天综合天天综合色| 另类综合日韩欧美亚洲| 久久99久久久欧美国产| 国产一区二区主播在线| 大白屁股一区二区视频| 99国产欧美另类久久久精品| 色丁香久综合在线久综合在线观看| 色婷婷香蕉在线一区二区| 欧洲一区二区三区在线| 欧美人xxxx| 欧美精品一区二区不卡 | 亚洲综合久久久久| 亚洲aⅴ怡春院| 国产精品自拍一区| 99国产精品久久久久久久久久久| 欧美日韩免费一区二区三区| 91精品国产麻豆国产自产在线 | 韩国av一区二区三区四区 | 欧美一级搡bbbb搡bbbb| 精品福利一二区| 中文字幕日本乱码精品影院| 亚洲国产精品久久久久秋霞影院| 理论电影国产精品| 懂色av一区二区夜夜嗨| 欧美日韩一区二区三区在线看 | 欧美一二三区在线| 久久久三级国产网站| 亚洲美女区一区| 国产在线国偷精品产拍免费yy| 91丨porny丨最新| 日韩欧美一区二区在线视频| 国产农村妇女毛片精品久久麻豆 | 欧美一区二区免费| 亚洲欧洲无码一区二区三区| 日韩成人免费看| 99re热视频这里只精品| 精品奇米国产一区二区三区| 亚洲精品va在线观看| 国产精品69久久久久水密桃| 欧美中文字幕亚洲一区二区va在线| 精品va天堂亚洲国产| 亚洲成人动漫精品| 99精品视频在线免费观看| 日韩女优毛片在线| 亚洲综合自拍偷拍| 国产成人综合在线播放| 91精品黄色片免费大全| 亚洲激情网站免费观看| 成人开心网精品视频| 精品区一区二区| 日韩不卡一二三区| 欧美体内she精视频| 日韩理论电影院| 国产成人免费视频网站高清观看视频| 欧美顶级少妇做爰| 亚洲高清久久久| 日本韩国欧美一区二区三区| 中文字幕精品—区二区四季| 精品一区二区三区在线观看| 精品视频免费看| 一区二区国产盗摄色噜噜| 成人动漫一区二区| 国产精品美女久久久久高潮| 国产精品亚洲专一区二区三区| 日韩限制级电影在线观看| 亚洲成国产人片在线观看| 91国偷自产一区二区三区观看 | ...av二区三区久久精品| 国产乱子轮精品视频| 精品国产制服丝袜高跟| 青青国产91久久久久久| 欧美女孩性生活视频| 亚洲高清三级视频| 宅男噜噜噜66一区二区66| 免费人成在线不卡| 777午夜精品免费视频|