📄 time.c
字号:
#include "global.h"
/******************************************************************************
** 函数: Timer0_Init ()
** 入参: 无
** 返回: 无
** 说明: 查询wiegand溢出,每5ms溢出中断,10ms溢出,手工装载
******************************************************************************/
void Timer0_Init ()
{
CKCON |= 0x04;
TMOD &= ~0x0f;
TMOD |= 0x01; //16位手工载入
RE_LOAD_TIME0;
TR0=1;
ET0=1;
}
/******************************************************************************
** 函数: Timer2_Init ()
** 入参: int counts
** 返回:
** 说明:
** Timer2_Init SYSCLK no Interrupt
** Configure Timer2 to auto-reload at interval specified by <counts> (no
** interrupt generated) using SYSCLK as its time base.
******************************************************************************/
void Timer2_Init (int counts)
{
TMR2CN = 0x00; // STOP Timer2; Clear TF2H and TF2L;
// disable low-byte interrupt; disable
// split mode; select internal timebase
CKCON |= 0x10;
TMR2RL = -counts; // Init reload values
TMR2 = TMR2RL; // Init Timer2 with reload value
ET2 = 1; // disable Timer2 interrupts
TR2 = 1; // start Timer2
}
/******************************************************************************
** 函数: Timer0_ISR (void) interrupt
** 入参:
** 返回:
** 说明: 5ms 中断
******************************************************************************/
void Timer0_ISR (void) interrupt 1
{
PCA0CPH4 =255; //32.1ms 喂狗
if(wie_str)
{
event_word |=event_wie_arrived; //当脉冲捕获开始,每次都会重载初值
} //一旦溢出进入中断说明超过2ms
//没有脉冲,此时认为一帧wiegand收完
RE_LOAD_TIME0;
}
/******************************************************************************
** 函数: Timer2_ISR (void) interrupt
** 入参:
** 返回:
** 说明: 1ms 中断
******************************************************************************/
void Timer2_ISR (void) interrupt 5
{
static unsigned int count1=0;
static unsigned int count2=0;
static unsigned int count3=0;
TF2H = 0;
count1++;
count2++;
count3++;
PCA0CPH4 =255; //32.1ms 喂狗
if(count1==10)
{
count1=0;
event_word |=event_uart_arrived; //50ms 查串口缓冲
}
if(count2==100)
{
count2=0;
event_word |=event_time_100ms; //100ms 搜索无线
}
if(count3==1000) //1000ms 做长时间基准
{
count3=0;
event_word |=event_time_1000ms;
}
CountSysTimer(); //倒计数组
}
/******************************************************************************
** 函数: InitSysTimer
** 入参:
** 返回:
** 说明: 初始化计数器
******************************************************************************/
void InitSysTimer(void)
{
unsigned char i;
for(i = 0; i < MAX_SYSTIMER_COUNT; i++)
{
sysTimer[i] = 0;
}
}
/******************************************************************************
** 函数: CountSysTimer
** 入参:
** 返回:
** 说明: 计数减1
******************************************************************************/
void CountSysTimer(void)
{
unsigned char i;
for(i = 0; i < MAX_SYSTIMER_COUNT; i++)
{
if(sysTimer[i] > 0)
sysTimer[i]--;
}
}
/******************************************************************************
** 函数: SetSysTimer
** 入参: id value
** 返回:
** 说明: 设置认为号 和时间
******************************************************************************/
unsigned char SetSysTimer(unsigned char id,unsigned int value)
{
if(id < MAX_SYSTIMER_COUNT)
{
sysTimer[id] = value;
return 1;
}
else
return 0;
}
/******************************************************************************
** 函数: GetSysTimer
** 入参: id
** 返回:
** 说明: 取任务状态
******************************************************************************/
unsigned char GetSysTimer(unsigned char id)
{
if(sysTimer[id] == 0)
return 1;
else
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -