?? demo.s43
字號:
;========================================================================================
; M430/OS 演示程序
; V 1.00
; 說明:
; 此演示程序包含六個(gè)任務(wù):
; softclock 軟時(shí)鐘任務(wù)
; task1 向端口2的每個(gè)管腳輸出方波的任務(wù)
; task2 向端口3的每個(gè)管腳輸出方波的任務(wù)
; task3 向端口4的每個(gè)管腳輸出方波的任務(wù)
; task4 向端口5的每個(gè)管腳輸出方波的任務(wù)
; taskled 點(diǎn)亮P1.0上指示燈的任務(wù)
;
; 6個(gè)任務(wù),加上M430/OS的空閑任務(wù),共7個(gè)任務(wù),系統(tǒng)開辟了7塊堆棧,每塊堆棧的大小可以不同。
;
; 軟時(shí)鐘任務(wù)利用M430/OS的多任務(wù)延時(shí)模擬了一個(gè)有年、月、日、時(shí)、分、秒的時(shí)鐘,并且可以日期
; 時(shí)間格式為BCD格式或10進(jìn)制格式。
;
; 此程序可以直接在MSP430F149的仿真頭上運(yùn)行
;
; 敬請關(guān)注將在7月10號前發(fā)布的M430/OS演示程序的V1.10版本,V1.10版本的DEMO將使用V1.20版本
; 的M430/OS,功能更強(qiáng)大,使用更方便,對存儲(chǔ)的管理更完善。
;
; 劉兵 public_rtos@163.com 2003年6月25日
;
;========================================================================================
NAME DEMO(16)
#include <msp430x14x.h>
#include "include.h"
PUBLIC softclock
PUBLIC task1
PUBLIC task2
PUBLIC task3
PUBLIC task4
PUBLIC taskled
EXTERN OS_Time_Dly
EXTERN OS_Init
ORG 0fffeh
dw main
//RSEG CODE
ORG 1100h
;------------------------------------------------------------------------------
;引導(dǎo)程序。CPU復(fù)位后執(zhí)行此程序,由程序調(diào)用MSP430/OS的多任務(wù)初始化數(shù)來啟動(dòng)多任務(wù)
main
;------------------------------------------------------------------------------
mov.w #500h,sp ;堆棧可以隨便初始化一個(gè)值,因?yàn)镸430/OS啟動(dòng)后會(huì)管理堆棧
#ifndef debug
mov.w #WDT_MDLY_32,&WDTCTL ;在release版本下設(shè)置看門狗為32ms,release版本的程序不能單步運(yùn)行
#else
mov.w #(WDTPW+WDTHOLD),&WDTCTL ;在debug版本下把看門狗禁止掉,debug版本可以單步執(zhí)行
#endif
push.w #4000 ;設(shè)置任務(wù)調(diào)度周期為5ms,即每秒調(diào)度200次
call #OS_Init ;任務(wù)初始化完后多任務(wù)開始啟動(dòng)
;------------------------------------------------------------------------------
;軟時(shí)鐘任務(wù)
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
;------------------------------------------------------------------------------
;指燈任務(wù)
;功能:用MSP30F149仿真頭上P1口的LED演示”運(yùn)行“燈的閃爍
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
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
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -