利用单片机定时中断实现软定时器
Author :
#include "reg52.h"
#include "Intrins.h"
#include "TypeDef.h"
#include "CPUPin_Def.h"
#include "VarDef.h"
#define TIME_BASE_2MS
#define TIME_BASE_500MS 250
#define TIME_BASE_10MS 5
#define F_OSC 110592
//注意这种写法只能晶振翻倍的时候改这个宏才有用,
//因为51单片机硬件不支持
// 如果支持浮点运算会有芯片内部专门的的硬件浮点运算指令 这种写法也不行
//如 ( double)12/(double)11.0592
//目前有 硬件支持浮点 有软件浮点
//一个特殊的函数去处理。 51
void Timer0() interrupt
{
//采用静态变量这里只会执行一次,不管多少次中断因为是静态变量
//但不能写成
//如果实际换成了是12MHZ晶振 就改成
static uchar TimeBase2ms = TIME_BASE_2MS * (F_OSC / 110592);
//就是直接改F_OSC 这个宏就行了。不用改其他的
static uchar idata TimeBase500ms = TIME_BASE_500MS * (F_OSC / 110592);
static uchar TimeBase10ms = TIME_BASE_10MS *(F_OSC / 110592);
static unsigned char CountSignalDelay = 0;
//以上只会执行一次 static 定义声明初始化
uchar i;
TH0=0xfc ; //
TL0=0x72 ;
//这里 用工具算出来应该是FC 66
//让装载的数字
_push_( SCONF ) ;
if( --TimeBase2ms
TimeBase2ms = TIME_BASE_2MS * (F_OSC / 110592);
//0--3
for( i = 0; i < 4; i++ )
fTimer |=
}
}
if( --TimeBase10ms
ScanCopierSignal() ;//10毫秒掉一次函数
if( --TimeBase500ms
//处理以500ms为时基的定时器
}
}
_pop_(SCONF);
}
单片机定时中断软定时 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)