⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.c

📁 红外空调控制
💻 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;			//关闭时钟源		
	}
}

//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;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -