找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2527|回复: 9
收起左侧

MSP430F149单片机IO口中断问题

[复制链接]
回帖奖励 100 黑币 回复本帖可获得 20 黑币奖励! 每人限 1 次
ID:312610 发表于 2019-7-27 15:33 | 显示全部楼层 |阅读模式
我使用msp430f149做一个端口中断,但是这个端口为什么用手轻轻一碰就会进中断。下面是我的程序。

  1. #include <msp430x14x.h>
  2. #include "Config.h"
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <in430.h>
  6. unsigned int i;
  7. unsigned int s=0;
  8. unsigned int a=0;
  9. unsigned int b=0,x;
  10. unsigned int num0=0,num1=0,num2=0;
  11. char r[];
  12. char y[];
  13. unsigned int times=0;
  14. char data[];


  15. void delay(void)
  16. {
  17.   int i,j;
  18.   for(i=0;i<100;i++)
  19.     for(j=0;j<300;j++);
  20. }
  21. void UART_Init()
  22. {
  23.   U0CTL|=SWRST;               //复位SWRST
  24.   U0CTL|=CHAR;                //8位数据模式
  25.   U0TCTL|=SSEL1;              //SMCLK为串口时钟
  26.   U0BR1=baud_h;               //BRCLK=8MHZ,Baud=BRCLK/N
  27.   U0BR0=baud_l;               //N=UBR+(UxMCTL)/8
  28.   U0MCTL=0x00;                //微调寄存器为0,波特率9600bps
  29.   ME1|=UTXE0;                 //UART0发送使能
  30.   ME1|=URXE0;                 //UART0接收使能
  31.   U0CTL&=~SWRST;
  32.   IE1|=URXIE0;                //接收中断使能位

  33.   P3SEL|= BIT4;               //设置IO口为普通I/O模式
  34.   P3DIR|= BIT4;               //设置IO口方向为输出
  35.   P3SEL|= BIT5;
  36. }

  37. void Send_Byte(uchar data)
  38. {
  39.   while((IFG1&UTXIFG0)==0);          //发送寄存器空的时候发送数据
  40.     U0TXBUF=data;

  41. }


  42. #pragma vector=PORT2_VECTOR
  43. __interrupt void jszd(void)
  44. {
  45.   delay();
  46.   Send_Byte('0');
  47.   if((P2IN&0X01)==0x00)
  48.   {
  49.     num0++;
  50.     if(num0%4==0)
  51.     {
  52. Send_Byte('.');
  53. times=times+1;
  54.     }


  55.   }
  56.   if(P2IN==0x02)
  57.   {num1++;
  58.       }
  59.   if(P2IN==0x04)
  60.   {num2++;}
  61. P2IFG=0x00;
  62. }




  63. //*************************************************************************
  64. //               处理来自串口 0 的接收中断
  65. //*************************************************************************

  66. #pragma vector=UART0RX_VECTOR
  67. __interrupt void UART0_RX_ISR(void)
  68. {

  69. data[s++]=U0RXBUF;                       //接收到的数据存起来
  70.   for (i=0;i<strlen(data);++i)    //数据转化
  71.   {
  72.     if(data[2*i]=='r')
  73.     {r[a++]=data[2*i+1]+4*times;}
  74.       else
  75.       {y[b++]=data[2*i+1]+4*times;}
  76.   }
  77. }

  78. //*************************************************************************
  79. //            处理来自串口 0 的发送中断,预留
  80. //*************************************************************************

  81. #pragma vector=UART0TX_VECTOR
  82. __interrupt void UART0_TX_ISR(void)
  83. {

  84. }

  85. //*************************************************************************
  86. //           主函数
  87. //*************************************************************************
  88. void main(void)
  89. {

  90.   WDT_Init();                         //看门狗设置
  91.   Clock_Init(); //系统时钟设置
  92.   P2OUT=0X00;
  93.   P2DIR&=~(BIT0+BIT1+BIT2);
  94.   P2IE|=BIT0+BIT1+BIT2;
  95.   P2IES|=BIT0+BIT1+BIT2;
  96.   UART_Init();                        //串口设置初始化
  97.   _EINT();                            //开中断
  98.   while(1)                            //无限循环

  99.   {  
  100. for (i=0;i<strlen(r);++i)
  101.       {
  102.         if(r[i]==num1)
  103.        {delay();
  104.         P3OUT|=0x01;
  105.        delay();
  106.         P3OUT|=0x00;
  107.         }
  108.       }
  109.            for (i=0;i<strlen(y);++i)
  110.       {
  111. if(y[i]==num2)
  112.        {delay();
  113.         P3OUT|=0x03;
  114.         delay();
  115.         P3OUT|=0x00;}
  116.      }
  117.     }
  118. }
复制代码


回复

使用道具 举报

ID:312610 发表于 2019-7-27 15:35 | 显示全部楼层
求各位大佬指教,我外加上拉电阻也是不断触发,我管脚悬空就不触发了,我用手碰到它,他就开始不断进中断。
回复

使用道具 举报

ID:312610 发表于 2019-7-27 21:02 | 显示全部楼层
大佬们!!!
回复

使用道具 举报

ID:511461 发表于 2019-7-28 14:24 | 显示全部楼层
你用的哪个IO口,换个IO口可以吗
回复

使用道具 举报

ID:591400 发表于 2019-7-28 15:29 | 显示全部楼层
如果对实时性要求不高就在中断里加一小段延时,判断是否真的触发了中断,类似按键的防抖
回复

使用道具 举报

ID:591400 发表于 2019-7-28 15:40 | 显示全部楼层
回复

使用道具 举报

ID:591703 发表于 2019-7-29 18:14 | 显示全部楼层
msp430f149键盘中断程序,用端口中断。通过实验验证,你可以参考一下www点codeforge点cn/article/198833
回复

使用道具 举报

ID:375382 发表于 2019-8-9 12:32 | 显示全部楼层
请问大佬们这个问题怎么解决啊?
回复

使用道具 举报

ID:375382 发表于 2019-8-9 14:40 | 显示全部楼层
疾风未雨 发表于 2019-8-9 12:32
请问大佬们这个问题怎么解决啊?

解决了,谢谢大家
回复

使用道具 举报

ID:542954 发表于 2019-8-10 00:30 | 显示全部楼层
我觉得需要做防抖的延时吧。。。不知道楼主是如何解决的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表