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

📄 delay.c

📁 RC5000读卡芯片和LPC213X的源码参考程序 内含详细说明
💻 C
字号:
/*
*********************************************************************************************************
**							延时程序模块
**
** 本延时模块采用定时器1作为定时器,可提供中断定时和非中断定时两种定时方式。
** 需要在delay.h文件中定义所需要使用的功能函数。
*********************************************************************************************************
*/

#include "config.h"

/*
*********************************************************************************************************
** 函数名称:Timer1_IRQ()
** 函数功能:定时器1中断服务程序
*********************************************************************************************************
*/
#if T1int_timeout_en
void __irq Timer1_IRQ(void)
{
	if(SerTmOut)
		SerTmOut--;
		
	if(WAITRESPDLY)
		WAITRESPDLY--;

	T1IR = 0x01;			// 清除定时器1中断标志
	VICVectAddr = 0x00;		// 更新硬件优先级
}

/*
*********************************************************************************************************
** 函数名称:Timer1_timeout_init()                                                 
** 函数功能: 定时器1初始化
** 输入参数:resolution
**			 if resolution = Delay_50us,then 定时器每50us中断一次   
**           if resolution = Delay_5ms,then 定时器每5ms中断一次 
**    		 if resolution = Delay_10ms,then 定时器每10ms中断一次                                                          
** 输出参数: 无	 
*********************************************************************************************************
*/
void Timer1_timeout_init(uint16 resolution)
{
	/* 定时器1初始化 */
	T1TCR = 0x00;				// 关闭定时器1
	T1TC  = 0x00;				// TC设置为0
	T1PR  = 0x00;				// 时钟不分频
	T1MCR = 0x03;				// 设置T1MR0匹配后复位T1TC,并产生中断标志
	T1MR0 = Fpclk/resolution;	// 设置定时时间
	T1TCR = 0x03;				// 复位并启动定时器   // 必须要复位!!!
	
	/* 设置定时器1中断 */
	VICIntSelect = 0x00;				// 设置为IRQ中断
	VICVectCntl1 = 0x20|0x05;			// 设置优先级
	VICVectAddr1 = (uint32)Timer1_IRQ;	// 设置中断服务程序地址
	VICIntEnable = 1 << 0x05;			// 使能定时器1
}
#endif


/*
*********************************************************************************************************
** 函数名称:delay_T0()
** 函数功能:定时器延时
** 函数说明:延时时间 (1/delay) 秒
*********************************************************************************************************
*/
#if delay_T0_en
void delay_T0(uint16 delay)
{
	/* 定时器0设置 */
	T0TCR = 0x00;				// 关闭定时器0
	T0TC  = 0x00;				// TC设置为0
	T0PR  = 0x00;				// 时钟不分频
	T0MCR = 0x03;				// 设置T0MR0匹配后复位T0TC,并产生中断标志
	T0MR0 = Fpclk/delay;		// 设置定时时间
	T0TCR = 0x03;				// 复位并启动定时器   // 必须要复位!!!
	
	while((T0IR & 0x01) == 0);	// 等待定时器0中断标志置位
	T0IR = 0x01;				// 清除定时器0中断标志
}
#endif

/*
*********************************************************************************************************
** 函数名称:delay_50us()
** 函数功能:定时器延时
** 函数说明:延时时间 _50us*50us
*********************************************************************************************************
*/
#if delay_50us_en
void 	delay_50us (uint8 _50us)
{
	/* 定时器0设置 */
	T0TCR = 0x00;				// 关闭定时器0
	T0TC  = 0x00;				// TC设置为0
	T0PR  = 0x00;				// 时钟不分频
	T0MCR = 0x03;				// 设置T0MR0匹配后复位T0TC,并产生中断标志
	T0MR0 = Fpclk/Delay_50us;	// 设置定时时间
	T0TCR = 0x03;				// 复位并启动定时器   // 必须要复位!!!
	
	while((T0IR & 0x01) == 0);	// 等待定时器0中断标志置位
	T0IR = 0x01;				// 清除定时器0中断标志
}
#endif

/*
*********************************************************************************************************
** 函数名称:delay_50us()
** 函数功能:定时器延时
** 函数说明:延时时间 _1ms*1ms
*********************************************************************************************************
*/
#if delay_1ms_en
void 	delay_1ms (uint16 _1ms)
{
	/* 定时器0设置 */
	T0TCR = 0x00;				// 关闭定时器0
	T0TC  = 0x00;				// TC设置为0
	T0PR  = 0x00;				// 时钟不分频
	T0MCR = 0x03;				// 设置T0MR0匹配后复位T0TC,并产生中断标志
	T0MR0 = Fpclk/Delay_1ms;	// 设置定时时间
	T0TCR = 0x03;				// 复位并启动定时器   // 必须要复位!!!
	
	while((T0IR & 0x01) == 0);	// 等待定时器0中断标志置位
	T0IR = 0x01;				// 清除定时器0中断标志
}
#endif

/*
*********************************************************************************************************
** 函数名称:delay_50us()
** 函数功能:定时器延时
** 函数说明:延时时间 _10ms*10ms
*********************************************************************************************************
*/
#if delay_10ms_en
void 	delay_10ms (uint16 _10ms)
{
	/* 定时器0设置 */
	T0TCR = 0x00;				// 关闭定时器0
	T0TC  = 0x00;				// TC设置为0
	T0PR  = 0x00;				// 时钟不分频
	T0MCR = 0x03;				// 设置T0MR0匹配后复位T0TC,并产生中断标志
	T0MR0 = Fpclk/Delay_10ms;	// 设置定时时间
	T0TCR = 0x03;				// 复位并启动定时器   // 必须要复位!!!
	
	while((T0IR & 0x01) == 0);	// 等待定时器0中断标志置位
	T0IR = 0x01;
}
#endif

⌨️ 快捷键说明

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