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

📄 vectors08.c

📁 摩托罗拉的时钟的原代码
💻 C
字号:
/*-----------------------------------------------------*
*文件名:vectors08.c                                    *
*功  能:用于定义中断矢量表                             *
*-----------------------------------------------------*/
#include "GP32C.H"
#include "KB.h" 

/*[相应寄存器定义]*/
#define TSTOPBit   5        //定时器计数停止位
#define TOFBit     7        //定时器溢出标志位
//外部变量
extern unsigned char time[14];   //存放时钟年、月、日、时、分、秒
extern unsigned char Ttime[3];   //存放时钟时、分、秒
extern int Tdate[3];             //存放时钟年、月、日
extern unsigned char Key;        //存放按下键的定义值
extern void Changetime(int temp1[],unsigned char temp2[]);  //将数组temp1拆分存储到数组temp2
/*isrTIMER1:定时器溢出中断处理函数---------------------*
*功  能:给内存单元Time[0-2](时分秒)赋值                *
*-----------------------------------------------------*/

#pragma interrupt_handler isrTIMER1
void isrTIMER1(void)
{
   unsigned char i;
   asm("SEI");            //关总中断
   //------------------------------
   Ttime[2]++;             //秒数加1
   if (Ttime[2]!=60) goto isrTIMER1_exit; //秒数未增加到60,转
   Ttime[2]=0; Ttime[1]++;  //秒数增加到60,清0,分钟数加1
   if (Ttime[1]!=60) goto isrTIMER1_exit; //分钟数未增到60,转
   Ttime[1]=0; Ttime[0]++;  //分钟数增加到60,清0,小时数加1
   if (Ttime[0]!=24) goto isrTIMER1_exit; //小时数未增到24,转
   Ttime[0]=0; Tdate[2]++;            //时数增加到24,清0
   if(Tdate[1]==1||Tdate[1]==3||Tdate[1]==5||Tdate[1]==7||
      Tdate[1]==8||Tdate[1]==10||Tdate[1]==12)
    { if(Tdate[2]<=31) goto isrTIMER1_exit;
      Tdate[2]=0;Tdate[1]++;
    }
   if(Tdate[1]==2&&(Tdate[0]%4==0&&Tdate[0]%100!=0||Tdate[0]%400==0)) 
    { if(Tdate[2]<=29) goto isrTIMER1_exit;
      Tdate[2]=0;Tdate[1]++;
    }
   if(Tdate[1]==2||Tdate[1]==4||Tdate[1]==6||Tdate[1]==9||Tdate[1]==11)
    { if(Tdate[2]<=30) goto isrTIMER1_exit;
      Tdate[2]=0;Tdate[1]++;
    }
   if(Tdate[1]<=12) goto isrTIMER1_exit;
   Tdate[1]=0;Tdate[0]++;
   if(Tdate[0]<=10000) goto isrTIMER1_exit;
   Tdate[0]=0;
   isrTIMER1_exit:	 
   //------------------------------
   //清除定时器溢出标志位
   Changetime((int *)Tdate,(unsigned char *)Ttime);
   T1SC&=~(1<<TOFBit);
   
   asm("CLI");            //开总中断
}
/*键盘中断处理函数------------------------------------*/
#pragma interrupt_handler isrKBI
void isrKBI(void) 
{
	 unsigned char KB_valve;
	 asm("SEI");	  	        //关总中断
	 INTKBSCR|= (1<<IntBit); //屏蔽键盘中断(IMASKK=1)
	 KB_valve=KB_Scan();     //扫描键值
	 Key=KB_Def(KB_valve);           //获得键定义值
	 KB_Init();			     //重新初始化键盘
	 INTKBSCR&= ~(1<<IntBit); //打开键盘中断(IMASKK=0)
	 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 + -