- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MSP430中断以和一个键盘例子
最近在学习和实践的过程中接触到了线程的概念。当你需要处理一大堆数据或者等待一个事件发生时候,系统其实并不需要等在那里,只需建立一个线程,适时的让它在后台运行,处理这些很占用系统的事件。我想这与中断的功能很是相似,有些时候你让程序卡在那里仅仅是为了等待一个参数的改变,而这个参数完全可以在中断中实现修改,所以巧妙的使用中断对于高效的程序是必须的。
MSP430提供了3类中断:
系统复位;
非可屏蔽中断;
可屏蔽中断。
下表列出了三种中断各自的中断源:
系统复位中断源
可屏蔽中断中断源
可屏蔽中断中断源
加电源电压
RST/NMI引脚有上升信号
看门狗定时器溢出(定时器模式)
RST/NMI引脚加低电平
振荡器故障
其他有中断能力的外部模块
看门狗定时器溢出(看门狗模式)
看门狗定时器密钥不符
MSP430中断优先级结构图如上图所示。各模块的中断优先级由模块连接链决定,越接近CPU/NMIRS的模块,其中断优先级越高。
上图给出了中断的执行过程,相信大家可以在任何其他的书本中找到类似的流程图。中断发生,全局中断开启,并且允许相应此中断,此时需要等待当前指令完成。保存短点和寄存器值。然后清除寄存器的值以及中断标志位,如果同时有多个中断发生则选择优先级最高的执行,进入中断服务子程序,执行完后,恢复断点,继续执行主程序。通过这种前后台程序的切换控制程序运行,得到高效率。
下面让我们来看一个4x4键盘的例子。我们通过中断的方式来感知键盘的操作,通过一个键盘扫描程序来确认按下的键,然后通过数码管动态的显示出来。
#includemsp430x24x.h
static int nRes;
int nP10,nP11,nP12,nP13;
static char LEDData[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void delay(int number)
{
while(--number);
}
int KeyProcess(void)
{
int nres=0;
//P1.4输出低电平
P1OUT = 0xe0;
nP10 = P1INBIT0;
if (nP10 == 0) nres = 13;
nP11 = (P1IN BIT1) 1;
if (nP11 == 0) nres = 14;
nP12 = (P1IN BIT2) 2;
if (nP12 == 0) nres = 15;
nP13 = (P1IN BIT3) 3;
if (nP13 == 0) nres = 16;
//P1.5输出低电平
P1OUT = 0xd0;
nP10 = P1INBIT0;
if (nP10 == 0) nres = 9;
nP11 = (P1IN BIT1) 1;
if (nP11 == 0) nres = 10;
nP12 = (P1IN BIT2) 2;
if (nP12 == 0) nres = 11;
nP13 = (P1IN BIT3) 3;
if (nP13 == 0) nres = 12;
//P1.6输出低电平
P1OUT = 0xb0;
nP10 = P1INBIT0;
if (nP10 == 0) nres = 5;
nP11 = (P1IN BIT1) 1;
if (nP11 == 0) nres = 6;
nP12 = (P1IN BIT2) 2;
if (nP12 == 0) nres = 7;
nP13 = (P1IN BIT3) 3;
if (nP13 == 0) nres = 8;
//P1.7输出低电平
P1OUT = 0x70;
nP10 = P1INBIT0;
if (nP10 == 0) nres = 1;
nP11 = (P1IN BIT1) 1;
if (nP11 == 0) nres = 2;
nP12 = (P1IN BIT2) 2;
if (nP12 == 0) nres = 3;
nP13 = (P1IN BIT3) 3;
if (nP13 == 0) nres = 4;
while(!(nP10 nP11 nP12 nP13 ))
{
P1OUT = 0x00; //恢复以前值
//读取各个管脚的状态
nP10 = P1INBIT0;
nP11 = (P1INBIT1) 1;
nP12 = (P1INBIT2) 2;
nP13 = (P1INBIT3) 3;
}
return nres;
}
void display(int number)
{
int tens,single;
tens = nu
您可能关注的文档
- 电梯质保期与售后服务承诺书.doc
- 电气二次继保自动化和通讯系统说明.doc
- 电流强弱练习题.doc
- 电流表与电压表同步练习.doc
- 电子文档使用技巧.doc
- 电烤炉特点.doc
- 电气接地探讨(很全面)---控制系统和通信系列.doc
- 电热膜分类应用.doc
- 电磁场和电磁波第1章作业解答.doc
- 电磁学试题库 试题2和答案.doc
- 2025年中山市沙溪镇人民政府所属事业单位招聘11人笔试备考题库及参考答案详解一套.docx
- 2025年中山市横栏镇人民政府所属事业单位第二期招聘笔试高频难、易错点备考题库及参考答案详解一套.docx
- 2025年中山市横栏镇人民政府所属事业单位第二期招聘笔试高频难、易错点备考题库含答案详解.docx
- 2025年中山市阜沙镇人民政府所属事业单位招聘笔试高频难、易错点备考题库及完整答案详解1套.docx
- 2025年中山市阜沙镇人民政府所属事业单位招聘笔试高频难、易错点备考题库参考答案详解.docx
- 2025年中山市阜沙镇人民政府所属事业单位招聘笔试备考题库附答案详解.docx
- 2025年中山市阜沙镇人民政府所属事业单位招聘笔试高频难、易错点备考题库附答案详解.docx
- 2025年中山市阜沙镇人民政府所属事业单位招聘笔试备考题库附答案详解.docx
- 2025年中山市阜沙镇人民政府所属事业单位招聘笔试备考题库及答案详解一套.docx
- 2025年中山市阜沙镇人民政府所属事业单位招聘笔试备考题库及完整答案详解1套.docx
文档评论(0)