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

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

简介

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

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

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

配置过程

定时器的配置

配置定时器,我个人是以定时器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 继电器等基础外设初始化以及简单操作

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值