⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demo.s43

📁 ucos下的开发程序,包含部分演示程序,和源代码,及语言开发程序
💻 S43
字号:
;========================================================================================
;                              M430/OS 演示程序
;                                 V1.10
;  说明:
;  此演示程序包含六个任务:
;
;  softclock         软时钟任务
;  task1             向端口2的每个管脚输出方波的任务
;  task2             向端口3的每个管脚输出方波的任务
;  task3             向端口4的每个管脚输出方波的任务
;  task4             向端口5的每个管脚输出方波的任务
;  taskled           点亮P1.0上指示灯的任务
;  
;  6个任务,加上M430/OS的空闲任务,共7个任务,系统开辟了6块堆栈,空闲任务使用main程序的堆栈,空
;闲任务不保存现场。每块堆栈的大小可以不同。
;  
;  软时钟任务利用M430/OS的多任务延时模拟了一个有年、月、日、时、分、秒的时钟,并且可以日期
;  时间格式为BCD格式或10进制格式。

;  此程序可以直接在MSP430F149的仿真头上运行

;  程序空间、数据空间都由编译器自动分配。

;  刘兵   public_rtos@163.com      2003年6月30日
;
;========================================================================================
NAME     DEMO(16)
RSEG     UDATA0(1)
RSEG     IDATA0(1)
RSEG     CDATA0(1)
RSEG     CODE(1)
RSEG     CONST(1)
COMMON   INTVEC(1)


#include <msp430x14x.h>
#include "include.h"

PUBLIC   Task_Tick
PUBLIC   Task_SP

SOFTCLOCK_STACK_SIZE  DEFINE      10h                 ;软时钟任务的堆栈大小(单位:字)
TASK1_STACK_SIZE      DEFINE      11h                 ;任务1的堆栈大小(单位:字)
TASK2_STACK_SIZE      DEFINE      12h                 ;任务2的堆栈大小(单位:字)
TASK3_STACK_SIZE      DEFINE      13h                 ;任务3的堆栈大小(单位:字)
TASK4_STACK_SIZE      DEFINE      14h                 ;任务4的堆栈大小(单位:字)
LED_STACK_SIZE        DEFINE      0ah                 ;LED指示灯的堆栈大小(单位:字)

EXTERN   OS_Time_Dly
EXTERN   OS_Init
EXTERN   OS_Task_Create
EXTERN   OS_Start

RSEG  CODE

;------------------------------------------------------------------------------
;引导程序。CPU复位后执行此程序,由程序调用MSP430/OS的多任务初始化数来启动多任务
main
;------------------------------------------------------------------------------
              mov.w     #0a00h,sp                   ;此处初始化的堆栈就是空闲任务的堆栈,这一点和M430/OS V1.00版本不同
#ifndef debug
              mov.w     #WDT_MDLY_32,&WDTCTL        ;在release版本下设置看门狗为32ms,release版本的程序不能单步运行
#else
              mov.w     #(WDTPW+WDTHOLD),&WDTCTL    ;在debug版本下把看门狗禁止掉,debug版本可以单步执行
#endif
              call      #OS_Init                    ;初始化多任务数据

              push.w    #softclock_info
              call      #OS_Task_Create             ;建立软时钟任务
              mov.w     #task1_info,0(sp)
              call      #OS_Task_Create             ;建立任务1
              mov.w     #task2_info,0(sp)
              call      #OS_Task_Create             ;建立任务2
              mov.w     #task3_info,0(sp)
              call      #OS_Task_Create             ;建立任务3
              mov.w     #task4_info,0(sp)
              call      #OS_Task_Create             ;建立任务4
              mov.w     #taskled_info,0(sp)
              call      #OS_Task_Create             ;建立指示灯任务
              incd.w    sp

              push.w    #4000                       ;设置任务调度周期为5ms,即每秒调度200次
              call      #OS_Start                   ;任务初始化完后多任务开始启动

;------------------------------------------------------------------------------
;软时钟任务
softclock
;------------------------------------------------------------------------------
              clr.b     &second
