MSP430芯片采用的是RISC精简指令集指令长度固定(严格上讲不固定,但是只要认识到各种指令周期的变化,就可以当成固定的),格式类似,时钟周期一致,并且采用冯•诺依曼存储结构,指令存储器和数据存储器位于同一存储器的不同物理地址,指令和数据的宽度相同。
一般程序采用
while(1)//死循环
{
{
…….//程序主体
}
}
程序不会退出main函数,在while循环中结合中断来实现具体的功能。
POR 上电复位
PUC 上电清除
GIE中断使能位
NMI不可屏蔽中断
RETI中断返回指令
MCLK 系统时钟
SMCLK子系统时钟
ACLK辅助时钟
MSP430有三种中断
(1) 系统复位:POR或PUC产生
(2) 不可屏蔽中断:只能被各自的中断使能位屏蔽
(3) 可屏蔽中断
430进入功耗模式后CPU和MCLK都是禁止的,CPU总是由中断唤醒,必须保持GIE有效。
在低功耗模式下,中断发生后进入中断服务程序,系统将PC和SR压入栈,由于SR更新自动取消了了低功耗模式,进行中断处理,最后退出中断时恢复SR出栈,恢复原来的低功耗模式。
#include "msp430x54x.h"
//延时函数
void dealy600ms() //延时函数
{
unsigned char m,n;
for(m=0;m<100;m++)
for(n=0;n<200;n++);
}
void main( void )
{
// WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
WDTCTL=WDT_ADLY_1000;
SFRIE1|=WDTIE;
P10DIR|=0Xff;
P10OUT=0Xff; //设置P10口为输出,并输出高电平关闭LED
_EINT();
unsigned char temp,i;
temp=0x01;
while(1)
{
/*
for(i=0;i<8;i++)
{
P10OUT = ~(0xff&(temp<<i)); //循环点亮LED灯
dealy600ms(); //调用延时
}
}
*/
_BIS_SR(LPM3_bits);
P10OUT=0x00;
dealy600ms();
P10OUT=0xff;
}
}
#pragma vector = WDT_VECTOR
__interrupt void watchdog_timer(void)
{
_BIC_SR_IRQ(LPM3_bits);
}