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