51单片机C51毫秒级(ms)精确延时】的更多相关文章

如下程序能实现ms毫秒级的比较精确的延时 void Delayms(unsigned int n) { unsigned int i,j; ;j--) ;i>;i--); } 用keil可以看出这个延时的时间,我们先延时1ms(Delayms(1)). 进入Delayms前,sec=0.00042209s 延时后,sec=0.00142253s 可以知道Delayms(1)实际延时0.00142253s—0.00042209s=0.00100044s≍1ms 同样如果想延时15ms的话,用Del…
转自:http://blog.sina.com.cn/s/blog_980e19e00101b5dh.html 有时候需要精确的延时,比如18B20温度传感器对时序要求非常严格,必须精确到微秒级别 一.用NOP函数 在keil C51中,直接调用库函数: #include // 声明了void _nop_(void); _nop_(); // 产生一条NOP指令 作用:对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时几微秒.NOP指令为单周期指令,可由晶振…
一. 500ms延时子程序 void delay500ms(void) { unsigned char i,j,k; ;i>;i--) ;j>;j--) ;k>;k--); } 产生的汇编: C:0x0800      7F0F       MOV        R7,#0x0F C:0x0802      7ECA       MOV        R6,#0xCA C:0x0804      7D51       MOV        R5,#0x51 C:0x0806      D…
应用单片机的时候,经常会遇到需要短时间延时的情况.需要的延时时间很短,一般都是几十到几百微妙(us).有时候还需要很高的精度,比如用单片机驱动DS18B20的时候,误差容许的范围在十几us以内,不然很容易出错.这种情况下,用计时器往往有点小题大做.而在极端的情况下,计时器甚至已经全部派上了别的用途.这时就需要我们另想别的办法了.    以前用汇编语言写单片机程序的时候,这个问题还是相对容易解决的.比如用的是12MHz晶振的51,打算延时20us,只要用下面的代码,就可以满足一般的需要:     …
1 使用定时器/计数器实现精确延时 单片机系统一般常选用11.059 2 MHz.12 MHz或6 MHz晶振.第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时.本程序中假设使用频率为12 MHz的晶振.最长的延时时间可达216=65 536 μs.若定时器工作在方式2,则可实现极短时间的精确延时:如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期). 在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间…
在这里, 我来讨论一下关于MSP430单片机使用__delay_cycles延时的问题. IAR for MSP430编译器提供了一个编译器内联的精确延时函数(并非真正的 函数)以提供用户精确延时使用, 该函数原型是: __intrinsic void __delay_cycles(unsigned long __cycles); 该内部函数实现__cycles个CPU周期的延时,但对于该参数的设置,我要陈述一下: __cycles需要我们传递的是CPU运行的周期个数 网上普遍的用法是: #de…
前言 收到VEGA织女星开发板也有一段时间了,好久没玩了,想驱动个OLED屏,但是首先要实现IIC协议,而实现IIC协议,最基本的就是需要一个精确的延时函数,所以研究了一下如何来写一个精确的延时函数.众所周知,ARM Cortex-M内核都有一个24位的SysTick系统节拍定时器,它是一个简易的周期定时器,用于提供时基,多为操作系统所使用.RV32M1的RISC-V内核也有一个SysTick定时器,只不过它不属于内核,而是使用的一个外部通用定时器,即LPIT0( low power perio…
在这里, 我来讨论一下关于MSP430单片机使用__delay_cycles延时的问题. IAR for MSP430编译器提供了一个编译器内联的精确延时函数(并非真正的函数)以提供用户精确延时使用, 该函数原型是: __intrinsic void __delay_cycles(unsigned long __cycles);该内部函数实现__cycles个CPU周期的延时,但对于该参数的设置,我要陈述一下: __cycles需要我们传递的是CPU运行的周期个数 网上普遍的用法是: #defi…
SysTick定时器简介 SysTick定时器是存在于系统内核的一个滴答定时器,只要是ARM Cortex-M0/M3/M4/M7内核的MCU都包含这个定时器,它是一个24位的递减定时器,当计数到 0 时,将从RELOAD 寄存器中自动重装载定时初值,开始新一轮计数.使用内核的SysTick定时器来实现延时,可以不占用系统定时器,由于和MCU外设无关,所以代码的移植,在不同厂家的Cortex-M内核MCU之间,可以很方便的实现.而东芝的这款TT_M3HQ开发板使用的TMPM3HQFDFG芯片,正…
1.单片机C51编程规范- 前言  为了提高源程序的质量和可维护性,从而最终提高软件产品生产力,特编写此规范. 2.单片机C51编程规范-范围 本标准规定了程序设计人员进行程序设计时必须遵循的规范.本规范主要针对C51编程语言和keil编译器而言,包括排版.注释.命名.变量使用.代码可测性.程序效率.质量保证等内容. 3.单片机C51编程规范-总则 格式清晰  注释简明扼要  命名规范易懂  函数模块化  程序易读易维护  功能准确实现  代码空间效率和时间效率高  适度的可扩展性 4.单片机C…