msp430g2553单片机学习心得
扫描二维码
随时随地手机看文章
四年前学习的TI的Msp430g2553这款单片机,最近在整理学习记录的时候把当时的学习心得重新写下来。学习单片机最早是学习的51系列的,看的也是广为推崇的郭天祥郭老师的《十天学习单片机》,个人觉得单片机学习还是最先攻克51的。学习好51之后,对单片机操作有了基本的认识,再学习其他款单片机自然是能融会贯通。
TI的430系列主打是低功耗,它的技术文档和Dome程序都非常详细,尤其是技术文档真让人有种膜拜的感觉,在每个模块的时候还有个框图,对理解模块内设置非常有帮助,我当时还特意打印了。当时它的User's Guide还没有中文版,如果实在看不懂,可以借鉴F149系列的(这款有人翻译了中文版本)。
个人觉得在学习g2553这款单片机中,主要注意的点:
(1)注意低功耗的使用,选用不同的模式。
(2)IO的设置,由于IO口比较少,复用的比较严重,当时一直纠结IO口的REN与OUT,DIR的问题,下面这个表概括详细,总结I/O 口配置时PxDIRx、PxRENx和PxOUTx寄存器的用法
PxDIRx PxRENx PxOUTx I/O 口配置
0 0 x 输入
0 1 0 置低
0 1 1 置高
1 x x 输出
其他具体的由于当时的笔记找不到,就不能一一说明了。
下面是比较实用的G2553框架程序:
#include
//函数声明
voidInitSys();
intmain(void)
{
WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
InitSys();//初始化
start:
//以下填充用户代码
LPM3;//进入低功耗模式n,n:0~4。若不希望进入低功耗模式,屏蔽本句
gotostart;
}
/*****************************************************************************
系统初始化
******************************************************************************/
voidInitSys()
{
unsignedintiq0;
//使用XT2振荡器
BCSCTL1&=~XT2OFF;//打开XT2振荡器
do
{
IFG1&=~OFIFG;//清除振荡器失效标志
for(iq0=0xFF;iq0>0;iq0--);//延时,等待XT2起振
}
while((IFG1&OFIFG)!=0);//判断XT2是否起振
BCSCTL2=SELM_2+SELS;//选择MCLK、SMCLK为XT2
//以下填充用户代码,对各种模块、中断、外围设备等进行初始化
_EINT();//打开全局中断控制,若不需要打开,可以屏蔽本句
}
/*****************************************************************************
端口2中断函数
******************************************************************************/
#pragmavector=PORT2_VECTOR
__interruptvoidPort2()
{
//以下为参考处理程序,不使用的端口应当删除其对于中断源的判断。
if((P2IFG&BIT0)==BIT0)
{
//处理P2IN.0中断
P2IFG&=~BIT0;//清除中断标志
//以下填充用户代码
}
elseif((P2IFG&BIT1)==BIT1)
{
//处理P2IN.1中断
P2IFG&=~BIT1;//清除中断标志
//以下填充用户代码
}
elseif((P2IFG&BIT2)==BIT2)
{
//处理P2IN.2中断
P2IFG&=~BIT2;//清除中断标志
//以下填充用户代码
}
elseif((P2IFG&BIT3)==BIT3)
{
//处理P2IN.3中断
P2IFG&=~BIT3;//清除中断标志
//以下填充用户代码
}
elseif((P2IFG&BIT4)==BIT4)
{
//处理P2IN.4中断
P2IFG&=~BIT4;//清除中断标志
//以下填充用户代码
}
elseif((P2IFG&BIT5)==BIT5)
{
//处理P2IN.5中断
P2IFG&=~BIT5;//清除中断标志
//以下填充用户代码
}
elseif((P2IFG&BIT6)==BIT6)
{
//处理P2IN.6