您的位置 首页 新能源

TimerA流水灯问题剖析

在调试TimerAORTimerB上发了将两次将近两天的时间在此如不做出总结与纠正,以后可能会出现同样的问题当然全不是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;
但成果仍是相同的.这当然要和<位与>区分了 ^_^

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/xinnengyuan/254559.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部