微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > TimerA流水灯问题分析

TimerA流水灯问题分析

时间:12-02 来源:互联网 点击:
在调试TimerA OR TimerB上发了将两次将近两天的时间.在此如不

做出总结与纠正,以后可能会出现同样的问题.当然全不是TimerA

定时器设置问题而是在MSP430基础方面做得不够.

程序如下:

#include"MSP430x16x.h"

unsigned char LED;

void Init_SystemClock(void)

{

unsigned char i;

BCSCTL1=0x00; //XT2OFF XT2 divA.1 divA.0 XT5V

RSE.2 RSE.1 RSE.0

BCSCTL2|=SELM1+SELS; //SSEL1 SSEL0 divM.1 divM.0 SELS

divS.1 divS.0 DOR

do

{

IFG1&=~OFIFG;

for(i=0xFF;i>0;i--);

}

while((IFG1&OFIFG)!=0);

P5DIR=BIT4+BIT5+BIT6; //MCLK SMCLK ACLK

P5SEL|=BIT4+BIT5+BIT6; //功能端口输出

}

void Init_Port(void)

{

P4DIR=0xFF;

P4SEL=0x00; //

return;

}

void Init_TimerA(void)

{

TACTL=TASSEL0+TACLR;

TACCTL0=CCIE; //

TACCR0=32768;

TACTL|=MC0;

//TACTL|=TAIE;

return;

}

#pragma vector = TIMERA0_VECTOR

__interrupt void TimerA_ISR(void)

{

LED=((LED==0X80)?0x01LED<1));

P4OUT=LED;

}

void main(void)

{

WDTCTL=WDTPW+WDTHOLD;

Init_SystemClock();

Init_Port();

Init_TimerA();

_EINT();

LED=0x80;

while(1);

}

程序下载到MSP430F1611后出现如下情况:

1:程序编译通过却LED不能显示

2ED出现后不是按设定的部位显示--0X01--而是显示0X02-

>0X01...0X80;

经过单步跟踪发现for(i=0xFF;i>0;i--);上的问题,

原定义为:

unsigned char i;

for(i=0;i<256;i++);

i已经超值.定义unsigend char i 取值范围是:0 ~ 255

最好写成

unsigned char i;

for(i=0xff;i>0;i--);

写成:

unsigned char i;

for(i=0;i<255;i++); 在观察窗口发现 i:Error(col1):Unknown

or ambiguous symbol.i --i的值不能确定(模棱两可)

解决情况1 出现情况2.

原ED=0x01;放在 _EINT(); 前;

但ED=0x01;放在 _EINT(); 后显示0X40->0x02>0X01...0X80;

经分析:

将LED=0X80 放在 _EINT(); 后,显示正常.

同时发现MSP430各寄存器是采用位操作.

<位或>是采用:BCSCTL2=SELM1+SELS;

还是 :BCSCTL2|=SELM1+SELS;

但结果还是一样的.这当然要和<位与>区分了 ^_^

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top