MSP430外部中断

1.中断概念

单片机在运行过程中需要紧急处理的事。比如正在写作业水开了然后去灌水,再回来继续写作业。

水开了就是中断信号,记住作业写到哪这叫保护现场,判断是谁打断这叫中断类型,灌水这是中断处理,再回来继续写作业这叫回到保护现场执行原进程。

2.MSP430中断的种类

 I/O中断

定时器中断

串口中断

外部中断

ADC转换中断

看门狗中断

捕获比较中断

除了这些分类还有不可屏蔽中断和可屏蔽中断。

3.相关寄存器

MSP430F5529只有P1和P2引脚有中断功能,因此寄存器分为端口1的和端口2的我们以端口1的作为讲解。

想要使用好中断必须要了解他相关的寄存器:寄存器文档地址

寄存器也是八位的每一位代表了了引脚标号bit0->PX.0这个引脚的中断相关信息

3.1端口1中断边缘选择寄存器

这个寄存器是用来设置是上升沿触发还是下降沿触发,0设置为上升沿,1设置为下降沿

 3.2端口1中断使能寄存器

0设置为失能,1设置为使能

3.3端口1中断标志寄存器

 这个寄存器如果为0说明没有中断,如果为1说明有中断。

中断相关寄存器就介绍完了

4.中断配置具体步骤

设置:P1.5为下降沿触发中断

1.配置端口,设置端口方向

将I/O配置为上拉输入

P1SEL &= ~BIT5;   //设置为I/O模式 
P1DIR &= ~BIT5;   //设置方向为输入 
P1REN |= BIT5 ;   //使能上下拉电阻 
P1OUT |= BIT5 ;  //设置为上拉电阻

2.设置中断触发模式ISE寄存器

写中断边缘选择寄存器为1

3.开启中断

先写IE寄存器,使能对应I/O口中断,在开启系统总中断 _EINT()

#define _EINT()                         __enable_interrupt()
#define _DINT()                         __disable_interrupt()

4.编写中断子函数

通过if判断是那个端口的中断

5.编写中断处理函数

也就是中断下文函数,中断处理函数

6.清除中断标志位

写IFG寄存器,PXIFG = 0X00。

注:I/O中断的相关配置函数在I/O配置库里

5.程序源码程序源码 

#include <driverlib.h>
//当前使用系统默认的时钟大约1M
void my_delay_ms(int ms)
{
    for(;ms>0;ms--)
    _delay_cycles(1000);//系统延时函数,延时时长由系统时钟决定
}

void LED1_init()
{
    P1SEL &= ~BIT0;   //设置为I/O模式
    P1DIR |= BIT0;   //设置方向为输出
}

void KeyInterrupt_init()
{
    WDTCTL = WDTPW | WDTHOLD;   // stop watchdog timer
    LED1_init();
    P1SEL &= ~BIT5;   //设置为I/O模式
    P1DIR &= ~BIT5;   //设置方向为输入
    P1REN |= BIT5 ;   //使能上下拉电阻
    P1OUT |= BIT5 ;  //设置为上拉电阻
    P1IES |= BIT5;
    P1IE  |= BIT5;
    _EINT();
}
void Key1InterruptFun()
{
    P1OUT ^= BIT0;
}



/**
 * main.c
 */
int main(void)
{
	WDTCTL = WDTPW | WDTHOLD;	// stop watchdog timer
	LED1_init();
	KeyInterrupt_init();
	while(1)
	{
	    ;
	}
}

