建立延时子函数,使用T0完成ms级精确延时
时间: 2023-07-11 21:49:02 浏览: 36
好的,下面是使用T0实现ms级延时的代码示例:
```c
void delay_ms(unsigned int ms)
{
unsigned int i, j;
for (i = 0; i < ms; i++)
{
for (j = 0; j < 114; j++) // 循环114次,大概延时1ms
{
TH0 = (65536 - 1000) / 256; // 定时器初值
TL0 = (65536 - 1000) % 256;
TR0 = 1; // 启动定时器
while (!TF0); // 等待定时器溢出
TF0 = 0; // 清除定时器溢出标志
TR0 = 0; // 关闭定时器
}
}
}
```
在这个函数中,我们使用了一个嵌套的循环来实现多次1ms的延时。每次循环的内层循环会在T0定时器溢出时等待,并清除溢出标志,以达到1ms的精度。外层循环则重复多次内层循环,以实现指定的延时时间。
需要注意的是,这个函数中使用了T0定时器,因此在调用函数前需要先初始化T0定时器的工作模式、预分频器、中断等设置。同时,还需要根据具体的芯片型号和晶振频率,调整定时器初值以实现1ms的精度。
相关问题
建立延时子函数,使用T0完成ms级精确延时
好的,以下是使用T0完成ms级精确延时的代码示例:
```c
#include <reg52.h>
void delay(unsigned int ms) // 定义延时函数
{
unsigned int i, j;
for (i = 0; i < ms; i++) {
for (j = 0; j < 114; j++) { // 经过测试,114次循环大约是1ms
TH0 = (65536 - 1000) / 256; // 计时器初值,1000表示1ms
TL0 = (65536 - 1000) % 256;
TR0 = 1; // 启动计时器
while (!TF0); // 等待计时器溢出
TR0 = 0; // 停止计时器
TF0 = 0; // 清除溢出标志
}
}
}
void main()
{
while (1) {
P1 = 0x55; // P1口输出0x55,持续1秒钟
delay(1000);
P1 = 0xAA; // P1口输出0xAA,持续1秒钟
delay(1000);
}
}
```
在上面的代码中,我们使用了定时器0来实现精确延时。具体实现方法是:将计时器0的初值设置为65536-1000,表示延时1ms,然后启动计时器0,等待计时器溢出,计时器溢出的时间就是实际延时的时间。由于计时器0的时钟周期为1us,所以经过114次循环大约是1ms。在延时函数中,我们嵌套了两个for循环,外层循环控制延时的次数,内层循环控制每次延时的时间。最后,我们在主函数中不断地循环执行延时和输出操作,就可以实现LED灯的闪烁效果。
使用systick写一个ms级的延时函数
好的,以下是使用Systick编写的延时函数,可以实现以毫秒为单位的延时:
```c
void delay_ms(uint32_t ms) {
uint32_t start_time = HAL_GetTick();
while (HAL_GetTick() - start_time < ms);
}
```
在这个函数中,我们使用了 `HAL_GetTick()` 函数获取当前的系统时钟计数器。该函数返回的值是自系统启动以来的毫秒数。我们将其存储在 `start_time` 变量中,然后在一个循环中检查当前时间是否超过了 `start_time + ms`,如果没超过,就继续循环等待,直到延时完成。
注意,这个函数在使用之前需要确保Systick定时器已经被初始化,并且中断为开启状态。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)