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

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

?? os_cpu_a.asm

?? uCOS-II內核分析,在單片機上實現(xiàn)uCOS-II的移植,同時在該操作系統(tǒng)上實現(xiàn)uart驅動
?? ASM
字號:
;/*
;*********************************************************************************************************
;*                                               uC/OS-II
;*                                               實時內核
;*
;*                                               版權所有
;*
;* 文件名 : OS_CPU_A.ASM
;* 作者   : 陳是知 北京中軟 2005。1。27
;*********************************************************************************************************
;*/

$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
P4      DATA    0D8H

        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?_?CommISRHandler?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  (_?CommISRHandler)
        EXTRN CODE  (_?OSIntEnter)
        EXTRN CODE  (_?OSIntExit)
        EXTRN CODE  (_?OSTimeTick)        
            
;對外聲明4個不可重入函數(shù)
        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
        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
        ENDM
    
POPALL    MACRO
        POP  ACC
        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
        
        ;OSRunning=TRUE
        MOV  R0,#LOW (OSRunning)
        MOV  @R0,#01

        ;OSTCBHighRdy ===> DPTR  獲得當前TCB指針,詳見C51.PDF第178頁
        MOV  R0,#LOW (OSTCBHighRdy) ;獲得OSTCBHighRdy指針低地址,指針占3字節(jié)。+0類型+1高8位數(shù)據(jù)+2低8位數(shù)據(jù)
        INC  R0
        MOV  DPH,@R0    ;全局變量OSTCBCur在IDATA中
        INC  R0
        MOV  DPL,@R0
    
        ;OSTCBHighRdy->OSTCBStkPtr ===> DPTR  獲得用戶堆棧指針
        INC  DPTR        ;指針占3字節(jié)。+0類型+1高8位數(shù)據(jù)+2低8位數(shù)據(jù)
        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類型數(shù)據(jù)
        MOV  R5,A        ;R5=用戶堆棧長度z
    
        ;恢復現(xiàn)場堆棧內容
        MOV  R0,#OSStkStart
        
restore_stack_A:
        INC  DPTR
        INC  R0
        MOVX A,@DPTR
        MOV  @R0,A
        DJNZ R5,restore_stack_A
    
        ;恢復堆棧指針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位
    
        POPALL
        SETB EA    ;開中斷
        RETI
;-------------------------------------------------------------------------
        RSEG ?PR?OSCtxSw?OS_CPU_A
OSCtxSw:  
        USING 0  
        PUSHALL

        ;獲得堆棧長度和起址
        MOV  A,SP
        CLR  C
        SUBB A,#OSStkStart
        MOV  R5,A     ;獲得堆棧長度        

        ;OSTCBCur ===> DPTR  獲得當前TCB指針,詳見C51.PDF第178頁
        MOV  R0,#LOW (OSTCBCur) ;獲得OSTCBCur指針低地址,指針占3字節(jié)。+0類型+1高8位數(shù)據(jù)+2低8位數(shù)據(jù)
        INC  R0
        MOV  DPH,@R0    ;全局變量OSTCBCur在IDATA中
        INC  R0
        MOV  DPL,@R0
    
        ;OSTCBCur->OSTCBStkPtr ===> DPTR  獲得用戶堆棧指針
        INC  DPTR        ;指針占3字節(jié)。+0類型+1高8位數(shù)據(jù)+2低8位數(shù)據(jù)
        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_A:
        INC  DPTR
        INC  R0
        MOV  A,@R0
        MOVX @DPTR,A
        DJNZ R5,save_stack_A
        
        ;保存仿真堆棧指針?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  使用這兩個變量主要目的是為了使指針比較變?yōu)樽止?jié)比較,以便節(jié)省時間。
        MOV  R0,#OSPrioCur
    	MOV  R1,#OSPrioHighRdy
    	MOV  A,@R1
        MOV  @R0,A
        
        ;OSTCBHighRdy ===> DPTR  獲得當前TCB指針,詳見C51.PDF第178頁
        MOV  R0,#LOW (OSTCBHighRdy) ;獲得OSTCBHighRdy指針低地址,指針占3字節(jié)。+0類型+1高8位數(shù)據(jù)+2低8位數(shù)據(jù)
        INC  R0
        MOV  DPH,@R0    ;全局變量OSTCBCur在IDATA中
        INC  R0
        MOV  DPL,@R0
    
        ;OSTCBHighRdy->OSTCBStkPtr ===> DPTR  獲得用戶堆棧指針
        INC  DPTR        ;指針占3字節(jié)。+0類型+1高8位數(shù)據(jù)+2低8位數(shù)據(jù)
        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類型數(shù)據(jù)
        MOV  R5,A        ;R5=用戶堆棧長度z
    
        ;恢復現(xiàn)場堆棧內容
        MOV  R0,#OSStkStart
        
