1802|0

3836

帖子

19

TA的资源

纯净的硅(中级)

楼主
 

初学MSP430F5529 如何进行通用I/O口的设置之二 [复制链接]

这一部分讲外部中断。
  看介绍再加弄懂程序才是王道
  外部中断是MSP430优先级最低的中断而且是可屏蔽中断。用起来比较简单。
  1.2.7  简单的端口中断(外部中断)
                     P1、P2的所有端口都具有中断能力,可以通过寄存器PxIFG,PxIE和PxIES来配置。其他端口则需参照具体的引脚说明书。所有的P1中断标志是最优先的(相比其它引脚的外部中断),其中P1IFG.0又最优。
                     PXIV中断向量寄存器:只有P1IV和P2IV。最高优先级使能中断在P1IV寄存器中产生一个序号,这个数字会被程序计数器识别或者加入其中,然后自动的执行合适的中断服务程序。关闭P1口中断不会影响P1IV寄存器中的值。P2口具有相同的功能。PxIV寄存器只能字访问。
                     PxIFGx  中断标志寄存器:只有相应的中断使能PXIE打开且总中断GIE打开,该寄存器才有效。
                             低电平表示没有中断请求等待响应;
                             高电平表示有中断请求等待响应;
                    注意:使用端口的中断功能期间,如果进行PXIN、PXOUT等操作可能使中断变化。
    注意:中断标志需要软件清零。有一种情况例外:两个中断同时发生,先响应优先级高的中断,当该中断服务程序结束后,该位的中断标志会自动清零,然后去响应另外一个中断。
    PxIE    中断使能寄存器
                    低电平表示中断关闭;
                高电平表示中断允许;
    PXIES  中断触发方式选择寄存器
                    低电平表示上升沿触发;
                    高电平表示下降沿触发;
外部中断应用示例:/*采用中断的方式,开关S2(接于P2.2)控制LED(接于P1)一个一个点亮(看PCB图接线)*/
#include
int s=0;    //s用来表示按键次数
int num =0; //num表示LED值
void main(void){
   WDTCTL=WDTPW+WDTHOLD; //关闭看门狗
   P1DIR=0xff;         //P1全部接输出
   P1OUT=0x00;          //接LED初始化故全拉低,这样开始灯是灭的
   P2DIR=0x00;          //P2全部设为输入。因为要接受外部中断
   P2IFG=0x00;          //清除P2口的中断标志
   P2IE=BIT2;            //P2.2开启中断
   P2IES=0xff;           //P2为下降沿触发
   P2IN=BIT2;      //P2.2输入拉高,因此开关闭合时会拉低产生下降沿(即中断)
   P2OUT=0xff;
   P2REN=0xff;          //作为输入的时候一定要配置上拉电阻(很重要,容易忘记,我就在这错了-_’)
   __enable_interrupt(); //开总中断
   while(1)
{
      num=s%5;
      switch(num){
         case 0:P1OUT=BIT1;break;
         case 1:P1OUT=BIT2;break;
         case 2:P1OUT=BIT3;break;
         case 3:P1OUT=BIT4;break;
         case 4:P1OUT=BIT5;break;}}}
#pragma vector=PORT2_VECTOR     //固定格式,声明中断向量地址
__interrupt void Port2_ISR(void)  {//中断子程序
      unsigned int temp;    //局部变量
      int i;
      for(i=0;i<12000;i++); // 延时消抖
      if((P2IN&0xff)!=0xff){   //如果有键按下
         temp=P2IFG;        //读取中断标志
         P2IFG=0x00;        //标志位清零
         if(temp==0x04)     //如果P2.2产生中断
            s++;}} //这一部分其实有几句话很多余,主要是为了体现每个端口中断的知识
备注中断子程序调用格式:
#pragma vector=中断向量地址
__interrupt void 中断服务程序名(void)
{
//中断处理程序
}
  1.2.8  未使用的I/O
                     未使用的I/O管脚最好被设置为普通I/O功能、输出方向并且在PCB板上不连接这些管脚,以防止浮动的输入和降低功耗。因为这些管脚没有被连接,所以它们的输出值没有必要在意。或者可以通过设置未使用管脚的PxREN寄存器来使能置高/置低寄存器以避免浮动输入的干扰。

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表