MSP430F5529的IO口管脚的中断学习笔记

发布者:huanli最新更新时间:2016-07-12 来源: eefocus关键字:MSP430F5529  IO口管脚  中断学习 手机看文章 扫描二维码
随时随地手机看文章
非常简单的一个程序,在F5529的开发板上用按键的IO中断控制LED的亮灭:
#include  
 
int main(void)
{
    WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
 
    P1DIR |= BIT0; //将LED1对应的IO口P1.0设置为输出
    P1OUT &= ~BIT0; //初始化该灯设置为灭
 
    P1DIR &= ~BIT7; //将按键1对应的IO口P1.7设置为输入
    P1IFG &= ~BIT7; //初始化清空中断标志位
    P1IE |= BIT7; //P1.7中断使能
    P1IES |= BIT7; //下降沿产生中断
 
    P1OUT |= BIT7; //P1.7设置为上拉电阻:OUT = 1; REN = 1;
    P1REN |= BIT7;
 
    __enable_interrupt();
 
    while(1);
}
 
#pragma vector = PORT1_VECTOR     //固定格式,声明中断向量地址,不能变
__interrupt void LED(void) //函数名,可以任意定义
{
int i;
switch(__even_in_range(P1IV,18))
{
case 0x10:
for (i = 0; i < 12000; i++);
if ((P1IN & BIT7) == 0) //注意位运算的优先级!!!非常重要
P1OUT ^= BIT0;
break;
default:
break;
}
}
经验总结:

1.  按键需要延时消抖

2.  标志位需要手动清零               (此处不完全正确,还有问题需要考虑)

3.  中断程序格式:

         #pragma vector = PORT2_VECTOR                      //固定格式,声明中断向量地址,不能变

__interrupt void fuck430(void)                  //函数名,可以任意定义

{

         switch(__even_in_range(P2IV,18))

         {

         case 0x06:

                   …

break;

         default:

                   break;

         }

}

4.  主程序中要开总中断,然后有循环

5.  位运算的优先级很低,注意加括号

6.  按键的上拉电阻,OUT、REN、IES

 

一上午终于把IO中断弄懂了。吸取位运算优先级的教训。


关键字:MSP430F5529  IO口管脚  中断学习 引用地址:MSP430F5529的IO口管脚的中断学习笔记

上一篇:单片机小白学步(23) IO口原理知识补充:双向IO口 互补推挽
下一篇:段式液晶模块的驱动

推荐阅读最新更新时间:2024-03-16 14:59