restore_stack_B:
        INC  DPTR
        INC  R0
        MOVX A,@DPTR
        MOV  @R0,A
        DJNZ R5,restore_stack_B
    
        ;恢復堆棧指針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位
    
        POPALL
        RETI
;-------------------------------------------------------------------------
        RSEG ?PR?OSIntCtxSw?OS_CPU_A
        
OSIntCtxSw:
        USING 0
    	LCALL _?OSTaskSwHook

	MOV A,SP
	CLR C
	SUBB A,#4
	MOV SP,A

        ;獲得堆棧長度和起址
        MOV  A,SP
        CLR  C
        SUBB A,#OSStkStart
        MOV  R5,A     ;獲得堆棧長度        

        ;OSTCBCur ===> DPTR  獲得當前TCB指針,詳見C51.PDF第178頁
        MOV  R0,#LOW (OSTCBCur) ;獲得OSTCBCur指針低地址,指針占3字節(jié)。+0類型+1高8位數(shù)據(jù)+2低8位數(shù)據(jù)
        INC  R0
        MOV  DPH,@R0    ;全局變量OSTCBCur在IDATA中
        INC  R0
        MOV  DPL,@R0
    
        ;OSTCBCur->OSTCBStkPtr ===> DPTR  獲得用戶堆棧指針
        INC  DPTR        ;指針占3字節(jié)。+0類型+1高8位數(shù)據(jù)+2低8位數(shù)據(jù)
        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_B:
    
        INC  DPTR
        INC  R0
        MOV  A,@R0
        MOVX @DPTR,A
        DJNZ R5,save_stack_B
        
        ;保存仿真堆棧指針?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  使用這兩個變量主要目的是為了使指針比較變?yōu)樽止?jié)比較,以便節(jié)省時間。
        MOV  R0,#OSPrioCur
    	MOV  R1,#OSPrioHighRdy
    	MOV  A,@R1
        MOV  @R0,A
        
        ;OSTCBHighRdy ===> DPTR  獲得當前TCB指針,詳見C51.PDF第178頁
        MOV  R0,#LOW (OSTCBHighRdy) ;獲得OSTCBHighRdy指針低地址,指針占3字節(jié)。+0類型+1高8位數(shù)據(jù)+2低8位數(shù)據(jù)
        INC  R0
        MOV  DPH,@R0    ;全局變量OSTCBCur在IDATA中
        INC  R0
        MOV  DPL,@R0
    
        ;OSTCBHighRdy->OSTCBStkPtr ===> DPTR  獲得用戶堆棧指針
        INC  DPTR        ;指針占3字節(jié)。+0類型+1高8位數(shù)據(jù)+2低8位數(shù)據(jù)
        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類型數(shù)據(jù)
        MOV  R5,A        ;R5=用戶堆棧長度z
    
        ;恢復現(xiàn)場堆棧內容
        MOV  R0,#OSStkStart
        
restore_stack_C:
        INC  DPTR
        INC  R0
        MOVX A,@DPTR
        MOV  @R0,A
        DJNZ R5,restore_stack_C
    
        ;恢復堆棧指針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位
    
        POPALL
        RETI
;-------------------------------------------------------------------------
        CSEG AT 000BH    ;OSTickISR
        LJMP OSTickISR   ;使用定時器0
        RSEG ?PR?OSTickISR?OS_CPU_A

OSTickISR:        
        
        USING 0
        CLR  EA    ;先關中斷,以防中斷嵌套。
        PUSHALL
        LCALL _?OSIntEnter    ;監(jiān)視中斷嵌套
              
	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    ;串口中斷 入口地址0023H
        LJMP SerialISR   ;工作于系統(tǒng)態(tài),無任務切換。
        RSEG ?PR?_?CommISRHandler?OS_CPU_A
        
SerialISR:        
        USING 0
        CLR  EA    ;先關中斷,以防中斷嵌套。
        PUSHALL
        LCALL _?OSIntEnter    ;監(jiān)視中斷嵌套
 	
        LCALL _?CommISRHandler  
		    
        LCALL _?OSIntExit
        POPALL 
        SETB EA
        RETI
;-------------------------------------------------------------------------
        END
;-------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合成人在线视频| 色94色欧美sute亚洲13| 99久久久无码国产精品| 在线不卡欧美精品一区二区三区| 久久综合色婷婷| 亚洲一区二区免费视频| 国产精品一区二区果冻传媒| 色天使久久综合网天天| 久久精品水蜜桃av综合天堂| 香蕉成人啪国产精品视频综合网 | 精品国产1区2区3区| 亚洲免费电影在线| 国产精品资源在线看| 欧美人伦禁忌dvd放荡欲情| 国产精品九色蝌蚪自拍| 国模一区二区三区白浆| 在线看日本不卡| 国产精品欧美一区喷水| 国产一区 二区| 777精品伊人久久久久大香线蕉| 亚洲少妇30p| 粉嫩av一区二区三区在线播放| 日韩一二在线观看| 午夜欧美在线一二页| 91麻豆国产精品久久| 国产精品麻豆视频| 国产成人精品影视| 久久久国产午夜精品 | 亚洲免费在线观看视频| 国产成人综合网| 久久综合丝袜日本网| 国产乱子伦一区二区三区国色天香| 8x福利精品第一导航| 日韩精品免费专区| 欧美美女一区二区在线观看| 性感美女久久精品| 欧美一区二区视频免费观看| 视频一区视频二区中文| 3atv在线一区二区三区| 日韩精品亚洲专区| 51精品久久久久久久蜜臀| 日本女优在线视频一区二区| 欧美一区二区日韩一区二区| 日韩精品免费专区| 精品国免费一区二区三区| 久久99精品久久久| 久久久99精品久久| 99在线精品一区二区三区| 亚洲素人一区二区| 在线一区二区三区四区五区| 亚洲一区视频在线观看视频| 色婷婷久久综合| 天堂av在线一区| 日韩欧美国产不卡| 精品一二三四区| 国产精品视频yy9299一区| 一本久久a久久精品亚洲| 亚洲网友自拍偷拍| 欧美大胆一级视频| 99re热这里只有精品视频| 亚洲一区在线看| 精品乱人伦一区二区三区| 国产伦精品一区二区三区免费| 中文字幕久久午夜不卡| 日本韩国欧美三级| 美女在线观看视频一区二区| 国产精品久久久久久福利一牛影视| 色国产精品一区在线观看| 日韩电影在线一区二区| 亚洲国产精品传媒在线观看| 91在线视频播放地址| 日日摸夜夜添夜夜添亚洲女人| 精品国产乱码久久久久久浪潮| 成人免费视频网站在线观看| 亚洲综合在线视频| 精品国产乱码久久久久久影片| 99麻豆久久久国产精品免费优播| 亚洲成人在线免费| 国产夜色精品一区二区av| 色综合中文字幕| 另类调教123区| 亚洲欧洲综合另类在线| 日韩欧美国产午夜精品| 色偷偷88欧美精品久久久| 美日韩一区二区| 亚洲一区二区三区四区在线观看| 精品乱人伦小说| 欧美日韩一级二级| 成人免费视频播放| 久久精品99久久久| 三级影片在线观看欧美日韩一区二区| 国产欧美日本一区二区三区| 欧美高清精品3d| 色综合久久六月婷婷中文字幕| 精品影院一区二区久久久| 亚洲精品国产精品乱码不99| 久久久久久影视| 欧美一区二区二区| 在线中文字幕不卡| k8久久久一区二区三区| 国产乱对白刺激视频不卡| 肉色丝袜一区二区| 亚洲综合视频网| 17c精品麻豆一区二区免费| www国产亚洲精品久久麻豆| 欧美二区在线观看| 色久综合一二码| 99re热视频精品| 国产成人夜色高潮福利影视| 久久精品国产澳门| 激情综合色综合久久| 日韩电影一区二区三区四区| 亚洲一区二区欧美| 一区二区三区中文字幕精品精品 | 日本一区免费视频| 日韩欧美一区在线| 欧美美女黄视频| 欧美精品第一页| 欧美精品在线一区二区三区| 欧美性猛交xxxxxxxx| 欧美在线一区二区三区| 色av一区二区| 欧美这里有精品| 欧美日韩精品免费观看视频| 欧美日韩一区二区在线观看 | 色综合久久久久久久久久久| 成人精品国产免费网站| 国产福利一区在线| 国产精品一二三区在线| 高清在线不卡av| 99精品偷自拍| 欧美最新大片在线看| 欧美亚洲愉拍一区二区| 欧美性色欧美a在线播放| 欧美三级视频在线| 717成人午夜免费福利电影| 91精品中文字幕一区二区三区| 欧美色国产精品| 日韩免费看网站| 久久精品视频免费观看| 国产欧美一区二区精品秋霞影院| 国产精品色哟哟网站| 亚洲欧美日韩中文字幕一区二区三区 | 五月婷婷激情综合| 午夜视频一区二区三区| 麻豆一区二区在线| 国产麻豆精品久久一二三| av中文一区二区三区| 欧美色爱综合网| 精品国偷自产国产一区| 国产精品水嫩水嫩| 亚洲第一av色| 久久99国产精品久久99| 成人免费毛片高清视频| 在线看不卡av| 欧美成人三级在线| ...xxx性欧美| 日韩电影在线观看一区| 成人手机在线视频| 欧美日韩一区二区三区不卡| 欧美videofree性高清杂交| 欧美激情在线一区二区三区| 一区二区在线观看免费视频播放| 午夜伦欧美伦电影理论片| 久久99国产精品久久| 不卡的av在线播放| 9191成人精品久久| 国产精品女同互慰在线看| 亚洲综合区在线| 激情国产一区二区| 91久久精品一区二区三区| 日韩精品一区二区三区中文不卡 | 精品日韩在线观看| 亚洲一区二区三区在线| 国产一区二区三区四| 欧美视频精品在线| 国产亚洲成aⅴ人片在线观看| 亚洲在线免费播放| 岛国精品在线观看| 日韩免费高清视频| 亚洲一区二区三区中文字幕| 国产白丝网站精品污在线入口| 欧美视频日韩视频| 中文字幕一区二区日韩精品绯色| 免费看日韩a级影片| 91色.com| 国产精品色哟哟| 国模娜娜一区二区三区| 欧美视频一区二区三区在线观看| 国产欧美精品一区二区色综合 | 日韩专区欧美专区| av亚洲精华国产精华| 国产欧美精品一区二区三区四区 | 亚洲成人av福利| 不卡在线视频中文字幕| 精品国产乱码久久久久久蜜臀| 天天爽夜夜爽夜夜爽精品视频| 9人人澡人人爽人人精品| 国产清纯白嫩初高生在线观看91 | 972aa.com艺术欧美|