51单片机【while自定义时间扫描---常用模板】

本文介绍了一种基于STC15F2K60S2单片机的定时器1中断实现毫秒级任务调度的方法。通过设置定时器1,每1ms中断一次,更新Key_Mm、Seg_Mm和Led_Mm计数器,当达到特定阈值时执行相应功能。Key_Pro、Seg_Pro和Led_Pro三个函数在while循环中按需执行,实现了时间分片的控制策略。
摘要由CSDN通过智能技术生成

主要思路

     :主要用到思路   利用定时器去控制while里面的实行时间

工作原理:

如:工作原理 :利用定时器1中断 到达1ms后 进入中断 使Key_Mm每次加1 ,
当定时器1中断进入10次1即Key_Mm=10;当Key_Mm==10,就会使得while循环扫描当前的函数内 … */

#include "STC15F2K60S2.h"

//函数声明-----------------
void Key_Pro (void);
void Seg_Pro (void);
void Led_Pro (void);

void Timer1Init(void);
//减速 --------   用于定时器1 计时1ms++
unsigned long Key_Mm;
unsigned long Seg_Mm;
unsigned long Led_Mm;
void main()
{
	Timer1Init();
	
	while(1)
	{
		 Key_Pro ();
		 Seg_Pro ();
		 Led_Pro ();
	}
}
void tm1_isr() interrupt 3     //定时器1中断函数   (interrupt关键词是中断序号)
{
   if(++Key_Mm == 10) Key_Mm=0;
   if(++Seg_Mm == 100) Seg_Mm=0;
   if(++Led_Mm == 300) Led_Mm=0;

}
//
void Key_Pro (void)
{
		if(Key_Mm) return;Key_Mm=1;
		/*  ...内容代码... */
}

//
void Seg_Pro (void)
{
		if(Seg_Mm) return;Seg_Mm=1;
		/*  ...内容代码... */
	
//
}

void Led_Pro (void)
{
	 if(Led_Mm) return;Led_Mm=1;
	/*  ...内容代码... */
	
}


void Timer1Init(void)		//启动定时器 1毫秒@12.000MHz  函数-----【带有自动重装模式 1ms定时器】
{
	AUXR &= 0xBF;		//定时器时钟12T模式
	TMOD &= 0x0F;		//设置定时器模式
	TL1 = 0x18;		//设置定时初值
	TH1 = 0xFC;		//设置定时初值
	TF1 = 0;		//清除TF1标志
	TR1 = 1;		//定时器1开始计时
	
  ET1 = 1;               //使能定时器1中断
  EA = 1;
}

	/*  ...主要用到思路   利用定时器去控制while里面的实行时间
如:工作原理 :利用定时器1中断  到达1ms后 进入中断 使Key_Mm每次加1 ,
当定时器1中断进入10次1即Key_Mm=10;当Key_Mm==10,就会使得while循环扫描当前的函数内  ... */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值