资源简介
一般单片机内的 定时器只有三个,当我们做工程时往往需要很多定时器,就会遇到定时器不够用的问题,这个程序是用软件做出的很多定时器,解决了定时器不够用的问题。适当修改可以各种控制的需求。
代码片段和文件信息
/*------------------------------------------------------------------*/
/* --- 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
相关资源
- 毕业设计__基于51单片机的公交车自动
- 基于51单片机的温室大棚温湿度测控系
- 基于AT89C2051单片机的智能充电器设计
- CC1101的51单片机收发程序
- 基于51单片机的智能大棚设计
- 51单片机数码管时钟
- 基于51单片机的ds18b20的proteus仿真
- 51单片机12864液晶屏proteus仿真源代码
- 基于51单片机的自动量程数字电压表
- VL53l0x的51单片机程序
- 基于51单片机循迹、红外避障、遥控综
- 基于51单片机的低频信号发生器的设计
- 基于51单片机的LED灯控制Proteus仿真
- 51单片机 矩阵键盘 protues ISIS 源码和仿
- 51单片机,电子琴程序,原理图
- 基于51单片机DHT11的温湿度检测系统
- 51单片机IO模拟SPI和25lc1024通信
- 基于51单片机的温度测量系统_赵娜
- 51单片机车轮测速的proteus仿真
- 基于51单片机的数字频率计程序仿真图
- 基于51单片机的温度控制系统
- 基于51单片机定时器的设计
- 51单片机的AD7705代码
- 基于51单片机的智能风扇控制程序
- 利用pwm实现51单片机的呼吸灯功能
- 用51单片机解析GPS数据并在12864液晶显
- 51单片机读写W25X16
- 基于51单片机的ADC0832数字电压表仿真
- 基于51单片机的ADC0808 数字电压表
- 基于51单片机Max7219驱动8×8点阵PROTEU
评论
共有 条评论