?? 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 + -