首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

MSP430F149的捕获中断有关问题

2013-09-28 
MSP430F149的捕获中断问题请看下面的代码,我想实现MSP430F149单片机通过端口P1.1或者P1.2捕获外部信号发生

MSP430F149的捕获中断问题
请看下面的代码,我想实现MSP430F149单片机通过端口P1.1或者P1.2捕获外部信号发生器输入的方波,计数到变量num,然后将这变量在LCD12864屏幕上显示。但是却遇到两个问题:
①time_A定时器的捕获模块,为什么我用TACCTL0捕获通道0进行捕获,就能够成功实现功能,num正常变化并显示。但如果改用TACCTL1捕获通道1捕获,则12864空白一片,无法正常显示,而且num也不能变化。
我只是改了TACCTL0和TACCTL1的设置,然后将端口由CCIOA的P1.1改到CCI1A的P1.2,其他未作变化,而结果前者正常实现功能,后者甚至屏幕无法正常显示。
②我在开启TACCTLO捕获通道0中断,保证正常捕获的前提下:开启看门狗,开门狗定时中断扫描键盘。然后观察发现单片机死机,屏幕无反应,按键无反应,捕获无反应。我怀疑是系统时钟设置的问题,但无从下手。

求解惑。

#include<msp430x14x.h>
#include"LCDNEW.h"

#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long
uchar dis[3];
uint num=0;
uint flog=0;

void capture_init()
{
    
    TACTL|=TAIE+TASSEL_1  +ID_0    +MC_2;    
    //     中断 ACLK时钟 无分频    连续技术模式
                                       
   
   
    
   // TACCTL0|=CCIE   +CAP       +CCIS_0      +CM_1      +SCS;  
    
    //模式0 中断 捕获模式 外部P1.1输入CCI0A 上升沿捕获 同步捕获
    TACCTL1|=CCIE+CAP+CCIS_0+CM_1+SCS;
    //P1.2中断
    //P2SEL=0xff;
    //P2DIR=0x00;
    P1SEL=0XFF;
    P1DIR=0X00;
    
     _EINT();
    
}

//***********************************************************************
//函数名称:DisplayCgrom(uchar hz)显示CGROM里的汉字
//***********************************************************************
void DisplayCgrom(uchar addr,uchar *hz)
{
LCD_write_com(addr);
        delay_ms(5);
while(*hz != '\0')
{
LCD_write_data(*hz);
hz++;
                delay_ms(5);
}


//****************************************************************
//函数名称:Display()显示测试结果
//****************************************************************
void Display1(void)
{
DisplayCgrom(0x80,"the result is");



}
void Display2(void)
{
  DisplayCgrom(0x88,dis);
}


//*************************************************************************
//                    系统时钟初始化
//*************************************************************************
void Clock_Init()
{
  uchar i;
  BCSCTL1&=~XT2OFF;                 //打开XT振荡器
  BCSCTL2|=SELM1+SELS;              //MCLK为8MHZ,SMCLK为8MHZ
  do{
    IFG1&=~OFIFG;                   //清除震荡标志
    for(i=0;i<100;i++)
       _NOP();                      //延时等待
  }
  while((IFG1&OFIFG)!=0);           //如果标志为1,则继续循环等待
  IFG1&=~OFIFG; 
}

//*************************************************************************
//              MSP430内部看门狗初始化
//*************************************************************************
void WDT_Init()
{
  //WDTCTL=WDTPW+WDTHOLD;
   WDTCTL = WDT_MDLY_32;       //OPEN看门狗
   IE1|=WDTIE;
  _EINT();
}

/***
#pragma vector=WDT_VECTOR                    //看门狗中断
__interrupt void watchdog_timer(void)
{
  check();//这里是按键扫描
}
***/

/***
#pragma vector=TIMERA0_VECTOR                //捕获CCA0中断
__interrupt void TACCR0_ISR()
{
  num++;

}
***/


#pragma vector=TIMERA1_VECTOR              //捕获CCA1中断
__interrupt void TA_ISR()
{
  switch(TAIV)
  {
  case 2:
     num++;
     break;
  }
}



//***********************************************************************
//      主程序
//***********************************************************************


void main(void)
{
  //uint i;
        
        Clock_Init();                                //系统时钟设置
        Port_init();                                  //系统初始化,设置IO口属性
        WDT_Init();                                   //看门狗设置
delay_ms(100);                                //延时100ms
LCD_init();                                   //液晶参数初始化设置
LCD_clear();                                  //清屏
        capture_init();
        Display1();
        
while(1)
{
        
          
         dis[0]=num/100+0x30;
         dis[1]=num%100/10+0x30;
          dis[2]=num%10+0x30;
  
         
            Display2();
                                 //显示汉字   
}
}


[解决办法]
这个做出来来了 发我邮箱一个好吗谢谢  1829952242@qq.com
[解决办法]
请问你找到问题所在了嘛,,出在哪里啊。
[解决办法]
关注中,我用MSP430 MCU测外部传感器的方波(频率),也有很多问题。

热点排行