我用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;}
}
}
}
uj5u.com熱心網友回復:
按你說應該是想設定低電平觸發中斷,但是你的中斷配置我不太理解,畢竟我也好久沒有碰430了

uj5u.com熱心網友回復:
您好,這個msp430f149好像只能設定上升沿或下降沿,我也不知道咋個弄低電平觸發。轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/106945.html
標籤:單片機/工控
