独自幸福快乐别让负面情绪毁掉你停止比较的5个方法依依不舍孤独

阀门2020年06月18日

msp430g2553单片机学习心得

四年前学习的TI的Msp430g2553这款单片机,最近在整理学习记录的时候把当时的学习心得重新写下来。学习单片机最早是学习的51系列的,看的也是广为推崇的郭天祥郭老师的《十天学习单片机》,个人觉得单片机学习还是最先攻克51的。学习好51之后,对单片机操作有了基本的认识,再学习其他款单片机自然是能融会贯通。

TI的430系列主打是低功耗,它的技术文档和Dome程序都非常详细,尤其是技术文档真让人有种膜拜的感觉,在每个模块的时候还有个框图,对理解模块内设置非常有帮助,我当时还特意打印了。当时它的Users 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中断

P2IFG&=~BIT6;//清除中断标志

//以下填充用户代码

}

else

{

//处理P2IN.7中断

P2IFG&=~BIT7;//清除中断标志

//以下填充用户代码

}

LPM3_EXIT;//退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽

}

/*****************************************************************************

USART1发送中断函数

******************************************************************************/

#pragmavector=USART1TX_VECTOR

__interruptvoidUsart1Tx()

{

//以下填充用户代码

LPM3_EXIT;//退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽

}

/*****************************************************************************

USART1接收中断函数

******************************************************************************/

#pragmavector=USART1RX_VECTOR

__interruptvoidUstra1Rx()

{

//以下填充用户代码

LPM3_EXIT;//退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽

}

/*****************************************************************************

端口1中断函数

多中断中断源:P1IFG.0~P1IFG7

进入中断后应首先判断中断源,退出中断前应清除中断标志,否则将再次引发中断

******************************************************************************/

#pragmavector=PORT1_VECTOR

__interruptvoidPort1()

{

//以下为参考处理程序

,不使用的端口应当删除其对于中断源的判断。

if((P1IFG&BIT0)==BIT0)

{

//处理P1IN.0中断

P1IFG&=~BIT0;//清除中断标志

//以下填充用户代码

}

elseif((P1IFG&BIT1)==BIT1)

{

//处理P1IN.1中断

P1IFG&=~BIT1;//清除中断标志

//以下填充用户代码

}

elseif((P1IFG&BIT2)==BIT2)

{

//处理P1IN.2中断

P1IFG&=~BIT2;//清除中断标志

//以下填充用户代码

}

elseif((P1IFG&BIT3)==BIT3)

{

//处理P1IN.3中断

P1IFG&=~BIT3;//清除中断标志

//以下填充用户代码

}

elseif((P1IFG&BIT4)==BIT4)

{

//处理P1IN.4中断

P1IFG&=~BIT4;//清除中断标志

//以下填充用户代码

}

elseif((P1IFG&BIT5)==BIT5)

{

//处理P1IN.5中断

P1IFG&=~BIT5;//清除中断标志

//以下填充用户代码

}

elseif((P1IFG&BIT6)==BIT6)

{

//处理P1IN.6中断

P1IFG&=~BIT6;//清除中断标志

//以下填充用户代码

}

else

{

//处理P1IN.7中断

P1IFG&=~BIT7;//清除中断标志

//以下填充用户代码

}

LPM3_EXIT;//退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽

}

/*****************************************************************************

定时器A中断函数

多中断中断源:CC1~2TA

******************************************************************************/

#pragmavector=TIMERA1_VECTOR

__interruptvoidTimerA1()

{

//以下为参考处理程序,不使用的中断源应当删除

switch(__even_in_range(TAIV,10))

{

case2:

//捕获/比较1中断

//以下填充用户代码

break;

case4:

//捕获/比较2中断

//以下填充用户代码

break;

case10:

//TAIFG定时器溢出中断

//以下填充用户代码

break;

}

LPM3_EXIT;//退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽

}

/*****************************************************************************

定时器A中断函数

中断源:CC0

******************************************************************************/

#pragmavector=TIMERA0_VECTOR

__interruptvoidTimerA0()

{

//以下填充用户代码

LPM3_EXIT;//退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽

}

/*****************************************************************************

AD转换器中断函数

多中断源:摸拟0~7、VeREF+、VREF-/VeREF-、(AVcc-AVss)/2

没有处理ADC12TOV和ADC12OV中断标志

******************************************************************************/

#pragmavector=ADC_VECTOR

__interruptvoidAdc()

{

//以下为参考处理程序,不使用的中断源应当删除

if((ADC12IFG&BIT0)==BIT0)

{

//通道0

//以下填充用户代码

}

elseif((ADC12IFG&BIT1)==BIT1)

{

//通道1

//以下填充用户代码

}

elseif((ADC12IFG&BIT2)==BIT2)

{

//通道2

//以下填充用户代码

}

elseif((ADC12IFG&BIT3)==BIT3)

{

//通道3

//以下填充用户代码

}

elseif((ADC12IFG&BIT4)==BIT4)

{

//通道4

//以下填充用户代码

}

elseif((ADC12IFG&BIT5)==BIT5)

{

//通道5

//以下填充用户代码

}

elseif((ADC12IFG&BIT6)==BIT6)

{

//通道6

//以下填充用户代码

}

elseif((ADC12IFG&BIT7)==BIT7)

{

//通道7

//以下填充用户代码

}

elseif((ADC12IFG&BIT8)==BIT8)

{

//VeREF+

//以下填充用户代码

}

elseif((ADC12IFG&BIT9)==BIT9)

{

//VREF-/VeREF-

//以下填充用户代码

}

elseif((ADC12IFG&BITA)==BITA)

{

//温度

//以下填充用户代码

}

elseif((ADC12IFG&BITB)==BITB)

{

//(AVcc-AVss)/2

//以下填充用户代码

}

LPM3_EXIT;//退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽

}

/*****************************************************************************

USART0发送中断函数

******************************************************************************/

#pragmavector=USART0TX_VECTOR

__interruptvoidUsart0Tx()

{

//以下填充用户代码

LPM3_EXIT;//退出中断后退出低功耗模式2011年的帽子。若退出中断后要保留低功耗模式,将本句屏蔽

}

/*****************************************************************************

USART0接收中断函数

******************************************************************************/

#pragmavector=USART0RX_VECTOR

__interruptvoidUsart0Rx()

{

//以下填充用户代码

LPM3_EXIT;//退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽

}

/*****************************************************************************

看门狗定时器中断函数

******************************************************************************/

#pragmavector=WDT_VECTOR

__interruptvoidWatchDog()

{

//以下填充用户代码

LPM3_EXIT;//退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽

}

/*****************************************************************************

比较器A中断函数

******************************************************************************/

#pragmavector=COMPARATORA_VECTOR

__interruptvoidComparatorA()

{

//以下填充用户代码

LPM3_EXIT;//退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽

}

/*****************************************************************************

定时器B中断函数

多中断源:CC1~6TB

******************************************************************************/

#pragmavector=TIMERB1_VECTOR

__interruptvoidTimerB1()

{

//以下为参考处理程序,不使用的中断源应当删除

switch(__even_in_range(TBIV,14))

{

case2:

//捕获/比较1中断

//以下填充用户代码

break;

case4:

//捕获/比较2中断

//以下填充用户代码

break;

case6:

//捕获/比较3中断

//以下填充用户代码

break;

case8:

//捕获/比较4中断

//以下填充用户代码

break;

case10:

//捕获/比较5中断

//以下填充用户代码

break;

case12:

//捕获/比较6中断

//以下填充用户代码

break;

case14:

//TBIFG定时器溢出中断

//以下填充用户代码

break;

}

LPM3_EXIT;//退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽

}

/*****************************************************************************

定时器B中断函数

中断源:CC0

******************************************************************************/

#pragmavector=TIMERB0_VECTOR

__interruptvoidTimerB0()

{

//以下填充用户代码

LPM3_EXIT;//退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽

}

/*****************************************************************************

不可屏蔽中断函数

******************************************************************************/

#pragmavector=NMI_VECTOR

__interruptvoidNmi()

{

//以下为参考处理程序,不使用的中断源应当删除

if((IFG1&OFIFG)==OFIFG)

{

//振荡器失效

IFG1&=~OFIFG;

//以下填充用户代码

}

elseif((IFG1&NMIIFG)==NMIIFG)

{

//RST/NMI不可屏蔽中断

IFG1&=~NMIIFG;

//以下填充用户代码

}

else//if((FCTL3&ACCVIFG)==ACCVIFG)

{

//存储器非法访问

FCTL3&=~ACCVIFG;

//以下填充用户代码

}

LPM3_EXIT;//退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽

}

/*****************************************************************************

基本定时器中断函数

******************************************************************************/

#pragmavector=BASICTIMER_VECTOR

__interruptvoidBasTimer()

{

//以下填充用户代码

LPM3_EXIT;//退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽

}

时延函数(注意选择时钟)

//1us延时函数

voiddelay_1us(void){

asm("nop");

}

//Nus延时函数

voiddelay_nus(unsignedintn){

unsignedinti;

for(i=0;i

阳泉白癜风
勃起功能障碍的病因有哪些
前列腺癌
相关阅读
九分裤+乐福鞋,夏日这样穿,时髦又显高,很适合小个子

夏日傍晚,前往篇名,乐声徐徐下劝教蛙声一片。时节,冬天更为替,当夏日...

2024-12-24
iPhone上的这个间谍触控板可以使打字更容易

iPhone和iPad都装载了很酷的隐秘机能,除此以外来自除此以外 iOS 15.5 越来越新...

2024-11-12
本月有趣 +1!中底「带闪电」的三叶草三方联名曝光!

日本国知名街头服装品牌 NEIGHBORHOOD 一直以来都在日潮迷不禁占据极佳的位置...

2024-11-03
心机流浪猫刮坏保时捷碰瓷姿总,以为死定了,没想到...太甜了吧!

“我当初以为我都会被固执董事拳背脊强暴,没想到他莫名其妙把我宠上了天...

2024-10-21
契约精神不在!西蒙斯的幺蛾子,或许才在此之后

众所周知,本赛季联盟最大的两个拉,一个是米切尔的疫苗多事件,一个是安...

2024-09-15
蜡烛的光源和设计哪个更重要?南卡台蜡烛L1体验:二者可兼得

不管是像我这种打铁路工人,还是教职员党在,平时夜里难免要加个班或者写...

2024-09-05
友情链接