标题:
MSP430F149单片机IO口中断问题
[打印本页]
作者:
泛浮
时间:
2019-7-27 15:33
标题:
MSP430F149单片机IO口中断问题
我使用msp430f149做一个端口中断,但是这个端口为什么用手轻轻一碰就会进中断。下面是我的程序。
#include <msp430x14x.h>
#include "Config.h"
#include <stdio.h>
#include <string.h>
#include <in430.h>
unsigned int i;
unsigned int s=0;
unsigned int a=0;
unsigned int b=0,x;
unsigned int num0=0,num1=0,num2=0;
char r[];
char y[];
unsigned int times=0;
char data[];
void delay(void)
{
int i,j;
for(i=0;i<100;i++)
for(j=0;j<300;j++);
}
void UART_Init()
{
U0CTL|=SWRST; //复位SWRST
U0CTL|=CHAR; //8位数据模式
U0TCTL|=SSEL1; //SMCLK为串口时钟
U0BR1=baud_h; //BRCLK=8MHZ,Baud=BRCLK/N
U0BR0=baud_l; //N=UBR+(UxMCTL)/8
U0MCTL=0x00; //微调寄存器为0,波特率9600bps
ME1|=UTXE0; //UART0发送使能
ME1|=URXE0; //UART0接收使能
U0CTL&=~SWRST;
IE1|=URXIE0; //接收中断使能位
P3SEL|= BIT4; //设置IO口为普通I/O模式
P3DIR|= BIT4; //设置IO口方向为输出
P3SEL|= BIT5;
}
void Send_Byte(uchar data)
{
while((IFG1&UTXIFG0)==0); //发送寄存器空的时候发送数据
U0TXBUF=data;
}
#pragma vector=PORT2_VECTOR
__interrupt void jszd(void)
{
delay();
Send_Byte('0');
if((P2IN&0X01)==0x00)
{
num0++;
if(num0%4==0)
{
Send_Byte('.');
times=times+1;
}
}
if(P2IN==0x02)
{num1++;
}
if(P2IN==0x04)
{num2++;}
P2IFG=0x00;
}
//*************************************************************************
// 处理来自串口 0 的接收中断
//*************************************************************************
#pragma vector=UART0RX_VECTOR
__interrupt void UART0_RX_ISR(void)
{
data[s++]=U0RXBUF; //接收到的数据存起来
for (i=0;i<strlen(data);++i) //数据转化
{
if(data[2*i]=='r')
{r[a++]=data[2*i+1]+4*times;}
else
{y[b++]=data[2*i+1]+4*times;}
}
}
//*************************************************************************
// 处理来自串口 0 的发送中断,预留
//*************************************************************************
#pragma vector=UART0TX_VECTOR
__interrupt void UART0_TX_ISR(void)
{
}
//*************************************************************************
// 主函数
//*************************************************************************
void main(void)
{
WDT_Init(); //看门狗设置
Clock_Init(); //系统时钟设置
P2OUT=0X00;
P2DIR&=~(BIT0+BIT1+BIT2);
P2IE|=BIT0+BIT1+BIT2;
P2IES|=BIT0+BIT1+BIT2;
UART_Init(); //串口设置初始化
_EINT(); //开中断
while(1) //无限循环
{
for (i=0;i<strlen(r);++i)
{
if(r[i]==num1)
{delay();
P3OUT|=0x01;
delay();
P3OUT|=0x00;
}
}
for (i=0;i<strlen(y);++i)
{
if(y[i]==num2)
{delay();
P3OUT|=0x03;
delay();
P3OUT|=0x00;}
}
}
}
复制代码
作者:
泛浮
时间:
2019-7-27 15:35
求各位大佬指教,我外加上拉电阻也是不断触发,我管脚悬空就不触发了,我用手碰到它,他就开始不断进中断。
作者:
泛浮
时间:
2019-7-27 21:02
大佬们!!!
作者:
aaaaaa。
时间:
2019-7-28 14:24
你用的哪个IO口,换个IO口可以吗
作者:
WD51H
时间:
2019-7-28 15:29
如果对实时性要求不高就在中断里加一小段延时,判断是否真的触发了中断,类似按键的防抖
作者:
WD51H
时间:
2019-7-28 15:40
这里应该有你需要的信息
https://blog.csdn.net/baidu_28237819/article/details/52170698
作者:
天空618
时间:
2019-7-29 18:14
msp430f149键盘中断程序,用端口中断。通过实验验证,你可以参考一下www点codeforge点cn/article/198833
作者:
疾风未雨
时间:
2019-8-9 12:32
请问大佬们这个问题怎么解决啊?
作者:
疾风未雨
时间:
2019-8-9 14:40
疾风未雨 发表于 2019-8-9 12:32
请问大佬们这个问题怎么解决啊?
解决了,谢谢大家
作者:
witheMe
时间:
2019-8-10 00:30
我觉得需要做防抖的延时吧。。。不知道楼主是如何解决的
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1