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

📄 irq.c

📁 悬挂绘图系统(2005年全国电子设计大赛题目)基于凌阳单片机
💻 C
字号:
//*****************************************************************************/
// 名称: IRQ
// 描述: C中断模块。
// 日期: 2005/03/27
// 版本: 1.0.0
// writer: lishuhai
//*****************************************************************************/

#include "SPCE061V004.h"
//#include "cbit.h"
void initlcm(void);
void SendByte(char dat);
void SendCMD(unsigned char dat);
void SendDat(unsigned char dat);
void display(char *str);
void dis_12232num(long int b);

extern	unsigned int uidata;
extern	unsigned int round;
extern	unsigned int alltime;
unsigned int dataflag=0,Hdata=0,Ldata=0,onedata=0;
//unsigned int twotime=0;
void IRQ1(void) __attribute__ ((ISR));
void IRQ1(void)
{
	 //CPL_Bit(P_IOB_Data,Bit9);      //用来测试中断
	    
	*P_INT_Clear=C_IRQ1_TMA;         	//clear INT flag
}

void IRQ2(void) __attribute__ ((ISR));
void IRQ2(void)
{

   	
   	*P_INT_Clear=0x0400;  
}

void IRQ3(void) __attribute__ ((ISR));
void IRQ3(void)
{
	unsigned int uiDelay;
	if(*P_INT_Ctrl&C_IRQ3_EXT1)
	{                                	//IRQ3_Ext1

	          	
	*P_INT_Clear=C_IRQ3_EXT1;
	}
	else if(*P_INT_Ctrl&C_IRQ3_EXT2)
	{                                	//IRQ3_Ext2

	    
	*P_INT_Clear=C_IRQ3_EXT2;
	}
	else
	{                                	//IRQ3_KeyWakeUp

	
	*P_INT_Clear=C_IRQ3_KEY;
	}
}

void IRQ4(void) __attribute__ ((ISR));
void IRQ4(void)
{
	if(*P_INT_Ctrl&C_IRQ4_1KHz)          //IRQ4_1024HZ
	{                        

   			           
	*P_INT_Clear=C_IRQ4_1KHz;	
	}
	if(*P_INT_Ctrl&C_IRQ4_2KHz)         //IRQ4_2048HZ
	{

	     
	*P_INT_Clear=C_IRQ4_2KHz;
	}
	if(*P_INT_Ctrl&C_IRQ4_4KHz)         //IRQ4_4096HZ
	{

	     
	*P_INT_Clear=C_IRQ4_4KHz;
	}
}

void IRQ5(void) __attribute__ ((ISR));
void IRQ5(void)
{    
	if(*P_INT_Ctrl&0x0004)
	{       
	                         	//IRQ5_2Hz
      alltime=alltime+1;
		
	*P_INT_Clear=0x0004;
	}
	else
	{                               	//IRQ5_4Hz

	
	*P_INT_Clear=0x0008;
	}
}

void IRQ6(void) __attribute__ ((ISR));
void IRQ6(void)
{
	if(*P_INT_Ctrl&0x0001)
	{                                	//TMB2   Time B

			
	*P_INT_Clear=C_IRQ6_TMB2;
	}
	else
	{                                	//TMB1   Time A

			
	*P_INT_Clear=C_IRQ6_TMB1;	
	}
}

void IRQ7(void) __attribute__ ((ISR));
void IRQ7(void)
{ 
    __asm("int off");
    Hdata=UartReadByte();       //接收八位	
    if(dataflag>=1) 
    {
     dataflag=dataflag-1;
     if(dataflag==0)
       {
         Hdata=Hdata&0x00ff;     //屏蔽高位(防错码加入)
         Hdata=Hdata<<8;     
         uidata=Hdata|Ldata;    //高底位相或得最终的16位数
           if(uidata==11)
           {
            round=1;
           }
           *P_Watchdog_Clear=0x0001;
           SendCMD(0x0001);                   //清屏
           SendCMD(0x82);   display("当前坐标值");
		   SendCMD(0x90);   display("X: ");  dis_12232num(uidata); 		      		      
		   SendCMD(0x94);   display("Y: ");  dis_12232num(uidata); 
         
         onedata=0;
       }
     Ldata=Hdata&0x00ff;        //存底位
    }
   if(onedata==0) 
   {
    if(Hdata==0x0055)        //0x0055为标志数 可改(随发送端)
     {
       dataflag=2;
       onedata=1;
     }
	}	
    *P_Watchdog_Clear=0x0001;
    __asm("int irq");

}
//  void IRQ6(void) __attribute__ ((ISR));
//void IRQ6(void)
//{
//	if(*P_INT_Ctrl&0x0001)
//	{	//TMB2
//		g_uiTime2+=1;
//		if(g_uiTime2<=64)				//g_uiTime2=64----0.5 second
//			*P_IOB_Data=0x0000;			
//		else if(g_uiTime2>128)			//g_uiTime2=128-----1 second
//			g_uiTime2=0;
//		else
//			*P_IOB_Data=0x000f;
//		*P_INT_Clear=C_IRQ6_TMB2;
//	}
//	else
//	{	//TMB1
//		g_uiTime1+=1;
//		if(g_uiTime1<=64)				//g_uiTime1=64----1 second
//			*P_IOA_Data=0x0000;
//		else if(g_uiTime1>128)			//g_uiTime1=128---2 second
//			g_uiTime1=0;
//		else
//			*P_IOA_Data=0x000f;
//		*P_INT_Clear=C_IRQ6_TMB1;	
//	}
//}

⌨️ 快捷键说明

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