📄 demo.s43
字号:
;========================================================================================
; M430/OS 演示程序
; V 1.00
; 说明:
; 此演示程序包含六个任务:
; softclock 软时钟任务
; task1 向端口2的每个管脚输出方波的任务
; task2 向端口3的每个管脚输出方波的任务
; task3 向端口4的每个管脚输出方波的任务
; task4 向端口5的每个管脚输出方波的任务
; taskled 点亮P1.0上指示灯的任务
;
; 6个任务,加上M430/OS的空闲任务,共7个任务,系统开辟了7块堆栈,每块堆栈的大小可以不同。
;
; 软时钟任务利用M430/OS的多任务延时模拟了一个有年、月、日、时、分、秒的时钟,并且可以日期
; 时间格式为BCD格式或10进制格式。
;
; 此程序可以直接在MSP430F149的仿真头上运行
;
; 敬请关注将在7月10号前发布的M430/OS演示程序的V1.10版本,V1.10版本的DEMO将使用V1.20版本
; 的M430/OS,功能更强大,使用更方便,对存储的管理更完善。
;
; 刘兵 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
;------------------------------------------------------------------------------
;引导程序。CPU复位后执行此程序,由程序调用MSP430/OS的多任务初始化数来启动多任务
main
;------------------------------------------------------------------------------
mov.w #500h,sp ;堆栈可以随便初始化一个值,因为M430/OS启动后会管理堆栈
#ifndef debug
mov.w #WDT_MDLY_32,&WDTCTL ;在release版本下设置看门狗为32ms,release版本的程序不能单步运行
#else
mov.w #(WDTPW+WDTHOLD),&WDTCTL ;在debug版本下把看门狗禁止掉,debug版本可以单步执行
#endif
push.w #4000 ;设置任务调度周期为5ms,即每秒调度200次
call #OS_Init ;任务初始化完后多任务开始启动
;------------------------------------------------------------------------------
;软时钟任务
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
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -