?? timer.c
字號:
/*
功 能:定時器0操作接口
文件名:timer.c
編 譯: WinAVR-20040720
速 度:外部4MHz
作 者:芯藝
EMAIL :changfutong@sina.com
更改記錄:
2004-12-02
*/
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include "common.h"
uchar g_bCounter;
uchar g_aBuf[26];
uchar g_bTimeOut;
//Timer0 中斷,0.844 ms中斷一次
SIGNAL(SIG_OVERFLOW0)
{
TCNT0=202;
if((IRPIN&_BV(IRBIT))==_BV(IRBIT))
g_aBuf[g_bCounter]=1;
else
g_aBuf[g_bCounter]=0;
g_bCounter++;
if(g_bCounter>=26)
{
TIMSK&=~_BV(TOIE0); //禁止中斷
TCCR0=0; //關(guān)閉時鐘源
}
}
//Timer1 中斷,1s中斷一次,用于超時檢測
SIGNAL(SIG_OVERFLOW1)
{
TCNT1=0XF0BD;
if(--g_bTimeOut==0)
{
TIMSK&=~_BV(TOIE1);
TCCR1B=0;
}
}
void SetTimer(uchar sec)
{
TCNT1=0XF0BD;
g_bTimeOut=sec;
TCCR1B=_BV(CS12)|_BV(CS10);//1024 分頻
TIMSK|=_BV(TOIE1);
}
uchar IsTimeOut(void)
{
uchar ret;
cli();
ret=g_bTimeOut;
sei();
return ret==0;
}
void CloseTimer(void)
{
TIMSK&=~_BV(TOIE1);
TCCR1B=0;
}
uchar ReadIRCode(void)
{
uchar i,j;
TCNT0=202;
g_bCounter=0;
TCCR0=_BV(CS01)|_BV(CS00); //時鐘源分頻64
TIMSK|=_BV(TOIE0);//中斷允許
while(g_bCounter<26)
{
DelayMs(1);
}
for(i=0;i<26;i+=2)
{
if(g_aBuf[i]==g_aBuf[i+1])
return 0;
}
j=0;
for(i=14;i<26;i+=2)
{
j<<=1;
if(g_aBuf[i]==0)
j|=0x01;
}
return j;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -