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

📄 isr.c

📁 通过调试的保险柜程序,包含通讯,中断,蜂鸣器,RS232通讯.
💻 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 + -