----------------------------------
#include <msp430x21x1.h>;此设备的头文件
----------------------------------
;端口2上LED的引脚
LED1 EQU BIT0;中继端口
LED2 EQU BIT1;计时器LED闪烁模式
启动EQU BIT2;计时器启动
选择EQU BIT3;计时器选择
#Define Display R7
#定义时间R6
#定义延迟20.
;计数器EQU 20;3*60*10;3是多因子(3*60=1分钟)。
----------------------------------
RSEG CSTACK;创建堆栈(在RAM中)
----------------------------------
RSEG代码;程序进入代码存储器
Reset:;执行从这里开始
MOV.w #SFE(CSTACK),SP;初始化堆栈指针
; mov.w #1,r6.
; BIC.w #GIE,SR
;等效于C中main()的开头
主要:MOV.w #WDTPW|WDTHOLD,&WDTTL;停止监视计时器
; mov.b #LED2,&P2OUT;预载LED1打开,LED2关闭
BIC.b #LED1|LED2,&P2OUT
BIS.b #LED1|LED2,&P2DIR;将带LED1,2的引脚设置为输出
BIS.b #LED2,&P2OUT
BIC.b #Start| Select,&P2DIR;启动并选择引脚方向作为输入
BIS.b #Start| Select,&P2REN;启动和选择引脚上拉电阻器启用
bis.b #Start| Select,&P2OUT;使上拉不下。永远
; mov.w #counter, r5.
MOV.w #1,R6;定时器的初始状态
MOV.w #DELAY,&TACR0;UP模式的周期
MOV.w #CCIE,&TACTL0;在比较0上启用中断
MOV.w #MC_1|ID_3|tassel_2|TALCLR,&TACTL;设置计时器A
BIS.w #GIE,SR
色调
;向上模式,时钟除以8,时钟来自SMCLK,清除TAR
呼叫#显示
AA:
;调用#Time_Set
;调用#Load_Data;加载设置时间到计数器R5
; mov.w #counter, r5.
bit.b #Start,&P2IN;如果按下,则检查位WFP 2.0
;呼叫#DELAY 1S;去抖时间1秒
JNZ aa
MOV.w #5400d,R5
AA:
色调
;永远循环;中断全部!
BIS.b LED1,&P2OUT;继电器打开
;调用#SW_Check
; mov.w #5400d, R5
cmp.w #0,R5
JNE aa
再次:
色调
; BIC.w #GIE,SR;禁用中断
BIC.b #LED1,&P2OUT;继电器关闭
BIS.b #LED2,&P2OUT
JMP主
Delay_1S:
RET
MOV.w #6.5万,R12;值应>2500
D1:12月w R5
jnz d1.
RET
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
时间集:
Bit.b #Select,&P2IN;如果按下,则检查Bit WFP 2.0
;呼叫#DELAY 1S;去抖时间1秒
JZ设置
JMP Exit (JMP退出)
设置:
增加时间
;呼叫#DISPLAY
CMP #9,时间
JNE退出
MOV 1,时间
退出:
呼叫#显示
;呼叫#DELAY 1S;去抖时间1秒
RET
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
加载数据:
MOV.w (Data_Load)(R6),R5
; mov.b DispReg,&P1OUT
RET
*/
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
显示:
MOV.b (Data_Dis)(R6),&P1OUT
; mov.w (Data_Load)(R6),R5;加载到计数器的时间
CMP #1,R6
JZ One
CMP #2,R6
JZ 2
CMP #3,R6
JZ三
CMP #4,R6
JZ四
CMP #5,R6
JZ Five
CMP #6,R6
JZ 6
CMP #7,R6
JZ 7
CMP #8,R6
JZ 8
一个:
MOV.w #5400d, R5;30分钟(=3*60*30)
RET
两个:
MOV.w #1.08万d, R5;1小时
RET
三:
MOV.w #1.62万d, R5;1.5 Hour
RET
四:
MOV.w #2.16万d,R5;2小时
RET
五:
MOV.w #2.7万d,R5;2.5 Hour
RET
六:
MOV.w #3.24万d, R5;3小时
RET
七:
MOV.w #3.78万d, R5;3.5 Hour
RET
八:
MOV.w #4.32万d, R5;4小时
RET
///////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
SW_检查:
Bit.b #Start,&P2IN;如果按下,则进行位启动检查
JZ检查_1
RET
检查_1:
;呼叫#DELAY 1S;去抖时间1秒
Bit.b #Start,&P2IN;如果按下,则进行位启动检查
很好
JMP主
SS:
RET
*/
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
;ORG 0.1万h
数据_数据
DB“0d,1d,2d,4d,8d,16d,32d,64D,128D”
;数据加载
; DW“0d,540.0108万00,16200,21600,27,000,324,37800,43200”0.0162万”</s>0.0216万 270.00324378亿0.0432万
;时间为30,60, 901.2015018亿 ,21.024万 minutes
;总时间为4小时
/*
org 0.1万h
数据_数据
DB 0万b
DB 0.0001万b
DB 0.001万b
DB 0.01万b
dB 0.1万b
DB 1万b
DB 10万b
DB 100万b
DB 1000万b
*/
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
----------------------------------
;中断TCCR0的服务例程,当TAR = TCCR0时调用
;无需显式确认中断-自动完成
TA0_ISR:;用于TCCR0 CCIFG的ISR
XOR.b #LED2,&P2OUT;切换LED
reti;就这样:从中断返回
----------------------------------
通用INTVEC;矢量段(闪存中)
org TIMERA0_Vector
DW TA0_ISR;用于TA0中断的ISR
org reset_vector
DW Reset (DW重置);开始执行的地址
结束