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;
}
/*****************************************************************************
系統(tǒng)初始化
******************************************************************************/
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