z663327 发表于 2013-6-4 11:45:22

关于430的中断问题

我用msp430编写的lcd显示和中断扫描矩阵按键 当总中断不开启的时候lcd能正常显示数据 打开总中断后不显示了 求助!!!

开启总中断在初始化程序的最后一行!!!
#include "msp430x14x.h"

#defineuint unsigned int
#define uchar unsigned char

#define zhilin_PORT P3OUT
#define zhilin_DDR P3DIR
#define DB_PORT P4OUT
#define DB_DDR P4DIR

void write_dat(uchar dat);
void delay_ms(uint ms);
void write_com(uchar com);
void Init_Port(void);
void show(uint x);
void delay(void);//按键去抖
uint keyprocess(void);

uint key=0;

#pragma vector=PORT1_VECTOR
__interrupt void ITRPT_1(void)
{
   delay();
   key = keyprocess();
   P1IFG=0;
}
void main(void)
{   
    Init_Port();
    while(1)
    {
      show(key);
    }
}


/**********************************/
#include "msp430x14x.h"

#defineuint unsigned int
#define uchar unsigned char

void delay_ms(uint ms)
{
   uint i,j;
   for(;ms>0;ms--)
   for(i=0;i<1000;i++)
   for(j=0;j<8;j++);
}
void delay(void)//按键去抖
{
int i;
for(i = 100;i--;i > 0);

}

/*******************************/
#include "msp430x14x.h"

#defineuint unsigned int
#define uchar unsigned char

#define zhilin_PORT P3OUT
#define zhilin_DDR P3DIR
#define DB_PORT P4OUT
#define DB_DDR P4DIR

void write_dat(uchar dat);
void delay_ms(uint ms);
void write_com(uchar com);

void Init_Port(void)
{
uchar j = 0;
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
   BCSCTL1 &= ~ XT2OFF;            //打开XT2高频晶振,XT1默认低频晶振--DIVA默认1分频
   do
   {
   IFG1 &= ~ OFIFG;            //关闭晶振错误中断标志
   for(j= 0xff ; j > 0;j--);       //延时
   }
   while(IFG1 & OFIFG);         //判断是否关闭成功
   BCSCTL2 |= SELM_2;             //主系统时钟使用XT2高频晶振,DIVM默认不分频
   BCSCTL2 |= SELS;

   //将P1口所有的管教在初始化的时候设置为输入
P1DIR = 0;
//将P1端口所有的管脚设置为一般I/O口
P1SEL = 0;
   //打开管脚的中断功能
//对应管脚由高到低电平跳变使相应的标志置位
P1IES = BIT0 + BIT1 + BIT2 + BIT3;
P1IE = BIT0 + BIT1 + BIT2 + BIT3;


P2OUT = 0XFF;
P2DIR = 0XFF;
P2SEL = 0X00;
zhilin_DDR=0XFF;
zhilin_PORT=0X00;
DB_DDR=0XFF;
DB_PORT=0X00;
P3SEL = 0X00;
P4SEL = 0X00;
      write_com(0x38);//设置16*2显示 5*7点阵屏
       delay_ms(5);
       //write_com(0x01);//清屏
       //delay(1);
       write_com(0x0C);//显示光标闪烁
       delay_ms(5);
       write_com(0X06);//写入字符后光标加一 字符加一
       delay_ms(5);

_EINT();
}
/****************************/
#include "msp430x14x.h"
#defineuint unsigned int
#define uchar unsigned char

