26.单片机中利用定时器中断,在主流程while(1){}中设置每隔精确时间计量

void Timer0_ISR( ) interrupt 5
{
    CountMilliseconds++;//只负责自加,加到最大又重新从0开始
}
u16 setDelay(u16 t)
{
    return(CountMilliseconds + t - 1);
}

u8 checkDelay (u16 t)//返回非零表示计时结束
{
    return(((t - CountMilliseconds) & 0x8000) >> 8);//当(t - CountMilliseconds)为正则&之后为0,当变为负数后因为是无符号整数,产生无穷大,那么非零
}

使用1:(比较常规的用法)

void delay_ms(u16 w)//延时多少mS
{
     u16 temp;
     temp = setDelay(w);
     while (!checkDelay(temp));
}

使用2:

u16 dely_500mS = setDelay(500);

while(1)

{
  ...

  if(checkDelay(dely_500mS )){}//表示计时时间到达了

  ...
}
时间: 2024-08-01 22:46:04

26.单片机中利用定时器中断,在主流程while(1){}中设置每隔精确时间计量的相关文章

Android中利用icodetools工具快速定位App破解中关键点方法

icodetools工具地址:https://github.com/fourbrother/icodetools 一.前言 在前面已经介绍了icodetools工具的实现原理和具体使用规则,关于这部分的知识点还不了解的同学可以去下面两篇文章详细查看:Android中注入代码工具icodetools原理篇,Android中注入代码工具icodetools完善篇.同时这个工具已经放到github上了,感兴趣的同学可以下载尝试各种app的代码注入功能. 那么有了这两篇文章之后,现在我得实际操作了,要动

Window10中利用Windbg与虚拟机(window7)中调试驱动建立方法

想起自己的windbg配置就转载:eqera的windows内核调试配置,真的是获益良多希望他不会介意我转载他的博客,帮了我很多,记录下来给我也给大家, 其中我主要看的是VMWare的pipe建立,而我有些分享是在vs2015中打上DDK,然后在开始菜单window kits下找见windbgx86或者是你想要用的类型,然后 发送快捷方式到桌面利于以后用.发到桌面后,在属性插入你放置的的符号的路径,让然最后别忘了在windbg检查路径是否正确. eqera他的解述给了我很多帮助,可以耐心解读.下

Go语言中利用append巧妙的删除slice切片中的元素

package main import ( "fmt" ) //删除函数 func remove(s []string, i int) []string { return append(s[:i], s[i+1:]...) } func main() { s := []string{"a", "b", "c"} fmt.Println(s) s = remove(s, 1) fmt.Println(s) } 原文地址:http

AVR单片机教程——定时器中断

本文隶属于AVR单片机教程系列. ? 中断,是单片机的精华. 中断基础 当一个事件发生时,CPU会停止当前执行的代码,转而处理这个事件,这就是一个中断.触发中断的事件成为中断源,处理事件的函数称为中断服务程序(ISR). 中断在单片机开发中有着举足轻重的地位--没有中断,很多功能就无法实现.比如,在程序干别的事时接受UART总线上的输入,而uart_scan_char等函数只会接收调用该函数后的输入,先前的则会被忽略.利用中断,我们可以在每次接受到一个字节输入时把数据存放到缓冲区中,程序可以从缓

用定时器中断,单片机中断处理时间大于定时器定时时间会怎样?

如果是不同的中断类型是可以根据优先级嵌套,如果是同一中断类型(如题), 有三种结果:1.马上进入新的中断处理(中断嵌套) 2.等待中断处理完再进入新的中断处理 3.出错. 单片机中断处理时间大于定时器定时时间,在下次中断时间到时,因为中断是同一类型.同一优先级,所以不会马上进入新的中断处理. 而是在本次中断处理结束后,单片机又马上进入新的定时器中断函数,主函数中的语句可能会没有机会运行下去,会影响后面中断的实时性.所以答案为2. 如果为了避免中断嵌套(同一优先级不会发生),在中断处理中人为的在进

重拾单片机 第三天 中断讲解(一)

52单片机: 中断源: INTO0--外部中断0,由P3.2端口线引入,低电平或下降沿引起. INTO1--外部中断1,有P3.3端口线引入,低电平或下降沿引起. T0--定时器/计数器0中断,由T0计数器计满回零引起. T1--定时器/计数器1中断,由T1计数器计满回零引起. T2--定时器/计数器2中断,由T2计数器计满回零引起. TI/RI--串口中断,串行端口完成一帧字符发送/接收后引起. 单片机在使用中断功能时,通常需要设置两个与中断有关的寄存器: ①中断允许寄存器IE ②中断优先级寄

51单片机的中断优先级及中断嵌套

说最基本的,老的51单片机(80C51系列)有5个中断源,2个优先级,可以实现二级中断服务嵌套.现在很多扩展的51单片机已经有4个优先级(或更多)和更多的中断源了. 在说到中断之前,我先来定义一下优先级,明白了什么是优先级,后面的阐述就容易明白了.实际上很多人都是混淆了优先级的含义,所以才觉得糊里糊涂. 中断的优先级有两个:查询优先级和执行优先级. 什么是查询优级呢?我们从datasheet或书上看到的默认(IP寄存器不做设置,上电复位后为00H)的优先级:外部中断0 > 定时/计数器0 >

第十四篇:在SOUI中使用定时器

前言 定时器是win32编程中常用的制作动画效果的手段.在Win32编程中,可以使用::SetTimer来创建定时器,定时器消息会被会发到调用SetTimer时指定的HWND. 在SOUI中一般来说只有一个宿主窗口有HWND,所有的SWindow都属于一个宿主窗口,如此一来直接使用::SetTimer创建的定时器就难以直接分发到SWindow对象了. 在SOUI的控件中使用定时器 为了能够方便的在SWindow中使用定时器,在SOUI系统中,我们通过将定时器ID(共32位)按位进行分解: cla

奶爸业余单片机学习之:定时器中断的使用方法——进入中断TF0(TF1)值硬件自动重置

/*============定时器中断的使用方法—---TF0(TF1)值硬件重置法======== 第一:打开总中断第二:打开定时器 中断第三:设置特殊功能寄存器TMOD,配置好工作模式. 第四:设置计数寄存器TH0和TL0的初值. 第五:设置TCON,通过TR0置1来让定时器开始计数.*/ //LED由三极管及73HC138控制//用定时器0实现亮与灭之间的1秒延时 # include <reg52.h> sbit led2 = P0^0; sbit addr0 = P1^0;sbit a