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

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

?? os_cpu_a.asm

?? uCos-ii 2.86 在C8051F410單片機上移植成功!!! 其中包括:UART驅動
?? ASM
字號:
;/*
;*********************************************************************************************************
;*                                               uC/OS-II
;*                                               實時內核
;*
;*                        (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
;*                                               版權所有
;*
;*                                            8051處理器代碼
;*                                           KEIL C51大模式編譯
;*
;* 文件名 : OS_CPU_A.ASM
;* 作者   : Jean J. Labrosse
;*********************************************************************************************************
;*/

$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


TF2     BIT  0C8H.7		 


;SFRPAGE DATA  084H



        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

?PR?_?Tmr2_isr?OS_CPU_A		   SEGMENT CODE

?PR?_?SMBUS_ISR?OS_CPU_A	   SEGMENT CODE

?PR?_?PCA0_ISR?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)
		
		
		EXTRN CODE  (_?Timer2_ISR) 

		EXTRN CODE  (_?SMBus_ISR )
		
		EXTRN CODE  (_?PCA0_ISR)        
            
;對外聲明4個不可重入函數
        PUBLIC OSStartHighRdy
        PUBLIC OSCtxSw
        PUBLIC OSIntCtxSw
        PUBLIC OSTickISR
        
;分配堆棧空間。只關心大小,堆棧起點由keil決定,通過標號可以獲得keil分配的SP起點。
?STACK SEGMENT IDATA
        RSEG ?STACK
OSStack:
        DS 40H
OSStkStart IDATA OSStack-1

;定義壓棧出棧宏
PUSHALL    MACRO
		;PUSH SFRPAGE
        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
		;POP  SFRPAGE
        ENDM
    
;子程序
;-------------------------------------------------------------------------
        RSEG ?PR?OSStartHighRdy?OS_CPU_A
OSStartHighRdy:
        USING 0    ;上電后51自動關中斷,此處不必用CLR EA指令,因為到此處還未開中斷,本程序退出后,開中斷。

				;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,#0ECH    ;定義Tick=100次/秒(即0.01秒/次)
        MOV  TL0,#10H     ;OS_CPU_C.C  和  OS_TICKS_PER_SEC 		

        SETB TR0
        
        LCALL _?OSIntEnter
        LCALL _?OSTimeTick
	
        LCALL _?OSIntExit
        POPALL        
        RETI


;-------------------------------------------------------------------------
        CSEG AT 002BH    ;定時器2中斷
        LJMP Tmr2ISR   ;工作于系統態,無任務切換。
        RSEG ?PR?_?Tmr2_isr?OS_CPU_A
        
Tmr2ISR:
        
        USING 0        
        PUSHALL	

		;MOV  SFRPAGE, #0 	
				   
		CLR  TF2
		
        LCALL _?OSIntEnter
        LCALL _?Timer2_ISR
        LCALL _?OSIntExit        
        
        POPALL        
        RETI


;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
        CSEG AT 0023H    ;串口中斷
        LJMP SerialISR   ;工作于系統態,無任務切換。
        RSEG ?PR?_?serial?OS_CPU_A
        
SerialISR:
        
        USING 0        
        PUSHALL

		;MOV  SFRPAGE, #0

        CLR  EA

        LCALL _?serial
		        
        SETB EA

        POPALL  
		      
        RETI


;-------------------------------------------------------------------------
        CSEG AT 003BH    ;SMBus中斷
        LJMP SMBUSISR   ;工作于系統態,無任務切換。
        RSEG ?PR?_?SMBUS_ISR?OS_CPU_A
        
SMBUSISR:
        
        USING 0        
        PUSHALL	
		
		   ;CLR SI			        

        LCALL _?OSIntEnter
        LCALL _?SMBus_ISR 
        LCALL _?OSIntExit        
       
        POPALL        
        RETI


;------------------------------------------------------------------------- 

        CSEG AT 004BH    ;PCA0中斷
        LJMP PCA0ISR   ;工作于系統態,無任務切換。
        RSEG ?PR?_?PCA0_ISR?OS_CPU_A
        
PCA0ISR:
        
        USING 0        
        PUSHALL	       

        LCALL _?OSIntEnter
        LCALL _?PCA0_ISR
        LCALL _?OSIntExit        
       
        POPALL        
        RETI



;-------------------------------------------------------------------------
        END
;-------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区免费在线观看视频| 日韩黄色免费电影| 亚洲国产精品一区二区久久恐怖片 | 国产精品每日更新在线播放网址| 一区二区三区视频在线观看| 精品一区二区影视| 欧美网站大全在线观看| 国产三级精品视频| 久草这里只有精品视频| 欧美性受xxxx黑人xyx性爽| 欧美高清一级片在线观看| 日韩高清在线不卡| 91精彩视频在线观看| 欧美极品美女视频| 精品一区二区综合| 欧美一区二区三区小说| 亚洲综合一二三区| 91麻豆高清视频| 欧美激情艳妇裸体舞| 国产精品一区在线| 精品国产乱码久久久久久久| 日本美女一区二区三区视频| 欧美亚洲国产一区二区三区| 亚洲欧美怡红院| 成人性视频网站| 国产亚洲成av人在线观看导航| 美女一区二区在线观看| 欧美一级高清片| 日本成人在线视频网站| 欧美疯狂做受xxxx富婆| 亚洲444eee在线观看| 欧美浪妇xxxx高跟鞋交| 婷婷一区二区三区| 欧美一卡2卡三卡4卡5免费| 日本午夜精品视频在线观看 | 日韩西西人体444www| 午夜私人影院久久久久| 欧美日韩一二三| 午夜不卡av免费| 欧美精品久久久久久久多人混战 | 欧美日韩国产色站一区二区三区| 一区二区三区免费看视频| 一本大道久久精品懂色aⅴ| 亚洲欧美日韩一区二区三区在线观看| 北条麻妃国产九九精品视频| 亚洲图片欧美激情| 欧美视频在线观看一区二区| 亚洲成人av电影在线| 欧美一级二级在线观看| 国产福利电影一区二区三区| 国产精品每日更新| 在线精品亚洲一区二区不卡| 亚洲国产精品嫩草影院| 日韩一区二区三区三四区视频在线观看| 亚洲国产一区二区视频| 日韩欧美激情一区| 国产成人一级电影| 一区二区三区在线高清| 在线成人免费观看| 国产伦精一区二区三区| 亚洲视频在线一区| 国产精品白丝在线| 色综合久久综合网欧美综合网| 亚洲一区二区三区四区不卡| 欧美mv日韩mv国产| 91视频免费观看| 美女视频黄频大全不卡视频在线播放| 久久久精品国产99久久精品芒果 | 国产成人综合网| 亚洲视频一区在线| 日韩欧美不卡一区| 91在线视频18| 久久99精品久久久久| 自拍偷自拍亚洲精品播放| 7878成人国产在线观看| 国产成人av自拍| 亚洲午夜私人影院| 国产欧美精品一区aⅴ影院| 欧美日韩成人综合| 成人av在线播放网站| 日本不卡1234视频| 亚洲三级电影网站| 26uuuu精品一区二区| 欧美日韩精品一区二区三区蜜桃 | 久久99久久99| 亚洲黄色在线视频| 久久久久久久久一| 欧美日韩国产另类一区| 99免费精品在线| 久99久精品视频免费观看| 亚洲精品成人a在线观看| 久久精品亚洲乱码伦伦中文| 91.麻豆视频| 色婷婷综合久久久久中文一区二区 | 奇米影视一区二区三区小说| 亚洲免费色视频| 国产婷婷色一区二区三区四区| 91精品国产综合久久久蜜臀粉嫩| 91老司机福利 在线| 成人精品国产福利| 国产乱码一区二区三区| 久久精品国产精品亚洲精品| 亚洲在线观看免费视频| 日韩美女啊v在线免费观看| 日本一区二区三区视频视频| 精品久久久久久久人人人人传媒 | 亚洲人快播电影网| 中文字幕欧美日韩一区| 欧美精品一区二区久久久| 88在线观看91蜜桃国自产| 欧美日韩国产大片| 欧美美女一区二区在线观看| 精品视频在线免费| 欧美性大战久久久久久久蜜臀 | 亚洲一二三四区不卡| 亚洲欧美日韩国产手机在线| 国产精品久久久一区麻豆最新章节| 久久久久久久国产精品影院| 欧美不卡视频一区| 久久亚洲精品国产精品紫薇| 久久亚洲精华国产精华液| 久久综合色婷婷| 亚洲精品一区二区三区四区高清| 亚洲精品在线观看网站| 国产亚洲精品中文字幕| 国产精品妹子av| 一区二区三区国产豹纹内裤在线| 一区二区三区欧美在线观看| 亚洲国产另类av| 久久精品国产免费看久久精品| 韩国精品一区二区| 成人免费毛片片v| 色综合激情久久| 欧美三级电影网站| 欧美一级高清片| 欧美激情一区二区三区蜜桃视频| 国产精品网曝门| 亚洲国产你懂的| 激情国产一区二区| 不卡的电影网站| 欧美日韩综合在线| 日韩三级伦理片妻子的秘密按摩| 久久免费午夜影院| 中文字幕日韩一区| 亚洲成av人片www| 九九九久久久精品| 99久久婷婷国产综合精品电影 | 久久久噜噜噜久噜久久综合| 国产精品色哟哟| 午夜精品福利一区二区蜜股av| 美女视频一区在线观看| proumb性欧美在线观看| 欧美性一区二区| 久久久精品国产免费观看同学| 亚洲卡通动漫在线| 精品综合免费视频观看| 色综合天天性综合| 日韩欧美一区在线| 成人欧美一区二区三区小说| 免费看欧美女人艹b| 91丝袜国产在线播放| 日韩精品一区二区三区视频在线观看| 欧美国产在线观看| 日韩精品成人一区二区三区| 成人精品gif动图一区| 欧美一区二区三区四区五区| 欧美国产日本视频| 免费精品99久久国产综合精品| 99久久99久久久精品齐齐| 欧美精品一区视频| 午夜精品在线看| 色综合久久综合网| 日本一区二区动态图| 麻豆一区二区三区| 欧美三区在线观看| 亚洲卡通欧美制服中文| 成人sese在线| 久久久午夜精品理论片中文字幕| 亚洲成av人片在线观看无码| 99精品视频一区| 欧美激情综合五月色丁香| 奇米色777欧美一区二区| 在线亚洲+欧美+日本专区| 国产精品色一区二区三区| 国产一区不卡在线| 精品久久免费看| 久久国产生活片100| 欧美久久一二区| 亚洲一区av在线| 一本色道a无线码一区v| 1000部国产精品成人观看| 从欧美一区二区三区| 久久久影视传媒| 激情五月激情综合网| 久久一夜天堂av一区二区三区| 久久精品国产久精国产| 欧美电视剧在线看免费| 久久99蜜桃精品| 欧美videossexotv100| 精品一区二区三区在线观看 |