TI中文支持网
TI专业的中文技术问题搜集分享网站

CC1110编程问题

程序是这样的:

#include<ioCC1110.h>

#define uchar unsigned char 

#define uint unsigned int 

#define RLED P1_1  //红led

#define GLED P1_0  //绿led

uchar counter=0;   //统计中断次数

uchar TempFlag;  //闪烁标志

void delay(uint);   //延迟函数 

void initial();    //初始化函数

void main()

{

  initial();

  RLED=0;  //红led亮

  GLED=1;  //绿led灭

  if(TempFlag==1)    

   {

        GLED=RLED;

        RLED=~RLED;  

        delay(6000);

   }

}

void delay(uint z)

{

  uint i;

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

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

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

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

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

}

void  initial()

{

  P1DIR|=0X03;//将P1.0和P1.1设置成输出

 RLED=1;//红led、绿led都灭

 GLED=1;

T1CTL=0x3d;//通道0.中断有效,128分频,自动装载

EA=1;//使能总中断

IEN1=0x02;//使能timer1中断

}

#pragma vector=T1_VECTOR    

__interrupt void TIMER1_ISR()   //中断处理函数

{

   if(counter<10)   //10次中断,LED闪烁一轮

     counter++;

  else

    {

      counter=0;

     if(TempFlag)

       TempFlag=0;

   else  TempFlag=1;

    }

}

硬件调试结果是:红LED向点亮,一会儿后,红LED和绿LED快速轮流点亮,再过一段时间,绿LED点亮,红LED熄灭,再次闪烁,此后不断重复。

在这里,定时器1工作在自动装载模式下,即定时器由0计到0xFFFF时,产生定时器溢出中断,每进入中断服务程序一次,counter都会加1,直到计完10次中断,闪烁标志TempFlag才会取反。也就是说,每10次中断后,红LED和绿LED的点亮情况就会互换一次。

于是我的疑惑就是:为什么会有“红LED和绿LED快速轮流点亮”这个过程?不知道是否有人和我做过同样的硬件调试,求大神解答!先谢谢了

Ken Wang:

Hi wan,

看了一下你的程序,发现下面的语句有点问题:

        GLED=RLED;

        RLED=~RLED;

为什么GLED要赋RLED端口的值啊,这里是不是写错了?

谢谢

ken

wan zeng:

回复 Ken Wang:

首先很感激您花时间阅读我的程序,愿意为我解答疑问!

在main()函数中,我要补充一下,

void  main()

{

  initial();//初始化

   RLED=0;//红LED点亮

   GLED=1;//绿LED熄灭

   while(1)

    {

      if(TempFlag==1)

       {

           GLED=RLED;    //

          RLED=~GLED;   //

         delay(6000);

       }

    }

}

主函数中,initial()初始化后,通过RLED=0; GLED=1;我点亮了红灯,熄灭了绿灯,当中断满10次后,即满足TempFlag=1条件后,GLED=RLED;RLED=~RLED;是为了让绿灯和之前的红灯一样亮起来,让红灯和自己之前的状态相反(红灯之前的状态时点亮),即熄灭,所以您怀疑的这个地方应该是没有错的。

赞(0)
未经允许不得转载:TI中文支持网 » CC1110编程问题
分享到: 更多 (0)