?? demo.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 + -