蓝桥杯STC基础代码-以定时器计数作为时间轴的模板

以定时器计数作为时间轴的模板

简介

这是我写STC15代码时候首先都会配置的一个时间轴。

1.配置起来比较简单:
2.可读性强,操作简单

Created with Raphaël 2.2.0开始系统初始化定时器中断?定时器计数+1到达1ms时间点?程序每1ms要做的事情到达20ms时间点?程序每20ms要做的事情到达100ms时间点?程序每100ms要做的事情扫描任务完成yesyesnoyesnoyesno

配置过程

定时器的配置

配置定时器,我个人是以定时器2作为时间轴,就算代码忘了也没有关系,在我们使用的烧录软件STC-ISP中就可以ctrl+c ctrl+v。

选择定时器二,定时长度为1ms(可以自己选择)。
注意
软件中没有给出 打开总中断以及打开定时器中断,一定要自己打开。
设置 EA 总开关 跟 ET2 定时器开关 。
对于打开ET2 我们只能用通过设置IE2 这个寄存器。
所以需要自己添加下面两行代码。
EA=1;
IE2 |= 0X04;

定时器2配置代码

 AUXR |= 0x04;  //定时器时钟1T模式
 T2L = 0xCD;  //设置定时初值
 T2H = 0xD4;  //设置定时初值
 AUXR |= 0x10;  //定时器2开始计时
 
 EA=1;
 IE2 |= 0X04;

定时器中断的配置

定时器每次中断的时间的1ms,我们需要创建一个变量来存储定时器计数的时间
这里我用 TIM2_time 这个变量,以及一个结构体来存储时间轴到达某个时间点的标志。

long TIM2_time;
typedef struct 
{ 
  u8 flag_1ms;
  u8 flag_20ms;
  u8 flag_100ms;
  u8 flag_500ms;
  u8 flag_1s;
}TIM2;

定义好了变量之后,我们再来看看定时器中断的内容,其实也挺简单。

void TIM2_interrupt(void) interrupt 12
{
   TIM2_time++;
   TIM2_flag.flag_1ms = True;	
   if(TIM2_time % 20 == 0)
   {
     TIM2_flag.flag_20ms = True;
   }
  if(TIM2_time % 100 == 0)
  {
     TIM2_flag.flag_100ms = True;
  }
}

主函数的配置

在定义好了定时器之后,基本就完成了一半了。
在主循环里面判断定时器到达节点的标志是否为真,如果是就执行命令语句。
具体代码如下:

 while(1)	
 {
   if(TIM2_flag.flag_1ms == True)
   {
     TIM2_flag.flag_1ms = False;
     /*************程序每隔1ms要做的事情********/  
    
     /*********************************************************/	
   }	
   if(TIM2_flag.flag_20ms == True)
   {
    TIM2_flag.flag_20ms = False;
    /*************程序每隔20ms要做的事情********/  

    /*********************************************************/
   }
   if(TIM2_flag.flag_100ms == True)
   {
     TIM2_flag.flag_100ms = False;
      /*************程序每隔100ms要做的事情********/  

      /*********************************************************/
   }
 }

代码下载地址

代码在蓝桥杯的板子上测试过,基础定时器2的流水灯,以及矩阵按键读取,数码管显示,

代码下载地址

蓝桥杯单片机资源包

下一章

下一章讲LED 继电器等基础外设初始化以及简单操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章