MSP430F5529测频,然后输出至DA,显示直流电压。

2019-07-22 17:20发布

本帖最后由 glisten1991 于 2016-5-1 22:02 编辑

老师布置了一个星期,自己看了一点基础知识,改了一个程序,但是光单片机的i/0输出口全是低电平,好像是中断没有启动,希望大神帮忙看一下



#include"msp430f5529.h"
#include "msp430.h"
#define uchar unsigned char
#define uint unsigned int

uchar flag,a;
uint n;
uint t1;
unsigned long int t;

//=========定时器的初始化===========//
void Init(void)
{
  n=0;
  TBCTL=TBSSEL_2+MC_1;      //SMCLK  up_mode
  TBCCTL0=CCIE;
  TBCCR0=40000;             //10ms
}
//===============OVER=============//

//==========时钟设置=================//
void ClkInit()
{
          P2DIR |= BIT0;
          P2OUT |= BIT0;

          P3SEL = 0x00;
          P3DIR = 0xFF;
          P6SEL = 0x00;
          P6DIR = 0xFF;

          P5SEL |= BIT2|BIT3;                   //将IO配置为XT2功能
          UCSCTL6 &= ~XT2OFF;                   //使能XT2

          UCSCTL4 = UCSCTL4&(~(SELA_7))|SELA_1; //先将ACLK配置为VLOCLK
          UCSCTL3 |= SELREF_2;                  //将REFCLK配置为REFCLK

          while (SFRIFG1 & OFIFG)
            {
              UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);         // 清除三类时钟标志位 // 这里需要清除三种标志位,因为任何一种标志位都会将OFIFG置位
              SFRIFG1 &= ~OFIFG;                                  // 清除时钟错误标志位
            }
          UCSCTL4 = UCSCTL4&(~(SELS_7|SELM_7))|SELS_5|SELM_5;     //将SMCLK和MCLK时钟源配置为XT2
}
//=================OVER=====================//

//===============捕获模式设置===================//
void Init_cap(void)
{
    P1SEL  |=BIT2;                                              //选择P1.2作为捕获的输入端子
    TA0CCTL1|=CM0+SCS+CCIS_0+CAP+CCIE;                          //上升沿触发,同步模式,使能中断
    TA0CTL  |=TASSEL1+ID_0+TACLR + TAIE;                        //选择4M-SMCLK时钟
}
//=================OVER=====================//

//================main=====================//
int main( void )
{
  WDTCTL = WDTPW + WDTHOLD;                                     //Stop watch dog timer to prevent time out reset
  ClkInit();                                                    //初始化时钟MCLK 4MHZ,SMCLK 4MHZ
  Init_cap();
  Init();
  _EINT();
  while(1);
}
//===========main OVER====================//


#pragma vector=TIMER0_A1_VECTOR
__interrupt void Timer_A(void)
{
     switch(TA0IV)                                               //TA中断向量查询
     {
          case 2:                                                //是捕获中断  2为CCR1捕获中断向量值
              n++;
                  break;
          case 14:                                        //是溢出中断
              a++;                                //溢出次数自加1
              break;
          default:
              break;
    }
}


#pragma vector=TIMER0_B0_VECTOR
__interrupt void Timer_B(void)
{
         TA0CCTL1 &= ~(CCIE);                                      //关闭捕获中断
         TBCCTL0 &= ~(CCIE);                                     //关闭定时中断
            t=a*65535+n;
            t1=t*256/1500;
        P2OUT  |= BIT0;
        P6OUT = t1;
        P3OUT = t1;
        }
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。