模块学习(三)——激光测距模块(TOF10120)
该款激光测距模块集成了芯片,能够十分方便的直接传回数据,最近备赛,分享一下该模块的使用,以及需要注意的问题。此次是在MSP430F5529上进行开发的,其他MCU可自行移植。 1.硬件接线 上图是我从TOF10120技术手册上截取下来的,可以知道,该模块支持IIC和UART两种通讯模式,可根据MCU资源选择合适的方式,此次直接利用串口进行开发。 绿线 ——SCL 蓝线 ——SDA 白线 ——TXD 黄线—— RXD 红线 ——VCC 黑线 ——GND 对应于串口的话, (tof)SCL-SDA(430); (tof)SDA-SCL(430)即可 2.配置 可以直接利用USB转TTL模块先进行配置,配置好之后直接使用
[单片机]
模块<font color='red'>学习</font>(三)——激光测距模块(TOF10120)
STM32学习之路-外部中断(2)
继续上篇的内容. 配置好外部中断源以后, 就得使能外部中断线了. 为了方便看再借下这个图: 对外部中断的使能其实就是配置上面这些寄存器.即使能哪EXIT线,选择上面模式,是中断还是事件,选择下降沿还是上升沿. 具体怎么写寄存器这就不研究了, = = 太麻烦了.. 直接用STM32的库就行了,来看看它的代码吧 这是EXTI结构体的初始化函数, void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct) { EXTI_InitStruct- EXTI_Line = EXTI_LINENONE; EXTI_InitStruct- EXTI_Mode = EXTI
[单片机]
STM32<font color='red'>学习</font>之路-外部<font color='red'>中断</font>(2)
LPC1768菜鸟学习之GPIO和外部中断
LPC1768的P0口和P2口既能做输入输出,还可以配置为中断源。 现在P2.10作为按键,配置如下: void BUTTON_init(void) { LPC_GPIO2- FIODIR &=~(1 10); /* PORT2.10 definedas input */ LPC_GPIOINT- IO2IntEnF |= (1 10); /* enable falling edgeirq */ NVIC_EnableIRQ(EINT3_IRQn); /* enable irq in nvic */ } void EINT3_IRQHandler() { LPC_GPIO
[单片机]
MSP430F5529 DriverLib 库函数学习笔记(五)定时器A
平台:Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) 硬知识 定时器A具有如下特点:  4种运行模式的异步16位定时/计数器;  参考时钟源可选择配置;  高达7个可配置的捕获/比较寄存器;  可配置的PWM输出;  异步输入和输出锁存;  具有可对Timer_A中断快速响应的中断向量寄存器。 定时器A的结构框图如图所示。 定时器A 16位定时器原理 16位定时器的计数值寄存器TAR在每个时钟信号的上升沿进行增加/减少,可利用软件读取TAR寄存器的计数值。此外,当
[单片机]
<font color='red'>MSP430F5529</font> DriverLib 库函数<font color='red'>学习</font>笔记(五)定时器A
STM32F407中断学习笔记
中断与事件的区别 相同点:中断和事件都是触发的一种,都是可以设置触发的; 异同点: 中断触发后必须有中断处理子程序IRQ handle,例如比如按键中断触发,实现一个LED的闪烁,可以在按键按下后,在中断处理程序中实现某个LED的电平反转 但在事件中,事件是没有中断处理子程序的,事件发生后,会直接发出一个脉冲信号给与之联动的操作,也可以同样实现LED电平的反转,只要有事件发生,就会有一个脉冲信号,这样的好处是,不需要CPU干预了,可以节省CPU的处理资源,相比中断处理,速度还更快,因为硬件的速度总是比软件处理快。 EXTI 功能框图 EXTI 可分为两大部分功能,一个是产生中断,另一个是产生事件,这两个功能从硬件上就有所
[单片机]
STM32F407<font color='red'>中断</font><font color='red'>学习</font>笔记
STM32Hal库学习(三)CubeMx学习外部中断
外部中断主要是在CubeMx中设置好GPIO 在引脚界面配置成中断 然后configuration里对GPIO配置 对于低电平触发中断,需要把GPIO设置为上拉,然后下降沿触发,反之高电平触发,反过来 对NVIC配置 在生成的程序里 stm32f1xx_it.c里有EXTI0中断处理函数 此函数在stm32f1xx_hal_gpio.c里 中断标志位不为0,清零然后调用回调函数 __weak函数用于定义变量或者函数,常见于定义函数,在MDK ARM链接时优先链接定义为非weak的函数或变量,如果找不到则再链接weak函数 在main里自定义HAL_GPIO
[单片机]
STM32Hal库<font color='red'>学习</font>(三)CubeMx<font color='red'>学习</font>外部<font color='red'>中断</font>
msp430f5529捕获加串口源码
msp430f5529捕获加串口,可以供大家学习 单片机源程序如下: #include msp430f5529.h #define uint unsigned int #define uchar unsigned char uint flag,TA_cent,PerVal; unsigned long int val,cha; int m ; void Delay10ms(unsigned int c) //误差 0us { unsigned char a, b; //--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--// for (;c 0;c--) {
[单片机]
MSP430F5529、G2553A/D转换模块
***TI公司的MSP430F5529的A/D转换模块在P1.6输入端,名称为ADC12,是用12位数字寄存器保存转换结果的AD转换器。 ***转换有两个参考电压,最高电压VR+,最低电压VR-作为转换的上下限,高于等于VR+输出0FFF,小于等于VR-输出0000,待转换模拟电压Vin转换后的数字量计算为Data=4095 x (Vin-VR-)/(VR+ -VR-),程序结构如下 #include "msp430F5529.h" int tt=0,temp,kk; void delay(int ns) { while(ns--); } //******A/D转换函数设置*****// void adc1() { P1SE
[单片机]
<font color='red'>MSP430F5529</font>、G2553A/D转换模块
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved