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

📄 int_serv.c

📁 MEGA32L 单片机的按键,LED,LCD等测试例程,ICCAVR编译器
💻 C
字号:
//======================================
//INT0/INT1输出模块头文件
//FileName =int_serv.c
//Date Time=20071229
//======================================
#include "int_serv.h"
#include "key_switch.h"			//进行按键扫描计数器的操作

//--------------------------------------
//INT0中断初始化
//外部使用PUD=0允许使用上拉电阻!
//--------------------------------------
void	init_extern_int0_sets(void)
{
	DDRD	&= ~BIT(HD_28J60_INT_INT0);		//INT0输入
	PORTD	|= BIT(HD_28J60_INT_INT0);		//使用上拉电阻
	
//设置INT0为上/下沿中断
	GICR	&=~BIT(INT0);				//禁止中断
	MCUCR	&= ~BIT(ISC01);				//ISC01/00 =01,上下沿触发中断 	      
	MCUCR	|= BIT(ISC00);	
	GIFR	|= BIT(INTF0);				//清除中断
//	GICR	|= BIT(INT0);				//允许中断	
}


//......................................
//初始化INT1
//使用 下升沿 触发中断
//外部PUD=0允许使用上拉电阻
//......................................
void	init_extern_int1_sets(void)
{
	DDRD	&= ~BIT(HD_28J60_WOL_INT1);		//输入
	PORTD	|= BIT(HD_28J60_WOL_INT1);		//高阻

	GICR	&=~BIT(INT1);				//禁止中断	
	MCUCR	&= ~BIT(ISC11);				//ISC11/10 =01,INT1上升/下降沿触发
	MCUCR	|= BIT(ISC10);		
	GIFR	|= BIT(INTF1);				//清除中断标志
//	GICR	|= BIT(INT1);				//允许中断	
}


//--------------------------------------
//Timer0定时的初始化
//--------------------------------------
void	init_timer0_and_timer1_sets(void)
{	
//Timer0 初始化
	CODE_STOP_TIME0;
	TIFR	|= ( BIT(OCF0) |BIT(TOV0) );		//清除中断标志 
	TIMSK	&= ~BIT(OCIE0);				//禁止匹配中断
	TIMSK	|= BIT(TOIE0);				//允许定时溢出中断
	SFIOR	|= BIT(PSR10);				//复位Timer1/0分频器
	TCNT0	=CONST_UINT_TIMER0_RELOAD_VALUE;	//定时器0的初始值
/*
//Timer1 初始化
	CODE_STOP_TIME1;
	TIFR	|= ( BIT(OCF1) |BIT(TOV1) );		//清除中断标志 
	TIMSK	&= ~BIT(OCIE1);				//禁止匹配中断
	TIMSK	|= BIT(TOIE1);				//允许定时溢出中断
	SFIOR	|= BIT(PSR10);				//复位Timer1/0分频器
	TCNT1	=CONST_UINT_TIMER0_RELOAD_VALUE;	//定时器0的初始值
*/
}


//--------------------------------------
//INT0中断服务函数,中断标志硬件自动清除
//输入:
//--------------------------------------
void	_irq_int0_server(void)
{
uchar sreg_bak;
	sreg_bak =SREG;

//用户程序段
		
	SREG =sreg_bak;
}

//--------------------------------------
//INT1中断服务函数,中断标志硬件自动清除
//输入:
//--------------------------------------
void	_irq_int1_server(void)
{
uchar sreg_bak;
	sreg_bak =SREG;

//用户程序段
		
	SREG =sreg_bak;
}


//--------------------------------------
//Timer0中断服务函数[中断周期1024us]
//中断标志硬件自动清除
//进行按键扫描定时计数器操作
//输入:
//	按键扫描计数器:
//			byte_key_delay_time		按键时间,单位:ms
//--------------------------------------
void _irq_timer0_over_server(void)
{
static uchar inner_delay_count =0;
static uchar inner_time_count =0;
uchar sreg_bak;

	sreg_bak =SREG;
	TCNT0	=CONST_UINT_TIMER0_RELOAD_VALUE;	//定时器0的初始值
	
//按键扫描计数器
	if(st_judge_key.byte_key_delay_time !=0)
	{
		st_judge_key.byte_key_delay_time --;
	}
	

//最后恢复状态寄存器
	SREG =sreg_bak;	
}

	
//End Of File

⌨️ 快捷键说明

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