#pragma vector=PORT1_VECTOR//设置中断向量
__interrupt void Port_1()
{
    unsigned char BITX = 255;
    _DINT();//关闭总中断防止重复进入中断
    if(P1IFG & BIT0)
    {
        BITX =  BIT0;
    }
    else if(P1IFG & BIT1)
    {

    }
    else if(P1IFG & BIT2)
    {

    }
    else if(P1IFG & BIT3)
    {

    }
    else if(P1IFG & BIT4)
    {

    }
    else if(P1IFG & BIT5)//中断由P1.5触发
    {
        my_delay_ms(20);
        if(GPIO_getInputPinValue(GPIO_PORT_P1,GPIO_PIN5) == 0)
        Key1InterruptFun();    //调用中断处理函数
        BITX = BIT5;
    }
    else if(P1IFG & BIT6)
    {

    }
    else if(P1IFG & BIT7)
    {

    }
    P1IFG &= ~BITX;
    _EINT();

}

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 MSP430系列 1.1 特性与功能 1.2 系统关键性能 1.3 MSP430系列的各型号 2 结构概述 2.1 CPU 2.2 代码存储器 2.3 数据存储器(RAM) 2.4 运行控制 2.5 外围模块 2.6 振荡器、倍频器和时钟发生器 3 系统复位、中断和运行模式 3.1 系统复位和初始化 3.2 中断系统结构 3.3 中断处理 3.3.1 SFR中的中断控制位 3.3.2 外部中断 3.4 运行模式 3.5 低功耗模式 3.5.1 低功耗模式0与模式1,LPM0和LPM1 3.5.2 低功耗模式2与模式3,LPM2和LPM3 3.5.3 低功耗模式4,LPM4 3.6 低功耗应用要点 4 存储器组织 4.1 存储器中的数据 4.2 片内ROM组织 4.2.1 ROM表的处理 4.2.2 计算分支跳转和子程序调用 4.3 RAM与外围模块组织 4.3.1 RAM 4.3.2 外围模块—地址定位 4.3.3 外围模块--SFR 5 16位CPU 5.1 CPU寄存器 5.1.1 程序计数器PC 5.1.2 系统堆栈指针SP 5.1.3 状态寄存器SR 5.1.4 常数发生寄存器CG1与CG2 5.2 寻址模式 5.2.1 寄存器模式 5.2.2 变址模式 5.2.3 符号模式 5.2.4 绝对模式 5.2.5 间接模式 5.2.6 间接增量模式 5.2.7 立即模式 5.2.8 指令的时钟周期与长度 5.3 指令组概述 5.3.1 双操作数指令 5.3.2 单操作数指令 5.3.3 条件跳转 5.3.4 模拟指令的短格式 5.3.5 其它指令 5.4 指令分布 6 硬件乘法器 6.1 硬件乘法器的操作 6.2 硬件乘法器的寄存器 6.3 硬件乘法器的SFR位 6.4 硬件乘法器的软件限制 6.4.1 硬件乘法器软件限制--寻址模式 6.4.2 硬件乘法器软件限制--中断程序 7 振荡器与系统时钟发生器 7.1 晶体振荡器 7.2 处理机时钟发生器 7.3 系统时钟运行模式 7.4 系统时钟控制寄存器 7.4.1 模块寄存器 7.4.2 与系统时钟发生器相关的SFR位 7.5 DCO典型特性 8 数字I/O配置 8.1 通用端口P0 8.1.1 P0控制寄存器 8.1.2 P0原理图 8.1.3 P0中断控制功能 8.2 通用端口P1、P2 8.2.1 P1、P2控制寄存器 8.2.2 P1、P2原理图 8.2.3 P1、P2中断控制功能 8.3 通用端口P3、P4 8.3.1 P3、P4控制寄存器 8.3.2 P3、P4原理图 8.4 LCD端口 8.5 LCD端口--定时器/端口比较器 9 通用定时器/端口模块 9.1 定时器/端口模块操作 9.1.1 定时器/端口计数器TPCNT1,8位操作 9.1.2 定时器/端口计数器TPCNT2,8位操作 9.1.3 定时器/端口计数器,16位操作 9.2 定时器/端口寄存器 9.3 定时器/端口SFR位 9.4 定时器/端口在A/D中的应用 9.4.1 R/D转换原理 9.4.2 分辨率高于8位的转换 10 定时器 10.1 Basic Timer1 10.1.1 BasicTimer1寄存器 10.1.2 SFR位 10.1.3 BasicTimer1操作 10.1.4 BasicTimer1操作:LCD时钟信号fLCD 10.2 8位间隔(Interval)定时器/计数器 10.2.1 8位定时器/计数器的操作 10.2.2 8位定时器/计数器的寄存器 10.2.3 与8位定时器/计数器有关的SFR 10.2.4 8位定时器/计数器在UART中的应用 10.3 看门狗定时器 10.3.1 看门狗定时器寄存器 10.3.2 看门狗定时器中断控制功能 10.3.3 看门狗定时器操作 10.4 8位PWM定时器 10.4.1 操作 10.4.2 PWM寄存器 11 Timer_A 11.1 Timer_A的操作 11.1.1 定时器操作 11.1.2 捕获模式 11.1.3 比较器模式 11.1.4 输出单元 11.2 Timer_A的寄存器 11.2.1 Timer_A控制寄存器TACTL 11.2.2 捕获/比较控制寄存器CCTL 11.2.3 Timer_A中断向量寄存器 11.3 Timer_A的应用 11.3.1 Timer_A增计数模式应用 11.3.2 Timer_A连续模式应用 11.3.3 Timer_A增/减计数模式应用 11.3.4 Timer_A软件捕获应用 11.3.5 Timer_A处理异步串行通信协议 11.4 Timer_A的特殊情况 11.4.1 CCR0用作周期寄存器 11.4.2 定时器寄存器的启/停 11.4.3 输出单元Unit0 12 USART外围接口,UART模式 12.1 异步操作 12.1.1 异步帧格式 12.1.2 异步通信的波特率发生器 12.1.3 异步通信格式 12.1.4 线路空闲多处理机模式 12.1.5 地址位格式 12.2 中断与控制功能 12.2.1 USART接收允许 12.2.2 USART发送允许 12.2.3 USART接收中断操作 12.2.4 USART发送中断操作 12.3 控制与状态寄存器 12.3.1 USART控制寄存器UCTL 12.3.2 发送控制寄存器UTCTL 12.3.3 接收控制寄存器URCTL 12.3.4 波特率选择和调制控制寄存器 12.3.5 USART接收数据缓存URXBUF 12.3.6 USART发送数据缓存UTXBUF 12.4 UART模式,低功耗模式应用特性 12.4.1 由UART帧启动接收操作 12.4.2 UART模式波特率与时钟频率 12.4.3 节约MSP430资源的多处理机模式 12.5 波特率的计算 13 USART外围接口,SPI模式 13.1 USART的同步操作 13.1.1 SPI模式中的主模式,MM=1、SYNC=1 13.1.2 SPI模式中的从模式,MM=0、SYNC=1 13.2 中断与控制功能 13.2.1 USART接收允许 13.2.2 USART发送允许 13.2.3 USART接收中断操作 13.2.4 USART发送中断操作 13.3 控制与状态寄存器 13.3.1 USART控制寄存器 13.3.2 发送控制寄存器UTCTL 13.3.3 接收控制寄存器URCTL 13.3.4 波特率选择和调制控制寄存器 13.3.5 USART接收数据缓存URXBUF 13.3.6 USART发送数据缓存UTXBUF 14 液晶显示驱动 14.1 LCD驱动基本原理 14.2 LCD控制器/驱动器 14.2.1 LCD控制器/驱动器功能 14.2.2 LCD控制及模式寄存器 14.2.3 LCD显示存储器 14.2.4 LCD操作软件例程 14.3 LCD端口功能 14.4 LCD与端口模式混合应用实例 15 A/D转换器 15.1 概述 15.2 A/D转换操作 15.2.1 A/D转换 15.2.2 A/D中断 15.2.3 A/D量程 15.2.4 A/D电流源 15.2.5 A/D输入端与多路切换 15.2.6 A/D接地与降噪 15.2.7 A/D输入与输出引脚 15.3 A/D控制寄存器 16 其它模块 16.1 晶体振荡器 16.2 上电电路 16.3 晶振缓冲输出
MSP430FF5529是德州仪器(Texas Instruments)推出的一款低功耗微控制器。它具有丰富的外设和功能,包括外部中断和编码器接口。 要使用MSP430FF5529的外部中断和编码器功能,你需要了解相应的引脚连接和编程接口。 首先,你需要选择合适的引脚作为外部中断输入和编码器输入。MSP430FF5529提供了多个GPIO引脚可用于外部中断和编码器。 然后,你需要在代码中配置这些引脚为外部中断输入或编码器输入模式。你可以使用MSP430的GPIO模块进行配置,具体的寄存器和位操作可以参考MSP430的技术手册或开发板的用户手册。 对于外部中断,你可以通过配置相应的中断触发条件和中断服务函数来实现。当外部中断引脚发生触发条件时,中断服务函数将被调用执行相应的操作。 对于编码器,你可以使用MSP430的定时器模块和输入捕获功能来实现。编码器通常有两个信号线:一个用于方向(一般为A相),另一个用于计数脉冲(一般为B相)。你可以配置定时器来捕获这两个信号,并在捕获中断中进行计数和方向判断。 需要注意的是,具体的编程细节和代码实现可能因不同的开发环境和编程语言而有所不同。你可以参考MSP430的官方文档、示例代码或社区论坛来获取更详细的信息和实现方法。 希望这些信息对你有所帮助!如果你有更多问题,欢迎继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值