MSP430端口与中断,键盘程序的模板
来源:互联网 发布:新手淘宝开店教程视频 编辑:程序博客网 时间:2024/04/25 01:46
一、
Ø
0: I/O 引脚被切换成输入模式
1: I/O 引脚被切换成输出模式
复位后默认为
Ø
Ø
Ø
其中:P1IE、P2IE 的各位定义如下:
0:禁止该位中断
1:允许该位中断
Ø P1IES、P2IES:P1、P2 端口引脚中断触发沿选择寄存器
如果允许P0 口的某个引脚中断,还须定义该引脚的中断触发沿,该寄存器的8位分别定义了P0 口的8 条引脚的中断触发沿。
0:对应引脚由低到高的电平跳变(上升沿)使相应标志置位
1:对应引脚由高到低的电平跳变(下降沿)使相应标志置位
Ø
Ø
P1、P2 两端口还有其它片内外设功能,考虑减少引脚,将这些功能与芯片外的联系
通过复用P1、P2 引脚的方式以实现。P1SEL、P2SEL 用来选择引脚的I/O(输入/输
出)端口功能与外围模块功能。
0:选择引脚为I/O 端口
1:选择引脚为外围模块功能
二、
这些端口没有中断能力,其余功能与 P1、P2 一样
三、
主程序语句如下:
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
P5DIR |= 0x0F; // 设置 P5.0-P5.3 为输出方向
P1DIR = 0x0F; // 设置P1.4 -P1.7 为输入方向
P1IE = 0xf0; // 设置P1.4 -P1.7 可以中断
P1IES = 0xf0; // 设置P1.4 -P1.7 为下降沿中断
_BIS_SR(LPM3_bits + GIE); // 进入最低功耗睡眠,打开总中断开关
for (;;)
{
}
}
语句“__interrupt void
需要注意的是:P1 的中断标志不能自动清除,需要人为清除,所以程序最后需要清除端口P1 的中断标志,否则会引起中断嵌套,引起死循环。
#pragma vector=PORT1_VECTOR
__interrupt void p1int(void)
{
if((P1IN&BIT5) == BIT5)
P5OUT &= ~BIT1 ;
else
P5OUT |= BIT1;
if((P1IN&BIT6) == BIT6)
P5OUT &= ~BIT2;
else
P5OUT |= BIT2;
if((P1IN&BIT7) == BIT7)
P5OUT &= ~BIT3;
else
P5OUT |= BIT3;
P1IFG = 0 ;
}
四、
综合起来,一般的键盘程序有如下三个步骤:
A 消除按键抖动(如果使用硬件,则可略);
B 判断是哪个按键按下,识别键码;
C 等待按键松开。
Ø
unsigned char keybuf; // 全局变量,键值缓存
……
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
P1DIR = 0x0F; // 设置P1.4 -P1.7 为输入方向
P1IE = 0xf0; // 设置P1.4 -P1.7 可以中断
P1IES = 0xf0; // 设置P1.4 -P1.7 为下降沿中断
_BIS_SR(LPM3_bits + GIE); // 进入最低功耗睡眠,打开总总断开关
……
Ø
unsigned char p1keyj(void) // 判键子程序
{
unsigned char x;
x=(P1IN&0Xf0); // P14--P17 接有按键
return(x); // 有按键返回非全 1
}
Ø
#pragma vector=PORT1_VECTOR
__interrupt void p1int(void)
{
while(p1keyj()!=0xf0) //没有按键按下,返回全1――0xf0
{
delay(500); //延时消除抖动
while(p1keyj()!=0xf0)
{
keybuf = keycode();//确信有按键按下,找按键得键值,送到全局变量keybuf
while(p1keyj()= =0) //等待按键松开
; //做对应键盘的事务
}
}
}
中断响应时间
中断的响应时间就是中断的响应过程的时间,中断的响应过程是当有事件产生,进入中断之前必须先记住当前正在做的事情,然后去处理发生的事情,处理这个过程的时间,叫做中断相应时间。
计算机中也是采用的这种方法,五个中断源,每个中断产生后都到一个固定的地方去找处理这个中断的程序,当然在去之前首先要保存下面将执行的指令的地址,以便处理完中断后回到原来的地方继续往下执行程序。
公示定义
计算机接收到中断信号到操作系统作出响应,并完成切换转入中断服务程序的时间。对于占先式内核,要先调用一个特定的函数,该函数通知内核即将进行中断服务,使得内核可以跟踪中断的嵌套。占先式内核的中断响应时间由下式给出:
中断响应时间=关中断的最长时间 +保护CPU内部寄存器的时间 +进入中断服务函数的执行时间+开始执行中断服务例程(ISR)的第 一条指令时间
- MSP430端口与中断,键盘程序的模板
- MSP430键盘程序(转载)
- msp430键盘程序
- MSP430中断c函数模板大全
- MSP430的中断优先级及中断嵌套
- msp430的中断优先级和中断嵌套
- 单片机MSP430 - Timer_A 定时器中断程序
- MSP430串口接收程序(使用中断)
- MSP430单片机的端口介绍
- MSP430中断
- 关于MSP430中断的一些特性
- msp430单片机中断嵌套的源程序
- 关于MSP430的ADC中断相关问题
- MSP430中断的一个细节问题
- 中断与端口读写
- 2812中断程序模板
- MSP430单片机的框架程序
- MSP430的485通信程序
- 如何了解事件中回调函数的参数
- 关于 C++ 和 C 的混编
- 菜鸟的springMVC的入门
- C# Socket编程(5)使用TCP Socket
- 在Linux下用netstat查看网络状态、端口状态
- MSP430端口与中断,键盘程序的模板
- Android自定义弹窗进度条
- 极大似然估计
- 指针和引用的联系与区别
- [Linux/Ubuntu] vi/vim 使用方法讲解
- [leetcode] permutations的讨论
- Adding Google Analytics to your Zen Cart store
- 中科院大牛博士是如何进行文献检索和阅读
- Windows脚本 - Bat批处理命令使用教程