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

📄 delay.c

📁 我做的用lpc2119实现的变电站隔刀动作电流波形采样计算数据上传程序
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               河南恩湃电力技术有限公司
**                                     
**                                         
**
**                                 
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: Delay.C
**创   建   人: 余金仑
**最后修改日期: 
**描        述: 定义定时器和硬延时函数
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 
** 版  本: 
** 日 期: 
** 描 述: 
**

**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#define		_DELAYAPP_GLOBAL_

//文件引用
#include "config.h"

const uint16 cnv_ch[11] = { 0x3000,0x2000,0x1000,0x0000,0x4000,0x5000,0x6000,0x7000,0xb000,0xc000,0xd000 } ;	// 变换通道号与丝印位置一致

typedef	union	_SampleData_
{
	uint16	Word;
	struct	
	{
		uint8	low;	/*低位*/
		uint8	high;	/*高位*/
	}byte;	
}SampleData1,*P_SampleData;

typedef struct _SwitchData_
{
	uint16 time;
	uint8  state;
}lxswitchdata;

//#define Com_Test_Enable
SampleData1 A_Channel_Data[12];                 	//A通道采样数据存放  0:高字节, 1:低字节
SampleData1 B_Channel_Data[12];						//B通道采样数据存放  0:高字节, 1:低字节

extern UINT8		Data_Update;
extern lxswitchdata switch_data[6];
extern uint8 switch_close_flag;
extern uint8 KRScan(void);
extern uint16 timecount;
extern uint8 calc_flag;
extern uint8 uartstep;
uint16  Com1RevTimeOut=0;
uint16 pad;
/**************************************************************************
* 名称:   
* 功能: 定时器0中断

****************************************************************************/
void   __irq IRQ_TIME0(void)
{
	uint16  temp;
	
	if((T0IR&0x01) == 0x01 )             //MR0比较中断
	{
		T0IR = 0x01;					// 清除中断标志 
	}
	
	if(pad <13)
	{
		IO0CLR = SH;
		A_Channel_Data[pad].Word = SPI16(cnv_ch[0]);
		temp=KRScan();
	
		B_Channel_Data[pad].Word = SPI16(cnv_ch[1]);
	
		
		IO0SET = SH;
	}
	else if(pad == 13)
	{
		calc_flag = 0xaa;
	}
	if(uartstep!=0)
	{
		if(Com1RevTimeOut<300)
		{
			Com1RevTimeOut++;
		}
		else
		{
			Com1RevTimeOut=0;
			uartstep=0;
		}
	}
		
	if(pad>23 )
	{
		pad=0;
		calc_flag = 0;
	}
	else
	{
		pad++;
	}	
   VICVectAddr = 0x00;              	// 中断处理结束
}



/**************************************************************************
* 名称:   
* 功能: 定时初始化

****************************************************************************/
void  Time0Init(void)
{   /* Fcclk = Fosc*4 = 11.0592MHz*4 = 44.2368MHz
	   Fpclk = Fcclk/4 = 44.2368MHz/4 = 11.0592MHz
	
	T0PR = 99;			    	// 设置定时器0分频为100分频,得110592Hz
	T0MCR = 0x03;		   		// 匹配通道0匹配中断并复位T0TC
	T0MR0 = 110592;	    		// 比较值(1S定时值)  1s
	T0TCR = 0x03;		   		// 启动并复位T0TC
	T0TCR = 0x01; */
	//T0PR = 36;			    	// 设置定时器0分频为39分频,得110592Hz
	//T0MR0 = 33;	    		// 比较值(1S定时值)  2400次
	T0PR = 3;			//0    	// 设置定时器0分频为100分频,得110592Hz
	T0MR0 = 19999;//18461;//19999;			//1249
	//T0PR = 49;			    	// 设置定时器0分频为100分频,得110592Hz
	//T0MR0 = 26;
	T0MCR = 0x03;		   		// 匹配通道0匹配中断并复位T0TC
	T0TCR = 0x03;		   		// 启动并复位T0TC
	T0TCR = 0x01; 
} 


/**************************************************************************
* 名称:   
* 功能: 定时器0中断

****************************************************************************/
void   __irq IRQ_TIME1(void)
{
   if((T1IR&0x01) == 0x01 )             //MR0比较中断
   {
	    T1IR = 0x01;					// 清除中断标志 
	 	
	 	if((IO0SET & LED1) == LED1)
	 	IO0CLR = LED1;
		else
		IO0SET = LED1;
   		
   }
   timecount++;
   VICVectAddr = 0x00;              	// 中断处理结束
}



/**************************************************************************
* 名称:   
* 功能: 定时初始化

****************************************************************************/
void  Time1Init(void)
{   /* Fcclk = Fosc*4 = 11.0592MHz*4 = 44.2368MHz
	   Fpclk = Fcclk/4 = 44.2368MHz/4 = 11.0592MHz*/
	
	T1PR = 99;			    	// 设置定时器0分频为400分频,得110592Hz
	T1MCR = 0x03;		   		// 匹配通道0匹配中断并复位T0TC
	T1MR0 = 120000;	    		// 比较值(1S定时值)  1s
	T1TCR = 0x03;		   		// 启动并复位T0TC
	T1TCR = 0x01; 
} 


/**************************************************************************
* 名称:   
* 功能: 延时

****************************************************************************/

void  Delay15(void)
{  uint32  di;

  //for(di=0; di<130; di++);   // 126-133
  for(di=0; di<5; di++);   // 126-133
}



/**************************************************************************
* 名称:   
* 功能: 延时

****************************************************************************/
void  Delay5(void)
{  uint32  di;

  //for(di=0; di<43; di++);
  for(di=0; di<10; di++);
}

  

⌨️ 快捷键说明

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