您的位置 首页 芯闻

使用单片机守时中止完成软守时器

以下是代码实现已经测试并用到项目上课放心使用Author:吾本杞人includereg52hincludeIntrinshincludeTypeDefhinclu

以下是代码完成现已测验并用到项目上课放心使用

Author : 吾本杞人
#include “reg52.h”
#include “Intrins.h”
#include “TypeDef.h”
#include “CPUPin_Def.h”
#include “VarDef.h”
#define TIME_BASE_2MS 2
#define TIME_BASE_500MS 250
#define TIME_BASE_10MS 5
#define F_OSC 110592 //界说这个是默许依照11.0592MHZ的晶振算的TH0 TL0的值 方法1 16位守时器
//留意这种写法只能晶振翻倍的时分改这个宏才有用,
//由于51单片机硬件不支撑浮点运算 12/11.0592 = 1 向下取整了 跟11.0592的晶振值是相同的
// 假如支撑浮点运算会有芯片内部专门的的硬件浮点运算指令 这种写法也不可 有必要强转类型
//如 ( double)12/(double)11.0592 要把类型强转成浮点数才行。
//现在有 硬件支撑浮点 有软件浮点 便是说软件也能够完成浮点数运算。比方编译器看到特别的代码会把转到
//一个特别的函数去处理。 51 STM32 单片机现在如同都不支撑硬件浮点数
void Timer0() interrupt 1 using 1
{
//选用静态变量这儿只会履行一次,不论多少次中止由于是静态变量
//但不能写成
//假如实践换成了是12MHZ晶振 就改成 F_OSC / 120000 由于TH0 TL0 是依照11.0592算的值
static uchar TimeBase2ms = TIME_BASE_2MS * (F_OSC / 110592);
//假如11.0592的晶振 就1 假如是12.00MHZ 那这个值算出来说便是1.085xxxx 晶振跑的快了这个值要大点
//便是直接改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 ; // 总守时1000微秒, 进入中止需求12个周期, 所以实践守时1000 – 12 * 12 / F
TL0=0x72 ;
//这儿 用东西算出来应该是FC 66 FC72-FC66 = 12
//让装载的数字少用12个周期 进入中止由于进入中止需求12周期加上去正好1ms
_push_( SCONF ) ;
if( –TimeBase2ms == 0 ){
TimeBase2ms = TIME_BASE_2MS * (F_OSC / 110592);
//0–3 是2毫秒为时基的守时器
for( i = 0; i < 4; i++ )
{
if( TimerNo[ i ] != 0 ){
if( –( TimerNo[ i ] ) == 0 ){//时刻到
fTimer |= 0x01 << i; //置为时刻到
}
}
}
if( –TimeBase10ms == 0 )
{
TimeBase10ms = TIME_BASE_10MS * ( F_OSC / 110592 );
ScanCopierSignal() ;//10毫秒掉一次函数
}
if( –TimeBase500ms == 0 )
{
TimeBase500ms = TIME_BASE_500MS * ( F_OSC / 110592 );
//处理以500ms为时基的守时器
for( i = 4; i < 8; i++ )
{
if( TimerNo[ i ] != 0 ){
if( — ( TimerNo[ i ] ) == 0 ) {
fTimer |= 0x01 << i;
}
}
_pop_(SCONF);
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/xinwen/260778.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部