• 大小: 11KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: 其他
  • 标签: 51单片机  

资源简介

一般单片机内的 定时器只有三个,当我们做工程时往往需要很多定时器,就会遇到定时器不够用的问题,这个程序是用软件做出的很多定时器,解决了定时器不够用的问题。适当修改可以各种控制的需求。

资源截图

代码片段和文件信息

/*------------------------------------------------------------------*/
/* --- STC MCU International Limited -------------------------------*/
/* --- STC 1T Series MCU RC Demo -----------------------------------*/
/* --- Mobile: (86)13922805190 -------------------------------------*/
/* --- Fax: 86-755-82944243 ----------------------------------------*/
/* --- Tel: 86-755-82948412 ----------------------------------------*/
/* --- Web: www.STCMCU.com -----------------------------------------*/
/* If you want to use the program or the program referenced in the  */
/* article please specify in which data and procedures from STC    */
/*------------------------------------------------------------------*/

/************* 功能说明 **************

用Timer0做基准10ms定时,16个倒计时软件定时器。

合适工业控制中类似PLC的软件定时器。

每个定时器的值非0开始同步定时,减到0停止。

范例程序的定时器是8位的,定时值为1~255,对应0.01~2.55秒.

每个定时器点亮一个LED 不同闪烁时间。

******************************************/



/************* 用户系统配置 **************/

#define MAIN_Fosc 24000000L //定义主时钟

#define D_TIMER0 10000 //选择定时器时间 us


/************* 以下宏定义用户请勿修改 **************/
#include “reg51.H“
#define uchar unsigned char
#define uint unsigned int

#define freq_base (MAIN_Fosc / 1200)
#define Timer0_Reload (65536 - (D_TIMER0 * freq_base / 10000))

uchar SoftTimer[16];

uchar code T_BitTable[8] = {1248163264128};
uchar code T_ReloadTimerL[16] = {10 20 30 40 50 60 70 80 90100110120130140150160};
uchar code T_ReloadTimerH[16] = {30 40 50 60 70 80 90100110120130140150160170180};

/**************** Timer初始化函数 ******************************/
void InitTimer(void)
{
TMOD = 1;
TH0 = Timer0_Reload / 256;
TL0 = Timer0_Reload % 256;
ET0 = 1;
TR0 = 1;
EA  = 1;
}

/********************* 主函数 *************************/
void main(void)
{
uchar ij;

InitTimer(); //初始化Timer

while(1)
{
for(i=0; i<16; i++) //检测16个定时器是否倒计时到0
{
if(SoftTimer[i] == 0) //倒计时到0
{
if(i < 8) //0~7 对应P1.0~P1.7
{
P1 ^= T_BitTable[i]; //取反对应的LED
j = P1 & T_BitTable[i]; //取当前输出状态
}
else //8~15对应P2.0~P2.7
{
P2 ^= T_BitTable[i-8]; //取反对应的LED
j = P2 & T_BitTable[i-8]; //取当前输出状态
}
if(j == 0) SoftTimer[i] = T_ReloadTimerL[i]; //输出低电平的重装定时值
else SoftTimer[i] = T_ReloadTimerH[i]; //输出高电平的重装定时值
}
}
}
}

/********************** Timer0中断函数************************/
void timer0 (void) interrupt 1
{
uchar i;

TR0 = 0;
TH0 = Timer0_Reload / 256;
TL0 = Timer0_Reload % 256;
TR0 = 1;

for(i=0; i<16; i++)
{
if(SoftTimer[i] != 0) SoftTimer[i]--; //倒计时定时器
}
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        161  2011-03-16 09:50  软件定时器\SoftTimer.plg

     文件         50  2011-03-03 17:20  软件定时器\SoftTimer.lnp

     文件       4816  2011-03-03 17:20  软件定时器\SoftTimer.M51

     文件        568  2011-03-03 17:20  软件定时器\SoftTimer.hex

     文件       2888  2011-02-21 15:56  软件定时器\SoftTimer.c

     文件       2005  2011-02-21 15:57  软件定时器\SoftTimer_Uv2.Bak

     文件       2153  2011-03-02 21:05  软件定时器\SoftTimer.Uv2

     文件       6054  2011-03-03 17:20  软件定时器\SoftTimer.LST

     文件       3935  2011-03-03 17:20  软件定时器\SoftTimer.OBJ

     文件       3603  2011-03-03 17:20  软件定时器\SoftTimer

     文件       1037  2011-03-07 19:19  软件定时器\SoftTimer_Opt.Bak

     文件       1035  2011-03-16 09:50  软件定时器\SoftTimer.Opt

     目录          0  2011-03-16 09:50  软件定时器

----------- ---------  ---------- -----  ----

                28305                    13


评论

共有 条评论