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

📄 timer0.c

📁 用MEGA8实现4路红外调制发射接收的源码
💻 C
字号:
#include "global.h"
#include <avr/interrupt.h>
#include <avr/io.h>
#include "timer0.h"
#include "ir.h"


//#define     max_relay_hold_time_counter       25


UCHAR relay_hold_time_table[4] = {10,25,100,200};//SEL3 SEL4 ==  11

UCHAR relay1_hold_finish_flag = 1;
UCHAR relay2_hold_finish_flag = 1;
UCHAR relay3_hold_finish_flag = 1;
UCHAR relay4_hold_finish_flag = 1;


UCHAR relay1_hold_start_flag = 0;
UCHAR relay2_hold_start_flag = 0;
UCHAR relay3_hold_start_flag = 0;
UCHAR relay4_hold_start_flag = 0;

UCHAR relay1_hold_time_counter = 0;
UCHAR relay2_hold_time_counter = 0;
UCHAR relay3_hold_time_counter = 0;
UCHAR relay4_hold_time_counter = 0;

UCHAR max_relay_hold_time_counter = 0;
//定时器T0初始化
void timer0_init(void)
{
	TCCR0  = 0x00;//停止定时器
	TCNT0  = 0x64;//初始值
	//OCR0   = 0x63;//匹配值
	TIMSK |= 0x01;//中断允许
	TCCR0  = 0x05;//启动定时器
   	max_relay_hold_time_counter = relay_hold_time_table[0];

}


//T0溢出中断服务程序
//#pragma interrupt_handler timer0_ovf_isr:10
//void timer0_ovf_isr(void)
SIGNAL(SIG_OVERFLOW0)
{
	static UCHAR last_fun_sel_val = 0;
	UCHAR current_fun_sel_val = 0;
	current_fun_sel_val = ((FUN_SEL_PORT & 0b01100000)>>5);
	if(last_fun_sel_val != current_fun_sel_val)
	{
   		max_relay_hold_time_counter = relay_hold_time_table[current_fun_sel_val];
		last_fun_sel_val = current_fun_sel_val;
	}

	TCNT0 = 0x64;
	//RELAY1
	if(relay1_hold_start_flag == 1)
	{
		relay1_hold_time_counter++;
		if(relay1_hold_time_counter >= max_relay_hold_time_counter)
		{
			relay1_hold_time_counter = 0;
			relay1_hold_start_flag = 0;
			result_out_control(0,FALSE);

		}
	}

	//RELAY2
	if(relay2_hold_start_flag == 1)
	{
		relay2_hold_time_counter++;
		if(relay2_hold_time_counter >= max_relay_hold_time_counter)
		{
			relay2_hold_time_counter = 0;
			relay2_hold_finish_flag = 1;
			relay2_hold_start_flag = 0;
			result_out_control(1,FALSE);

		}
	}

	//RELAY3
	if(relay3_hold_start_flag == 1)
	{
		relay3_hold_time_counter++;
		if(relay3_hold_time_counter >= max_relay_hold_time_counter)
		{
			relay3_hold_time_counter = 0;
			relay3_hold_finish_flag = 1;
			relay3_hold_start_flag = 0;
			result_out_control(2,FALSE);

		}
	}

	//RELAY4
	if(relay4_hold_start_flag == 1)
	{
		relay4_hold_time_counter++;
		if(relay4_hold_time_counter >= max_relay_hold_time_counter)
		{
			relay4_hold_time_counter = 0;
			relay4_hold_finish_flag = 1;
			relay4_hold_start_flag = 0;
			result_out_control(3,FALSE);

		}
	}

}

⌨️ 快捷键说明

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