MSP430学习笔记(一)--从点灯说起

在我自学使用德州仪器所生产的MSP430系列微控制器时,遇到了新手都可能会遇到的一些问题,现总结记录如下,作为笔记保留,同时也希望能帮到其他有需要的人。新手建议从MSP430G2553学起。
这个范例是来自Ti官网的MSP340G2553_LED闪烁实验,下面我们会在该例的基础上记录和修改。(笔记展示代码均使用Ti的Code Composer Studio 9.1.0作为开发工具)

#include <msp430.h>

int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
  P1DIR |= 0x01;                            // Set P1.0 to output direction

  for (;;)
  {
    volatile unsigned int i;

    P1OUT ^= 0x01;                          // Toggle P1.0 using exclusive-OR

    i = 50000;                              // Delay
    do (i--);
    while (i != 0);
  }
}

可以看到在程序开始,就包含了单片机头文件

#include <msp430.h>

这个在你新建CCS工程–>选择微控制器型号时就已选定,你可以打开观看,只有你选定的型号为亮度显示,如图头文件但在一个默认的不成文规定下,我们一般都会将头文件写为所使用单片机的头文件形式,如:

#include <msp430g2553.h>

在我的理解下,这样写的好处就是直接在后台寻找g2553的头文件,省略了在综合头文件中寻找目标头文件的步骤,提高编译速度。
源程序中main()函数的第一句总是关闭看门狗,具体原因在看门狗笔记中记录。
接着我们可以看到使用了方向寄存器(PxDIR)–用来配置对应I/O的输入输出方向。对应位配置为0,代表该管脚为输入;对应位配置为1,代表该管脚为输出。

P1DIR |= 0x01;		//将P1.0管脚方向设置为输出
P1DIR |= 0x10;		//将P1.4管脚方向设置为输出
P2DIR &= ~0x01;		//将P2.0管脚方向设置为输入

这是单片机的位操作,有单片机基础的应该都可以看出来。MSP430单片机操作I/O的好处就是每个位都已由官方封装好,如:

/************************************************************
* STANDARD BITS
************************************************************/

#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)

所以方向寄存器的描述可以写为

P1DIR |= BIT0;		//将P1.0管脚方向设置为输出
P1DIR |= BIT4;		//将P1.4管脚方向设置为输出
P2DIR &= ~BIT0;		//将P2.0管脚方向设置为输入

新手对该程序还有疑问的应该就剩输出寄存器(PxOUT),该寄存器用于设置对应管脚的输出电平(前提是I/O方向已设置为输出),对应位设置为0,代表该管脚输出低电平;对应位设置为1,代表该管脚输出高电平。

P1DIR |= BIT0;		//将P1.0管脚方向设置为输出
P1OUT |= BIT0;		//P1.0管脚输出高电平
P1OUT &= ~BIT0;		//P1.0管脚输出低电平

最终的到如下程序,可自行对照

#include <msp430g2553.h>

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 //关闭看门狗
  P1DIR |= BIT0;                            //设定P1.0为输出方向

  for (;;)
  {
    volatile unsigned int i;

    P1OUT ^= BIT0;                          //翻转P1.0电平状态

    i = 50000;                              //延时
    do (i--);
    while (i != 0);
  }
}

以上寄存器(PxDIR,PxOUT),中的x可以取1/2/3等I/O数字,也可取A/B/C/D,只不过PA = P1 + P2,PB = P3 + P4,即两个8位寄存器相加,变为一个16位寄存器。
新手一定要适应MSP430单片机程序的书写风格和规范,万事开头难,后面也就好了,该程序中其他难点应该都在C语言编程问题上,还有不理解的请回头复习C语言,再提一句,MSP430开发会用到复合赋值运算符,如 |= ,&= ,^= 等,这样操作的目的是不影响其他配置位,一定要理解。该程序的软件延时会阻塞MCU,只不过阻塞时间勉强能接受,写简单程序时可以不去考虑,但在后期书写略微带有难度的代码时很不提倡,现在仅需知道这个概念,后面会记相关笔记。

  • 22
    点赞
  • 131
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值