P20~P23为LED,P11为按键。按下为低电平。
使用中断函数按下一次按键则LED状态反转一次。
#include "io430.h"
#include "in430.h"
void select_xt2(void){
unsigned char i;
/*------选择系统主时钟为8MHz-------*/
BCSCTL1 &= ~XT2OFF;
do{
IFG1 &= ~OFIFG; //清除晶振失败标志
for (i = 0xFF; i > 0; i--); //等待8MHz晶体起振
}while ((IFG1 & OFIFG));
BCSCTL2 |= SELM_2 + SELS ; //MCLK和SMCLK选择高频晶振
}
void main()
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1DIR = 0XFD; //P1 in or out
P1IE = 0X02; //开启P1中断
P1IES = 0X02; //中断触发方式
P1IFG = 0X00; //中断标志清零
P2DIR = 0XFF;
P2OUT = 0XFF;
_EINT();
}
#pragma vector = PORT1_VECTOR
__interrupt void PORT1_ISR(void)
{
__delay_cycles(50000);
if((P1IN&0X02) == 0)
P2OUT = ~P2OUT;
__delay_cycles(50000);
}
其中,配置P1端口的中断时要用到的寄存器有:
P1IE,中断使能寄存器,只使能P11的中断:0000,0010 = 0X02
P1IES,中断触发选择寄存器,0上升沿,1下降沿,0000,0010=0X02
P1IFG,中断标志寄存器,清零,0X00
一定要开启全部中断!__EINT();
中断响应函数定义为统一格式:
#pragma vector = PORT1_VECTOR
__interrupt void PORT1_ISR(void)
其中,PORT1_VECTOR为头文件中定义了的
关键字:MSP430F149 按键中断 寄存器配置
引用地址:
MSP430F149按键中断寄存器配置
推荐阅读最新更新时间:2024-11-05 19:29
基于msp430F149管理sst25vf016b存储芯片的文件管理系统
sst25vf016b是以块2Mbyte大小的存储芯片总共分为啦512块,每块4K,来进行管理, 首先介绍全局变量: unsigned char Flag_Key12=0; 标志是否为最后一块 unsigned char Flag_Read=0; 标志读完整块flash, unsigned int Flag_16Num=0; 写数据,读数据时的控制器 unsigned int Block_MuluNow=0; 保存当前正在操作的目录 unsigned int Table_Block ; 每两个Bit表示一个块,每8个块压缩正一个字节,64个字节,正好对应512个块,每个块有3种状态,00空,01占用,10脏块 unsigned
[单片机]
STM32F030C6外部中断的配置(按键触发)
配置分以下的步骤: 1、定义外部中断模式和分组的结构体; 2、打开外部中断复位时钟; 3、设置IO口与中断线的映射关系; 4、初始化线上的中断,设置触发的条件; 5、配置中断分组,并使能中断; 6、清除中断标志位; 7、编写中断服务函数;
[单片机]
#51单片机#中断实现按键消抖
在实际工程中常用到中断的算法来实现按键消抖。 思路:启动一个定时中断,每2ms进一次中断扫描按键状态并储存。连续扫描8次后,观察这8次按键状态是否一致。如果一致,即按键没有发生动作,处于稳定状态。 被监测到的按键动作,通常如下图所示: 具体代码如下: #include reg52.h unsigned char code LedChar ={//数码管显示的数字0~9。 0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90}; sbit KEY1 = P3^3; sbit DigitalTube = P1^0; bit KeySta = 1; //当前按
[单片机]
MSP430F149的内部Flash
MSP430F149内部的memory结构,60K Flash+2K RAM。Flash分为主存储区和信息存储区,操作都一样,只是主存储区每个段512字节,而信息存储区为128字节,方便擦写。 当我们有数据要保存到Flash存储器时,要先对目标段进行整段擦除操作,擦除操作使的对应段FLASH存储器变成全 1 。应当注意的是,此flash的操作频率为257 kHz 到 476 kHz,时钟源可选择,因此我们做时钟分频时应当保证频率在这之间,以下为我编写的参考程序。 void Flash_erase(uint addr) {//段擦除,512bytes一段 uchar s; s=__get_inter
[单片机]
【改进】IMX257实现GPIO-IRQ中断按键获取键值驱动程序
一、使用struct pin_desc 管理按键的值 1.定义结构体 2.将前面我们申请中断时写的(void *)1修改为 &pins_desc 在ioctl中,设置中断中修改 在key_release中释放中修改 3.在中断程序中利用我们定义的struc pins_desc判断并得到按键的值 4.得到按键键值后,唤醒程序,在read函数中返回键值 附上驱动源程序: 1 /****************************** 2 linux key_query 3 *****************************/ 4 #include linux/module.h 5
[单片机]
MSP430F149流水灯闪烁以及数码管的显示
今天下午写了一个流水灯闪烁的实验,总的来说,不难,因为这块板子集合的电路图没有上一块那么复杂,所以总的来说,还是比较顺手,开始的时候,出现流水灯没有流转的现象,原来是没有加入延时函数,后来经过调整,结果很快就出来了 电路示意图: 示例代码: #include msp430x14x.h #define CPU_F ((double)8000000) #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(do
[单片机]
8051/2 单片机基础 LED闪烁,蜂鸣器,数码管驱动,独立按键,中断,定时中断,串口通信
从软件转硬件路总是很艰难,各种电路知识,3个多月了,现在总算是入门了。 AT 8051/2 1.驱动LED闪烁 2.驱动蜂鸣器进行响动 3.驱动共阳级,单数码管,0—9 变化(MPX1-CA) - 使用8排阻 + NPN三极管 4.驱动共阴级,但数码管,0-9 变化(MPX1-CC) - 使用芯片74HC245 + PNP三极管 5.独立按键,控制单片机,并点亮/熄灭LED 6.中断,控制点亮/熄灭LED - INT0 , INT1 7.定时中断,控制点亮/熄灭LED - T0 , T1 8.串口通信 电路图: C代码: /** * 8051 DEMO 1 * 1.驱动LED闪烁 * 2.驱动蜂鸣器进行响动 *
[单片机]
6.6410和210的按键中断编程
首先是打开6410底板原理图: 可以看到OK6410有六个按键: 可以看到OK6410的六个按键对应的引脚是KEYINT1、KEYINT2、KEYINT3、KEYINT4、KEYINT5和KEYINT6。接着在核心板的原理图里搜索这个词: 可以看到按键中断与GPN系列寄存器的引脚是互用的,接着就是在芯片手册里查看有关GPN系列寄存器的信息,重点是关注GPN控制寄存器:GPNCON: 这里我们使用到的按键对应的中断,需要配置成中断的方式,对应的GPN位设置为10,中断功能,即需要将KEYINT1-6设置为中断功能的,即是将GPNCON对应的前12位设置为101010101010即可。这样就把对应的GPN0-5设置
[单片机]