MSP430G2系列学习笔记

  今天晚上开始学习MSP430G2系列的单片机,这是一个低功耗的16位单片机,还是比较有意思的。先看了一下手册,基本的架构,感觉挺无聊的,就直接上手老师介绍的那本书开始学习了。

第一天

第一章主要讲的是口袋实验版的硬件结构,学到了一些有趣的知识。比如说,之前以为在对运放供电的时候,双电源供电方式中的负电源很好实现。其实不然,这里面还是有很大的学问的。下面就是产生负电源的一种方式,电荷泵原理:

 

原理比较易懂,现在就来介绍下,当$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驱动器。

  ADCDAC以及滤波器功放以后学的时候再详说吧。

  然后就开始了CCS编程,这个CCS。。。怎么说呢,速度确实很慢,毕竟是基于eclipse开发的,但是界面还是十分满意的。(不喜欢的可以使用IAR for MSP 430,很不错)工程怎么建的就不多说了,玩过51的都会。。。然后,就开始很坑的找错阶段,我按照书上的代码写了下面一段程序:

#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,出现下面的结果:

  找了半天,没发现错误,换一种方式照样可以是LED灯闪烁,但是这究竟是错在哪了呢?原因是我写代码的习惯,在赋值的时候不自觉的喜欢多打一个空格使代码看上去更整洁,错误就在这,取反符号“^”后面不能有空格,删了之后就没有错误了。=-=

  最后,看一下这个代码的含义,其实很简单,看下declaration就知道了。很简单P1OUT就是个1通道的IO口,8位的特殊功能寄存器。

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)

  

posted @ 2018-01-24 23:36  TangHsiangYu  阅读(671)  评论(0编辑  收藏  举报