📄 delay.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 + -