小弟最近在熟悉MSP430F149的时候利用学习板编了一个让八位数码管循环显示0-7数字的时候发现利用下载器下载程序进430之后,段码显示正常,但是位码一直不正常,并且每次给单片机上电的时候数码管显示的结果都不一样,程序运行结果每次都不一样,求助各位大佬帮我看看这是什么情况,多谢各位了!程序代码和学习板电路图如下:
#include "msp430x14x.h"
void delay( int i)
{
while(i>0)
{
i--;
}
}
int cnt;
int n;
int duanma[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
int weima[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
//时基模块的时钟设置
//单片机上电时,MCLK主时钟的源默认选择为DCO提供.F1系列DCO默认800KHZ.
//ACLK辅助时钟默认为XT1,XT1一般接32768HZ晶体.
//SMCLK子时钟默认为DCO,同样是800KHZ.
//XT2需要人为开启,并要检测其开启是否成功.
BCSCTL1 &= ~(XT2OFF + XTS); //启动XT2高速时钟模块
// BCSCTL3 |= XT2S3;
//刚才开启了XT2,需要一定时间XT2才进入稳定状态.所以需要等待并检测稳定状态.
do
{
IFG1 &=~OFIFG; //清OSCFault 标志
for(n=0xff;n>0;n--); //延时等待其开启稳定
}
while((IFG1 & OFIFG) !=0); //检查OSCFault标志位是否为0,若为0则表示XT2开启稳定.
//否则一直等下去...
BCSCTL2 |= SELM1; //MCLK主时钟选XT2为时钟源.TX2输入不分频.
BCSCTL2 &= ~SELS; //SMCLK选为DCO为时钟源.
//-----------------------------------------------
//-----------------初始化IO口
P1DIR = 0xff; P1OUT = 0xff;
P2DIR = 0xff; P2OUT = 0xff;
P3DIR = 0xff; P3OUT = 0xff;
P4DIR = 0xff; P4OUT = 0xff;
P5DIR = 0xff; P5OUT = 0x5f;
P6DIR = 0xff; P6OUT = 0xbf;
cnt = 0;//------------------
TACCTL0 = CCIE;
CCR0 = 8000;
TACTL = TASSEL_2 + MC_1;
_EINT();
while(1);
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
_DINT();
while(cnt<8)
{
P4OUT = duanma[cnt];
P6OUT |= BIT6;
delay(10);
P6OUT = 0x00;
P4OUT = weima[cnt];
P5OUT |= BIT5;
delay(10);
P5OUT = 0x00;
delay(30000);
delay(30000);
delay(30000);
delay(30000);
delay(30000);
delay(30000);
delay(30000);
delay(30000);
delay(30000);
delay(30000);
delay(30000);
delay(30000);
delay(30000);
cnt++;
}
cnt = 0;
_EINT();
}
此帖出自
小平头技术问答
一周热门 更多>