未元星系 发表于 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循环里添别的程序不 ...

加油
页: 1 [2] 3
查看完整版本: 要怎么样才能实现“非阻塞延时”?