TimerA流水灯问题分析

2008年11月03日 21:11    MSP430
关键词: TimerA , 流水
在调试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;
但结果还是一样的.这当然要和<位与>区分了 ^_^
欢迎分享本文,转载请保留出处:http://www.eechina.com/thread-2874-1-1.html     【打印本页】
您需要登录后才可以发表评论 登录 | 立即注册

相关文章

厂商推荐


关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备11013910号 | 京公网安备11010502021702
回顶部