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

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

?? os_cpu_a.asm

?? 51單片機web的ucosii
?? ASM
字號:
;/*
;*********************************************************************************************************
;*                                               uC/OS-II
;*                                               實時內核
;*
;*                        (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
;*                                               版權所有
;*
;*                                            MCU-51 專用代碼
;*                                           KEIL C51大模式編譯
;*
;* 文件名 : OS_CPU_A.ASM
;* 作者   : Jean J. Labrosse
;* 改編   : zhzhl zhzhl@vip.sina.com 2002.12
;*********************************************************************************************************
;*/

;偽指令詳細用法請查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  DEL BY ZHZHL

;聲明引用全局變量和外部子程序
        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  ;#?STACK-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
;-------------------------------------------------------------------------
        CSEG AT 000BH    ;OSTickISR
        LJMP OSTickISR   ;使用定時器0
        RSEG ?PR?OSTickISR?OS_CPU_A

OSTickISR:

        USING 0
        PUSHALL

        CLR  TR0
        MOV  TH0,#2AH    ;32.768M->20ms
        MOV  TL0,#0ABH    ;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一区二区三区免费野_久草精品视频
婷婷夜色潮精品综合在线| 色老汉一区二区三区| 午夜伊人狠狠久久| 成人欧美一区二区三区白人 | 日本vs亚洲vs韩国一区三区| 亚洲欧美视频一区| 亚洲精品五月天| 日韩一区日韩二区| 亚洲欧美日本韩国| 亚洲第一福利视频在线| 亚洲成人一区在线| 婷婷久久综合九色综合伊人色| 亚洲电影一区二区三区| 日韩中文字幕1| 久久99久久精品| 国产成人av福利| av电影在线观看完整版一区二区| 91美女蜜桃在线| 欧美日韩精品一二三区| 日韩欧美电影一区| 久久精品在线免费观看| 亚洲免费在线观看| 不卡一卡二卡三乱码免费网站| 99久久久久久99| 欧美午夜精品理论片a级按摩| 亚洲电影在线播放| 国产做a爰片久久毛片| k8久久久一区二区三区| 欧美性大战xxxxx久久久| 日韩午夜在线观看视频| 中文字幕第一区综合| 亚洲成人综合网站| 国产成人日日夜夜| 欧美日本一区二区三区| 久久久久综合网| 亚洲国产精品久久久久秋霞影院| 韩国理伦片一区二区三区在线播放| 成人av在线资源网站| 在线播放中文字幕一区| 亚洲国产精品ⅴa在线观看| 亚洲va国产va欧美va观看| 国产不卡高清在线观看视频| 在线一区二区视频| 国产色爱av资源综合区| 婷婷综合另类小说色区| 大胆亚洲人体视频| 日韩美女视频一区二区在线观看| 中文字幕中文字幕一区二区| 日本亚洲三级在线| 日本精品一级二级| 欧美韩日一区二区三区| 久久激情综合网| 在线视频一区二区三| 国产欧美日韩在线观看| 美女在线一区二区| 欧美日韩的一区二区| 日韩一区在线播放| 成人午夜私人影院| 欧美精品一区二区三区蜜桃视频| 亚洲成a人片在线不卡一二三区| 国产成a人无v码亚洲福利| 日韩午夜激情av| 午夜国产不卡在线观看视频| 色综合中文综合网| 亚洲视频网在线直播| 精品一区二区三区在线视频| 3d成人h动漫网站入口| 亚洲曰韩产成在线| 欧美在线免费视屏| 亚洲欧美日韩一区| 99re亚洲国产精品| 亚洲免费在线看| 日本精品一级二级| 亚洲第一福利一区| 在线不卡a资源高清| 日韩va亚洲va欧美va久久| 欧美日韩国产a| 免费观看30秒视频久久| 91精品在线麻豆| 蜜臀av国产精品久久久久| 欧美一区二区三区四区在线观看| 天天影视涩香欲综合网| 337p亚洲精品色噜噜| 日韩国产一区二| 日韩视频一区在线观看| 久久国产成人午夜av影院| 精品福利一区二区三区| 国产成人超碰人人澡人人澡| 中文字幕日韩一区| 欧美性大战xxxxx久久久| 日本不卡在线视频| 久久久久九九视频| 福利视频网站一区二区三区| 日韩久久一区二区| 欧美三级电影网| 精品在线观看免费| 国产精品久久久久久久久免费相片| 91在线精品一区二区三区| 五月婷婷色综合| 欧美精品一区二区三区久久久 | 一区二区三区四区在线| 欧美日韩在线播放三区四区| 久久国产剧场电影| 国产精品国产三级国产三级人妇| 在线区一区二视频| 麻豆91小视频| 国产日韩精品久久久| 亚洲欧美怡红院| 欧美videossexotv100| 亚洲精选视频在线| 欧美日韩视频在线一区二区| 丝袜美腿亚洲综合| 欧美在线免费观看视频| 国内欧美视频一区二区| 亚洲欧洲无码一区二区三区| 91精品国产综合久久久久久久| 国产a区久久久| 三级久久三级久久久| 国产女主播视频一区二区| 欧美性大战久久久| 成人av电影在线播放| 亚洲欧洲中文日韩久久av乱码| 欧美一区二区久久久| 99re热这里只有精品免费视频| 美女任你摸久久| 亚洲综合激情小说| 国产精品视频免费| 久久综合精品国产一区二区三区 | 日韩午夜中文字幕| 欧洲视频一区二区| 狠狠色综合播放一区二区| 亚洲日本中文字幕区| 国产色一区二区| 欧美成人r级一区二区三区| 91国产免费看| proumb性欧美在线观看| 国产成人久久精品77777最新版本| 天天av天天翘天天综合网色鬼国产| 中文字幕一区二区三区在线播放| www久久精品| 精品国产乱码久久久久久1区2区| 欧美精品日韩一本| 欧美日韩国产一区| 欧美三区在线视频| 欧美午夜不卡视频| 色欧美乱欧美15图片| www.亚洲在线| 成人免费视频一区| av在线不卡观看免费观看| 国产成人精品影院| 成人在线综合网站| 看电影不卡的网站| 日本vs亚洲vs韩国一区三区二区 | 免费高清在线一区| 日韩精品免费视频人成| 午夜精品久久久久久久99水蜜桃 | 91高清在线观看| 波多野结衣一区二区三区| 福利电影一区二区| a在线播放不卡| 色av成人天堂桃色av| 欧美视频一区二区三区四区 | 日本不卡视频一二三区| 日本美女视频一区二区| 久久99在线观看| 黄一区二区三区| 国产精品 欧美精品| 粉嫩av亚洲一区二区图片| av高清不卡在线| 欧美三级日韩在线| 日韩欧美一级特黄在线播放| 欧美视频一区二区三区在线观看| 欧美在线啊v一区| 精品乱码亚洲一区二区不卡| 国产亚洲成av人在线观看导航| 综合久久国产九一剧情麻豆| 亚洲午夜三级在线| 久久www免费人成看片高清| 高清久久久久久| 欧美午夜精品久久久| 精品国产一区二区精华| 国产精品久久久久久久久果冻传媒| 亚洲男女一区二区三区| 麻豆精品久久久| 99这里只有精品| 日韩欧美国产综合| 亚洲天堂免费在线观看视频| 亚洲伊人色欲综合网| 国产精品一区三区| 欧美视频一区二区三区在线观看| 精品国产乱码久久久久久影片| 中文字幕亚洲成人| 蜜芽一区二区三区| 成人午夜精品在线| 日韩欧美一级精品久久| 国产精品久久久久久久久免费樱桃| 国产成人免费视频| 国产传媒欧美日韩成人| 国产在线播放一区三区四| 国产精品美女久久久久久久网站|