在这一部分中,我们将介绍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] 2.中断和计时器
下一篇:MSP430F149单片机实现uart数据接收中断
推荐阅读最新更新时间:2024-11-19 20:00
设计资源 培训 开发板 精华推荐
- LT3663IDCB、3.3V 降压转换器的典型应用
- LT3091EFE 简单电缆压降补偿的典型应用
- 使用 Analog Devices 的 LTC3526EDC-2 的参考设计
- 具有静音/待机功能的 Tda7269A 14W+14W 立体声放大器的典型单电源应用
- LT3970IMS-3.3 5V 同步降压转换器的典型应用
- LTM4609 模块稳压器适用于 15mm-15mm 和 2.8mm 尺寸的(几乎)完整的降压-升压解决方案
- 大师球灯
- 激光电视
- LTC3703、12V 至 24V、5A 同步升压转换器
- EV-ADuCRF101MK1Z,使用 ADuCRF101 868-MHz/915-MHz MCU 的评估板