📄 int_serv.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 + -