資源簡介
一般單片機內的 定時器只有三個,當我們做工程時往往需要很多定時器,就會遇到定時器不夠用的問題,這個程序是用軟件做出的很多定時器,解決了定時器不夠用的問題。適當修改可以各種控制的需求。

代碼片段和文件信息
/*------------------------------------------------------------------*/
/*?---?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個倒計時軟件定時器。
合適工業(yè)控制中類似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]; //取當前輸出狀態(tài)
}
else //8~15對應P2.0~P2.7
{
P2?^=?T_BitTable[i-8]; //取反對應的LED
j?=?P2?&?T_BitTable[i-8]; //取當前輸出狀態(tài)
}
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
評論
共有 條評論