MSP430G2553代码总结

1. 点亮一个LED

// PxOUT 控制IO输出电平, 又决定上下拉电阻的接法
// PxDIR 重置: 00000000 	0->输入, 1->输出
WDTCTL = WDTPW | WDTHOLD;	// stop watchdog timer
P1DIR = BIT0;               // BIT0 -> 00000001, 使P1.0设置为输出
// P1DIR &= ~BIT0;          // 将P1.0设置为输入状态. ~:按位取反
P1OUT |= BIT0;              // 将P1.0设置为高电平
while(1)
{

}
return 0;

2. LED2闪烁

// 将寄存器/变量某一位置为1: |= (按位或)
// 将寄存器/变量某一位清零: &=  (按位与)
// 不断改变寄存器/变量某一位: ^= (按位异或)
WDTCTL = WDTPW | WDTHOLD;	// stop watchdog timer
P1DIR |= BIT6;              // 初始化LED2所在的IO口P1.6为输出, BIT6 x1xxxxxx
P1OUT &= ~P1OUT;            // 初始化LED2所在的IO口P1.6为低电平, LED灯初始状态为灭, P1OUT: x0xxxxxx
while(1)
{
    P1OUT ^= BIT6;          // 按位异或运算, 第一次: x1xxxxxx, LED2点亮. 第二次: x0xxxxxx, LED2熄灭.
    __delay_cycles(500000); // 执行时间大致为500ms.
}
return 0;

3. 按键控制LED

// P1IN寄存器是输入寄存器, 能反映外部IO口的电平状态, 只读, 不可赋值
WDTCTL = WDTPW | WDTHOLD;	// stop watchdog timer
P1DIR |= BIT6;              // 初始化LED2所在的IO口P1.6为输出, BIT6 x1xxxxxx
P1OUT &= ~P1OUT;            // 初始化LED2所在的IO口P1.6为低电平, LED灯初始状态为灭, P1OUT: x0xxxxxx
P1DIR &= ~BIT3;             // 初始化按键所在IO口P1.3为输入
// 使能P1.3口为上拉电阻
P1REN |= BIT3;
P1OUT |= BIT3;
while(1)
{
    if(P1IN & BIT3)         // P1.3口为高电平, 证明没有被按下, 第三位跟随原来的状态, 其余置零
    {
        P1OUT &= ~BIT6;     // 熄灭LED2
    }
    else
    {
        P1OUT |= ~BIT6;     // 点亮LED2
    }
}
return 0;

4. 主时钟更改实验

//设置MCLK频率(高: 提高运行速度; 低: 降低功耗)
WDTCTL = WDTPW | WDTHOLD;	// stop watchdog timer
DCOCTL = CALDCO_8MHZ;
BCSCTL1 = CALBC1_8MHZ;
P1DIR |= BIT6;              // 初始化LED2所在的IO口P1.6为输出, BIT6 x1xxxxxx
P1OUT &= ~P1OUT;            // 初始化LED2所在的IO口P1.6为低电平, LED灯初始状态为灭, P1OUT: x0xxxxxx
while(1)
{
    P1OUT ^= BIT6;          // 按位异或运算, 第一次: x1xxxxxx, LED2点亮. 第二次: x0xxxxxx, LED2熄灭.
    __delay_cycles(500000); // 执行时间大致为500ms.
}
return 0;

5. IO中断

#include <msp430.h> 
/**
 * IO中断, 存在问题:有抖动
 */
int main(void)
{
    WDTCTL = WDTPW | WDTHOLD;   // stop watchdog timer
    P1DIR |= BIT6;              // 初始化LED2所在的IO口P1.6为输出, BIT6 x1xxxxxx
    P1OUT &= ~P1OUT;            // 初始化LED2所在的IO口P1.6为低电平, LED灯初始状态为灭, P1OUT: x0xxxxxx
    P1DIR &= ~BIT3;             // 初始化按键所在IO口P1.3为输入
    // 使能P1.3口为上拉电阻
    P1REN |= BIT3;
    P1OUT |= BIT3;

    P1IE |= BIT3;               // 打开P1.3口中断
    P1IES |= BIT3;              // 设定为下降沿触发
    P1IFG &= ~BIT3;             // 清除中断标志位
    __bis_SR_register(GIE);     // 打开全局中断
    while(1)
    {

    }
	return 0;
}

#pragma vector = PORT1_VECTOR           // 中断函数的地址
__interrupt void Port1_ISR(void)        // 中断函数的模板, 使用只需改上行
{
    if(P1IFG & BIT3)                    // 判断是否是P1.3产生中断
    {
        P1IFG &= ~BIT3;                 // 对标志位进行清零
        P1OUT ^= BIT6;                  // 改变LED亮灭状态
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清上尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值