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

📄 vectors08.c

📁 freescale单片机电子时钟
💻 C
字号:
/*-----------------------------------------------------*
*文件名:vectors08.c                                    *
*功  能:用于定义中断矢量表                             *
*-----------------------------------------------------*/
#include "GP32C.H"
#include "KB.h"
#include "TIME.h"
#include "LCD.h"
/*[相应寄存器定义]*/
#define TSTOPBit   5        //定时器计数停止位
#define TOFBit     7        //定时器溢出标志位
/*isrTIMER1:定时器溢出中断处理函数---------------------*
*功  能:给内存单元Time[0-2](时分秒)赋值                *
*-----------------------------------------------------*/
unsigned char KB_valve;
extern unsigned char time[7];      //H M S
extern unsigned char time1[];
extern unsigned char val;
extern unsigned char val1;
extern unsigned char sign1;
extern unsigned char sign2;
#pragma interrupt_handler isrTIMER1
void isrTIMER1(void)
{
   unsigned char i;
   unsigned int  j;
   val=1;
   asm("SEI");            //关总中断
   //------------------------------
   time[6]++;             //秒数加1
   if (time[6]!=60) goto isrTIMER1_exit; //秒数未增加到60,转
   time[6]=0; time[5]++;  //秒数增加到60,清0,分钟数加1
   if (time[5]!=60) goto isrTIMER1_exit; //分钟数未增到60,转
   time[5]=0; time[4]++;  //分钟数增加到60,清0,小时数加1
   if (time[4]!=24) goto isrTIMER1_exit; //小时数未增到24,转
   time[4]=0; time[3]++;            //时数增加到24,清0
   i=time[2];
   if((time[2]==1)|(time[2]==3)|(time[2]==5)|(time[2]==7)|(time[2]==8)|(time[2]==10)|(time[2]==12))
   {
       if(time[3]!=31) goto isrTIMER1_exit;
       time[3]=0; time[2]++;
   }
    else if((time[2]==2)|(time[2]==4)|(time[2]==6)|(time[2]==9)|(time[2]==11))
   {
       if(time[3]!=30) goto isrTIMER1_exit;
       time[3]=0; time[2]++;
   }
   else
   {
       j=time[0]*100+time[1];
       if(((j%4==0)&&(j%100!=0))|(j%400==0))
       {
         if (time[3]!=29) goto isrTIMER1_exit; 
         time[3]=0; time[2]++;
       }
       else
       {
         if (time[3]!=28) goto isrTIMER1_exit; 
         time[3]=0; time[2]++;
       }
   }
   /*switch(i)
   { 
      case 2:
       j=time[0]*100+time[1];
       if(((j%4==0)&&(j%100!=0))|(j%400==0))
       {
         if (time[3]!=29) goto isrTIMER1_exit; 
         time[3]=0;
         time[2]++;
       }
       else
       {
         if (time[3]!=28) goto isrTIMER1_exit; 
         time[3]=0;
         time[2]++;
       }
     case 4:case 6:case 9:case 11:
       if(time[3]!=30)
       {
         goto isrTIMER1_exit; 
       }
       time[3]=0;
       time[2]++;
       break;
     case 1:case 3:case 5:case 7:case 8:case 10:case 12:
     {
       if(time[3]!=31)
       {
         goto isrTIMER1_exit; 
       }
       time[3]=0;
       time[2]++;
       break;
     }
     default: break;
   }
   */
   if (time[2]!=12) goto isrTIMER1_exit;
   time[2]=0; time[1]++;
   if (time[1]!=99) goto isrTIMER1_exit;
   time[1]=0; time[0]++;
   isrTIMER1_exit:
   T1SC&=~(1<<TOFBit);
   asm("CLI");            //开总中断
}

/*键盘中断处理函数------------------------------------*/
#pragma interrupt_handler isrKBI
void isrKBI(void) 
{
	 
	  asm("SEI");	  	        //关总中断
	  INTKBSCR|= (1<<IntBit); //屏蔽键盘中断(IMASKK=1)
	  //val1=1;	
	  KB_valve=KB_Scan();  //扫描键值
     // SCISend1(KB_valve);
      KB_valve=KB_Def(KB_valve);  //键值转化为定义值
      if(KB_valve=='A')
      {
       sign1=1;
        //SetTime();
      }  
      if(KB_valve=='B')
      {
        //SetAlarmClock();
        sign2=1;
      }  
  
	  KB_Init();			     //重新初始化键盘
	  INTKBSCR&= ~(1<<IntBit); //打开键盘中断(IMASKK=0)
	  asm("CLI");			     //开总中断
}
/*isrRe:接收中断处理函数-------------------------------*
*功  能:接收3字节基准时分秒放入内存单元Time[0-2]       *
*-----------------------------------------------------*/
/*#pragma interrupt_handler isrRe  
void isrRe(void) 
  {
   	asm("SEI");	       //禁止所有中断
        //接收数据
    SCIReN(3,time);
	asm("CLI");        //开放总中断	
  }
//未定义的中断处理函数,本函数不能删除*/
#pragma interrupt_handler isrDummy  
void isrDummy(void) 
{
}
#pragma abs_address:0xffdc    //中断向量表起始地址
void (* const _vectab[])(void) = {            
	isrDummy,   //时基中断 
	isrDummy,	//AD转换中断      
	isrKBI, 	//键盘中断    
	isrDummy,	//SCI TC/TE 
	isrDummy,      //SCI RF/IDLE 
	isrDummy,	//SCI PE/FE/NF/OR
	isrDummy,	//SPI TE  
	isrDummy,	//SPI MOD/OVR/RF
	isrDummy,	//TIM2溢出中断 
	isrDummy,	//TIM2通道1
	isrDummy,	//TIM2通道0
	isrTIMER1,	//TIM1溢出中断      
	isrDummy,	//TIM1通道1
	isrDummy,	//TIM1通道0
	isrDummy,	//CGM     
	isrDummy,	//IRQ     
	isrDummy	//SWI       
    //RESET也是中断,定义在 crt08.o中 
   };
#pragma end_abs_address

⌨️ 快捷键说明

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