您的位置:首页 > 其它

[MSP430] 1.第一个工程

2014-03-01 16:34 483 查看
在这一部分中,我们将介绍CCS集成开发环境的一些基本使用方法,并试着编写一个简单的小程序,实现按键打开LED灯的功能。



TI 的 Launchpad 板本身是完整的 MSP430 开发环境,我们所需要做的仅仅是下载安装CCS 集成开发环境(也可以用IAR 等开发环境,这里我们选用CCS),用 Mini-USB 线把MSP430 连接到电脑,你就可以开始编写代码了。

现在我们就试着在 CCS 中新建一个新的工程。我们将写一个简单的小程序,实现按键打开LED 灯的功能。 

1. 新建 CCS workspace 

打开 CCS,选择 workspace 路径,通常只需要第一次设置为默认。注意,路径中不要使用中文。 



2.创建一个CCS工程 

File > New > CCS Project

Project name: ButtonLED

Device>Family: MSP430

Variant: MSP430G2553

Project templates and examples : Empty Project(with main.c)

Finish! 



3.可以编写自己的程序了! 

我们的第一行代码: 

#include "msp430g2553.h" //Contains definitions for registers and built-in functions


这个头文件包含了 MSP430G2553 的寄存器定义和内置函数,如果你使用的是其他型号的芯片,例如 MSP430G2231,你需要包含的头文件便是"msp430g2231.h" 。

接着,是主函数部分。 

void main(void)// Main program {
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P1DIR |= BIT0; // Set P1.0 to output direction
P1OUT &= ~BIT0; // set P1.0 to Off
P1REN |= BIT3; // P1.3 Pull up Enabled
P1IES |= BIT3; // P1.3 Interrupt at Falling Edge
P1IFG &= ~BIT3; // P1.3 Interrupt Flag Clear
P1IE |= BIT3; // P1.3 interrupt Enabled
_EINT(); // Enable all interrupts
while(1) //Loop forever, we'll do our job in the interrupt routine...  {}

这仅仅是一个初始化过程,我们还没有写有关开关 LED 灯的代码。

WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
这一行中,我们关闭了看门狗计时器——它的主要功能是在单片机运行了一段时间后重置单片机,以防止程序陷入无限死循环。在大多数例程中,你会发现在初始化过程中都会关闭看门狗,以避免不必要的重置。 

P1DIR |= BIT0; // Set P1.0 to output direction
这一行中,我们将 P1.0 引脚设置为输出(P1.0 与单片机上 Led1 相连)。在 MSP430 中,P1DIR 是一个控制 Port1 引脚方 向的八位寄存器。如果你把某一位配置为 0,则它作输入用,反之 是输出。BIT0 是一个系统定义的常量,即 0x01。

P1OUT &= ~BIT0; // set P1.0 to Off
这一行中,我们将 P1.0 引脚默认输出配置为低,这样在系统 上电的时候 LED 灯一定是灭的。P1OUT 寄存器控制着 PORT1 上 所有配置为输出的引脚,如果你把对应位配置为 1(通过将 P1OUT 与上对应的常数如 BIT0,BIT1 等),那么对应位的输出 就是高电平,反之输出低电平。

P1REN |= BIT3;  // P1.3 Pull up Enabled
P1IES |= BIT3; // P1.3 Interrupt at Falling Edge
P1IFG &= ~BIT3; // P1.3 Interrupt Flag Clear
P1IE |= BIT3;  // P1.3 interrupt Enabled
这几行中,我们配置了 P1.3 的中断功能,其中 P1.3 与板上的 S2 按键相连。什么是中断?我们希望单片机知道我们什么时候按下 了按键,无论单片机当前所执行的任务是什么,这就需要使用中断 功能。中断的具体内容后面会详细介绍,这里只简述上面所执行的内容:

P1REN |= BIT3 为P1.3配置了上拉电阻

P1IES |= BIT3 配置P1.3为下降沿有效

P1IFG &= ~BIT3 清除P1.3的中断标志位

P1IE |= BIT3 P1.3中断使能

_EINT(); // Enable all interrupts

这一行是一个内置函数,它打开的所有中断功能。

while(1) //Loop forever, we'll do our job in the interrupt routine...
{}
在进行完简单的配置后,我们终于进入了循环。注意到这是一个无限空循环,接下来的开关灯的工作就全交给中断函数了。

#pragma vector=PORT1_VECTOR __interrupt void Port_1(void) {
P1OUT ^= BIT0; //Toggle P1.0
P1IFG &= ~BIT3; // P1.3 Interrupt Flag Clear
}

这是PORT1的中断处理函数,每当P1.3引脚从高电平变为低 电平时(Launchpad上的按键是低电平有效的,这也是为什么配置 时是下降沿有效触发中断),中断处理函数便会被调用。

P1OUT ^= BIT0; //Toggle P1.0
这一行用异或操作翻转 LED 灯的状态。

P1IFG &= ~BIT3; // P1.3 Interrupt Flag Clear


这一行用来清除中断标志位,从而下次触发中断依然有效。

如果一切顺利的话,现在我们可以把我们的程序下载到单片机 运行了。

4.将程序下载到单片机 


这个是编译按钮,如果编译顺利通过的话就可以下载到单片机了。


这个是 Debug 按钮,编译通过之后,我们按这个按钮进入 DEBUG 模式。


按红色按钮终止 DEBUG 模式。

至此,我们的开关 LED 程序已经下载到单片机中,如果你观察到红色的 LED 灯会随着按键亮灭,那么恭喜你,你已经完成了第一 个 MSP430的项目。



这是 DEBUG 模式的界面状态,我们可以单步调试程序以观察没运行一步单 片机以及每一个寄存器、每一个变量的状态,以调试程序,检查错误等。

以下是这一节的完整代码:

#include "msp430g2553.h" //Contains definitions for registers and built-in functions
void main(void)// Main program {
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P1DIR |= BIT0; // Set P1.0 to output direction
P1OUT &= ~BIT0; // set P1.0 to Off
P1REN |= BIT3; // P1.3 Pull up Enabled
P1IES |= BIT3; // P1.3 Interrupt at Falling Edge
P1IFG &= ~BIT3; // P1.3 Interrupt Flag Clear
P1IE |= BIT3; // P1.3 interrupt Enabled
_EINT(); // Enable all interrupts
while(1) //Loop forever, we'll do our job in the interrupt routine... {}
}

#pragma vector=PORT1_VECTOR __interrupt void Port_1(void){
P1OUT ^= BIT0; //Toggle P1.0
P1IFG &= ~BIT3; // P1.3 Interrupt Flag Clear
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MSP430 CCS 单片机