设计网站的优势,上海教育网站前置审批,怎样把html文件变成链接,帝国cms转换wordpress最近在搞新唐单片机#xff0c;所以记录下这部分内容。之前的相关文章呵#xff0c;你会51单片机的精确延时吗#xff1f;假如使用者想要产生精确的延迟时间#xff0c;建议使用 __nop() 函数来组合达成。__nop() 函数能够产生 1 个精确的 CPU 频率周期延迟时间。然而… 最近在搞新唐单片机所以记录下这部分内容。之前的相关文章呵你会51单片机的精确延时吗假如使用者想要产生精确的延迟时间建议使用 __nop() 函数来组合达成。__nop() 函数能够产生 1 个精确的 CPU 频率周期延迟时间。然而由于 flash 的速度低于 CPU 的频率速度在 CPU 内部有快取优化的技术编译程序也会自动针对程序做优化造成__nop() 函数组合出来的时间会与预期的时间不同。因此建议将程序代码放置于 SRAM 中执行以避免优化造成的非预期延迟时间问题。 以产生 2 us 的延迟时间为例:(1) CPU 频率 32MHz 1 CPU 频率周期花费 1/32000000 sec 31.25 ns(2) 2 us 延迟时间 2000 ns / 31.25 ns 64 次 CPU 频率周期 1. 于KEIL的项目中加入一个新的.c文件2. 将文件位置指定至SRAM3. 设定 Linker4. 编写延迟程序代码 由于执行一次 for 循环需要花费 5 个 CPU 频率周期的时间因此可以使用以下的方式达到 2 us 的时间延迟 (1) 执行一次 for 循环需要 5 个 CPU 频率周期(2) 执行一次 __NOP() 指令需要 1 个 CPU 频率周期(3) 64 个 CPU 频率周期 8 ( 5 ( for 循环 ) 3 * 1 ( __NOP() ) ) void Delay_Test_Functionvoid
{fori 0; i 8; i / *延迟2微秒。* /{__NOP;__NOP;__NOP;}
}5. 测试使用者可以利用下列程序代码进行延迟时间的测试透过示波器量测 I/O toggle 的时间以观察延迟函数是否精准。由于 CPU 需要下指令让 I/O 转态因此观察到的时间中需要增加转态的指令时间 (PA0 0)。 执行一次 PA 0 需花费 11 CPU 指令周期这意味着 I/O 会持续 (6411) * 31.25 ns 2343.75 ns 的时间才进行转态。 void Delay_Test_Functionvoid
{uint32_t iDelayCNTofCPUClock 8;PA0 1;fori 0; i DelayCNTofCPUClock; i / *延迟2微秒。* /{__NOP;__NOP;__NOP;}PA0 0;
}推荐阅读专辑|Linux文章汇总专辑|程序人生专辑|C语言我的知识小密圈关注公众号后台回复「1024」获取学习资料网盘链接。欢迎点赞关注转发在看您的每一次鼓励我都将铭记于心~