欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3665|回復: 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 單片機教程網

快速回復 返回頂部 返回列表