📄 delay.h
字号:
/***************************************************************************
延时程序模块
本延时模块采用T2作为定时器,可提供中断定时和非中断定时两种定时方式。
使用延时模块要注意三个问题:
1、 一定要在项目的main.h文件中正确定义振荡器频率OSC_FEQ,如:
#define OSC_FREQ 22118400L
要注意所用单片机的指令周期与晶振主频问题,
例如晶振频率为11.0592MHz,若指令周期为6clock,则必须定义成:22118400L;
若指令周期为12clock,则必须定义成:11059200L。
2、 在delay.h文件中定义所需要使用的功能函数。
3、本模块已应用于MFRC500程序模块,若要修改使用必须小心行事。
***************************************************************************/
#ifdef delay_GLOBALS
#define delay_EXT
#else
#define delay_EXT extern
#endif
//define function enable
#ifdef delay_GLOBALS
#define delay_50us_en 0
#define delay_1ms_en 0
#define delay_10ms_en 0
#define T2int_timeout_en 1
#define delay_T0_en 0
#endif
//delay_EXT INT8U RC500_overcnt; // 必须为每个需要延时的对象定义一个超时计数器
#define COMMFLASHTM 10
// Timer 2 (modify OSC_FREQ if another crystal frequency is used)
//必须在主函数头文件中定义晶振频率
#define RCAP2_50us 65536L - OSC_FREQ/240417L
#define RCAP2_1ms 65536L - OSC_FREQ/12021L
#define RCAP2_5ms 65536L - OSC_FREQ/2400L
#define RCAP2_10ms 65536L - OSC_FREQ/1200L
sfr16 RCAP2LH = 0xCA;
sfr16 T2LH = 0xCC;
delay_EXT void delay_50us(INT8U _50us);
delay_EXT void delay_1ms(INT16U _1ms);
delay_EXT void delay_10ms(INT16U _10ms);
delay_EXT void T2_timeout_init(INT16U resolution);
delay_EXT void delay_T0(INT16U _T0HL);
//定义T0定时时间
#define T0HL_100us 65536L - OSC_FREQ/120000L
#define T0HL_1ms 65536L - OSC_FREQ/12000L
#define T0HL_3ms 65536L - OSC_FREQ/4000L
#define T0HL_10ms 65536L - OSC_FREQ/1200L
//delay_EXT void stop_timeout(void);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -