?? 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 + -