51单片机主频35Mhz写一个延时1ms的延时函数
时间: 2023-03-09 17:57:15 浏览: 181
可以使用以下的延时函数:void DelayMs(unsigned int Ms)
{
unsigned int i;
for(i=0;i<Ms;i++)
{
DelayUs(1000);
}
}
相关问题
51单片机主频12Mhz写一个延时1ms的延时函数
在51单片机中,可以通过定时器来实现延时操作。以下是一个基于定时器的延时函数示例,可以实现1ms的延时:
```
void delay_ms(unsigned int ms) {
unsigned int i, j;
for (i = 0; i < ms; i++) {
for (j = 0; j < 120; j++) { // 12MHz / 12 = 1MHz
// 使用定时器1计数1us
TMOD &= 0xF0;
TMOD |= 0x01;
TH0 = 0xFC;
TL0 = 0x66;
TR0 = 1;
while (!TF0);
TR0 = 0;
TF0 = 0;
}
}
}
```
在上面的代码中,使用定时器1来计数1us,并通过嵌套循环实现1ms的延时。具体来说,每次外层循环执行一次时,内层循环会执行120次,每次执行1us,总共就是120us,也就是1ms。
为72MHZ主频的stm32单片机写一个延时1ms的函数
为STM32单片机编写一个大约延迟1毫秒(1ms)的函数,通常我们会利用硬件定时器(如TIM1)来实现高精度的时间控制。这里以TIM1为例,假设你已经配置好了TIM1的时钟源、工作模式和预分频器等,并启用了中断。下面是一个基本的延时函数示例:
```c
#include "stm32f1xx_hal.h" // 引入HAL库
void Delay1ms(void) {
TIM_HandleTypeDef htim1; // 定义TIM1句柄
__TIM1_CLK_ENABLE(); // 启动TIM1时钟
// 如果你需要使用定时器1的某个通道计数,例如通道1(CH1)
htim1.Instance = TIM1;
htim1.Init.Prescaler = (uint16_t)((SystemCoreClock / 8000000) - 1); // 根据系统频率计算合适的预分频值
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
htim1.Init.Period = 999; // 为了得到接近1ms的时间,周期设置为接近1000,因为TIM1一般有10位计数器
HAL_TIM_Base_Init(&htim1); // 初始化定时器基础部分
// 开始定时器
HAL_TIM_Base_Start_IT(&htim1);
// 等待定时器完成,进入等待状态
while (!HAL_TIM_Get_FLAG(&htim1, TIM_FLAG_UPDATE)); // 等待更新标志
}
阅读全文