#ifndef BCD_FORMAT
              mov.b     #30,&minute
              mov.b     #11,&hour
              mov.b     #25,&day
              mov.b     #6,&month
              mov.w     #2003,&year
softclock_loop
              push.w    #200
              call      #OS_Time_Dly
              incd.w    sp
              
              cmp.b     #59,second
              jge       second_c
              inc.b     second
              jmp       softclock_loop
second_c
              clr.b     second
              cmp.b     #59,&minute
              jge       minute_c
              inc.b     &minute
              jmp       softclock_loop
minute_c
              clr.b     &minute
              cmp.b     #23,&hour
              jge       hour_c
              inc.b     &hour
              jmp       softclock_loop
hour_c
              clr.b     &hour
              clr.w     r10
              mov.b     &month,r10       ;月份放入r10,判断每月多少天
              mov.w     &year,r11        ;年份放入r11,判断平年闰年
              and.w     #03h,r11
              tst.w     r11
              jz        year_pn
              
              cmp.b     &day,month_table_c(r10)   ;闰年
              jl        day_c
              inc.b     &day
              jmp       softclock_loop
year_pn
              cmp.b     &day,month_table(r10)     ;平年
              jl        day_c
              inc.b     &day
              jmp       softclock_loop
day_c
              mov.b     #01h,&day
              mov.b     #12,r10
              cmp.b     &month,r10
              jl        month_c
              inc.b     &month
              jmp       softclock_loop
month_c
              mov.b     #01h,&month
              inc.w     &year
              jmp       softclock_loop
#else
              mov.b     #30h,&minute
              mov.b     #11h,&hour
              mov.b     #25h,&day
              mov.b     #6h,&month
              mov.w     #2003h,&year
softclock_loop
              push.w    #200
              call      #OS_Time_Dly
              incd.w    sp
              
              cmp.b     #59h,second
              jge       second_c
              dadd.b    #01h,second
              jmp       softclock_loop
second_c
              clr.b     second
              cmp.b     #59h,&minute
              jge       minute_c
              dadd.b    #01h,&minute
              jmp       softclock_loop
minute_c
              clr.b     &minute
              cmp.b     #23h,&hour
              jge       hour_c
              dadd.b    #01h,&hour
              jmp       softclock_loop
hour_c
              clr.b     &hour
              clr.w     r10
              mov.b     &month,r10       ;月份放入r10,判断每月多少天
              mov.w     &year,r11        ;年份放入r11,判断平年闰年
              and.w     #03h,r11
              tst.w     r11
              jz        year_pn
              
              cmp.b     &day,month_table_c_BCD(r10)   ;闰年
              jl        day_c
              dadd.b    #01h,&day
              jmp       softclock_loop
year_pn
              cmp.b     &day,month_table_BCD(r10)     ;平年
              jl        day_c
              dadd.b    #01h,&day
              jmp       softclock_loop
day_c
              mov.b     #01h,&day
              mov.b     #12h,r10
              cmp.b     &month,r10
              jl        month_c
              dadd.b    #01h,&month
              jmp       softclock_loop
month_c
              mov.b     #01h,&month
              dadd.w    #01h,&year
              jmp       softclock_loop
#endif
;------------------------------------------------------------------------------
task1
;------------------------------------------------------------------------------
              mov.b     #055h,&P2OUT
              mov.b     #0ffh,&P2DIR
task1_loop
              push.w    #57
              call      #OS_Time_Dly
              incd.w    sp
              xor.b     #0ffh,&P2OUT
              jmp       task1_loop
;------------------------------------------------------------------------------
task2
;------------------------------------------------------------------------------
              mov.b     #0aah,&P3OUT
              mov.b     #0ffh,&P3DIR
task2_loop
              push.w    #23
              call      #OS_Time_Dly
              incd.w    sp
              xor.b     #0ffh,&P2OUT
              jmp       task2_loop

;------------------------------------------------------------------------------
task3
;------------------------------------------------------------------------------
              mov.b     #05ah,&P4OUT
              mov.b     #0ffh,&P4DIR
