对项目进行了修改,把delay.h和delay.c放入了COMM文件夹中。
main.c改成了
- #include "./COMM/stc.h"
- #include "./COMM/delay.h"
-
- #define MAIN_Fosc 24000000UL
-
- void sys_init();
- //void Delay500ms(void);
-
- void main(void)
- {
- sys_init();
- Delay500ms();
- while(1){
- //codes
- }
- }
- void sys_init()
- {
- WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
- EAXFR = 1; //扩展寄存器(XFR)访问使能
- CKCON = 0; //提高访问XRAM速度
- P_SW2 |= 0x80; //B7位写1,使能访问XFR
- P0M1 = 0x00; P0M0 = 0x00;
- P1M1 = 0x00; P1M0 = 0x00;
- P2M1 = 0x00; P2M0 = 0x00;
- P3M1 = 0x00; P3M0 = 0x00;
- P4M1 = 0x00; P4M0 = 0x00;
- P5M1 = 0x00; P5M0 = 0x00;
- P6M1 = 0x00; P6M0 = 0x00;
- P7M1 = 0x00; P7M0 = 0x00;
- }
- //void Delay500ms(void) //@24.000MHz
- //{
- // u32 i;
-
- // _nop_();
- // _nop_();
- // i = 2999998UL;
- // while (i) i--;
- //}
复制代码
COMM/delay.h内容
- // delay.h
- #ifndef __DELAY_H
- #define __DELAY_H
-
- // ============= 调用头文件 =============
- // 本模块不需要额外的头文件,因为它只定义了一个函数
- // 如果其他模块需要使用STC32G的寄存器,才需要包含"stc32g.h"
- // #include "stc32g.h" // 此处不需要
-
-
- // ============= 宏定义 =============
- // 定义主时钟频率,方便在不同频率下调整延时参数
- // 注意:如果在其他文件中也需要这个宏,可以将其移到一个公共的config.h文件中
- #define MAIN_Fosc 24000000UL
-
-
- // ============= 函数声明 =============
- // 声明延时函数,供其他模块调用
- void Delay500ms(void);
-
- // 如果以后增加其他延时函数,也在这里声明
- // void DelayMs(unsigned int ms); // 例如:毫秒级延时
- // void DelayUs(unsigned int us); // 例如:微秒级延时
-
- #endif // __DELAY_H
复制代码
COMM.delay.c内容
- // delay.c
- // ============= 包含头文件 =============
- #include "delay.h" // 必须首先包含对应的头文件
- #include "stc32g.h" // 因为函数体内使用了_nop_()指令,需要包含STC32G的头文件
-
-
- // ============= 函数定义 =============
- /**
- * @brief 延时函数,基于24MHz时钟,延时约500毫秒
- * @param void
- * @retval void
- */
- void Delay500ms(void)
- {
- // 定义一个无符号长整型变量i作为循环计数器
- // 去掉 'edata' 关键字,使用默认存储类型,更标准、更高效
- unsigned long i;
-
- // 执行两条空指令,用于微调延时时间
- _nop_();
- _nop_();
-
- // 设置循环次数,该数值是根据目标延时和时钟频率计算得出的
- i = 2999998UL;
-
- // 通过一个空的while循环消耗CPU时钟周期,从而实现延时
- while (i--)
- {
- ; // 空语句
- }
- }
-
- // 如果在delay.h中声明了其他函数,它们的定义也写在这里
- // void DelayMs(unsigned int ms) { ... }
- // void DelayUs(unsigned int us) { ... }
复制代码
记得把delay.c也add进入项目,编译通过
|