📄 interrupt.c
字号:
/*************************Copyright (c)*****************************************
** 科大七星工作室
** QQ:285277300
** shirenwei2003@163.com
**--------------文件信息--------------------------------------------------------
**文 件 名: interrupt.c
**最后修改日期: 2008年4月1日
**最后的版本号: V1.0
**硬件电路说明: AVR Mega64单片机中断服务程序代码
**描 述: 外部中断6,7.定时器0,1中断服务子程序
**
**--------------历史版本信息----------------------------------------------------
** 创建人:
** 版 本: V1.0
** 日 期:
** 描 述: 原始版本
**
**------------------------------------------------------------------------------
**--------------当前版本修订----------------------------------------------------
** 修改人:
** 日 期:
** 描 述:
** 备 注:
**
**----------------------------------------------------------------------------*/
#define INTERRUPT
#include "include.h"
signed int CurTime=0,OldTime=0,NewTime=0;
signed int CurTime100Ms=0;//100ms定时决数器
unsigned long Wg26bit=0,Wg26bitTemp=0;
unsigned char WgCount=0;
unsigned char NewCarFlag=0;
unsigned char buf[3];//韦根数据(中间24位)
unsigned char wgeven=0;//韦根偶校验
unsigned char wgodd=0;//韦根奇校验
unsigned char flag200ms=0;
unsigned char flag500ms=0;
/*******************************************************************************
** 函数名称: void int6_isr(void)
** 输 入: 无
** 输 出: 无
** 全局变量: buf[3]
** 功能描述: 外部中断6服务函数,和中断7共同实现韦根26的数据接收.
** 作 者: 侍任伟
** 日 期: 2008年4月1日
**------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------
*******************************************************************************/
#pragma interrupt_handler int6_isr:iv_INT6
void int6_isr(void)
{
if(WgCount==0)
{
//OldTime = CurTime;
Wg26bit = Wg26bit | 0x01;
Wg26bit = Wg26bit<<1;
WgCount++;
}
else if(WgCount>0 && WgCount<26)
{
Wg26bit = Wg26bit | 0x01;
WgCount++;
if(WgCount==26)
{
Wg26bitTemp = Wg26bit;
Wg26bit = 0;
WgCount = 0;
wgeven = (Wg26bitTemp>>25) & 0xff;//韦根偶校验
buf[0] = (Wg26bitTemp>>17) & 0xff;
buf[1] = (Wg26bitTemp>>9) & 0xff;
buf[2] = (Wg26bitTemp>>1) & 0xff;
wgodd = (Wg26bitTemp) & 0xff;//韦根奇校验
NewCarFlag = 1;//有新刷卡记录
}
else
Wg26bit = Wg26bit<<1;
}
else
{
WgCount=0;
Wg26bit=0;
}
}
/*******************************************************************************
** 函数名称: void int7_isr(void)
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 功能描述: 外部中断7服务函数,和中断6共同实现韦根26的数据接收.
** 作 者: 侍任伟
** 日 期: 2008年4月1日
**------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------
*******************************************************************************/
#pragma interrupt_handler int7_isr:iv_INT7
void int7_isr(void)
{
if(WgCount==0)
{
Wg26bit = Wg26bit & 0xfe;
Wg26bit = Wg26bit<<1;
WgCount++;
}
else if(WgCount>0 && WgCount<26)
{
Wg26bit = Wg26bit & 0x3fffffe;
WgCount++;
if(WgCount==26)
{
Wg26bitTemp = Wg26bit;
Wg26bit = 0;
WgCount = 0;
wgeven = (Wg26bitTemp>>25) & 0xff;//韦根偶校验
buf[0] = (Wg26bitTemp>>17) & 0xff;
buf[1] = (Wg26bitTemp>>9) & 0xff;
buf[2] = (Wg26bitTemp>>1) & 0xff;
wgodd = (Wg26bitTemp) & 0xff;//韦根奇校验
NewCarFlag = 1;//有新刷卡记录
}
else
Wg26bit = Wg26bit<<1;
}
else
{
WgCount=0;
Wg26bit=0;
}
}
/*******************************************************************************
** 函数名称: void timer0_init(void)
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 功能描述: 定时器0初始化,11.059晶体,定时100(99.8)uS.
** 作 者: 侍任伟
** 日 期: 2008年4月1日
**------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------
*******************************************************************************/
void timer0_init(void)
{
TCCR0 = 0x00; //stop
ASSR = 0x00; //set async mode
TCNT0 = 0x76; //set count
OCR0 = 0x8A;
TCCR0 = 0x02; //start timer
}
/*******************************************************************************
** 函数名称: void timer0_init(void)
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 功能描述: 定时器1初始化,11.059晶体,定时100(99.9)mS.
** 作 者: 侍任伟
** 日 期: 2008年4月1日
**------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------
*******************************************************************************/
void timer1_init(void)
{
TCCR1B = 0x00; //stop
TCNT1H = 0xBC; //setup
TCNT1L = 0x81;
OCR1AH = 0x43;
OCR1AL = 0x7F;
OCR1BH = 0x43;
OCR1BL = 0x7F;
OCR1CH = 0x43;
OCR1CL = 0x7F;
ICR1H = 0x43;
ICR1L = 0x7F;
TCCR1A = 0x00;
TCCR1B = 0x03; //start Timer
}
/*******************************************************************************
** 函数名称: void timer0_ovf_isr(void)
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 功能描述: 定时器0中断服务,11.059晶体,定时100(99.8)uS.
** 作 者: 侍任伟
** 日 期: 2008年4月1日
**------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------
*******************************************************************************/
#pragma interrupt_handler timer0_ovf_isr:17//iv_TIM0_OVF
void timer0_ovf_isr(void)
{
TCNT0 = 0x76; //reload counter value
CurTime++;
//putStr(1, "\r\n000\r\n", 100);
}
/*******************************************************************************
** 函数名称: void timer1_ovf_isr(void)
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 功能描述: 定时器1服务函数,11.059晶体,定时100(99.9)mS.
** 作 者: 侍任伟
** 日 期: 2008年4月1日
**------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------
*******************************************************************************/
unsigned char CntTem200ms=0;
unsigned char CntTem500ms=0;
#pragma interrupt_handler timer1_ovf_isr:15//iv_TIM1_OVF
void timer1_ovf_isr(void)
{
TCNT1H = 0xBC; //reload counter high value
TCNT1L = 0x81; //reload counter low value
CntTem200ms++;
CntTem500ms++;
CurTime100Ms++;
if(CntTem200ms==1)
{
flag200ms = 1;
}
if(CntTem500ms==4)
{
flag500ms = 1;
}
}
/*******************************************************************************
** 函数名称: void GetTime(void)
** 输 入: 无
** 输 出: 无
** 全局变量: CurTime-当前时间计数值
** 功能描述: 得到系统当前时间计数器值.
** 作 者: 侍任伟
** 日 期: 2008年4月1日
**------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------
*******************************************************************************/
signed int GetTime(void)
{
return CurTime;
}
/*******************************************************************************
** 函数名称: void GetTime(void)
** 输 入: 无
** 输 出: 无
** 全局变量: CurTime100ms-当前时间计数值单位:100ms
** 功能描述: 得到系统当前时间计数器值.
** 作 者: 侍任伟
** 日 期: 2008年4月1日
**------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------
*******************************************************************************/
signed int GetTimeN100ms(void)
{
return CurTime100Ms;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -