📄 isr.c
字号:
/***************************************************************************************************
*
*文件说明:
*中断处理
*
***************************************************************************************************/
/***************************************************************************************************
*
*文件名 :isr.c
*版本 :V0.1
*创建日期 :2006.7.5
*创建者 :程超
*
*最后修改日期 :
*修改者 :
*修改原因及内容 :
*
***************************************************************************************************/
#include "includes.h"
/***************************************************************************************************
*
*功能描述 :中断处理程序
*输入参数 :无
*返回值 :无
*
***************************************************************************************************/
void interrupt ISR(void)
{
uint8 x;
if(RBIF==1) //RB4~7口电平变化中断发生
{
x=PORTB;
RBIF=0;
if(handleState==NOP_STATE)
{
if(LOGIN_KEY==LOGIN_KEY_ON)
{
handleState=LOGIN_STATE; //请求登录
}
else if(DEL_KEY==DEL_KEY_ON)
{
handleState=DEL_STATE; //请求删除所有登录用户
}
else if(OPEN_KEY==OPEN_KEY_ON)
{
handleState=OPEN_STATE; //请求开门
}
else
{
nop();
}
}
}
else if(INTF==1) //RB0/INT中断发生
{
INTF=0;
if(handleState==NOP_STATE)
{
handleState=CLOSE_STATE; //请求关门
}
}
else if(RCIF==1) //处理串口数据接收中断,RCIF为只读标志位,由硬件清零
{
if(OERR==1) //进行溢出错误处理
{
receiveData[receiveNum]=RCREG;
receiveData[receiveNum]=RCREG;
CREN=0;
CREN=1;
}
else if(FERR==1) //帧错误处理
{
receiveData[receiveNum]=RCREG;
CREN=0;
CREN=1;
}
else
{
receiveData[receiveNum]=RCREG;
if(receiveNum==0)
{
if(receiveData[receiveNum]==ACK)
{
receiveAck=true;
ackType=true;
}
else
{
if(receiveData[receiveNum]==NAK)
{
receiveAck=true;
ackType=false;
}
}
}
if(receiveData[receiveNum]==STX) //检查是否是一帧数据的开始
{
receiveData[0]=STX;
receiveNum=1;
}
else
{
receiveNum++;
}
if(receiveNum>3)
{
if(receiveData[receiveNum-2]==ETX) //检查是否收到一帧数据的最后一个数据
{
if((receiveData[1]==CHAR_S) && (receiveData[2]==CHAR_I))
{
while(TXIF==0);
TXREG=ACK;
}
else
{
receiveCmd=true;
}
receiveNum=0;
}
}
if(receiveNum>=40) receiveNum=0; //防止收到的字符是否超出接收buffer范围
}
}
else
{
nop();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -