本帖最后由 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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我都写到这里了。。不会要重新写吧。。
一周热门 更多>