#define zhilin_PORT P3OUT
#define zhilin_DDR P3DIR
#define DB_PORT P4OUT
#define DB_DDR P4DIR
uint keyprocess(void)
{
      int nP10,nP11,nP12,nP13;
        int nRes = 0;
        //P1.4输出低电平
        P1OUT &= ~(BIT4);
        nP10 = P1IN & BIT0;
        if (nP10 == 0) nRes = 13;
        nP11 = P1IN & BIT1;
        if (nP11 == 0) nRes = 14;
        nP12 = P1IN & BIT2;
        if (nP12 == 0) nRes = 15;
        nP13 = P1IN & BIT3;
        if (nP13 == 0) nRes = 16;
        //P1.5输出低电平
        P1OUT &= ~(BIT4);
        nP10 = P1IN & BIT0;
        if (nP10 == 0) nRes = 9;
        nP11 = P1IN & BIT1;
        if (nP11 == 0) nRes = 10;
        nP12 = P1IN & BIT2;
        if (nP12 == 0) nRes = 11;
        nP13 = P1IN & BIT3;
        if (nP13 == 0) nRes = 12;
        //P1.6输出低电平
        P1OUT &= ~(BIT4);
        nP10 = P1IN & BIT0;
        if (nP10 == 0) nRes = 5;
        nP11 = P1IN & BIT1;
        if (nP11 == 0) nRes = 6;
        nP12 = P1IN & BIT2;
        if (nP12 == 0) nRes = 7;
        nP13 = P1IN & BIT3;
        if (nP13 == 0) nRes = 8;
        //P1.7输出低电平
        P1OUT &= ~(BIT4);
        nP10 = P1IN & BIT0;
        if (nP10 == 0) nRes = 1;
        nP11 = P1IN & BIT1;
        if (nP11 == 0) nRes = 2;
        nP12 = P1IN & BIT2;
        if (nP12 == 0) nRes = 3;
        nP13 = P1IN & BIT3;
        if (nP13 == 0) nRes = 4;

        P1OUT = 0x00;//恢复以前值。

        //读取各个管脚的状态
        nP10 = P1IN & BIT0;
        nP11 = P1IN & BIT1;
        nP12 = P1IN & BIT2;
        nP13 = P1IN & BIT3;
        for(;;)
        {
                if(nP10 == 1 && nP11 == 1 && nP12 == 1 && nP13 == 1)
                {
                        //等待松开按键
                        break;
                }
        }
        return nRes;
}
/*******************************/
#include "msp430x14x.h"

#defineuint unsigned int
#define uchar unsigned char

#define zhilin_PORT P3OUT
#define zhilin_DDR P3DIR
#define DB_PORT P4OUT
#define DB_DDR P4DIR

void write_dat(uchar dat);
void delay_ms(uint ms);
void write_com(uchar com);

void show(uint x)
{
         uchar i;
       uchar DAT1={0,};
         uchar table1={48,49,50,51,52,53,54,55,56,57};
         
               DAT1=x/100;
               DAT1=x%100/10;
               DAT1=x%10;
           write_com(0X80+0X00);
           delay_ms(5);
           for(i=0;i<3;i++)
          {
          write_dat(table1]);
          delay_ms(5);
          }
          
}

void write_com(uchar com)//写指令
{
         zhilin_PORT&=~BIT0;//RS设置为输入指令
       zhilin_PORT&=~BIT1;//R/W设置为向lcd写入指令
       DB_PORT =com;//输入指令内容
       zhilin_PORT|=BIT2;//使能位为高电平 读取信息
       delay_ms(1);//使能延迟
       zhilin_PORT&=~BIT2;
       //使能位跳为低电平 E出现下降沿 执行指令
}

void write_dat(uchar dat)//写数据
{        
          zhilin_PORT|=BIT0;//RS设置为输入数据
          zhilin_PORT&=~BIT1;//R/W设置为向lcd写入数据
          DB_PORT=dat;//输入数据内容
          zhilin_PORT|=BIT2;//使能位为高电平 读取信息
          delay_ms(1);//使能延迟
          zhilin_PORT&=~BIT2;
         //使能位跳为低电平 E出现下降沿 显示数据
}





z663327 发表于 2013-6-4 11:46:38

初学430 望大家指点啊!
页: [1]
查看完整版本: 关于430的中断问题