task3_loop
              push.w    #73
              call      #OS_Time_Dly
              incd.w    sp
              xor.b     #0ffh,&P2OUT
              jmp       task3_loop

;------------------------------------------------------------------------------
task4
;------------------------------------------------------------------------------
              mov.b     #0a5h,&P5OUT
              mov.b     #0ffh,&P5DIR
task4_loop
              push.w    #41
              call      #OS_Time_Dly
              incd.w    sp
              xor.b     #0ffh,&P2OUT
              jmp       task4_loop

;------------------------------------------------------------------------------
;指灯任务
;功能:用MSP30F149仿真头上P1口的LED演示”运行“灯的闪烁
taskled
;------------------------------------------------------------------------------
              bic.b     #BIT0,&P1OUT
              bis.b     #BIT0,&P1DIR
taskled_loop
              push.w    #100
              call      #OS_Time_Dly
              incd.w    sp
              xor.b     #BIT0,&P1OUT
              jmp       taskled_loop


RSEG   CONST

month_table:        db  31 ,28 ,31 ,30 ,31 ,30 ,31 ,31 ,30 ,31 ,30 ,31
month_table_c:      db  31 ,29 ,31 ,30 ,31 ,30 ,31 ,31 ,30 ,31 ,30 ,31
month_table_BCD:    db  31h,28h,31h,30h,31h,30h,31h,31h,30h,31h,30h,31h
month_table_c_BCD:  db  31h,29h,31h,30h,31h,30h,31h,31h,30h,31h,30h,31h

softclock_info:
                    dw  softclock              ;任务首址
                    dw  softclock_stack        ;堆栈首址
                    dw  softclock_stack_point  ;堆栈指针
                    dw  softclock_time_tick    ;时钟滴答
                    dw  SOFTCLOCK_STACK_SIZE*2 ;堆栈大小
task1_info:
                    dw  task1
                    dw  task1_stack
                    dw  task1_stack_point
                    dw  task1_time_tick
                    dw  TASK1_STACK_SIZE*2
task2_info:
                    dw  task2
                    dw  task2_stack
                    dw  task2_stack_point
                    dw  task2_time_tick
                    dw  TASK2_STACK_SIZE*2
task3_info:
                    dw  task3
                    dw  task3_stack
                    dw  task3_stack_point
                    dw  task3_time_tick
                    dw  TASK3_STACK_SIZE*2
task4_info:
                    dw  task4
                    dw  task4_stack
                    dw  task4_stack_point
                    dw  task4_time_tick
                    dw  TASK4_STACK_SIZE*2
taskled_info:
                    dw  taskled
                    dw  taskled_stack
                    dw  taskled_stack_point
                    dw  taskled_time_tick
                    dw  LED_STACK_SIZE*2

RSEG UDATA0

softclock_stack:
              ds   SOFTCLOCK_STACK_SIZE*2
task1_stack:
              ds   TASK1_STACK_SIZE*2
task2_stack:
              ds   TASK2_STACK_SIZE*2
task3_stack:
              ds   TASK3_STACK_SIZE*2
task4_stack:
              ds   TASK4_STACK_SIZE*2
taskled_stack:
              ds   LED_STACK_SIZE*2

RSEG IDATA0

Task_SP:
softclock_stack_point:
              ds   2
task1_stack_point:
              ds   2
task2_stack_point:
              ds   2
task3_stack_point:
              ds   2
task4_stack_point:
              ds   2
taskled_stack_point:
              ds   2

Task_Tick:
softclock_time_tick:
              ds   2
task1_time_tick:
              ds   2
task2_time_tick:
              ds   2
task3_time_tick:
              ds   2
task4_time_tick:
              ds   2
taskled_time_tick:
              ds   2

RSEG CDATA0

dw  0
dw  0
dw  0
dw  0
dw  0
dw  0
dw  0
dw  0
dw  0
dw  0
dw  0
dw  0

COMMON INTVEC

ds  RESET_VECTOR
dw  main

end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -