damson
驱动牛犊
驱动牛犊
  • 注册日期2003-06-16
  • 最后登录2009-10-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2335回复:1

单片机简单RTOS

楼主#
更多 发布于:2003-06-18 22:53
我以前使用的,可以应付一般简单的任务,对于初学者可能有所帮助。

《本应该发在单片机抗干扰中,按成发新帖子》
补充一点:
对于一个好系统来说,既要有好的检错手段,还要有好的纠错能力。
纠错往往比检错更重要。
另外,我一般将未用的单元填充 LJMP 0000,在初始化中判断是否是热启动。


[编辑 -  6/18/03 by  damson]
damson
驱动牛犊
驱动牛犊
  • 注册日期2003-06-16
  • 最后登录2009-10-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-18 23:01
发错了地方
还是贴上我以前用过的一种程序结构,相当于一种很原始的RTOS,权作改正,呵呵

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

$NOMOD51
$INCLUDE(C:\\OMF51\\ASM\\REG52.INC)
$INCLUDE(MACRO.H)
$INCLUDE(DEFINE.H)
$INCLUDE(JUMP_TAB.ASM)
$SET(INIT_ALL=0)       ;INIT_ALL=0,正常; INIT_ALL=1,初始化时钟;
                       ;INIT_ALL=2,初始化EEPROM; INIT_ALL=3,初始化所有;
MAIN:  
MOV IE,#00H          ;Close all INT
MOV SP,#0C0H ;Stack from C0h
MOV TCON,#05H        ;T1 and T0 (setb ITx)
MOV TMOD,#12H ;T0为方式2,T1为方式1
MOV SCON,#50H ;方式1,允许接受
MOV PCON,#80H ;波特律加倍
MOV IP,#08           ;中断优先级,CT1增强
MOV TH0,#9CH ;大约为100us
MOV TL0,#9CH
MOV TH1,#0H
MOV TL1,#0H
CLR EA
;*************系统及用户初始化*****************
$INCLUDE(ini.ASM)
;****************任务管理器********************
;任务扫描顺序:
;显示->显示缓冲区更新->时间判断->看门狗->键盘->
;滚屏任务->串口->系统检查
TASK_MAN:
        JNB TASK_ID,REST
        CLR TASK_ID
        AJMP DO_TASK
REST:   MOV SYSCONT,#00H
        ORL PCON,#01H
        AJMP TASK_MAN
DO_TASK:
        JNB TIME_ID,$+11
        CLR TIME_ID
        MOV SYSCONT,#01H
        LCALL Time_GX
        
        JNB BUF_ID,$+11
        CLR BUF_ID;
        MOV SYSCONT,#02H
        LCALL BUF_GX
                
  
        JNB KEY_ID,$+11
        CLR KEY_ID
        MOV SYSCONT,#04H
        LCALL KEYBOARD

        JNB IR_ID,$+11
        CLR IR_ID
        MOV SYSCONT,#06H
        LCALL IR8PROC

        JNB DOG_ID,$+11
        CLR DOG_ID
        MOV SYSCONT,#03H
        LCALL DOG ;kill ill task.
  
        MOV SYSCONT,#00H
        ORL PCON,#1H
        AJMP TASK_MAN
;***************用户任务执行区*******************
$INCLUDE(KEYBOARD.ASM)          ;键盘处理
$INCLUDE(IRPROC.ASM)            ;遥控和保护处理
$INCLUDE(DISPLAY.ASM)           ;显示程序
$INCLUDE(DOG.ASM)               ;看门狗处理
$INCLUDE(TIME.ASM)              ;时间更新 1S
$INCLUDE(DISBUF.ASM)            ;缓冲区更新、秒点处理、定时
;*******************硬件层***********************
;主要与硬件有关的部分
$INCLUDE(HARD.ASM) ;数码管显示、键盘预处理、探头信号预处理

;******************中断服务区********************
$INCLUDE(ctX.ASM)
$INCLUDE(serial.ASM)
$INCLUDE(intX.ASM)
;******************子程序区**********************
;本区主要包含一些独立性较强可以直接移植使用的程序
$INCLUDE(I2C.ASM)
$INCLUDE(SUB.ASM)
;*******************END*************************
Length equ (8192-$)/3

REPT Length
        LJMP 0
ENDM
END
游客

返回顶部