一、实现功能
利用中断函数实现按键控制LED,一按一灭的功能 。
二、运行内容
1、整体代码
#include "MSP430.h"
#include "IN430.h"
//#include "MSP430f5529.h"
int main( void )
{
WDTCTL = WDTPW + WDTHOLD;
/*初始LED*/
P1DIR|=BIT0;
P1OUT&=~BIT0;
/*初始按键 输出*/
P1DIR&=~BIT1;
/*使能上拉 */
P1REN |=BIT1;
P1OUT |=BIT1;
/*打开P1.0中断 */
P1IE |=BIT1;
/*设定下降沿触发 */
P1IES |=BIT1;
/*清除中断 */
P1IFG&=~BIT1;
/*打开全局中断 */
_BIS_SR(GIE);
while(1)
{
}
}
#pragma vector=PORT1_VECTOR
__interrupt void Port1_ISR()
{
if(P1IFG & BIT1)//判断是否是P1.0产生的中断
{
P1IFG&=~BIT1;//中断标记位清零
P1OUT ^=BIT0;//处理事件
}
}
2、初始按键
按键是按下是低电平,故是从高电平往低电平走是作为一次判断按键按下标志,这就需要设定下降沿触发,因此为使能上来
/*初始按键 输出*/
P1DIR&=~BIT1;
/*使能上拉 */
P1REN |=BIT1;
P1OUT |=BIT1;
/*打开P1.0中断 */
P1IE |=BIT1;
/*设定下降沿触发 */
P1IES |=BIT1;
/*清除中断 */
P1IFG&=~BIT1;
3、打开全局中断
在头文件#include "IN430.h"中找到打开全局中断的函数
_BIS_SR(GIE);
4、打开全局中断
中断服务函数例程如下,#pragma vector=中断向量(需要在所属MSP430单片机头文件找到中断向量函数)
__interrupt void 随便命名()
#pragma vector=PORT1_VECTOR
__interrupt void Port1_ISR()
{
if(P1IFG & BIT1)//判断是否是P1.0产生的中断
{
P1IFG&=~BIT1;//中断标记位清零
P1OUT ^=BIT0;//处理事件
}
}
关键字:MSP430 中断函数 按键控制
引用地址:
MSP430中断函数篇
推荐阅读最新更新时间:2024-11-12 18:51
MSP430学习笔记(3)时钟模块
1. 时钟模块包括高速晶体振荡器、低俗晶体振荡器、数字控制振荡器DCO、锁频环FLL以及锁频环增强版本FLL+等部件构成。 2. 时钟模块产生3个输出结果:ACLK(辅助时钟),MCLK(主系统时钟)和SMCLK(子系统时钟)。 3. MSP430采用锁频环FLL以及锁频环增强版本FLL+等部件将晶体频率倍频至系统频率。数字控制振荡器DCO和锁频环FLL计数相结合可实现快速启动。在晶体振荡器失效时DCO可自动用于系统时钟。 4. 3个时钟输入源: a) LFXT1CLK:低频时钟源 b) XT2CLK:高频时钟源 c) DCOCLK:数字控制RC振荡器 5. 3种时钟信号 a)
[单片机]
MSP430F5438A的时钟系统
现在在做的温控部分算法,需要每隔0.25s采集一次温度数据,然后计算出相应的控制量,并以PWM的形式输出。为了实现这个功能,时钟系统是不可或缺的,现就MSP430F5438A的时钟系统进行研究。 MSP430F5438A 里面有三个计时器,如下图所示 这三个计时器为TA0,TA1,TB0。TA0有5个capture/compare 寄存器, TA1有3个, TB0 有7个。 TA0 is a 16-bit timer/counter (Timer_A type) with five capture/compare registers. It can support multiple capture/compares, PW
[单片机]
提高MSP430G系列单片机的Flash 擦写寿命的方法
摘要 在嵌入式设计中,许多应用设计都需要使用EEPROM 存储非易失性数据,由于成本原因,某些单片机在芯片内部并没有集成EEPROM。MSP430G 系列处理器是TI 推出的低成本16 位处理器,在MSP430G 系列单片机中并不具备EEPROM。为了存储非易失性数据,MSP430G 系列处理器在芯片内部划分出了256 字节的Flash 空间作为信息Flash,可用于存储非易失性数据,但是由于Flash 与EEPROM 在擦写寿命上存在一定差距,所以在实际应用中,这种应用方式并不能够满足所有客户的需求。本应用笔记介绍了使用代码区域Flash 来模拟EEPROM,通过一定的软件处理算法,可以大大增加数据存储周期的一种方法。本文给出了
[单片机]
MSP430第一章:系统介绍
1.系统控制模块(SYS)介绍 SYS负责整个系统中各个模块之间的交互,其提供的功能不是模块本身自有的。地址解码、总线仲裁、中断事件整合和复位生成是SYS提供的许多功能的一些例子。 2.系统重启和初始化 系统重启电路如图所示,有断电复位(BOR)、上电复位(POR)、上电清除(PUC)三个来源。不同的事件触发这些信号并产生不同的初始条件。 以下事件会产生BOR: 设备上电 在重启模式下RST/NMI引脚低电平 一个事件从LPMx.5唤醒设备 软件BOR事件 违反安全事件 以下事件会触发POR: BOR信号(BOR总是会产生POR,反之则不然) SVSH或者SVSM低电平信号 SVSL或者SVSL低电平信号 软件PO
[单片机]
stm32按键控制led灯亮灭
在嵌入式系统中,硬件按键常常被用作开关输入,控制LED灯亮灭。在STM32系列单片机中,有多种方式实现按键控制LED灯亮灭,我们将介绍其中一种较为简单的方法。 一、STM32开发环境搭建 1. 软件环境搭建 首先,需要在计算机中下载安装Keil MDK开发环境,以实现对STM32单片机的编写、编译、烧录等操作。同时,还需要下载对应的STM32CubeMX软件,用于生成代码、初始化硬件等操作。 2. 硬件环境搭建 将STM32单片机与相应的按键和LED灯连接。本实验使用的STM32是STM32F103C8T6,按键使用的是按钮开关,LED灯使用的是红色和蓝色通用的LED灯。 二、STM32按键控制LED灯亮灭实验步骤 1. 打开ST
[单片机]
一种基于MSP430和nRF401的家用射频无线自动抄表系统设计
传统的抄表收费方式存在许多弊端,出错率高,漏抄,麻烦,成本高,已经跟不上现代化社会的需求。自从有了自动抄表系统,中间省去了很多环节,提高工作效率,降低成本。为了在已建成的小区中方便地使用自动抄表系统,免除家庭内部重新布线的不便,设计了一个应用于家庭内部的短距离无线抄表系统。 1 系统的总体结构 图1为短距离无线抄表系统的总体结构,它可用于家庭内部三表或多表数据的抄送。系统下层直接与水表、电表、煤气表等连接,上层可以通过电话、以太网、GSM或GPRS等与抄表中心连接,实现数据的远程抄送。 系统一般使用被动抄表方式。上层模块接收到仪表中心的抄表命令时,通过无线方式向下层模块发送抄表指令。下层模块接收到指令后通过485总线采集
[单片机]
msp430f149的SPI设置
首先注意几个问题: 1,SPI通信时,双方的时序(相位,极性)必须一致(看后面SPI四种时序设置) 2,主机设置时钟,从机不需要设置时钟. 3,时钟引脚上,在有数据传输时,才有时钟,没有数据传输时,则没有时钟 经测试下面程序在msp430F149上实验成功,用于两个板子通信 主机: (SPI.C) #include msp430x14x.h #define USPI3ON P3SEL |= 0X0E #define USPI4ON P3SEL |= 0X0F char TxFlag=1; char RxFlag=0; void ClkInit() { char i; BCSCT
[单片机]
GD32 MCU是如何进入中断函数的
用过GD32 MCU的小伙伴们都知道,程序是顺序执行的,但当有中断来的时候程序会跳转到中断函数,执行完中断函数后程序又继续回到原来的位置继续执行,那么你们知道MCU是如何找到中断函数入口的吗? 今天我们就以GD32F303系列的EXTI0中断来描述下MCU是如何进入中断的。 首先来看一个简单的代码(以Keil为开发环境): 这段程序初始化了两个LED灯,并将一个按键设置为中断模式,这里用的是PA0,所以中断号也为0,即EXTI0。 再来看一下中断函数: 中断函数也很简单,当有中断发生的时候,去翻转一个LED灯状态。 好,我们通过map文件看下这个中断函数的地址在哪里(不会的小伙伴可以看看前面的视频——《如果查看
[单片机]