未元星系
发表于 2024-5-27 11:54:44
xxxevery 发表于 2024-5-27 11:45
不要直接使用毫秒级的延时函数,使用毫秒级延时的函数放到定时中断里去执行,但是微秒级的延时函数也还是不 ...
微秒延时用定时器是不是也可以{:4_267:}
xxxevery
发表于 2024-5-27 16:44:47
当然可以,不过延时太短用定时中断没多大必要了
consoleyou
发表于 2024-5-28 09:47:48
jwd 发表于 2024-5-27 10:36
定时器设置标志位,比如你需要1ms定时,就配置1ms的定时器,中断后置标志位,主程序用这个标志位让变量A+1 ...
我目前是用的这种方法。但是需要在主程序里面写代码,不能直接写成一个延时函数调用。哈哈哈,可能因为我水平不够。
DHBT2023
发表于 2024-9-28 16:57:22
本帖最后由 DHBT2023 于 2024-9-28 17:01 编辑
未元星系 发表于 2024-5-27 11:53
我最近也在学,可以用定时器进行延时,这是我做的用定时器和中断让LED闪烁的方案,while循环里添别的程序不 ...
你这个可以吗?我发现论坛里面发的有些程序在While里面是无法运行的。包括 ++ 到一定数值定时,在While里面就无法实现。你这个定时器程序在while外面
未元星系
发表于 2024-9-29 13:00:28
DHBT2023 发表于 2024-9-28 16:57
你这个可以吗?我发现论坛里面发的有些程序在While里面是无法运行的。包括 ++ 到一定数值定时,在While ...
是不是变量++溢出导致的,char字符型最大255,int整型最大65535
阿杰爱学单片机
发表于 2024-10-3 21:24:19
用定时器,定时到了置标志位,主循环查询标志位,做到定时器只负责计时定时,任务都在主循环里面执行
小涵子爸爸
发表于 2024-10-4 08:06:36
学不可以已
liuzonggong
发表于 2024-10-4 08:34:38
未元星系 发表于 2024-5-27 11:53
我最近也在学,可以用定时器进行延时,这是我做的用定时器和中断让LED闪烁的方案,while循环里添别的程序不 ...
static unsigned int Timer1_num = 0; //初始化定时变量
void Timer0_interrupt(void) interrupt 1 //定时器0中断
{
Timer1_num ++; //当定时器完成一次定时,即1ms,Timer1_num加一
if(Timer1_num == 500) //延时500ms
{
Timer1_num = 0; //清零定时变量
P2 = ~(P2); //反转P2口
}
}
改为如下更好,可以设置若干个标志位,让不同的主程序使用
static unsigned int Timer1_num1 = 0; //初始化定时变量
static unsigned int Timer1_num2 = 0; //初始化定时变量
void Timer0_interrupt(void) interrupt 1 //定时器0中断
{
Timer1_num1 ++; //当定时器完成一次定时,即1ms,Timer1_num1加一
Timer1_num2 ++; //当定时器完成一次定时,即1ms,Timer1_num2加一
if(Timer1_num == 500) //延时500ms
{
Timer1_num = 0; //清零定时1变量
flag1=1; //设置标志位,让主程序利用后清零。
}
if(Timer1_num2 == 800) //延时800ms
{
Timer1_num2 = 0; //清零定时2变量
flag2=1; //设置标志位,让主程序利用后清零。
}
}
xxkj2010
发表于 2024-10-4 11:51:30
我一般能用软定时的情况下就用软定时,必要的时候才用到定时器进行非阻塞定时。
江上酒酒
发表于 2024-10-5 11:40:34
未元星系 发表于 2024-5-27 11:53
我最近也在学,可以用定时器进行延时,这是我做的用定时器和中断让LED闪烁的方案,while循环里添别的程序不 ...
加油