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

📄 vectors08.c

📁 使用RC531读卡芯片读取二代身份证的模块软件设计部分
💻 C
字号:
//[vectors08.c]用于定义中断矢量表------------------------------------------*
//本文件包含:                                                              *
//    (1)isrKeyBoard   : 键盘中断处理函数(SPI从机选择)                     *
//    (2)isrDummy      : 未定义的中断处理函数                              *
//    (3)中断矢量表                                                        *
//-------------------------------------------------------------------------*
//[头文件]
#include "JB8C.H"        //JB8映像寄存器名定义
#include "SPI.h"         //SPI函数头文件
#include "Type.h"        //类型别名定义
#include "EnDisInt.h"    //开放或禁止MCU各模块中断的宏定义
#include "LED.h"         //该头文件中包含了LED驱动函数声明

//变量
INT8U i;
INT8U SPI0redata ;       //SPI0模块当前接收数据    
INT8U SPI0snddata;       //SPI0模块当前发送数据
//外部变量
extern   INT8U Card_inform[11];    //存储电子标签UID信息
 
//isrKeyBoard:键盘中断处理函数---------------------------------------------*
//功能:响应SPI主机的从机选择信号,根据前一次接收的数据,发送相应的读写模块 *
//     获取的电子标签UID信息                                               *
//调用函数:                                                                *
//    (1)DisableMCUint : 关总中断                                          *
//    (2)DisableKBint  : 屏蔽键盘中断                                      *
//    (3)SPI0SLAVECOM  : SPI0从机通信子函数                                *
//    (4)EnableKBint   : 开放键盘中断                                      *
//    (5)EnableMCUint  : 开总中断                                          *
//-------------------------------------------------------------------------*
#pragma interrupt_handler isrKeyBoard
void isrKeyBoard(void)  
{
    //static INT8U SPI0redata ;    //SPI0模块当前接收数据    
    //static INT8U SPI0snddata;    //SPI0模块当前发送数据
    
    
    DisableMCUint();    //关总中断
    DisableKBint() ;    //屏蔽键盘中断

    //调用SPI0从机通信函数
    //接收的数据为下次要发送的Card_inform数组下标值
    SPI0redata = SPI0SLAVECOM(SPI0snddata);
    if((SPI0redata >= 0) && (SPI0redata < 11))
    {
        SPI0snddata = Card_inform[SPI0redata];
    }
    else if(SPI0redata == 11)
    {
        LED_Spark(2, 'S');               //运行指示灯短闪烁一次,表明读卡成功
       
        Card_inform[0]='A';
        for(i = 1; i < 11; i++)
            Card_inform[i] = 0;
        
        SPI0snddata = Card_inform[0];
    }else
    {
        SPI0snddata = Card_inform[0];
    }
    
    KBSCR |= (1 << 2);  //清除键盘中断请求(ACKK = 1)
 
    EnableKBint() ;     //开放键盘中断
    EnableMCUint();     //开总中断
}

//未定义的中断处理函数,本函数不能删除
#pragma interrupt_handler isrDummy  
void isrDummy(void) 
{
}
  
//中断矢量表,需定义中断函数,可修改下表中的相应项目
//(interrupt service routine,isr 中断处理程序)
#pragma abs_address:0xfff0    //中断向量表起始地址
void (* const _vectab[])(void) = {            
	isrKeyBoard,    //键盘中断
	isrDummy,		//TIM溢出中断
	isrDummy, 	    //TIM1通道1    
	isrDummy,		//TIM1通道0
	isrDummy,		//IRQ
	isrDummy,		//USB
	isrDummy		//SWI       
    //RESET也是中断,定义在 crt08.o中 
   };
#pragma end_abs_address      

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -