MSP430G2系列學習筆記

  今天晚上開始學習MSP430G2系列的單片機,這是一個低功耗的16位單片機,仍是比較有意思的。先看了一下手冊,基本的架構,感受挺無聊的,就直接上手老師介紹的那本書開始學習了。編程

第一天架構

第一章主要講的是口袋實驗版的硬件結構,學到了一些有趣的知識。好比說,以前覺得在對運放供電的時候,雙電源供電方式中的負電源很好實現。其實否則,這裏面仍是有很大的學問的。下面就是產生負電源的一種方式,電荷泵原理:eclipse

 

原理比較易懂,如今就來介紹下,當$Q_1$和$Q_3$ MOS管打開的時候,電源$V_1$給電容$C$充電,1 3與2 4開關的狀態一定是相反的,所以當$Q_2,Q_4$打開的時候電容$C$給電容$C_F$充電,致使電容的極板是下正上負,因此輸出的電源就是負電源了。(負電源的資料明天看老師給的資料)學習

  咱們用的這個型號的板子封裝是20引腳的,感受和51的沒啥優點啊~還好,在拓展板上提供了I2C芯片拓展了IO口的數量,總體來講,採用的是TAC6416A芯片,一共有16個引腳(芯片手冊還沒看。。)。板子用了四個輸入(鍵盤),和個做爲輸出口用於控制 8個LED,4個做爲輸出口用於控制LCD驅動器。spa

  ADCDAC以及濾波器功放之後學的時候再詳說吧。code

  而後就開始了CCS編程,這個CCS。。。怎麼說呢,速度確實很慢,畢竟是基於eclipse開發的,可是界面仍是十分滿意的。(不喜歡的能夠使用IAR for MSP 430,很不錯)工程怎麼建的就很少說了,玩過51的都會。。。而後,就開始很坑的找錯階段,我按照書上的代碼寫了下面一段程序:
blog

#include <MSP430G2553.h>

/*
 * main.c
 */
void Blink_LED();
int main(void) {
    WDTCTL = WDTPW + WDTHOLD;	// Stop watchdog timer
	P1DIR = BIT6;
	while(1)
	{
		Blink_LED();
	}
}
void Blink_LED()
{
	_delay_cycles(1000000);
	P1OUT^ = BIT6;
}

  乍一看,沒有啥錯誤,可是一Debug,出現下面的結果:ip

  找了半天,沒發現錯誤,換一種方式照樣能夠是LED燈閃爍,可是這到底是錯在哪了呢?緣由是我寫代碼的習慣,在賦值的時候不自覺的喜歡多打一個空格使代碼看上去更整潔,錯誤就在這,取反符號「^」後面不能有空格,刪了以後就沒有錯誤了。=-=開發

  最後,看一下這個代碼的含義,其實很簡單,看下declaration就知道了。很簡單P1OUT就是個1通道的IO口,8位的特殊功能寄存器。io

SFR_8BIT(P1OUT);                              /* Port 1 Output */

  怎麼肯定各個通道的狀態呢?看下宏定義,很簡單,十六位嘛,一次定義各個管腳爲1就好了。(和微機外接8053相似)

#define BIT0                   (0x0001)
#define BIT1                   (0x0002)
#define BIT2                   (0x0004)
#define BIT3                   (0x0008)
#define BIT4                   (0x0010)
#define BIT5                   (0x0020)
#define BIT6                   (0x0040)
#define BIT7                   (0x0080)
#define BIT8                   (0x0100)
#define BIT9                   (0x0200)
#define BITA                   (0x0400)
#define BITB                   (0x0800)
#define BITC                   (0x1000)
#define BITD                   (0x2000)
#define BITE                   (0x4000)
#define BITF                   (0x8000)
相關文章
相關標籤/搜索