程序是这样的:
#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快速轮流点亮”这个过程?不知道是否有人和我做过同样的硬件调试,求大神解答!先谢谢了