📄 systimer.c
字号:
#include <reg52.h>
#include <intrins.h>
#include "inc/EXT_PUBLIC_VARIABLE.H"
#include "inc/CPUIO_DEF.H"
#include "inc/timer_pwm.h"
#define TIME_BASE_50MS 25
//#define TIME_BASE_100MS 100
#define TIME_BASE_500MS 10
#define F_OSC 110592
//extern void Dog(void);
/**************************************************************************
最小时基: 2ms
定时器类1: 定时范围为 2ms - 500ms
定时器类2: 定时范围为 500ms - 128s
**************************************************************************/
void Timer0() interrupt 1 using 1
{ uchar i;
static uchar TimeBase50ms = TIME_BASE_50MS;
// static uchar TimeBase100ms = TIME_BASE_100MS;
static uchar TimeBase500ms = TIME_BASE_500MS;
TL0 = 0Xcc; //1ms定时中断
TH0 = 0XF8;
//IO口数据采样
bitHuoerRest=HUOER_REST;//霍尔1
bitHuoerMido=HUOER_MIDO;//霍尔2
bitHuoerLast=HUOER_LAST;//霍尔3
if( bitRstFlg&& (!bitHuoerRest))
{
bitRstFlg = 0;
MOTONOFF = 1;
TR1 = 0;
}
if( bitMidoFlg&& (!bitHuoerMido))
{
bitMidoFlg = 0;
MOTONOFF = 1;
TR1 = 0;
}
if( bitLastFlg&& (!bitHuoerLast))
{
bitLastFlg = 0;
MOTONOFF = 1;
TR1 = 0;
}
//处理以2ms为时基的定时器(时间范围为2ms-510ms)
for( i = 0; i < 4; i++ )
{
if( TimerNo[ i ] != 0 )
if( --( TimerNo[ i ] ) == 0 )
fTimer |= 0x01 << i;
}
if( --TimeBase50ms != 0 )
return;
TimeBase50ms = TIME_BASE_50MS * ( F_OSC / 110592 );
//直接处理50毫秒为时基的代码
if( --TimeBase500ms != 0 )
return;
TimeBase500ms = TIME_BASE_500MS * ( F_OSC / 110592 );
//直接处理500ms为时基的代码
HW_WDT = 0;
HW_WDT = 1;
_nop_();
_nop_();
_nop_();
HW_WDT = 0;
//处理以500ms为时基的定时器(500ms-127.5s)
for( i = 4; i < 8; i++ )
{
if( TimerNo[ i ] != 0 )
if( -- ( TimerNo[ i ] ) == 0 )
fTimer |= 0x01 << i;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -