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

📄 irq.c

📁 2005年全国大学生电子设计竞赛论文集
💻 C
字号:
 #include "spce061v004.h"
#include "main.h"

extern int TimeN,TimePoint,TimeL[200],TimeR[200];				//下一步移动量
extern int Running;
extern int TimeCountL,TimeCountR;

//extern int LMotorV,RMotorV;

unsigned int LTimeOut[4]={0x0009,0x0003,0x0006,0x000c};//{0x000c,0x0006,0x0003,0x0009};
unsigned int RTimeOut[4]={0x0009,0x0003,0x0006,0x000c};//{0x000c,0x0006,0x0003,0x0009};//

//=========================================================================================
//IRQ1
//=========================================================================================
void IRQ1(void) __attribute__ ((ISR));		//定时器A

//1kHz中断,信号发生用
void IRQ1(void)			//1kHz中断,信号发生输出
{
	unsigned int D;
	D=1;
	if(Running==1)
	{
//left节拍
		if(TimeL[TimePoint]>0)
		{
			TimeCountL++;
			if(TimeCountL>3) 
			{
				TimeCountL=0;
//				LMotorV++;
//				if(LMotorV<8)
//				{
//					*P_TimerA_Data=0xfffb+(LMotorV>>1);
//					LMotorV=8;
//				}
			}
//计数器减1
			TimeL[TimePoint]--;
//输出节拍
			D=*P_IOA_Buffer&0xfff0;
			D=D|LTimeOut[TimeCountL];
			*P_IOA_Data=D;		
		}
		else if(TimeL[TimePoint]<0)
		{
			TimeCountL--;
			if(TimeCountL<0)
			{
				TimeCountL=3;
//				LMotorV++;
//				if(LMotorV<8)
//				{
//					*P_TimerA_Data=0xfffb+(LMotorV>>1);
//					LMotorV=8;
//				}
			}

//计数器加1
			TimeL[TimePoint]++;
//输出节拍
			D=*P_IOA_Buffer&0xfff0;
			D=D|LTimeOut[TimeCountL];
			*P_IOA_Data=D;		//片选有效
		}
//right节拍
		if(TimeR[TimePoint]>0)
		{
			TimeCountR++;
			if(TimeCountR>3) 
			{
				TimeCountR=0;
//				LMotorV++;
//				if(LMotorV<8)
//				{
//					*P_TimerA_Data=0xfffb+(LMotorV>>1);
//					LMotorV=8;
//				}
			}
//计数器减1
			TimeR[TimePoint]--;
//输出节拍
			D=*P_IOA_Buffer&0xff0f;
			*P_IOA_Data=D|(RTimeOut[TimeCountR]<<4);		//片选有效
		}
		else if(TimeR[TimePoint]<0)
		{
			TimeCountR--;
			if(TimeCountR<0) 
			{
				TimeCountR=3;
//				LMotorV++;
//				if(LMotorV<8)
//				{
//					*P_TimerA_Data=0xfffb+(LMotorV>>1);
//					LMotorV=8;
//				}
			}
			TimeR[TimePoint]++;
//输出节拍
			D=*P_IOA_Buffer&0xff0f;
			*P_IOA_Data=D|(RTimeOut[TimeCountR]<<4);
		}
		
		if(TimeL[TimePoint]==0)
		{
			D=*P_IOA_Buffer&0xfff0;
			*P_IOA_Data=D;
		}
		
		if(TimeR[TimePoint]==0)
		{
			D=*P_IOA_Buffer&0xff0f;
			*P_IOA_Data=D;
		}
		
		if((TimeL[TimePoint]==0)&&(TimeR[TimePoint]==0))
			Running=2;
	}
	*P_INT_Clear=C_IRQ1_TMA; //clear INT flag
}

⌨️ 快捷键说明

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